diff --git a/.cursor/rules/content-types.mdc b/.cursor/rules/content-types.mdc new file mode 100644 index 00000000000..6c572e69aaf --- /dev/null +++ b/.cursor/rules/content-types.mdc @@ -0,0 +1,106 @@ +--- +description: Maps folder conventions to Diataxis content types so AI tools produce the right structure for each doc category. +globs: **/*.md,**/*.mdx +alwaysApply: false +--- + +# Content types (Diataxis) + +This repository follows the [Diataxis framework](https://diataxis.fr/) to organize documentation by +function. The folder a file lives in usually determines the content type and structure expectations. +`get-started/` is a mix of onboarding topics; see that section for when quickstart rules apply. + +## Folder-to-type mapping + +### `concepts/` and `learn/` - Explanation + +- Explain **why** something exists and **how** it works at a high level. +- Provide context: design decisions, historical reasons, trade-offs, and alternatives. +- Make connections to other parts of the system or to broader concepts. +- Do not include step-by-step instructions. Link to related guides or quickstarts instead. +- Keep explanation closely bounded. Do not let instructions or reference details creep in. +- End every concept page with a "Next steps" section linking to actionable content. +- Example: `smart-accounts-kit/concepts/smart-accounts.md` + +### `guides/` and `how-to/` - How-to + +- Goal-oriented steps that help the reader achieve a specific outcome. +- Title the page with the goal (for example, "Configure gas limits"), not a generic label. +- State the goal in the first sentence or heading. +- List prerequisites before the first step. +- Number the steps. Each step should contain one action. +- Assume the reader has basic knowledge of the product. +- Omit the unnecessary. Practical usability matters more than completeness. +- Do not digress into explanations or teaching. Link to concept pages instead. +- Example: `smart-accounts-kit/guides/advanced-permissions/execute-on-metamask-users-behalf.md` + +### `quickstart/` and `get-started/` + +The folder name alone does not imply a single content type for every file under `get-started/`. + +**Tutorial-adjacent quickstart** (end-to-end, copy-paste-and-run path to a working integration) +applies only when: + +- The file lives under a `quickstart/` directory, or +- The file lives under `get-started/` and **quickstart** appears in the file or directory name + (for example, `smart-account-quickstart/index.md`). + +For those quickstart pages: + +- State what the reader will build or achieve. +- Provide complete, working code that can be copied and pasted. +- Keep the scope narrow. Link to guides for extended scenarios. + +**Other `get-started/` pages** are onboarding essentials readers should see before the rest of +the docs: installation, system requirements, supported networks, supported clients, dashboard +setup, and similar. They are not necessarily quickstarts. Choose structure based on the topic +(how-to steps, short explanation, or reference-style facts) and match conventions of neighboring +pages in the same `get-started/` section. + +Examples: + +- Quickstart: `smart-accounts-kit/get-started/smart-account-quickstart/index.md` +- Onboarding in `get-started/` (not quickstart): `smart-accounts-kit/get-started/install.md` + +### `reference/` - Reference + +- Precise, complete, structured descriptions of APIs, methods, parameters, and return values. +- Describe and only describe. Be austere, neutral, and factual. +- Match the parameter format used in surrounding reference pages. Some areas use tables (name, + type, required/optional, description); others use nested bulleted lists (for example, JSON-RPC + method docs in Services). Be consistent with the existing convention in the same product section. +- Adopt standard patterns. Consistent structure lets readers find information quickly. +- Mirror the structure of the API or code itself (for example, one section per method or endpoint). +- Include short usage examples to illustrate parameters and return values. +- Keep explanatory prose to the minimum needed to use the API correctly. +- Do not include tutorials or extended how-to steps. +- Examples: `snaps/reference/config-options.md`, + `smart-accounts-kit/reference/delegation/delegation-scopes.md`, + `services/reference/solana/json-rpc-methods` + +### `tutorials/` - Tutorial + +- Learning-oriented, reproducible, end-to-end walkthrough. +- State what the reader will build or accomplish at the very start. +- Do not assume the reader has prior knowledge of the subject or tools. +- Deliver visible results early and often. Each step should produce output the reader can verify. +- Show expected output (for example, "You should see `Server running on port 3000`"). +- Ruthlessly minimize explanation. Keep the focus on doing, not theory. Link to concept pages for + deeper understanding. +- Ignore options and alternatives. Guide the reader along a single path to a successful conclusion. +- Provide a complete working project or code sample. +- Aspire to perfect reliability. Test every step. A learner who doesn't get the expected result + loses confidence immediately. +- Example: `src/pages/tutorials/create-wallet-ai-agent.md` + +### `troubleshooting/` - Problem/solution + +- State the symptom or error message first, then the fix. +- One problem per section or page. +- Include the exact error text when available so readers can search for it. +- Example: `smart-accounts-kit/troubleshooting/allowance-exceeded.md` + +## Frontmatter + +For required and optional documentation frontmatter (`description`, `keywords`, `sidebar_label`, +`title` vs duplicate H1), see **Frontmatter** in `markdown-formatting.mdc`. diff --git a/.cursor/rules/contributor-workflow.mdc b/.cursor/rules/contributor-workflow.mdc new file mode 100644 index 00000000000..efc76c21620 --- /dev/null +++ b/.cursor/rules/contributor-workflow.mdc @@ -0,0 +1,96 @@ +--- +description: Workflow rules for contributors and reviewers covering sidebar updates, redirects, verification, and PR expectations. +alwaysApply: true +--- + +# Contributor workflow + +See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contribution process. The rules below highlight +the requirements that are most often missed. + +## Sidebar updates + +Every new documentation page must be added to the appropriate sidebar file: + +| Product | Sidebar file | +| ------------------- | ------------------------- | +| MetaMask Connect | `mm-connect-sidebar.js` | +| Embedded Wallets | `ew-sidebar.js` | +| Smart Accounts Kit | `gator-sidebar.js` | +| Agent Wallet | `agent-wallet-sidebar.js` | +| Services | `services-sidebar.js` | +| Developer dashboard | `dashboard-sidebar.js` | +| Snaps | `snaps-sidebar.js` | + +## Redirects + +Every deleted, renamed, or moved page must have a redirect added in `vercel.json`. Docusaurus is +configured with `onBrokenLinks: 'throw'`, so broken internal links will fail the build. + +Follow the trailing-slash rules in `vercel-redirects.mdc`: use a **slash-terminated `source`** +only (no duplicate no-slash entry), and a slash-terminated `destination` for normal paths. + +## Factual accuracy + +Do not state as fact any API behavior, parameter, or return value that you have not verified +against the codebase or published reference. If you are uncertain, add a review comment or +admonition noting the uncertainty. This rule applies to both human and AI-assisted contributions. + +## Images + +Place images in the product's designated asset folder: + +- `metamask-connect/*/_assets/` +- `static/img/embedded-wallets/` (Embedded Wallets product images) +- `smart-accounts-kit/assets/` +- `services/images/` +- `snaps/assets/` +- `static/img/` (for site-wide assets) + +## Update rule files for structural changes + +When a change affects the structure, naming, or conventions of a product area, update the +corresponding `.cursor/rules/` file in the same PR. Examples of changes that require a rule update: + +- Renaming a product or changing its branding (update the product rule file and `terminology.mdc`). +- Adding, removing, or renaming top-level content folders (update the product rule file and + `content-types.mdc` if a new folder pattern is introduced). +- Changing the parameter documentation format in a reference section (update the product rule file + and `content-types.mdc`). +- Moving image storage to a different directory (update `contributor-workflow.mdc` and the product + rule file). +- Adding a new product area to the repository (create a new `product-*.mdc` rule file and add the + product to the table in `contributor-workflow.mdc` and `AGENTS.md`). +- Changing sidebar file names or adding new sidebar files (update the sidebar table above and the + product rule file). +- Introducing new shared partials or generated-content patterns (update the product rule file). + +Keeping rule files current prevents stale guidance from producing incorrect contributions. + +## CI linting + +Pull requests run **`npm run format:check`** (Prettier against `.prettierrc` and `.prettierignore`). Run +**`npm run format`** locally to fix style before pushing. Generated Snaps API pages under +`snaps/reference/snaps-api/` are excluded from formatting in git (see `.prettierignore`). + +After **`npm install`**, [Husky](https://typicode.github.io/husky/) installs a Git **`pre-commit`** hook +that runs [**`lint-staged`**](https://github.com/lint-staged/lint-staged) using the rules in +`package.json`. Staged files matching those patterns are auto-formatted with Prettier (and other +commands in `lint-staged`, such as ESLint on `src/`). Restage if the hook edits files. Hooks are +local only and are not required for CI to pass. + +Pull requests are checked by a Vale-based linter +([docs-spelling-check](https://github.com/Consensys/github-actions/tree/main/docs-spelling-check)) +that enforces Microsoft style, Consensys terminology, and spelling. Fix any linter warnings before +requesting review. If a warning is a false positive, add the term to the Vale vocabulary file rather +than rewriting valid technical language. + +## Pull requests + +- Summarize what changed and why in the PR description. Do not just list files. +- Link the related issue using `fixes #` when applicable. +- Preview locally with `npm start` before requesting review. + +## Cross-product links + +See the **Links** section in `markdown-formatting.mdc`. diff --git a/.cursor/rules/editorial-voice.mdc b/.cursor/rules/editorial-voice.mdc new file mode 100644 index 00000000000..1ee09f43c20 --- /dev/null +++ b/.cursor/rules/editorial-voice.mdc @@ -0,0 +1,70 @@ +--- +description: Editorial voice and tone rules aligned with the Microsoft Writing Style Guide and Consensys documentation standards. +globs: **/*.md,**/*.mdx +alwaysApply: false +--- + +# Editorial voice + +Follow the [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) +and the [Consensys documentation style guide](https://docs-template.consensys.net/contribute/style-guide). +The rules below are the most actionable subset for AI-assisted editing. + +## Voice and tone + +- Use active voice and present tense. +- Write in second person. Address the reader as "you." +- Use contractions naturally ("it's," "don't"). Be informal but not sloppy. +- Refer to the reader's application as "your dapp" (not "the dapp" or "your application"). +- Refer to the reader as "you" (not "the developer," "the user," or "users"). +- Dapp developers (our readers) in turn have users. It's ok to use "users" in that context. + +## Clarity + +- Get to the point in the first sentence of every section. Does it answer "what," "why," and "when"? +- Use short, simple sentences. Remove nonessential or redundant words. +- Break up three or more paragraphs with subheadings, lists, tables, code samples, or admonitions. +- Write for developers who want to accomplish a task or learn a skill, not for marketing purposes. + +## Sentence construction + +- Lead with what's most important. Front-load keywords for scanning. +- Start sentences with a verb when possible. Edit out "you can" and "there is/are" phrasing. +- Use the Oxford (serial) comma in lists of three or more items (for example, "Android, iOS, and + Windows"). +- Do not start sentences with "So," "Basically," or "Actually." + +## Lists + +- Include at least two items but, if possible, no more than seven. +- Keep items short enough that the reader can see two or three at a glance. A couple of short + paragraphs per item is acceptable, but don't exceed that length often. +- Make all items consistent in structure (for example, each item is a noun or a phrase that starts + with a verb). + +## Punctuation and formatting + +- Do not use em dashes (—) to set off extra information. Use commas, parentheses, semicolons, or rephrase the sentence. +- Use only one space after periods, question marks, and colons. +- Use sentence case for all headings and titles. Never use title case. +- Do not end headings, subheadings, or UI titles with periods. +- Use backticks for inline code, file names, and URLs referenced in prose. +- In general, do not use bold to emphasize words in a paragraph. Use bold sparingly: + - For UI element names (buttons, menu items, field labels). + - For emphasis in exceptional cases such as critical security warnings when an admonition is not enough. + +## Developer content + +- List prerequisites before the first step. Suggest good practices (for example, "secure private + keys," "protect RPC endpoints in production"). +- Write code samples that are readable, can be copied and pasted, and work as expected. Do not + include shell prompts (for example, `user@host $`) in code blocks. +- Use angle-bracket placeholders for user-supplied values (for example, ``). + +## What to avoid + +- No marketing language, superlatives, or promotional tone ("best-in-class," "powerful," "seamless"). +- No slang, figures of speech, or culturally specific idioms. +- No run-on sentences. +- No jargon without definition. If a term must be used, define it on first use or link to a + glossary entry. diff --git a/.cursor/rules/markdown-formatting.mdc b/.cursor/rules/markdown-formatting.mdc new file mode 100644 index 00000000000..5fb01839b83 --- /dev/null +++ b/.cursor/rules/markdown-formatting.mdc @@ -0,0 +1,69 @@ +--- +description: Markdown formatting conventions for the MetaMask documentation site (Docusaurus). +globs: **/*.md,**/*.mdx +alwaysApply: false +--- + +# Markdown formatting + +Follow the [Consensys Markdown formatting guide](https://docs-template.consensys.net/contribute/format-markdown) +for full details. The rules below cover the most common conventions. + +## Line length and sentence breaks + +- Wrap lines at roughly 100 columns. +- Start each new sentence on a new line, even if the previous line is short. This makes diffs + easier to review. + +## Links + +- Use relative file paths for links within the same product (for example, `./concepts/scopes.md`). +- Use absolute URL paths for cross-product links (for example, `/snaps/learn/about-snaps`). +- Use descriptive link text. Do not use "click here" or bare URLs. +- Use absolute links on `CardList` components. + +## Code blocks + +- Always specify the language on fenced code blocks (` ```javascript `, ` ```bash `, etc.). +- Indent code with two spaces, not four. +- In JavaScript, TypeScript, JSX, and TSX samples, use single-quoted string literals. +- In JSON samples, keep double-quoted keys and strings (required by JSON syntax). +- In any other language (for example, Swift, Kotlin, Dart, Solidity, Python, shell), follow that + language's normal conventions for string quotes. +- After editing documentation, run `npm run format` so Prettier applies these rules to fenced code + in Markdown/MDX (see `.prettierrc`). +- For npm install commands, use ` ```bash npm2yarn ` fences to produce automatic npm/yarn tabs. +- Write code samples that can be copied, pasted, and run as-is. Do not include shell prompts + (for example, `user@host $`) or trailing comments that break execution. +- Use angle-bracket placeholders for values the reader must supply + (for example, ``). + +## Tabs + +- Use Docusaurus `` and `` components to display parallel content such as code + samples in different languages or package-manager commands. +- Import `Tabs` and `TabItem` from `@theme/Tabs` and `@theme/TabItem` at the top of the file. + +## Admonitions + +- Use Docusaurus admonitions: `:::note`, `:::tip`, `:::caution`, `:::info`, `:::danger`. +- Add a custom title on the same line only when it helps scanning (for example, `:::caution important`). +- Do not nest admonitions. + +## Tables + +- Align table columns in the source Markdown for readability. +- Use a tool like [Markdown Table Formatter](https://markdowntable.com/) if needed. + +## Frontmatter + +- Required: `description` (one sentence for SEO and previews). +- Recommended: `keywords` (array). +- `sidebar_label`: optional. Use sparingly; only when the default sidebar text (usually from the + page title) would be too long or wordy for the navigation. Omit when the default is fine. +- If the frontmatter contains a `title` field, do not add a separate top-level `# Heading` to + avoid a duplicate H1. + +## File and folder names + +- Use lowercase letters and dashes only (for example, `send-transactions.md`, not `sendTransactions.md`). diff --git a/.cursor/rules/product-agent-wallet.mdc b/.cursor/rules/product-agent-wallet.mdc new file mode 100644 index 00000000000..216526ab338 --- /dev/null +++ b/.cursor/rules/product-agent-wallet.mdc @@ -0,0 +1,77 @@ +--- +description: Product-specific guidance for MetaMask Agent Wallet documentation, including terminology, CLI conventions, and content organization. +globs: agent-wallet/**/*.md,agent-wallet/**/*.mdx +alwaysApply: false +--- + +# Agent Wallet + +## Product naming + +- The product name is **MetaMask Agent Wallet**. Use **Agent Wallet** as short form in prose. +- The CLI binary is `mm` (lowercase, monospace). Do not document `mm-dev` or `mm-uat` in user-facing docs. +- The npm package is `@metamask/agentic-cli`. + +## Wallet and trading modes + +- **server-wallet** — private keys are held securely in a TEE-backed environment. +- **Bring your own wallet** — user supplies a BIP-39 mnemonic. CLI flag: `byok`. +- **Guard Mode (Recommended)** — trading mode (`--mode guard`). Designed for everyday traders. Enforces threat scanning, network allowlist, token recipient allowlist, address allowlist, and rolling 24h outflow limit. 2-factor authentication on policy violations, malicious transactions, and raising outflow limit. +- **Beast Mode** — trading mode (`--mode beast`). Designed for power users. Threat scanning guardrail only. 2-factor authentication on malicious transactions and risky contracts. + +Users choose wallet and trading modes during interactive `mm init` or by prompting their agent. +Mark Guard Mode as **Recommended**; do not describe modes as opt-in, default, or preferred in other ways. +Sign-in method (QR, Google, or email) determines the 2FA approval channel (Mobile push vs email link). + +CLI flags use `server-wallet`, `byok`, `guard`, and `beast`. + +## Security terms + +Use these terms consistently when describing the security stack: + +- **Threat scanning** — powered by Blockaid; production-tested across millions of MetaMask + transactions. Malicious transactions get auto-bounced. Do not conflate with Transaction Shield. +- **Transaction Protection** — guarantee for eligible transactions deemed safe (up to $10,000/month + loss coverage). Frame as optional coverage backing, not as a scanning feature. Link eligibility + and terms to + [Transaction Shield support](https://support.metamask.io/manage-crypto/transactions/transaction-shield/). +- **Transaction Shield** — MetaMask subscription pairing Transaction Protection with priority support. + Link to + [Transaction Shield support](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) + for subscription details, eligibility, and terms. Do not describe Transaction Shield as a security + or threat-scanning feature. +- **Smart Transactions** — optimizes how trades land onchain (fewer fails, better gas, built-in MEV + protection). Link to + [Smart Transactions support](https://support.metamask.io/manage-crypto/transactions/smart-transactions/). + Do not use "Servo" in user-facing docs. +- **Server wallet** / **TEE** — keys managed and secured server-side; agents can't access the user's + main wallet. Do not lead with vendor names. +- **2FA** or **2-factor authentication** — human approval for flagged or policy-violating transactions. Do not use "MFA" in prose (CLI state `AWAITING_MFA` is acceptable in code references). + +Do not add comparative security claims beyond approved product copy. + +## Content organization + +| Folder | Content type | +| ---------------- | ------------------------------------------------- | +| Root (`README.mdx`, `quickstart.md`, `use-the-cli-directly.md`) | Overview, quickstart, headless CLI | +| `guides/` | Task-oriented how-to guides | +| `reference/` | Architecture, CLI commands, error codes, supported chains | +| `troubleshooting/` | Symptom-based fixes (single page in v1) | + +Do not paste content from `.agents/skills/metamask-agent-wallet/` into documentation pages. + +## Reference conventions + +- Command headings use backtick-wrapped names (for example, `## \`mm transfer\``). +- Parameters use tables with columns: Flag, Required, Description. +- Use `bash` fences for CLI examples. +- Global flags: `--format`, `--json`, `--toon`, `--verbose`. + +## Sidebar + +The sidebar configuration is in [agent-wallet-sidebar.js](agent-wallet-sidebar.js). + +## Images + +Place product images in `static/img/agent-wallet/`. diff --git a/.cursor/rules/product-embedded-wallets.mdc b/.cursor/rules/product-embedded-wallets.mdc new file mode 100644 index 00000000000..9feec11c976 --- /dev/null +++ b/.cursor/rules/product-embedded-wallets.mdc @@ -0,0 +1,57 @@ +--- +description: Product-specific guidance for Embedded Wallets documentation, including naming, content organization, and SDK conventions. +globs: embedded-wallets/**/*.md,embedded-wallets/**/*.mdx +alwaysApply: false +--- + +# Embedded Wallets + +## Product naming + +- The product name is **MetaMask Embedded Wallets**. +- Use **Embedded Wallets** (capitalized) as the short form in prose. +- The SDKs are **MetaMask Embedded Wallet SDKs** (formerly Plug and Play). +- Package names and code identifiers still use `web3auth` (for example, `@web3auth/modal`). Do not + rename these in code samples. +- Do not describe Embedded Wallets as a "wallet." It is **embedded wallet infrastructure** that + developers integrate into their applications. + +## Content organization + +Embedded Wallets uses domain-oriented folders rather than strict Diataxis categories: + +| Folder | Content | +|----------------------|--------------------------------------------------| +| Root (`README.mdx`) | Product overview and positioning | +| `sdk/` | Per-platform integration docs (React, Vue, JS, Node, Android, iOS, React Native, Flutter, Unity, Unreal) | +| `authentication/` | Auth methods by type (social, basic, custom) | +| `features/` | Product capabilities (MPC, smart accounts, funding, NFT minting, session management) | +| `dashboard/` | Developer console and project configuration | +| `connect-blockchain/`| Chain-specific connection guides (EVM, Solana, other) | +| `infrastructure/` | Architecture and security (MPC, SSS, nodes) | +| `migration-guides/` | SDK version upgrade guides (Web, mobile, gaming) | +| `troubleshooting/` | Problem/solution pages | + +When adding new content, place it in the domain folder that best matches the topic. Do not create +new top-level folders without discussing with the documentation team. + +## SDK documentation + +- Each platform SDK has its own subfolder under `sdk/` with a consistent structure: `README.mdx`, + `usage/` or equivalent, and `advanced/`. +- SDK version upgrade guides live under `migration-guides/` (not inside `sdk/`). +- Shared SDK snippets live in `sdk/_common/`. Reuse these partials where possible instead of + duplicating content. +- Chain-specific connection snippets live in `connect-blockchain/` as underscore-prefixed files + (for example, `_evm-chains.mdx`). + +## Images + +Embedded Wallets images are stored in `static/img/embedded-wallets/`, not alongside the Markdown +source files. Use `@site/static/img/embedded-wallets/...` imports in MDX. + +## Sidebar + +The sidebar configuration is in [ew-sidebar.js](ew-sidebar.js). It groups SDKs by platform +category (Web, Mobile and Gaming, Backend) using HTML helpers imported from +`./src/utils/w3a-sdk-map.js`. diff --git a/.cursor/rules/product-metamask-connect.mdc b/.cursor/rules/product-metamask-connect.mdc new file mode 100644 index 00000000000..ec9db5c5a74 --- /dev/null +++ b/.cursor/rules/product-metamask-connect.mdc @@ -0,0 +1,49 @@ +--- +description: Product-specific guidance for MetaMask Connect documentation, including terminology, CAIP standards, and content organization. +globs: metamask-connect/**/*.md,metamask-connect/**/*.mdx +alwaysApply: false +--- + +# MetaMask Connect + +## Product naming + +- The product name is **MetaMask Connect**. Do not call it "MetaMask SDK." The SDK is the + underlying library; MetaMask Connect is the product and documentation brand. +- When referring to the npm package, use the package name in backticks (for example, + `@metamask/connect-evm`). + +## Content organization + +MetaMask Connect has three sub-areas, each with its own quickstart, guides, and reference: + +| Sub-area | Path | Focus | +|------------|-----------------------------|-------------------------------------------| +| EVM | `metamask-connect/evm/` | Ethereum and EVM-compatible chains | +| Multichain | `metamask-connect/multichain/` | Cross-chain using CAIP standards | +| Solana | `metamask-connect/solana/` | Solana-specific integration | + +## CAIP standards (Multichain) + +Multichain documentation uses Chain Agnostic Improvement Proposals (CAIPs). Use these terms +consistently: + +- **Scopes** (CAIP-2): chain identifiers such as `eip155:1` or `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`. +- **Account IDs** (CAIP-10): chain-qualified account identifiers such as `eip155:1:0xabc...`. +- **Sessions** (CAIP-25): an authorized connection grouping approved scopes and accounts. + +## Method references in prose + +When referring to a method or function in prose text, markdown tables, or headings, omit the +trailing `()`. Write `connect`, not `connect()`. This keeps references concise and distinguishes +prose names from actual invocations in code blocks. If the reference shows parameters to illustrate +usage (for example, `connect(scopes, caipAccountIds)`), keep the parentheses and parameters. + +## EVM conventions + +- Reference the `window.ethereum` provider when discussing the injected provider. +- Mention EIP-6963 (Multi Injected Provider Discovery) where relevant for provider detection. + +## Sidebar + +The sidebar configuration is in [mm-connect-sidebar.js](mm-connect-sidebar.js). diff --git a/.cursor/rules/product-services.mdc b/.cursor/rules/product-services.mdc new file mode 100644 index 00000000000..10bc77d604f --- /dev/null +++ b/.cursor/rules/product-services.mdc @@ -0,0 +1,61 @@ +--- +description: Product-specific guidance for Services (Infura) documentation, including naming, reference conventions, and partial reuse. +globs: services/**/*.md,services/**/*.mdx +alwaysApply: false +--- + +# Services (Infura) + +## Product naming + +- The documentation area is called **Services**. +- **Infura** is the named API and infrastructure product. Use "Infura" when referring to the + service, endpoints, dashboard, or pricing. +- Positioning: Lead with Infura as the product (for example, "Infura offers...") rather than + subordinating it to another brand in introductory copy. +- Do not use "MetaMask Services" as a standalone product name in headings or prose. + +## Content organization + +| Folder | Content type | +|----------------|-------------------------------------------------| +| `concepts/` | Explanation (gas, transaction types, WebSockets, archive data, bundler) | +| `get-started/` | Onboarding, endpoints, Infura signup, pricing | +| `how-to/` | Task-oriented guides (rate limiting, IPFS, batch requests, JWT) | +| `tutorials/` | End-to-end walkthroughs by network (Ethereum, Layer 2) | +| `reference/` | Per-network JSON-RPC and REST API reference | + +## Reference conventions + +### JSON-RPC methods + +- Each method page follows the pattern: **Description**, **Parameters**, **Returns**, **Example** + (with **Request** and **Response** subsections). +- **Parameters use nested bulleted lists**, not tables. This is the established convention across + all network reference pages. Do not switch to tables. +- Top-level list items describe JSON-RPC `params` positions. Objects (such as a transaction call + object) use sub-bullets with backtick field names. + +### Gas API and IPFS + +- The Gas API documents REST endpoints. Parameters are also documented with bulleted lists. +- IPFS documentation follows HTTP API conventions. + +## Shared partials + +Services reference pages make heavy use of shared MDX partials in `services/reference/_partials/`. +There are hundreds of partial files organized by method family (for example, `filter-methods/`, +`trace-methods/`, `bundler/`). + +- **Shared partials** cover description, parameters, returns, and example content that is identical + across networks. +- **Per-network request partials** (co-located with the method page as `_-request.mdx`) + customize endpoint URLs for each network. +- When updating a method's parameters or description, edit the shared partial in `_partials/`, not + the individual network pages. + +## Sidebar + +The sidebar configuration is in [services-sidebar.js](services-sidebar.js). It uses Docusaurus +autogenerated sidebars for all categories. Deep structure comes from the filesystem and +`_category_.json` files. diff --git a/.cursor/rules/product-smart-accounts-kit.mdc b/.cursor/rules/product-smart-accounts-kit.mdc new file mode 100644 index 00000000000..f47f45fc6d3 --- /dev/null +++ b/.cursor/rules/product-smart-accounts-kit.mdc @@ -0,0 +1,79 @@ +--- +description: Product-specific guidance for Smart Accounts Kit documentation, including terminology, delegation concepts, glossary/tooltips, and versioning. +globs: smart-accounts-kit/**/*.md,smart-accounts-kit/**/*.mdx,src/lib/glossary.json +alwaysApply: false +--- + +# Smart Accounts Kit + +## Product naming + +- The product name is **MetaMask Smart Accounts Kit**. Use **Smart Accounts Kit** as short form in prose. +- When referring to an actual account, use "MetaMask smart account" (singular) or "MetaMask Smart Accounts" (plural, capitalized) on first use, and "smart account" or "smart accounts" on subsequent uses. +- Do not use "smart contract account" or "SCA" unless directly quoting + an ERC specification. +- The code-level type is `MetaMaskSmartAccount` (backtick it on first use in a page). +- **Externally owned account (EOA)** on first use, then **EOA**. + +## Key concepts + +Smart Accounts Kit has three pillars. Use these terms consistently: + +- **Smart accounts**: ERC-4337 accounts with delegated permissions, multisig, and gas abstraction. +- **Delegation**: rule-based permission sharing powered by the + [Delegation Framework](https://github.com/MetaMask/delegation-framework). Key terms: + - **delegator account** (grants permission) and **delegate account** (receives permission). + - **root delegation**, **open root delegation**, **redelegation**, **open redelegation**. + - **delegation scopes** (a Smart Accounts Kit abstraction on top of caveat enforcers). + - **caveat enforcers** (on-chain restriction contracts). +- **Advanced Permissions (ERC-7715)**: fine-grained, human-readable permissions granted through the MetaMask + extension. Distinct from regular delegations (which cannot be granted through the extension). + +## Content organization + +| Folder | Content type | +| ------------------ | ------------------------------------------------------- | +| `concepts/` | Explanation (smart accounts, delegation, permissions) | +| `get-started/` | Quickstart and setup (install, CLI, supported networks) | +| `guides/` | How-to (create/deploy accounts, send ops, delegate) | +| `reference/` | API reference (methods, types, parameters) | +| `troubleshooting/` | Problem/solution (error codes, common issues) | + +## Reference conventions + +- Method headings use backtick-wrapped names (for example, `## \`createDelegation\``). +- Parameters use tables with columns: Name, Type, Required, Description. +- Code examples use `typescript` fences. Many pages use Docusaurus `Tabs`/`TabItem` for + multi-file examples. +- Types and enums link to `reference/types.md`. + +## Glossary and tooltips + +### Glossary page (`reference/glossary.mdx`) + +- **Source of truth:** Add or update definitions in [`src/lib/glossary.json`](src/lib/glossary.json). Each entry needs a `term` string and a `definition` string. +- **Generated file:** [`smart-accounts-kit/reference/glossary.mdx`](smart-accounts-kit/reference/glossary.mdx) is **auto-generated**. Do not edit it by hand. +- **Regeneration:** Run `npm run glossary:generate`, or use `npm start` / `npm run build` (both run the glossary script first). The generator is [`scripts/generate-smart-accounts-glossary.js`](scripts/generate-smart-accounts-glossary.js). + +The `term` string in each glossary entry must match exactly what you pass to the `term` prop on `GlossaryTerm` (see below). + +### Inline tooltips (`GlossaryTerm`) + +- Import the theme component: `import GlossaryTerm from '@theme/GlossaryTerm';` +- Wrap visible text and set `term` to the matching glossary `term` string, for example: + `user operations` or + `` when the displayed label matches the glossary term. +- Example page: [`smart-accounts-kit/get-started/smart-account-quickstart/index.md`](smart-accounts-kit/get-started/smart-account-quickstart/index.md). + +There is no strict rule for when to add tooltips. In practice, use them when a term appears for the first time in a documentation section and readers benefit from a short definition, but the term does **not** warrant linking out to a full concept or guide page. Tooltips add context without the extra step of opening another page. + +## Versioning + +Smart Accounts Kit uses Docusaurus versioning. The current development version is at path +`/smart-accounts-kit/development/`. Snapshot versions live in `gator_versioned_docs/` (excluded +from `.cursorignore`). Do not edit versioned snapshots directly. + +## Sidebar + +The sidebar configuration is in [gator-sidebar.js](gator-sidebar.js). Tutorial entries link to +shared site tutorials under `/tutorials/`, not to pages inside `smart-accounts-kit/`. diff --git a/.cursor/rules/product-snaps.mdc b/.cursor/rules/product-snaps.mdc new file mode 100644 index 00000000000..372c0dca01b --- /dev/null +++ b/.cursor/rules/product-snaps.mdc @@ -0,0 +1,46 @@ +--- +description: Product-specific guidance for Snaps documentation, including naming, content areas, and generated-content constraints. +globs: snaps/**/*.md,snaps/**/*.mdx +alwaysApply: false +--- + +# Snaps + +## Naming + +- **Snaps** (capital S) refers to the platform or ecosystem. +- **a Snap** (capital S, singular) refers to an individual extension. +- Do not use lowercase "snaps" or "snap" in prose (only in code identifiers or file paths). + +## Content areas + +Snaps uses a content structure that differs slightly from other products: + +| Folder | Type | Description | +|-----------------|-----------------------|-----------------------------------------------| +| `learn/` | Explanation | Conceptual content, best practices, tutorials | +| `how-to/` | How-to | Procedural step-by-step guides | +| `features/` | Feature reference | Feature-centric documentation | +| `reference/` | API reference | Snaps API and Keyring API methods | +| `get-started/` | Onboarding | First-time setup and onboarding | + +## Generated reference pages + +Reference pages under `snaps/reference/snaps-api/` are **generated** from a JSON schema by the +`plugin-snaps-docs.ts` build plugin. Do not edit these files directly. To update their content, +edit the source schema or the plugin in `src/plugins/plugin-snaps-docs.ts`. + +## Experimental features + +The `flaskOnly` admonition keyword is available in Snaps docs for features that require MetaMask +Flask. Use it like any other admonition: + +```markdown +:::flaskOnly +This feature is experimental and only available in MetaMask Flask. +::: +``` + +## Sidebar + +The sidebar configuration is in [snaps-sidebar.js](snaps-sidebar.js). diff --git a/.cursor/rules/terminology.mdc b/.cursor/rules/terminology.mdc new file mode 100644 index 00000000000..f541c028c58 --- /dev/null +++ b/.cursor/rules/terminology.mdc @@ -0,0 +1,44 @@ +--- +description: Required spelling and casing for product names, industry terms, and standards referenced across MetaMask documentation. +globs: **/*.md,**/*.mdx +alwaysApply: false +--- + +# Terminology + +Use the terms below consistently. The left column is the required form. Do not use the variants +listed on the right unless they appear in code, URLs, or direct quotations from a specification. + +| Required term | Do not use | +| -------------------------------------- | ------------------------------------------------------------------------------- | +| dapp | DApp, dApp, decentralized application, Dapp (capitalize only at sentence start) | +| MetaMask | Metamask, metamask (except in code/URLs) | +| smart account | smart contract account, SCA (unless quoting an ERC) | +| externally owned account (EOA) | externally-owned account | +| Snaps (platform) | snaps, SNAPS | +| a Snap (singular) | a snap, a SNAP | +| web3 | Web3, WEB3 (capitalize only at sentence start) | +| sign in / sign out (verb) | log in, log out, login, logout (as verbs) | +| sign-in / sign-out (noun or adjective) | log-in, log-out, login, logout (as nouns/adj) | +| onchain / offchain | on-chain, off-chain | +| Wallet Standard, Wallet Adapter | wallet-standard, wallet-adapter (except in URLs) | +| Wagmi | wagmi (except in code, package names, imports, URLs, and file paths) | +| MetaMask Agent Wallet | Agentic CLI, Agentic Wallet (except in code/URLs where `agentic` appears) | +| Agent Wallet (short form) | agent wallet (lowercase product name) | +| Guard Mode | guard mode (capitalize Mode) | +| Beast Mode | beast mode (capitalize Mode) | +| server-wallet | server wallet, Server Wallet (except as product phrase "server-wallet mode") | +| Bring your own wallet | BYOK, bring your own key, byok (except CLI flag `--wallet byok`) | +| `mm` (CLI binary) | MM, Mm (except at sentence start) | + +## Standards and specifications + +When introducing a standard for the first time on a page, spell out the full name with the +identifier in parentheses. Use the short form on subsequent references. + +Examples: + +- First use: "Chain Agnostic Improvement Proposal 25 (CAIP-25)" +- Subsequent: "CAIP-25" +- First use: "ERC-4337 (Account Abstraction Using Alt Mempool)" +- Subsequent: "ERC-4337" diff --git a/.cursor/rules/vercel-redirects.mdc b/.cursor/rules/vercel-redirects.mdc new file mode 100644 index 00000000000..7a180ce8348 --- /dev/null +++ b/.cursor/rules/vercel-redirects.mdc @@ -0,0 +1,81 @@ +--- +description: Vercel redirect rules for vercel.json — trailing-slash source patterns and what not to duplicate. +globs: vercel.json +alwaysApply: false +--- + +# Vercel redirects (`vercel.json`) + +Every deleted, renamed, or moved page needs a redirect in `vercel.json`. Docusaurus sets +`onBrokenLinks: 'throw'`, so fix internal links in the repo too. + +## Platform settings + +`vercel.json` sets `"trailingSlash": true` and `"cleanUrls": false`. Docusaurus also uses +`trailingSlash: true`. Redirect rules must match how Vercel actually routes requests. + +## Trailing-slash behavior + +With `trailingSlash: true`, Vercel **always normalizes** a no-slash URL to its slash form +**before** custom redirects run: + +```text +/foo/bar → 308 /foo/bar/ → (custom redirect, if source matches) +``` + +Therefore: + +- **`source` must end with `/`** for normal documentation paths. +- **Do not add a duplicate** no-slash `source` for the same redirect. Only `/foo/bar/` is + needed; `/foo/bar` is redundant. +- **`destination` must end with `/`** for normal documentation paths (unless the target is a + static file or includes a `#` fragment). + +### File-extension paths + +Paths whose final segment contains a dot (for example, `.html`, `.txt`) are treated as files. +Vercel does **not** append a trailing slash. Keep the **no-slash** `source` for those paths only. + +## Examples + +```json +// ✅ GOOD — one rule; works for both /old/path and /old/path/ +{ + "source": "/agent-wallet/get-started/quickstart/", + "destination": "/agent-wallet/quickstart/", + "permanent": true +} + +// ❌ BAD — no-slash source never matches after Vercel normalization +{ + "source": "/agent-wallet/get-started/quickstart", + "destination": "/agent-wallet/quickstart" +} + +// ❌ BAD — duplicate rules for the same redirect +{ + "source": "/agent-wallet/get-started/quickstart/", + "destination": "/agent-wallet/quickstart/" +}, +{ + "source": "/agent-wallet/get-started/quickstart", + "destination": "/agent-wallet/quickstart/" +} + +// ✅ GOOD — file path; no trailing slash on source +{ + "source": "/guide/ethereum-provider.html", + "destination": "/metamask-connect/evm/reference/provider-api/" +} +``` + +## Verify before merging + +Test the **slash** `source` (and optionally the no-slash entry URL, which should chain through): + +```bash +curl -sI -L "https://docs.metamask.io/old/path/" | grep -E "^HTTP|^location" +``` + +Expect a `308` chain ending in `200` at the destination. A `404` after a trailing-slash +normalization hop usually means the `source` is missing its final `/`. diff --git a/.cursor/skills/author-page/SKILL.md b/.cursor/skills/author-page/SKILL.md new file mode 100644 index 00000000000..44ca58a993c --- /dev/null +++ b/.cursor/skills/author-page/SKILL.md @@ -0,0 +1,253 @@ +--- +name: author-page +description: >- + Scaffold or draft new MetaMask documentation to editorial standards. Use when creating a new + page, writing a first draft, or helping a non-writer meet the documentation team's expectations. +--- + +# Author a new documentation page + +Help create a new documentation page that follows MetaMask editorial standards from the start. + +## When to use + +- You need to scaffold a new page or write a first draft. +- You are helping someone who is not a writer produce content that meets team expectations. + +## Inputs + +Ask the user for any information they have not already provided: + +1. **Product area** - which product is this for? (MetaMask Connect, Embedded Wallets, + Smart Accounts Kit, Services, Snaps, Developer Tools) +2. **Content type** - what kind of page? (concept/explanation, how-to guide, quickstart, + reference, tutorial, troubleshooting) +3. **Topic** - what is the page about? +4. **File path** - where should the file live? (Suggest one based on product and content type + if the user doesn't specify.) + +## Step 1: Determine conventions + +Based on the product and content type, load the relevant rules: + +- `.cursor/rules/content-types.mdc` - structural expectations for the content type. +- `.cursor/rules/product-*.mdc` - product-specific terminology and conventions. +- `.cursor/rules/editorial-voice.mdc` - tone and voice. +- `.cursor/rules/markdown-formatting.mdc` - formatting conventions. +- `.cursor/rules/terminology.mdc` - required terms and casing. + +Check how existing pages in the same folder are structured. Match their conventions for headings, +front-matter fields, intro style, and parameter formats. + +## Step 2: Scaffold the page + +Create the file with the correct structure for its content type. + +### Frontmatter + +Follow **Frontmatter** in `.cursor/rules/markdown-formatting.mdc` (required `description`, +recommended `keywords`, optional `sidebar_label` only when the nav label would otherwise be too +long or wordy, and the `title` vs duplicate H1 rule). Do not repeat or contradict that rule here. + +### Structure by content type + +**Concept / Explanation** (for `concepts/` or `learn/` folders): + +```markdown +--- +description: +--- + +# + + + +## + + + +## + +... + +## Next steps + +- []() +- []() +``` + +**How-to guide** (for `guides/` or `how-to/` folders): + +```markdown +--- +description: +--- + +# + + + +## Prerequisites + +- +- + +## Steps + +### 1. + + + +### 2. + +... + +## Next steps + +- [](link) +``` + +**Quickstart** (for `quickstart/` or `get-started/` folders): + +```markdown +--- +description: +--- + +# + + + +## Prerequisites + +- + +## Steps + +### 1. + + + +### 2. + +... + +## Next steps + +- [](link) +``` + +**Reference** (for `reference/` folders): + +```markdown +--- +description: +--- + +# + + + +## Parameters + + + +## Returns + + + +## Example + + +``` + +**Tutorial** (for `tutorials/` folders): + +```markdown +--- +description: +--- + +# + + + +## Prerequisites + +- + +## Steps + +### 1. + + + +... + +## Complete code + + + +## Next steps + +- [](link) +``` + +**Troubleshooting** (for `troubleshooting/` folders): + +```markdown +--- +description: +--- + +# + +## Problem + + + +## Solution + + +``` + +## Step 3: Write the content + +Fill in the scaffold with content based on what the user provides. Follow these rules: + +- **Voice**: active, present tense, second person ("you"). Use contractions naturally. +- **First sentence**: get to the point. Answer "what" or "why" immediately. +- **No em/en dashes**: use commas, parentheses, or semicolons. +- **Sentence case** for all headings. +- **One sentence per line**, wrapped at roughly 100 columns. +- **Code blocks**: always include a language tag. Use `bash npm2yarn` for install commands. +- **Terminology**: use the required forms from `terminology.mdc`. +- **No marketing language**: no "powerful," "seamless," "best-in-class." +- **No invented API behavior**: if you are not certain about a parameter, return value, or + behavior, add a `:::note` admonition flagging it for review rather than stating it as fact. + +## Step 4: Verify the file is complete + +Before finishing, check: + +- [ ] Frontmatter has `description`; add `sidebar_label` only when the default nav label would be + too long or wordy (see `markdown-formatting.mdc`). +- [ ] Opening paragraph answers "what" and "why" in the first 1-2 sentences. +- [ ] Structure matches the content type. +- [ ] Terminology matches `terminology.mdc` and the product rule file. +- [ ] Code blocks have language tags. +- [ ] No em dashes, en dashes, or marketing language. +- [ ] File name uses lowercase and dashes (`send-transactions.md`, not `sendTransactions.md`). +- [ ] File is placed in the correct product and content-type folder. + +## Step 5: Remind the contributor + +After creating the page, remind the user to: + +1. Add the page to the correct sidebar file (see `contributor-workflow.mdc` for the mapping). +2. If any page was moved, renamed, or removed in the same change set, add redirects in + `vercel.json` (see `contributor-workflow.mdc`). +3. Preview locally with `npm start`. +4. Check that the CI linter passes before requesting review. diff --git a/.cursor/skills/style-review/SKILL.md b/.cursor/skills/style-review/SKILL.md new file mode 100644 index 00000000000..c2b00698103 --- /dev/null +++ b/.cursor/skills/style-review/SKILL.md @@ -0,0 +1,133 @@ +--- +name: style-review +description: >- + Review MetaMask documentation for editorial compliance (voice, terminology, formatting, content + type, frontmatter, workflow). Use before submitting a PR or when asked to audit existing pages. +--- + +# Style review + +## When to use + +- You want to check existing content for style, terminology, formatting, or content-type issues. +- You are preparing to submit a PR and want a structured editorial pass. + +## Inputs + +The user provides a file path or directory to review. If not provided, ask what to review. + +## Step 1: Identify the product and content type + +Read the file path to determine: + +1. **Product area** - which product folder the file lives in (for example, `metamask-connect/`, + `services/`, `snaps/`). Load the corresponding product rule from `.cursor/rules/product-*.mdc`. +2. **Content type** - which subfolder determines the expected structure (for example, `concepts/`, + `how-to/`, `reference/`). Use `.cursor/rules/content-types.mdc` for the mapping. + +## Step 2: Run Vale (if available) + +Try running Vale on the target file: + +```bash +vale +``` + +If Vale is not installed, skip this step and note it in the report. Continue with the manual review. + +## Step 3: Review against editorial rules + +Read the file fully. The following points are quick reminders; use the linked `.mdc` files as the +source of truth for full criteria, examples, and edge cases. + +### Voice and tone (editorial-voice.mdc) + +- Active voice and present tense used throughout. +- Second person ("you"), not "the developer" or "users." +- Contractions used naturally. +- No marketing language, superlatives, or promotional tone. +- No em dashes or en dashes; use commas, parentheses, or semicolons. +- First sentence of each section gets to the point. +- No slang, figures of speech, or culturally specific idioms. + +### Terminology (terminology.mdc) + +- Product names match the required forms (dapp, MetaMask, smart account, web3, etc.). +- Standards spelled out on first use with identifier in parentheses (for example, + "Chain Agnostic Improvement Proposal 25 (CAIP-25)"), short form on subsequent references. +- Product-specific terminology matches the corresponding `product-*.mdc` rule file. + +### Markdown formatting (markdown-formatting.mdc) + +- Lines wrapped at roughly 100 columns. +- Each sentence on its own line. +- Code blocks have a language tag. +- Links use relative paths within the product, absolute paths across products. +- Descriptive link text; no "click here" or bare URLs. +- Admonitions use Docusaurus syntax and are not nested. +- Tables are aligned in source Markdown. +- No duplicate H1 if frontmatter contains a `title` field. + +### Content type compliance (content-types.mdc) + +- Page structure matches the expected content type for its folder. +- Concept pages: no step-by-step instructions, ends with "Next steps." +- How-to pages: goal stated first, prerequisites listed, numbered steps. +- Reference pages: parameter format matches surrounding pages in the same product section. +- Quickstart pages: complete, copy-paste-and-run code. +- Troubleshooting pages: symptom/error first, then fix. + +### Frontmatter + +- `description` field present (one sentence for SEO). +- `sidebar_label` only when needed (default nav label would be too long or wordy); otherwise omit. +- No duplicate H1 if `title` is set in frontmatter. + +### Contributor workflow (contributor-workflow.mdc) + +- If the file is new, verify it has been added to the correct sidebar file. +- If the file was moved or renamed, verify a redirect exists in `vercel.json`. +- Cross-product links use absolute URL paths. + +## Step 4: Generate the report + +Present findings as a structured report grouped by category. For each issue: + +1. **Line number** - approximate location in the file. +2. **Category** - Voice/Tone, Terminology, Formatting, Content Type, Frontmatter, or Workflow. +3. **Issue** - what is wrong. +4. **Suggestion** - how to fix it. + +### Report format + +``` +## Style review: + +### Product: | Content type: + +### Summary +- X issues found (Y from Vale, Z from manual review) +- Severity: A critical, B suggestions + +### Voice and tone +- Line 12: Passive voice - "The block number can be specified..." → "Specify the block number..." + +### Terminology +- Line 8: "smart contract account" → Use "smart account" per terminology.mdc. + +### Formatting +- Line 45: Code block missing language tag. +- Line 22: Em dash found - replace with comma or period. + +### Content type +- Page is in `concepts/` but contains numbered step-by-step instructions. Move steps to a + how-to page and link to it. + +### Frontmatter +- Missing `description` field. +``` + +If reviewing a directory, produce one report per file, then a summary at the end showing totals +across all files. + +If no issues are found, say so explicitly. diff --git a/.cursorignore b/.cursorignore new file mode 100644 index 00000000000..190a16ba5d5 --- /dev/null +++ b/.cursorignore @@ -0,0 +1,11 @@ +node_modules/ +build/ +.docusaurus/ +.vercel/ +.integrationBuilderCache/ +gator_versioned_docs/ +gator_versioned_sidebars/ +i18n/ +static/ +src/specs/ +package-lock.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8e19ec4057d..61c22c0207a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,29 +2,4 @@ # so the listed codeowners apply only if there is no later match. # Default owner for all other files -* @MetaMask/activation - -# Docusaurus configuration -docusaurus.config.js @MetaMask/activation @MetaMask/tech-writers - -# GitHub workflows and templates -/.github/ @MetaMask/activation @MetaMask/tech-writers - -# Vercel configuration -vercel.json @MetaMask/activation @MetaMask/tech-writers - -# Sidebar files -*-sidebar.js @MetaMask/activation @MetaMask/tech-writers - -# All other Markdown files -*.md @MetaMask/tech-writers -*.mdx @MetaMask/tech-writers - -# Services documentation -/services/ @MetaMask/tech-writers - -# Snaps documentation -/snaps/ @MetaMask/tech-writers @MetaMask/snaps - -# Wallet and SDK documentation -/wallet/ @MetaMask/tech-writers @MetaMask/wallet-api-platform-engineers @MetaMask/sdk-devs +* @MetaMask/dashboard @MetaMask/delegation-devrel @MetaMask/embedded-wallets-devrel @MetaMask/sdk-devrel diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2afca2e8072..c22670c96c5 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -14,7 +14,14 @@ Fixes # ## Checklist -Complete this checklist before merging your PR: + -- [ ] If this PR contains a major change to the documentation content, I have added an entry to the top of the ["What's new?"](https://github.com/MetaMask/metamask-docs/blob/main/docs/whats-new.md) page. -- [ ] The proposed changes have been reviewed and approved by a member of the documentation team. +- [ ] If this PR updates or adds documentation content that changes or adds technical meaning, it has received an approval from an engineer or DevRel from the relevant team. +- [ ] If this PR updates or adds documentation content, it has received an approval from a technical writer. + +## External contributor checklist + + + +- [ ] I've read the [contribution guidelines](https://github.com/MetaMask/metamask-docs/blob/main/CONTRIBUTING.md). +- [ ] I've created a new issue (or assigned myself to an existing issue) describing what this PR addresses. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 99347e18caf..4213fa35450 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,9 +1,9 @@ version: 2 updates: - - package-ecosystem: "npm" - directory: "/" + - package-ecosystem: 'npm' + directory: '/' schedule: - interval: "weekly" - day: "sunday" + interval: 'weekly' + day: 'sunday' assignees: - - "protocol-galileo" \ No newline at end of file + - 'protocol-galileo' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 2358b3cc348..00000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Build - -on: - workflow_call: - secrets: - SEGMENT_ANALYTICS_KEY: - required: true - LD_CLIENT_ID: - required: true - SENTRY_KEY: - required: true - GF_SURVEY_KEY: - required: true - -env: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - -jobs: - build: - name: Build - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - - - name: Build - uses: ConsenSys/docs-gha/build@main - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/case.yml b/.github/workflows/case.yml deleted file mode 100644 index e47dc365de2..00000000000 --- a/.github/workflows/case.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Check file name case - -on: - workflow_call: - secrets: - SEGMENT_ANALYTICS_KEY: - required: true - LD_CLIENT_ID: - required: true - SENTRY_KEY: - required: true - GF_SURVEY_KEY: - required: true - -env: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - -jobs: - case: - name: Check for case being inconsistent - runs-on: ubuntu-latest - strategy: - matrix: - folder: ["docs"] - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - - - name: Case check action - uses: ConsenSys/docs-gha/case@main - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DOC_DIR: ${{ matrix.folder }} - SKIP_TEST: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000000..a55fef4bf95 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,137 @@ +--- +name: ci + +on: + workflow_call: + pull_request: + branches: + - main + +permissions: + contents: read + +env: + SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_KEY }} + LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Build + uses: ConsenSys/github-actions/docs-build@main + + case: + name: Check for case being inconsistent + runs-on: ubuntu-latest + strategy: + matrix: + folder: ['docs'] + steps: + - uses: actions/checkout@v6 + - name: Case check action + uses: ConsenSys/github-actions/docs-case-check@main + with: + DOC_DIR: ${{ matrix.folder }} + SKIP_TEST: true + + lint: + name: Lint Code Base + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Lint + uses: ConsenSys/github-actions/docs-lint-all@main + + prettier: + name: Prettier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Changed files (Prettier) + id: changed-files + uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # 47.0.5; pin matches docs-spelling-check + with: + separator: "\n" + files: | + **/*.md + **/*.mdx + **/*.ts + **/*.tsx + **/*.js + **/*.jsx + **/*.json + **/*.css + **/*.scss + **/*.html + **/*.yml + **/*.yaml + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: npm + - name: Install dependencies + run: npm ci + env: + NODE_ENV: development + HUSKY: 0 + - name: Check formatting + if: steps.changed-files.outputs.any_changed == 'true' + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + run: | + set -euo pipefail + files_to_check=() + while IFS= read -r f || [ -n "$f" ]; do + [ -z "$f" ] && continue + if [ -f "$f" ]; then + files_to_check+=("$f") + fi + done <<< "$ALL_CHANGED_FILES" + if [ ${#files_to_check[@]} -eq 0 ]; then + echo "No existing files to check (skipping)." + exit 0 + fi + ./node_modules/.bin/prettier --check "${files_to_check[@]}" + - name: No Prettier-scoped files changed + if: steps.changed-files.outputs.any_changed != 'true' + run: echo "No matching changed files; Prettier check skipped." + + spelling: + name: Spelling + runs-on: ubuntu-latest + strategy: + matrix: + file-extensions: ['.md', '.mdx'] + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Vale + uses: Consensys/github-actions/docs-spelling-check@main + + linkCheck: + name: Link Checking + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + - name: Install dependencies + run: npm ci + env: + NODE_ENV: development + HUSKY: 0 + - name: Generate Snaps API reference + run: npm run docusaurus snaps:generate + - name: LinkCheck + uses: ConsenSys/github-actions/docs-link-check@main + with: + CONFIG_FILE: '.linkspector.yml' diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 1c0216c7842..7719ef4abc3 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -2,7 +2,7 @@ name: Crowdin Action on: push: - paths: ["i18n/**"] + paths: ['i18n/**'] branches: [main] permissions: write-all @@ -12,10 +12,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Synchronize with Crowdin - uses: crowdin/github-action@v1 + uses: crowdin/github-action@v2 with: upload_sources: true upload_translations: true @@ -23,9 +23,9 @@ jobs: localization_branch_name: l10n_crowdin_translations create_pull_request: true - pull_request_title: "New Crowdin translations" - pull_request_body: "New Crowdin pull request with translations" - pull_request_base_branch_name: "main" + pull_request_title: 'New Crowdin translations' + pull_request_body: 'New Crowdin pull request with translations' + pull_request_base_branch_name: 'main' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} diff --git a/.github/workflows/dependency_review.yml b/.github/workflows/dependency_review.yml index 5104c94c04e..7b62d7a697c 100644 --- a/.github/workflows/dependency_review.yml +++ b/.github/workflows/dependency_review.yml @@ -8,17 +8,17 @@ on: jobs: case: - name: Check for licences not being allowed + name: Check for licenses not being allowed runs-on: ubuntu-latest strategy: matrix: - folder: ["docs"] + folder: ['docs'] permissions: contents: read steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: Dependency review - uses: ConsenSys/docs-gha/dependency-review@main + uses: ConsenSys/github-actions/js-dependency-review@main with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index dd7df62a4de..00000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,47 +0,0 @@ ---- -name: Check for lint, spelling and link errors - -on: - workflow_call: - secrets: - SEGMENT_ANALYTICS_KEY: - required: true - LD_CLIENT_ID: - required: true - SENTRY_KEY: - required: true - GF_SURVEY_KEY: - required: true - -env: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - -jobs: - lint: - name: Lint Code Base, Spelling, Link Check - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - - - name: Lint - uses: ConsenSys/docs-gha/lint@cc8b9d9065f5f20b105954f8e806f55c1e235ecd - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - linkCheck: - name: Link Checking - runs-on: ubuntu-latest - strategy: - matrix: - file-extensions: [".md", ".mdx"] - steps: - - uses: actions/checkout@v4 - - name: LinkCheck - uses: ConsenSys/docs-gha/linkcheck@main - with: - FILE_EXTENSION: ${{ matrix.file-extensions }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 0577bbc909b..00000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Main - -on: - push: - branches: [main] - pull_request: - -jobs: - check-workflows: - name: Check workflows - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Download actionlint - id: download-actionlint - run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/7fdc9630cc360ea1a469eed64ac6d78caeda1234/scripts/download-actionlint.bash) 1.6.22 - shell: bash - - name: Check workflow files - run: ${{ steps.download-actionlint.outputs.executable }} -color - shell: bash - - build: - name: Build - uses: ./.github/workflows/build.yml - secrets: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_DEV_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - - lint: - name: Lint - uses: ./.github/workflows/lint.yml - secrets: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_DEV_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - - case: - name: Case - uses: ./.github/workflows/case.yml - secrets: - SEGMENT_ANALYTICS_KEY: ${{ secrets.SEGMENT_ANALYTICS_DEV_KEY }} - LD_CLIENT_ID: ${{ secrets.LD_CLIENT_ID }} - SENTRY_KEY: ${{ secrets.SENTRY_KEY }} - GF_SURVEY_KEY: ${{ secrets.GF_SURVEY_KEY }} - - all-jobs-completed: - name: All jobs completed - runs-on: ubuntu-latest - needs: - - check-workflows - - build - - lint - - case - outputs: - PASSED: ${{ steps.set-output.outputs.PASSED }} - steps: - - name: Set PASSED output - id: set-output - run: echo "PASSED=true" >> "$GITHUB_OUTPUT" - - all-jobs-pass: - name: All jobs pass - if: ${{ always() }} - runs-on: ubuntu-latest - needs: all-jobs-completed - steps: - - name: Check that all jobs have passed - run: | - passed="${{ needs.all-jobs-completed.outputs.PASSED }}" - if [[ $passed != "true" ]]; then - exit 1 - fi diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index d70a33b324e..30044a79022 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,39 +1,40 @@ --- - name: Nightly check - - on: - schedule: - - cron: "0 0 * * *" - workflow_dispatch: {} - - concurrency: - group: nightly-${{ github.ref }} - cancel-in-progress: true - - jobs: - linkCheckMdx: - name: Run link check on .mdx files - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - - name: LinkCheck mdx files - uses: ConsenSys/docs-gha/linkcheck@main - with: - FILE_EXTENSION: mdx - MODIFIED_FILES_ONLY: no - linkCheckMd: - needs: linkCheckMdx - name: Run link check on .md files - if: always() - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - uses: actions/checkout@v4 - - name: LinkCheck md files - uses: ConsenSys/docs-gha/linkcheck@main - with: - FILE_EXTENSION: md - MODIFIED_FILES_ONLY: no \ No newline at end of file +name: Nightly check + +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: {} + +concurrency: + group: nightly-${{ github.ref }} + cancel-in-progress: true + +jobs: + linkCheckMdx: + name: Run link check on .mdx files + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v6 + - name: LinkCheck mdx files + uses: ConsenSys/github-actions/docs-link-check@main + with: + FILE_EXTENSION: mdx + MODIFIED_FILES_ONLY: no + + linkCheckMd: + needs: linkCheckMdx + name: Run link check on .md files + if: always() + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v6 + - name: LinkCheck md files + uses: ConsenSys/github-actions/docs-link-check@main + with: + FILE_EXTENSION: md + MODIFIED_FILES_ONLY: no diff --git a/.github/workflows/security-code-scanner.yml b/.github/workflows/security-code-scanner.yml index e414d69bbba..ae7db1dacd3 100644 --- a/.github/workflows/security-code-scanner.yml +++ b/.github/workflows/security-code-scanner.yml @@ -1,12 +1,13 @@ -name: 'MetaMask Security Code Scanner' +name: MetaMask Security Code Scanner on: push: branches: - - 'main' + - main pull_request: branches: - - 'main' + - main + workflow_dispatch: jobs: run-security-scan: @@ -16,9 +17,9 @@ jobs: contents: read security-events: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: MetaMask Security Code Scanner - uses: ConsenSys/docs-gha/mm-security-scanner@main + uses: ConsenSys/github-actions/mm-security-scanner@main with: repo: ${{ github.repository }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/trivy-cache.yml b/.github/workflows/trivy-cache.yml new file mode 100644 index 00000000000..a41f2378f93 --- /dev/null +++ b/.github/workflows/trivy-cache.yml @@ -0,0 +1,19 @@ +--- +name: trivy-cache-db + +on: + pull_request: + branches: + - main + workflow_dispatch: + schedule: + - cron: '0 1 * * *' + +jobs: + trivy: + name: Run trivy scanner + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - name: Trivy Cache + uses: ConsenSys/github-actions/trivy-update-cache@main diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 0258e1b81e7..30b4ce829dc 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -1,6 +1,5 @@ --- name: Trivy - on: pull_request: branches: @@ -11,8 +10,8 @@ jobs: name: Run trivy scanner runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Trivy - uses: ConsenSys/docs-gha/trivy@main + uses: ConsenSys/github-actions/trivy@main with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 5a56cc59e27..242ff87e5e9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,10 +4,15 @@ # Production /build +# Dev sanity-check output from scripts/verify-llms-output.js +/.llms-verify +/.llms-inspect + # Generated files .docusaurus .cache-loader .idea +.yarn # Misc .DS_Store @@ -15,8 +20,15 @@ .env.development.local .env.test.local .env.production.local - npm-debug.log* .vercel .envrc -.env \ No newline at end of file +.env +.integrationBuilderCache + +# Generated Snaps docs +snaps/reference/snaps-api/*.mdx + +# Generated SAK glossary +smart-accounts-kit/reference/glossary.mdx +/.cache diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000000..19a5da20832 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,21 @@ +#!/usr/bin/env sh +# Git GUIs (Fork, etc.) often omit Node from PATH. Resolve node, then run lint-staged without npx. +cd "$(dirname "$0")/.." || exit 1 + +export PATH="$HOME/.volta/bin:/opt/homebrew/bin:/usr/local/bin:$PATH" + +if [ -s "$HOME/.nvm/nvm.sh" ]; then + export NVM_DIR="$HOME/.nvm" + # shellcheck disable=SC1090 + . "$HOME/.nvm/nvm.sh" + nvm use default >/dev/null 2>&1 || nvm use node >/dev/null 2>&1 || true +fi + +if ! command -v node >/dev/null 2>&1; then + echo "husky: Node.js not found. Install Node.js or open your terminal and run: which node" >&2 + echo "husky: If you use nvm, ensure default is set (nvm alias default )." >&2 + exit 1 +fi + +# Call the CLI with explicit node so we do not rely on the stub shebang (#!/usr/bin/env node). +exec node ./node_modules/lint-staged/bin/lint-staged.js diff --git a/.linkspector.yml b/.linkspector.yml new file mode 100644 index 00000000000..94940489fce --- /dev/null +++ b/.linkspector.yml @@ -0,0 +1,45 @@ +dirs: + - ./smart-accounts-kit + - ./developer-tools + - ./embedded-wallets + - ./metamask-connect + - ./services + - ./snaps +excludedDirs: + - ./build + - ./.vercel + - ./.docusaurus + - ./node_modules +useGitIgnore: true + +ignorePatterns: + - pattern: '^http(s)?://localhost' + - pattern: '^http(s)?://127.0.0.1' + - pattern: '^http(s)?://gitlab.com/ConsenSys/' + - pattern: '^http(s)?://consensys.net' + - pattern: '^http(s)?://.+.zendesk.com' + - pattern: '^http(s)?://.+.etherscan.io' + - pattern: '^http(s)?://help.figma.com' + - pattern: '^http(s)?://metamask.io' + - pattern: '^http(s)?://rivet.cloud' + - pattern: '^http(s)?://app\.infura\.io($|/.*)' + - pattern: '^http(s)?://docs.arbitrum.io($|/.*)' + - pattern: '^/img/' + - pattern: '^/smart-accounts-kit/' + - pattern: '^/developer-tools/' + - pattern: '^/embedded-wallets/' + - pattern: '^/metamask-connect/' + - pattern: '^/services/' + - pattern: '^/snaps/' + - pattern: '^/wallet/' + - pattern: '^/tutorials/' + - pattern: '^/quickstart/' + - pattern: 'https://web3onboard.thirdweb.com' + - pattern: 'https://0xfury.com/privacy' + - pattern: '^https://docs.arbitrum.io' + - pattern: '^https://nodefleet.org' +aliveStatusCodes: + - 200 + - 206 + - 400 + - 403 diff --git a/.nvmrc b/.nvmrc index 3f430af82b3..2edeafb09db 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18 +20 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000..68b9c9c7f3e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,17 @@ +# Dependencies and build output +node_modules +build +.docusaurus +.cache-loader +.yarn + +# Lockfile (large, noisy diffs; not prose/code style) +package-lock.json + +# Generated at build / not committed (see .gitignore) +snaps/reference/snaps-api/*.mdx +smart-accounts-kit/reference/glossary.mdx + +# Optional local tooling +.env +.env.* diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000000..9f08df99e72 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,14 @@ +{ + "arrowParens": "avoid", + "bracketSpacing": true, + "bracketSameLine": true, + "useTabs": false, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "proseWrap": "preserve", + "printWidth": 100, + "htmlWhitespaceSensitivity": "css", + "vueIndentScriptAndStyle": true +} diff --git a/.stylelintrc.json b/.stylelintrc.json index 3d4339d6d81..52a65e5640e 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,6 +1,12 @@ { "extends": "stylelint-config-standard", "rules": { - "selector-class-pattern": null + "selector-class-pattern": null, + "selector-pseudo-class-no-unknown": [ + true, + { + "ignorePseudoClasses": ["global"] + } + ] } -} \ No newline at end of file +} diff --git a/.vscode/settings.json b/.vscode/settings.json index c2ff617f28a..dbb69783dd2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,30 @@ { "eslint.format.enable": true, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.fixAll.eslint": "explicit", + "source.fixAll.stylelint": "explicit", + "source.organizeImports": "never" }, "eslint.codeActionsOnSave.mode": "all", "editor.tabSize": 2, "typescript.tsdk": "node_modules/typescript/lib", - "typescript.preferences.importModuleSpecifier": "non-relative" + "typescript.preferences.importModuleSpecifier": "non-relative", + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "javascript.format.insertSpaceAfterConstructor": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "javascript.format.insertSpaceBeforeFunctionParenthesis": false, + "typescript.format.insertSpaceAfterConstructor": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false, + "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, + "typescript.format.insertSpaceBeforeFunctionParenthesis": false, + "stylelint.validate": ["css", "scss", "sass"] } diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..9ecef7296eb --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,58 @@ +# MetaMask developer documentation + + + +This repository contains the source for [docs.metamask.io](https://docs.metamask.io), the MetaMask +developer documentation site. It is built with Docusaurus and covers multiple products aimed at +dapp developers and wallet extension builders. + + + +## Products + +| Product | Path | Sidebar file | Description | +| ------------------- | --------------------------- | ------------------------- | ----------------------------------------------------------------------------------- | +| MetaMask Connect | `metamask-connect/` | `mm-connect-sidebar.js` | Connect dapps to MetaMask extension and mobile, across EVM, Solana, and multichain. | +| Embedded Wallets | `embedded-wallets/` | `ew-sidebar.js` | Embed wallet functionality directly into applications. | +| Smart Accounts Kit | `smart-accounts-kit/` | `gator-sidebar.js` | Create smart accounts with delegated permissions, and request advanced permissions. | +| Agent Wallet | `agent-wallet/` | `agent-wallet-sidebar.js` | Give AI agents programmatic wallet access via the `mm` CLI with mandatory security. | +| Services | `services/` | `services-sidebar.js` | Ease dapp development using Infura and related infrastructure APIs. | +| Snaps | `snaps/` | `snaps-sidebar.js` | Extend MetaMask by creating custom mini-apps. | +| Developer dashboard | `developer-tools/dashboard` | `dashboard-sidebar.js` | Manage Infura API keys, monitor usage, and access account info. | + +## Editorial standards + +Follow these guides when writing or editing documentation: + +- [Consensys documentation style guide](https://docs-template.consensys.net/contribute/style-guide) +- [Consensys Markdown formatting guide](https://docs-template.consensys.net/contribute/format-markdown) +- [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) + +- [Diataxis framework](https://diataxis.fr/) for content structure + + +The rules under `.cursor/rules/` cover the most actionable parts of these references. +See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contribution workflow. + +## Critical rules + +1. **Do not invent API behavior.** Never state as fact any API parameter, return value, or behavior + that you have not verified against the codebase or published reference. If you are uncertain, + flag it for review. +2. **Respect product boundaries.** Each product has its own documentation tree and sidebar. Do not + move content across product boundaries without explicit approval from the documentation team. +3. **Use the canonical terminology.** See `.cursor/rules/terminology.mdc` for the required spelling + and casing of product and industry terms. +4. **Verify before publishing.** Preview changes locally with `npm start` before requesting review. +5. **Pass the CI linter.** PRs are checked by a + [Vale-based linter](https://github.com/Consensys/github-actions/tree/main/docs-spelling-check) + that enforces Microsoft style and Consensys terminology. Fix warnings before requesting review. + +## AI guidance + +Detailed editorial, formatting, and product-specific rules are in `.cursor/rules/`. These rules +apply automatically when you edit files matching their glob patterns. + +Agent skills live under `.cursor/skills//SKILL.md`. This repo includes **author-page** +(scaffold and draft new pages) and **style-review** (editorial compliance before PR). Cursor loads +these when the task matches each skill's description. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 72fa40a9563..cd4c51ba7e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,10 +10,8 @@ guide in some places. - [Contribution workflow](#contribution-workflow) - [Preview locally](#preview-locally) - [Style guide](#style-guide) +- [Format links](#format-links) - [Add images](#add-images) -- [Update the interactive API reference](#update-the-interactive-api-reference) - - [Update `MetaMask/api-specs`](#update-metamaskapi-specs) - - [Update `ethereum/execution-apis`](#update-ethereumexecution-apis) - [Test analytics](#test-analytics) ## Contribution workflow @@ -71,16 +69,14 @@ To contribute changes: > **Notes:** > - > - All documentation content is located in the `wallet`, `snaps`, `services`, and - > `developer-tools` directories. - > - If you add a new documentation page, edit `wallet-sidebar.js`, `snaps-sidebar.js`, - > `services-sidebar.js`, or `dashboard-sidebar.js` to add the page to the + > - All documentation content is located in the `sdk`, `wallet`, `embedded-wallets`, `smart-accounts-kit`, `services`, + > `developer-tools`, `snaps`, and `src/pages` directories. + > - If you add a new documentation page, edit `mm-connect-sidebar.js`, `ew-sidebar.js`, `gator-sidebar.js`, + > `services-sidebar.js`, `dashboard-sidebar.js`, or `snaps-sidebar.js` to add the page to the > [sidebar](https://docs-template.consensys.io/create/configure-docusaurus#sidebar). > - If you delete, rename, or move a documentation file, add a > [redirect](https://vercel.com/docs/edge-network/redirects#configuration-redirects). > - See additional instructions for [updating the interactive API reference](#update-the-interactive-api-reference). - > - If the PR contains a major change to the documentation content, add an entry to the top of - > the ["What's new?"](docs/whats-new.md) page. 5. [Preview your changes locally](https://docs-template.consensys.net/contribute/preview) to check that the changes render correctly. @@ -118,123 +114,42 @@ To contribute changes: Refer to the [Consensys documentation style guide](https://docs-template.consensys.net/contribute/style-guide). -## Add images +## Format links -All images are located in the `wallet/assets`, `snaps/assets`, `services/images`, and -`developer-tools/images` directories. -When adding a new image, such as a screenshot or diagram, make sure the image has a white or -`#1b1b1d` color background in order for it to be compatible with the site's light and dark modes. - -Additionally, follow the [Consensys guidelines on adding images](https://docs-template.consensys.net/contribute/add-images). +Most links in the Markdown pages use _relative file paths_, for example: -## Update the interactive API reference - -The [Wallet JSON-RPC API reference](https://docs.metamask.io/wallet/reference/json-rpc-api/) uses the -[`docusaurus-openrpc`](https://github.com/MetaMask/docusaurus-openrpc) plugin to import OpenRPC -specifications from [`MetaMask/api-specs`](https://github.com/MetaMask/api-specs) (MetaMask-specific -methods) and [`ethereum/execution-apis`](https://github.com/ethereum/execution-apis) (standard -Ethereum methods). -The site renders documentation for each method based on the specification, and displays an -interactive module to test the methods in your browser. +```md +You can enable users to create a [MetaMask smart account](../../concepts/smart-accounts.md) directly in your dapp. +``` -### Update `MetaMask/api-specs` +However, when linking between different product sections or using the `CardList` component, use _absolute URL paths_. For example: -To update documentation for MetaMask-specific JSON-RPC API methods: +```md +When a dapp requests to submit a batch of transactions atomically, MetaMask may prompt users to upgrade their +externally owned account (EOA) to a [MetaMask smart account](/smart-accounts-kit/concepts/smart-accounts). +``` -1. Fork [`MetaMask/api-specs`](https://github.com/MetaMask/api-specs), clone the forked repository - to your computer, and navigate into it: +```md + +``` - ```bash - git clone git@github.com:/api-specs.git - cd api-specs - ``` - -2. Follow the repository's [`README.md`](https://github.com/MetaMask/api-specs/blob/main/README.md) - instructions to edit the OpenRPC specification and generate the output file, `openrpc.json`. - -3. To test the API updates in the MetaMask doc site's interactive reference, make the following - temporary changes on a local branch of the doc site, `metamask-docs`: - - 1. Copy and paste the output file `openrpc.json` into the root directory of `metamask-docs`. - 2. In `docusaurus.config.js`, update the following line to point to your local output file: - ```diff - openrpcDocument: - - "https://metamask.github.io/api-specs/0.10.5/openrpc.json", - + "./openrpc.json", - ``` - 3. Preview the doc site locally, navigate to the API reference, and view your updates. - -4. Add and commit your changes to `api-specs`, and create a PR. - -5. Once your PR is approved and merged, the following must happen to publish the changes to the - MetaMask doc site: - - 1. A new version of `api-specs` must be released by a user with write access to the repository. - To release, go to the [Create Release Pull Request](https://github.com/MetaMask/api-specs/actions/workflows/create-release-pr.yml) - action, select **Run workflow**, and enter a specific version to bump to in the last text box - (for example, `0.10.6`). This creates a PR releasing a version of `api-specs`. - 2. Once the release PR is merged, the [Publish Release](https://github.com/MetaMask/api-specs/actions/workflows/publish-release.yml) - action must be approved by an npm publisher. - You can request an approval in the **#metamask-dev** Slack channel tagging - **@metamask-npm-publishers**. - For example: - > @metamask-npm-publishers `@metamask/api-specs@0.10.6` is awaiting deployment :rocketship: - https://github.com/MetaMask/api-specs/actions/runs/10615788573 - 3. Once the release is published on npm, `docusaurus.config.js` in `metamask-docs` must be - updated with the new `api-specs` version to publish. - For example: - ```diff - openrpcDocument: - - "https://metamask.github.io/api-specs/0.10.5/openrpc.json", - + "https://metamask.github.io/api-specs/0.10.6/openrpc.json", - ``` - -### Update `ethereum/execution-apis` - -To update documentation for standard Ethereum JSON-RPC API methods: - -1. Fork [`ethereum/execution-apis`](https://github.com/ethereum/execution-apis), clone the forked - repository to your computer, and navigate into it: +## Add images - ```bash - git clone git@github.com:/execution-apis.git - cd execution-apis - ``` +All images are located in the `sdk/_assets`, `wallet/assets`, `smart-accounts-kit/assets`, `services/images`, +`developer-tools/images`, `snaps/assets`, and `static/img` directories. +When adding a new image, such as a screenshot or diagram, make sure the image has a white or +`#1b1b1d` color background in order for it to be compatible with the site's light and dark modes. -2. Follow the repository's [`README.md`](https://github.com/ethereum/execution-apis/blob/main/README.md) - instructions to edit the OpenRPC specification and generate the output file, `openrpc.json`. - -3. To test the API updates in the MetaMask doc site's interactive reference, make the following - temporary changes on a local branch of the doc site, `metamask-docs`: - - 1. Copy and paste the output file `openrpc.json` into the root directory of `metamask-docs`. - 2. In `docusaurus.config.js`, update the following line to point to your local output file: - ```diff - openrpcDocument: - - "https://metamask.github.io/api-specs/0.10.5/openrpc.json", - + "./openrpc.json", - ``` - 3. Preview the doc site locally, navigate to the API reference, and view your updates. - -4. Add and commit your changes to `execution-apis`, and create a PR. - -5. Once your PR is approved and merged, the following must happen to publish the changes to the - MetaMask doc site: - - 1. `api-specs` must import the updated Ethereum API specification. - Go to the [commit history](https://github.com/ethereum/execution-apis/commits/assembled-spec/) - of the `assembled-spec` branch of `execution-apis`. - Copy the full commit hash of the latest commit titled "assemble openrpc.json." - Update the following line in `merge-openrpc.js` of `api-specs` with the updated commit hash, - and create a PR: - ```diff - const getFilteredExecutionAPIs = () => { - - return fetch("https://raw.githubusercontent.com/ethereum/execution-apis/ac19b518a2596221cd7cd6421ee3dc654d7ff3b7/refs-openrpc.json") - + return fetch("https://raw.githubusercontent.com/ethereum/execution-apis/f75d4cc8eeb5d1952bd69f901954686b74c34c9b/refs-openrpc.json") - ``` - 2. Once the change to `merge-openrpc.js` is merged, Step 5 in - [Update `MetaMask/api-specs`](#update-metamaskapi-specs) must be completed to publish the - changes to the MetaMask doc site. +Additionally, follow the [Consensys guidelines on adding images](https://docs-template.consensys.net/contribute/add-images). ## Test analytics diff --git a/LICENSE-MIT b/LICENSE-MIT index 21066db781c..ad4034f6303 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 MetaMask +Copyright (c) 2018-2026 MetaMask Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/README.md b/README.md index 5372b410df5..ec0c5f356cf 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Build the documentation site locally using the following steps. ### Prerequisites -- [Node.js](https://nodejs.org/) version 18+ +- [Node.js](https://nodejs.org/) version 20.x - [Git](https://git-scm.com/) ### Steps @@ -43,6 +43,6 @@ Build the documentation site locally using the following steps. npm start ``` - Once the server starts, you can view the documentation at `http://localhost:3000`. + Once the server starts, you can view the documentation at `http://localhost:3003`. For more information on contributing to the documentation, see the [full contribution guidelines](CONTRIBUTING.md). diff --git a/agent-wallet-sidebar.js b/agent-wallet-sidebar.js new file mode 100644 index 00000000000..a7663f35979 --- /dev/null +++ b/agent-wallet-sidebar.js @@ -0,0 +1,53 @@ +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebar = { + agentWalletSidebar: [ + { + type: 'doc', + label: 'Overview', + id: 'README', + }, + { + type: 'doc', + label: 'Quickstart', + id: 'quickstart', + }, + { + type: 'doc', + label: 'Use the CLI directly', + id: 'use-the-cli-directly', + }, + { + type: 'category', + label: 'Guides', + collapsed: false, + items: [ + 'guides/send-tokens', + 'guides/swap-and-bridge', + 'guides/trade-perpetuals', + 'guides/trade-prediction-markets', + 'guides/check-balances-and-prices', + 'guides/sign-messages-and-transactions', + ], + }, + { + type: 'category', + label: 'Reference', + collapsed: true, + items: [ + 'reference/architecture', + 'reference/commands', + 'reference/error-codes', + 'reference/supported-chains', + ], + }, + { + type: 'doc', + id: 'troubleshooting', + label: 'Troubleshooting', + }, + ], +} + +module.exports = sidebar diff --git a/agent-wallet/README.mdx b/agent-wallet/README.mdx new file mode 100644 index 00000000000..b6feb11edc7 --- /dev/null +++ b/agent-wallet/README.mdx @@ -0,0 +1,110 @@ +--- +title: MetaMask Agent Wallet +sidebar_label: Overview +description: Give your AI agent a self-custody wallet. Install the mm CLI and agent skills, then use natural language in Claude Code, Codex, Cursor, and other agents. +keywords: [MetaMask, Agent Wallet, mm, AI agents, skills] +--- + +import CardList from '@site/src/components/CardList' + +A fully self-custodial agent wallet that lets AI agents trade autonomously without forcing users to give up control. Deploying an agent on a self-custody wallet can mean choosing between giving the agent freedom to act and keeping users’ funds safe. MetaMask Agent Wallet ends that trade-off. Your agent operates inside user-defined limits. + +:::info Early Access +MetaMask Agent Wallet is available through the +[Early Access Program](https://metamask.io/agent-wallet). +::: + +## What your agent can do + +After setup, prompt your agent in plain language: + + + +| You ask your agent | What happens | +| ------------------------------------------------ | ----------------------------------------------------------------- | +| "Show the wallet address and USDC balance" | Your agent checks auth, then queries balances. | +| "Send 10 USDT to 0x123… on Ethereum" | Your agent confirms details, then submits a transfer. | +| "Swap 0.1 ETH to USDC on Base" | Your agent fetches a quote, confirms with you, then executes. | +| "Open a 5x long on BTC with $100 on Hyperliquid" | Your agent deposits if needed, quotes, and opens the position. | +| "Bet 10 USDT on YES for BTC 5-min price up" | Your agent searches markets, confirms odds, and places the order. | + + + +## MetaMask safety-checks every transaction before it lands + +Security by default, not configuration. +Supported EVM transactions pass through a mandatory 3-step pipeline before they land onchain. + +1. **Transaction simulation**: What will this transaction actually do? Balance changes, approvals, + and gas are surfaced before signing. +2. **Threat scanning**: Powered by Blockaid and production-tested across millions of MetaMask + transactions. Malicious transactions get auto-bounced. Flagged transactions require your approval + before they execute. +3. **[Smart Transactions](https://support.metamask.io/manage-crypto/transactions/smart-transactions/)**: + Smart transaction execution with built-in MEV protection, fewer fails, and better gas where + supported on the target chain. + +Eligible transactions deemed safe are backed by +[Transaction Protection](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) +coverage up to $10,000/month.\* + +:::note + +Learn more in [Architecture](reference/architecture.md). See +[Transaction Shield](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) for +subscription details, eligibility, coverage limits, and terms. + +::: + +## Capabilities + +The `mm` CLI exposes a full command surface for wallet operations. +Your agent routes natural-language requests to these commands through installed skills. + + + +| Area | What your agent can do | +| ------------------------------------------------------------------- | ------------------------------------------------------- | +| [Authentication](quickstart.md) | Sign in, check session, sign out | +| [Wallet](guides/check-balances-and-prices.md) | Create wallet, show address, check balances | +| [Send](guides/send-tokens.md) | Transfer native tokens and ERC-20s | +| [Sign / raw transactions](guides/sign-messages-and-transactions.md) | Sign messages, typed data, and raw EVM transactions | +| [Decode calldata](guides/sign-messages-and-transactions.md) | Inspect unfamiliar EVM calldata before signing | +| [Swap / bridge](guides/swap-and-bridge.md) | Quote, execute, and track swaps and cross-chain bridges | +| [Perpetuals](guides/trade-perpetuals.md) | Trade on Hyperliquid (deposit, open, modify, close) | +| [Prediction markets](guides/trade-prediction-markets.md) | Search, quote, and trade on Polymarket | +| [Market data](guides/check-balances-and-prices.md) | Spot prices, token discovery, supported chains | + + + +See the [commands reference](reference/commands.md) for every flag and subcommand. + +## Supported chains + +MetaMask Agent Wallet supports multiple EVM chains. +Run `mm chains list` for the authoritative list for your CLI version. +See [Supported chains](reference/supported-chains.md) for typical networks. + +## Set up + + diff --git a/agent-wallet/guides/check-balances-and-prices.md b/agent-wallet/guides/check-balances-and-prices.md new file mode 100644 index 00000000000..b6f0cd35af7 --- /dev/null +++ b/agent-wallet/guides/check-balances-and-prices.md @@ -0,0 +1,75 @@ +--- +description: Check wallet balances, token prices, and discover tokens with mm. +keywords: [MetaMask, Agent Wallet, balance, price, market data, mm] +--- + +# Check balances and prices + +Query wallet balances, spot prices, and token metadata without submitting transactions. + +## Ask your agent + +```text +You (to your agent): "What's my USDC balance?" +``` + +```text +You (to your agent): "What's the current price of ETH?" +``` + +```text +You (to your agent): "Show me trending tokens" +``` + +Read-only queries like these do not require confirmation before your agent runs them. + +## Commands + +1. Confirm your wallet address: + + ```bash + mm wallet address + ``` + +2. Query balances, prices, or token lists using the commands in the following sections. + +## Wallet balance + +```bash +mm wallet balance +mm wallet balance --chain 8453 +mm wallet balance --token USDC +``` + +If `--token` with a symbol returns no balance or an error, pass the ERC-20 contract address for that +chain. Run `mm token list search --query --chain ` to look up the address. + +## Spot prices + +```bash +mm price spot --asset-ids --vs USD +mm price currencies +mm price networks +``` + +Use `mm token assets` to resolve asset identifiers for tokens you care about. + +## Token discovery + +```bash +mm token list popular --chain ethereum +mm token list search --query uniswap --chain ethereum +mm token list trending --chain base +mm token networks +``` + +## Supported chains + +```bash +mm chains list +``` + +## Related commands + +See [Commands reference](../reference/commands.md) for `mm wallet balance`, `mm price`, and +`mm token`. diff --git a/agent-wallet/guides/send-tokens.md b/agent-wallet/guides/send-tokens.md new file mode 100644 index 00000000000..23611b89834 --- /dev/null +++ b/agent-wallet/guides/send-tokens.md @@ -0,0 +1,61 @@ +--- +description: Send native tokens or ERC-20 tokens on a single EVM chain with mm transfer. +keywords: [MetaMask, Agent Wallet, transfer, send tokens, mm] +--- + +# Send tokens + +Transfer native currency or ERC-20 tokens to a recipient on one EVM chain. + +## Ask your agent + +```text +You (to your agent): "Send 10 USDC to 0xabc..." +``` + +Your agent confirms the recipient, amount, token, and chain before executing. + +## Prerequisites + +- [Quickstart](../quickstart.md) completed +- Sufficient balance on the source chain for the transfer amount and gas + +## Steps + +1. Confirm your wallet address: + + ```bash + mm wallet address + ``` + +2. Check your balance on the target chain: + + ```bash + mm wallet balance --chain + ``` + +3. Send the transfer: + + ```bash + mm transfer --to
--amount --token --chain-id --wait + ``` + + - `--to`: recipient hex address (`0x…`). ENS names are not supported. + - `--amount`: human-readable amount (for example, `0.5`). + - `--token`: `native`, a token symbol, or an ERC-20 contract address. If a symbol fails to + resolve, run `mm token list search --query --chain ` and pass the contract + address instead. + - `--chain-id`: EVM chain ID (for example, `8453` for Base). Run `mm chains list` for options. + +4. Confirm the transaction hash in the command output. + +## Common pitfalls + +:::note Per-chain balances +`mm transfer` spends from the chain you specify with `--chain-id`. To send on a chain where you do +not currently hold a balance, bridge first with `mm swap execute`, then transfer. +::: + +## Related commands + +See [`mm transfer`](../reference/commands.md#mm-transfer) in the commands reference. diff --git a/agent-wallet/guides/sign-messages-and-transactions.md b/agent-wallet/guides/sign-messages-and-transactions.md new file mode 100644 index 00000000000..b50cf251226 --- /dev/null +++ b/agent-wallet/guides/sign-messages-and-transactions.md @@ -0,0 +1,74 @@ +--- +description: Sign messages, typed data, and submit raw EVM transactions with mm wallet commands. +keywords: [MetaMask, Agent Wallet, sign, EIP-712, transaction, mm] +--- + +# Sign messages and transactions + +Sign plaintext messages, EIP-712 typed data, or submit raw EVM transactions. + +## Ask your agent + +```text +You (to your agent): "Sign this message on Ethereum: Hello, world" +``` + +```text +You (to your agent): "Sign this EIP-712 typed data: " +``` + +Your agent shows the exact payload and asks you to confirm before signing. + +## Prerequisites + +- [Quickstart](../quickstart.md) completed +- Understanding of what you are signing. Review payloads before confirming. + +## Sign a plaintext message + +```bash +mm wallet sign-message --message "" --chain-id [--wait] +``` + +## Sign EIP-712 typed data + +```bash +mm wallet sign-typed-data --chain-id --payload '' [--wait] +``` + +The payload must be valid JSON with `domain`, `types`, `primaryType`, and `message` fields. + +## Send a raw transaction + +If the calldata is unfamiliar, decode it first: + +```bash +mm decode --payload <0x-calldata> +``` + +Then submit the transaction: + +```bash +mm wallet send-transaction --chain-id --payload '' [--wait] +``` + +The payload must include at least a `to` address. See the commands reference for the full schema. +If `mm decode` returns `Call unknown function`, treat the transaction as higher risk and confirm +the payload before signing. + +## Server-wallet polling + +In server-wallet mode, signing commands may return a `pollingId` when `--wait` is omitted. Track +pending requests: + +```bash +mm wallet requests list +mm wallet requests watch --polling-id +``` + +In bring your own wallet mode, results return immediately when the mnemonic is unlocked. + +## Related commands + +See [`mm wallet`](../reference/commands.md#mm-wallet) and [`mm decode`](../reference/commands.md#mm-decode) +in the commands reference. diff --git a/agent-wallet/guides/swap-and-bridge.md b/agent-wallet/guides/swap-and-bridge.md new file mode 100644 index 00000000000..a5be9767cc3 --- /dev/null +++ b/agent-wallet/guides/swap-and-bridge.md @@ -0,0 +1,70 @@ +--- +description: Swap or bridge tokens with mm swap quote and mm swap execute. +keywords: [MetaMask, Agent Wallet, swap, bridge, mm] +--- + +# Swap and bridge tokens + +Get a quote, review the route, and execute a same-chain swap or cross-chain bridge. + +## Ask your agent + +```text +You (to your agent): "Swap 0.1 ETH to USDC" +``` + +For a cross-chain bridge: + +```text +You (to your agent): "Bridge 10 USDC from Base to Arbitrum" +``` + +Your agent fetches a quote, shows you the route and output, then executes after you confirm. + +## Prerequisites + +- [Quickstart](../quickstart.md) completed +- Sufficient balance of the source token on the source chain + +## Same-chain swap + +1. Request a quote: + + ```bash + mm swap quote --from --to --amount --from-chain [--slippage ] + ``` + +2. Review the quoted output, fees, and route in the command output. Note the `quoteId`. + +3. Execute the swap: + + ```bash + mm swap execute --quote-id + ``` + +4. Optionally check status: + + ```bash + mm swap status --quote-id + ``` + +## Cross-chain bridge + +Include `--to-chain` when requesting a quote: + +```bash +mm swap quote --from USDC --to USDC --amount 10 --from-chain 8453 --to-chain 42161 +mm swap execute --quote-id +``` + +## Common pitfalls + +:::caution Verify the quote step succeeded +If `mm swap quote` returns an error or no quote ID, do not call `mm swap execute` with a fabricated +or expired quote ID. The execute step fails and no transaction is submitted, even when partial +output is printed. +::: + +## Related commands + +See [`mm swap`](../reference/commands.md#mm-swap) in the commands reference. diff --git a/agent-wallet/guides/trade-perpetuals.md b/agent-wallet/guides/trade-perpetuals.md new file mode 100644 index 00000000000..1df3a2eedb7 --- /dev/null +++ b/agent-wallet/guides/trade-perpetuals.md @@ -0,0 +1,92 @@ +--- +description: Trade perpetual futures on Hyperliquid with mm perps commands. +keywords: [MetaMask, Agent Wallet, perps, Hyperliquid, mm] +--- + +# Trade perpetuals + + + +Open, modify, and close perpetual positions on Hyperliquid through the `mm perps` commands. + +## Ask your agent + +```text +You (to your agent): "Open a 5x long on BTC with $100 on Hyperliquid" +``` + +```text +You (to your agent): "Close my BTC perp position on Hyperliquid" +``` + +Your agent deposits if needed, fetches a quote, confirms details with you, then executes. + +## Prerequisites + +- [Quickstart](../quickstart.md) completed +- USDC on a supported source chain for the initial deposit + +## First-time setup + +1. List venues: + + ```bash + mm perps list-venues + ``` + +2. Deposit USDC into the venue before your first trade: + + ```bash + mm perps deposit --venue hyperliquid --amount + ``` + +3. Confirm your perpetuals balance: + + ```bash + mm perps balance --venue hyperliquid + ``` + +## Open a position + +1. List markets: + + ```bash + mm perps markets --venue hyperliquid + ``` + +2. Get a quote: + + ```bash + mm perps quote --venue hyperliquid --symbol --side long --size --leverage + ``` + +3. Open the position: + + ```bash + mm perps open --venue hyperliquid --symbol --side long --size --leverage + ``` + + Add `--dry-run` to preview without submitting. Add `--yes` to skip interactive confirmation in + scripted flows. + +## Close or modify a position + +```bash +mm perps close --venue hyperliquid --symbol +mm perps modify --venue hyperliquid --symbol --leverage +``` + +## Common pitfalls + +:::caution Deposit before you trade +The Hyperliquid sub-account is empty on first use. Running `mm perps open` before depositing can +fail with `HYPERLIQUID_ERROR` or `ORDER_REJECTED`. `mm perps deposit` sources USDC from Arbitrum by +default. Deposit with `mm perps deposit --venue hyperliquid --amount ` before opening your first +position. +::: + +## Related commands + +See [`mm perps`](../reference/commands.md#mm-perps) in the commands reference. + + diff --git a/agent-wallet/guides/trade-prediction-markets.md b/agent-wallet/guides/trade-prediction-markets.md new file mode 100644 index 00000000000..3731c81da62 --- /dev/null +++ b/agent-wallet/guides/trade-prediction-markets.md @@ -0,0 +1,103 @@ +--- +description: Trade Polymarket prediction markets with mm predict commands. +keywords: [MetaMask, Agent Wallet, predict, Polymarket, mm] +--- + +# Trade prediction markets + + + +Search markets, fund your predict deposit wallet, and place orders on Polymarket through +`mm predict`. + +## Ask your agent + +```text +You (to your agent): "Bet 10 USDT on YES for BTC 5-min price up" +``` + +```text +You (to your agent): "Show my open prediction market positions" +``` + +Your agent runs one-time setup if needed, shows current odds, confirms your bet, then places the +order. + +## Prerequisites + +- [Quickstart](../quickstart.md) completed +- Polygon USDC.e in your owner EOA for `mm predict deposit` (converts to pUSD in the predict + deposit wallet) + +## First-time setup + +1. Run one-time setup: + + ```bash + mm predict setup --wait + ``` + + If the command returns a job ID instead of completing immediately, track it with + `mm predict watch --wait`. + +2. Fund the predict deposit wallet: + + ```bash + mm predict deposit --amount --wait + ``` + +3. Confirm balance: + + ```bash + mm predict balance --sync + ``` + +## Search and place an order + +1. Search markets: + + ```bash + mm predict markets search "" --limit 5 + ``` + +2. Preview a quote: + + ```bash + mm predict quote --token-id --side buy --size [--limit-price ] + ``` + +3. Inspect a market to get outcome token IDs: + + ```bash + mm predict markets get + ``` + +4. Place the order: + + ```bash + mm predict place --token-id --side buy --size --price [--order-type GTC|GTD|FOK|FAK] + ``` + + `--limit-price` applies to `mm predict quote` only. `mm predict place` requires `--price` + (worst fill price per share, between 0 and 1). + +5. View open orders and positions: + + ```bash + mm predict orders + mm predict positions + ``` + +## Common pitfalls + +:::caution One-time setup is required +Polymarket trading routes through a dedicated predict deposit wallet. Run `mm predict setup` +followed by `mm predict deposit --amount ` before placing your first order. Skipping setup can +produce `JsonRpcError: execution reverted` on deposit. +::: + +## Related commands + +See [`mm predict`](../reference/commands.md#mm-predict) in the commands reference. + + diff --git a/agent-wallet/quickstart.md b/agent-wallet/quickstart.md new file mode 100644 index 00000000000..fd83183151c --- /dev/null +++ b/agent-wallet/quickstart.md @@ -0,0 +1,119 @@ +--- +description: Install the mm CLI, add agent skills, and complete one-time setup through the interactive CLI or your AI agent. +keywords: [MetaMask, Agent Wallet, quickstart, mm, skills, server-wallet] +--- + +# Quickstart + +Install the `mm` CLI and agent skills, then complete one-time setup through the interactive CLI or +by prompting your agent. +After setup, use natural language for day-to-day wallet operations. + +## Prerequisites + +- **Node.js** 22.x or later +- **npm** 10.x or later +- Access to the [Early Access Program](https://metamask.io/agent-wallet) +- An AI agent that supports skills (Claude Code, Codex, Cursor, OpenClaw, Hermes Agent, or similar) + +## 1. Install the CLI + +```bash npm2yarn +npm install -g @metamask/agentic-cli +``` + +## 2. Add skills to your agent + +Skills teach your agent how to route natural-language requests to `mm` commands and follow safety +patterns (confirm before transfers, quote before swaps, and similar rules). + +```bash +npx skills add MetaMask/agent-skills +``` + +When prompted, install `metamask-agent-wallet` for full command routing. +Add `metamask-agent-workflows` if you want multi-step workflow templates. + +## 3. Complete setup + +Use the interactive CLI or ask your agent to walk you through onboarding. + +**Interactive CLI**: run `mm` with no arguments for the REPL, or step through setup: + +```bash +mm login +mm init +mm auth status +``` + +**Through your agent**: prompt in natural language: + +```text +Set up MetaMask Agent Wallet: sign me in, help me pick a wallet mode and trading mode, and show my address. +``` + +Your agent asks which sign-in method, wallet mode, and trading mode you want before running +commands. + +### Sign in + +During `mm login`, choose QR code, Google, or email. +Your sign-in method also determines how you receive 2-factor authentication approvals when a +transaction needs your confirmation. + +| Sign-in method | 2FA delivery | +| --------------- | ----------------------------------- | +| QR code | MetaMask Mobile push notification | +| Google or email | Email link with transaction details | + +:::info QR code sign-in + +Sign in with MetaMask Mobile by scanning the QR code the CLI displays. +The CLI and your agent can access only the dedicated Agent Wallet created for this setup, not your +main MetaMask wallet or its accounts. +When a transaction needs approval, you receive a 2-factor authentication prompt in MetaMask Mobile. + +::: + +### Initialize wallet + +During `mm init`, choose a wallet mode and, for server-wallet, a trading mode. + +#### Wallet mode (choose one) + +- **Server wallet**: keys are managed and secured server-side in a TEE, so agents can't access your + main wallet. Signing uses an asynchronous model; long-running operations return a `pollingId` unless + you pass `--wait`. +- **Bring your own wallet**: you supply a BIP-39 mnemonic. Keys stay under your local control and + operations return immediately. + +#### Trading mode (server wallet only): + +- **Guard Mode (Recommended)**: designed for everyday traders. Enforces threat scanning, network + and recipient allowlists, address allowlists, and a rolling 24-hour outflow limit. Transactions + outside your policy limits require 2-factor authentication before they execute. +- **Beast Mode**: designed for power users. Keeps the threat scanning guardrail only. Malicious + transactions and risky contracts are blocked and surfaced for 2-factor authentication approval. + +See [Trading modes](reference/architecture.md#trading-modes) for guardrails and approval conditions. + +Confirm your choices with `mm init show`. + +For headless or CI environments, see [Use the CLI directly](use-the-cli-directly.md). + +## 4. Transfer funds and verify + +Fund the address shown by your agent or by `mm wallet address`. + +Verify with a natural-language prompt: + +```text +What's my wallet address and balance? +``` + +Your agent checks auth and queries balances before you send transactions. + +## Next steps + +- [Send tokens](guides/send-tokens.md) +- [Architecture](reference/architecture.md) diff --git a/agent-wallet/reference/architecture.md b/agent-wallet/reference/architecture.md new file mode 100644 index 00000000000..94f87ca3ba3 --- /dev/null +++ b/agent-wallet/reference/architecture.md @@ -0,0 +1,174 @@ +--- +description: How the mm CLI, wallet modes, security stack, and server-wallet async model work together. +keywords: + [ + MetaMask, + Agent Wallet, + architecture, + security, + server-wallet, + polling, + Transaction Protection, + threat scanning, + Smart Transactions, + 2FA, + ] +--- + +# Architecture + +MetaMask Agent Wallet exposes wallet operations through the `mm` CLI, backed by the +`@metamask/agentic-sdk` package. +Security is applied by default on every signing and transaction path, backed by Transaction +Protection. + +Transactions through Agent Wallet deemed safe are guaranteed against loss up to $10,000.\* +See [Transaction Shield](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) +for eligibility, coverage limits, and terms. + +## CLI and session + +- Install `@metamask/agentic-cli` to get the `mm` binary. +- Session data is stored at `~/.metamask/session.json` with restricted file permissions. +- Wallet metadata is stored at `~/.metamask/wallets.json`. Predict state is stored at + `~/.metamask/predict.json`. +- Run `mm reset` to clear local session state. + +## Wallet modes + +Choose a wallet mode during `mm init`. +The CLI prompts interactively when you omit `--wallet`. + +### Server-wallet + +Keys are managed and secured server-side in a trusted execution environment (TEE), so agents can't access your main wallet. You retain self-custody. + +Signing and transaction operations use an asynchronous model. +Long-running operations return a `pollingId` unless you pass `--wait`. + +### Bring your own wallet + +You supply a BIP-39 mnemonic. +Useful when you need local key control or an existing seed phrase. +Operation results return immediately. + +Never pass `--mnemonic` on the command line. +Set the `MM_MNEMONIC` environment variable instead. +Optionally encrypt the mnemonic at rest with `MM_PASSWORD` or `mm wallet password set`. + +## Transaction simulation + +Before a transaction executes, the CLI simulates it to surface reverts, unexpected state changes, +and other failures early. + +## Threat scanning + +Threat scanning is powered by Blockaid and production-tested across millions of MetaMask +transactions. +Malicious transactions get auto-bounced. +When a transaction is flagged, it requires your approval before it executes. +You receive details in the CLI output and through the approval flow. + +## Transaction Protection + +Eligible transactions deemed safe are backed by Transaction Protection coverage up to +$10,000/month. +[Transaction Shield](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) is +MetaMask's subscription that pairs Transaction Protection with priority support. +See [Transaction Shield](https://support.metamask.io/manage-crypto/transactions/transaction-shield/) +for subscription details, eligibility, coverage limits, and terms. + +## Smart Transactions + +[Smart Transactions](https://support.metamask.io/manage-crypto/transactions/smart-transactions/) +optimize how your trades land onchain with fewer fails, better gas, and built-in MEV protection +where supported on the target chain. + +## Trading modes + +Trading modes apply to server-wallet only. +During `mm init`, you set outflow limits and allowlists, then choose a trading mode that defines how +those policies are enforced. +Choose during `mm init` with `--mode` or at the interactive prompt. + +| Mode | CLI flag | Summary | +| ------------------------ | -------------- | --------------------------------------------------------------------------------------------------------------------- | +| Guard Mode (Recommended) | `--mode guard` | Designed for everyday traders. Transactions outside your policy limits require 2-factor authentication approval. | +| Beast Mode | `--mode beast` | Designed for power users. Malicious transactions are still blocked and surfaced for 2-factor authentication approval. | + +### Guard Mode (Recommended) + +Designed for everyday traders. +Transactions outside your policy limits require 2-factor authentication approval. + +**Guardrails** + +- Threat scanning +- Network allowlist +- Token recipient allowlist +- Address allowlist +- Outflow limit (rolling 24h) + +**Approval required for** + +- Malicious transactions +- Addresses or contracts not in allowlist +- Networks not in allowlist +- Recipients not in allowlist +- Raising outflow limit + +### Beast Mode + +Designed for power users. +Malicious transactions are still blocked and surfaced for 2-factor authentication approval. + +**Guardrails** + +- Threat scanning + +**Approval required for** + +- Malicious transactions +- Risky contracts + +When 2-factor authentication is required, the CLI pauses the job until you approve or reject it. +Your sign-in method during `mm login` determines which channel the CLI uses: + +| Sign-in method | Approval channel | +| --------------- | ----------------------------------- | +| QR code | MetaMask Mobile push notification | +| Google or email | Email link with transaction details | + +The agent cannot proceed without your approval on flagged or policy-violating transactions. + +Switch modes by re-running `mm init` with a different `--mode` value. +Confirm the active configuration with `mm init show`. +See [Trading modes](../use-the-cli-directly.md#trading-modes-server-wallet-only). + +## Server-wallet async model + +When you submit a signing or transaction request in server-wallet mode: + +1. The CLI submits the request to the wallet service. +2. The service may simulate the transaction, run threat scanning, and evaluate policies. +3. If policy requires 2-factor authentication or threat scanning flags the transaction, the job + enters an `AWAITING_MFA` state until you approve via MetaMask Mobile or email. +4. The CLI returns a `pollingId` unless you pass `--wait`. + +Track pending work: + +```bash +mm wallet requests list +mm wallet requests watch --polling-id +``` + +## REPL vs headless + +- **REPL**: Run `mm` with no arguments on a TTY for an interactive shell. +- **Headless**: Pass flags explicitly or use `--format json` for machine-readable output in scripts + and agents. + +## Next steps + +- [Quickstart](../quickstart.md) +- [CLI commands](commands.md) diff --git a/agent-wallet/reference/commands.md b/agent-wallet/reference/commands.md new file mode 100644 index 00000000000..18ff9c0ab94 --- /dev/null +++ b/agent-wallet/reference/commands.md @@ -0,0 +1,279 @@ +--- +description: Complete reference for all mm CLI commands and global flags. +keywords: [MetaMask, Agent Wallet, CLI, reference, mm] +--- + +# Commands reference + +All `mm` commands accept global flags unless noted. + +## Global flags + +| Flag | Short | Description | +| ----------- | ----- | -------------------------------------------------------- | +| `--format` | `-f` | Output format: `text`, `json`, `yaml`, `toml`, or `toon` | +| `--json` | | Shorthand for `--format=json` | +| `--toon` | | Shorthand for `--format=toon` | +| `--verbose` | `-v` | Show debug logs on standard error | + +## `mm init` + +Initialize wallet mode and trading mode. + +```bash +mm init [--wallet server-wallet|byok] [--mode guard|beast] +mm init show +``` + +| Flag | Required | Description | +| ------------ | -------- | ------------------------------------------------------------------------- | +| `--wallet` | No | `server-wallet` or `byok` | +| `--mode` | No | `guard` (recommended) or `beast` (server-wallet only) | +| `--mnemonic` | No | Bring your own wallet only. Prefer the `MM_MNEMONIC` environment variable | + +Environment variables: `MM_MNEMONIC`, `MM_PASSWORD` (bring your own wallet encryption). + +## `mm login` + +Sign in to MetaMask Agent Wallet. + +```bash +mm login [qr | google | email] [--token ] [--no-wait] +mm login qr +mm login google [--no-wait] +mm login email [--no-wait] +``` + +| Flag | Required | Description | +| ----------- | -------- | ------------------------------------------------------------------------------------ | +| `--token` | No | Pre-minted token as `cliToken:cliRefreshToken`. Environment variable: `MM_CLI_TOKEN` | +| `--no-wait` | No | Print sign-in URL and exit (not supported for QR) | + +## `mm auth status` + +Check authentication status. No additional flags beyond global flags. + +## `mm logout` + +Sign out and revoke the CLI session. + +## `mm reset` + +Clear local session and wallet state files. + +## `mm chains list` + +List supported EVM networks. No auth required. + +## `mm wallet` + +Wallet lifecycle and signing commands. + +### `mm wallet create` + +```bash +mm wallet create [--chain-namespace ] [--name ] +``` + +### `mm wallet list` + +```bash +mm wallet list [--chain-namespace ] +``` + +### `mm wallet select` + +```bash +mm wallet select [--chain-namespace ] [--id ] [--address
] [--name ] +``` + +### `mm wallet show` + +```bash +mm wallet show [--chain-namespace ] [--id ] [--address
] [--name ] +``` + +### `mm wallet address` + +```bash +mm wallet address [--chain-namespace ] +``` + +### `mm wallet balance` + +```bash +mm wallet balance [--currency ] [--chain ] [--token ] [--address
] +``` + +### `mm wallet sign-message` + +```bash +mm wallet sign-message --message --chain-id [--wait] +``` + +### `mm wallet sign-typed-data` + +```bash +mm wallet sign-typed-data --chain-id --payload '' [--wait] +``` + +### `mm wallet send-transaction` + +```bash +mm wallet send-transaction --chain-id --payload '' [--wait] +``` + +### `mm wallet requests list` + +List pending server-wallet requests. Server-wallet mode only. + +### `mm wallet requests watch` + +```bash +mm wallet requests watch --polling-id +``` + +### `mm wallet password` + +```bash +mm wallet password set --new= +mm wallet password change --current= --new= +mm wallet password remove --current= +``` + +## `mm transfer` + +Send native currency or ERC-20 tokens on one EVM chain. + +```bash +mm transfer --to
--amount --chain-id --token [--wait] +``` + +| Flag | Required | Description | +| ------------ | -------- | ---------------------------------------- | +| `--to` | Yes | Recipient hex address. ENS not supported | +| `--amount` | Yes | Human-readable amount | +| `--chain-id` | Yes | EVM chain ID | +| `--token` | Yes | `native`, symbol, or ERC-20 address | +| `--wait` | No | Block until complete (server-wallet) | + +## `mm swap` + +### `mm swap quote` + +```bash +mm swap quote --from --to --amount --from-chain [--to-chain ] [--slippage ] +``` + +### `mm swap execute` + +```bash +mm swap execute --quote-id +mm swap execute --from --to --amount --from-chain [--to-chain ] [--slippage ] +``` + +### `mm swap status` + +```bash +mm swap status --quote-id [--tx-hash ] +``` + +## `mm perps` + + + +Hyperliquid perpetuals commands. Most commands require `--venue hyperliquid`. + +| Command | Usage summary | +| ---------------------- | ----------------------------------------------------------------------------------- | +| `mm perps list-venues` | List supported venues | +| `mm perps dexs` | `--venue `: list HIP-3 DEX identifiers (Hyperliquid) | +| `mm perps markets` | `--venue [--symbol ]` | +| `mm perps balance` | `--venue ` | +| `mm perps positions` | `--venue ` | +| `mm perps orders` | `--venue ` | +| `mm perps quote` | Quote before open | +| `mm perps open` | `--venue --symbol --side long\|short --size --leverage ` | +| `mm perps close` | Close a position | +| `mm perps modify` | Modify leverage or TP/SL | +| `mm perps cancel` | `--venue --order-id ` | +| `mm perps deposit` | `--venue --amount ` | +| `mm perps withdraw` | Withdraw from venue | +| `mm perps transfer` | Transfer between spot and perpetual accounts | + + + +## `mm predict` + + + +Polymarket prediction market commands. + +| Command | Description | +| --------------------------- | -------------------------------------------- | +| `mm predict setup` | One-time predict setup | +| `mm predict deposit` | Fund predict deposit wallet | +| `mm predict balance` | Check predict balance | +| `mm predict mode` | Set `mainnet` or `testnet` | +| `mm predict auth` | Refresh predict credentials | +| `mm predict approve` | Repair approvals | +| `mm predict status` | Backend status | +| `mm predict markets search` | Search markets | +| `mm predict markets list` | List markets with filters | +| `mm predict markets get` | Inspect a market (slug, ID, or condition ID) | +| `mm predict quote` | Preview order cost | +| `mm predict place` | Place an order | +| `mm predict cancel` | Cancel orders | +| `mm predict orders` | List open orders | +| `mm predict positions` | View positions | +| `mm predict withdraw` | Withdraw pUSD from deposit wallet | +| `mm predict book` | Order book for a token | +| `mm predict watch` | Watch a predict job | +| `mm predict geoblock` | Check Polymarket geoblock for your IP | + + + +Run `mm predict --help` for command-specific flags. + +## `mm decode` + +Decode hex-encoded EVM calldata into a function name, parameters, and a plain-language summary. +Use before signing unfamiliar raw transactions. + +```bash +mm decode --payload <0x-calldata> +mm decode <0x-calldata> +``` + +| Flag | Required | Description | +| ----------- | -------- | -------------------------------------- | +| `--payload` | Yes | Hex-encoded calldata (also positional) | + +## `mm price` + +| Command | Usage | +| --------------------- | ----------------------------------------------------- | +| `mm price spot` | `--asset-ids [--vs ] [--market-data]` | +| `mm price history` | Historical prices | +| `mm price currencies` | Supported quote currencies | +| `mm price networks` | Supported price networks | + +## `mm token` + +| Command | Usage | +| -------------------------- | ------------------------------------ | +| `mm token assets` | `--asset-ids ` | +| `mm token networks` | List token networks | +| `mm token list popular` | `--chain ` | +| `mm token list trending` | `--chain ` | +| `mm token list search` | `--query [--chain ]` | +| `mm token list top-gainer` | `--chain ` | + +## Help + +Every command supports `--help`: + +```bash +mm transfer --help +mm perps open --help +``` diff --git a/agent-wallet/reference/error-codes.md b/agent-wallet/reference/error-codes.md new file mode 100644 index 00000000000..34e2ea5844e --- /dev/null +++ b/agent-wallet/reference/error-codes.md @@ -0,0 +1,97 @@ +--- +description: CLI error codes returned by mm and MetaMask Agent Wallet. +keywords: [MetaMask, Agent Wallet, errors, mm] +--- + +# Error codes + +The `mm` CLI surfaces errors with stable `code` values. Use these codes in scripts and agent +workflows to branch on failures. + +Run `mm --help` for command-specific validation rules. + +## Authentication errors (`AuthError`) + +| Code | Meaning | +| ---------------------- | ---------------------------------------------------------- | +| `AUTH_FAILED` | Authentication failed (includes missing refresh token) | +| `AUTH_ERROR` | Generic authentication error | +| `TOKEN_INVALID` | Invalid CLI token, token pair, or project ID | +| `TOKEN_REFRESH_FAILED` | Failed to refresh token | +| `PAIRING_EXPIRED` | Pairing session expired | +| `INVALID_OTP` | Invalid one-time password | +| `MWP_TIMEOUT` | Mobile Wallet Protocol timeout | +| `MWP_CANCELLED` | Mobile Wallet Protocol cancelled (pairing aborted) | +| `LOGOUT_FAILED` | Sign-out operation failed (includes token revoke failures) | + +## Validation errors (`ValidationError`) + +| Code | Meaning | +| ----------------------------- | ---------------------------------------------------- | +| `MISSING_FLAG` | Required flag missing in headless mode | +| `MISSING_INPUT` | Required input is missing | +| `MISSING_CHAIN` | Chain value is missing | +| `MISSING_CHAIN_ID` | `--chain-id` is missing | +| `INVALID_CHAIN` | Chain value is invalid | +| `INVALID_INPUT` | Invalid user input | +| `INVALID_TO` | Recipient address is invalid | +| `INVALID_TYPED_DATA` | EIP-712 payload is invalid | +| `INVALID_TRANSACTION_PAYLOAD` | Transaction payload is invalid | +| `CHAIN_ID_MISMATCH` | Typed-data domain chain ID differs from `--chain-id` | +| `INVALID_MNEMONIC` | Bring your own wallet mnemonic is invalid | + +## Wallet errors (`WalletError`) + +| Code | Meaning | +| ------------------ | ------------------------------------------------ | +| `MISSING_MNEMONIC` | Bring your own wallet mode is missing a mnemonic | +| `MNEMONIC_LOCKED` | Mnemonic is password-protected | +| `WRONG_PASSWORD` | Mnemonic password is incorrect | +| `WALLET_NOT_FOUND` | Wallet not found | +| `WALLET_ERROR` | Wallet operation failed | +| `NO_AUTH_TOKEN` | Missing authentication token | +| `NO_PROJECT_ID` | Project ID not configured | + +## Swap errors (`SwapCommandError`) + +| Code | Meaning | +| --------------------- | --------------------------------------- | +| `NO_QUOTES` | No swap quotes returned for the request | +| `INVALID_SWAP_PARAMS` | Missing or invalid swap parameters | +| `TOKEN_NOT_FOUND` | Token not found for the selected chain | +| `QUOTE_NOT_FOUND` | Quote ID not found | +| `NO_TRADE_DATA` | Selected quote has no trade transaction | +| `EXECUTE_FAILED` | Swap execution failed | +| `STATUS_UNAVAILABLE` | Swap status unavailable | +| `SWAP_ERROR` | Generic swap error | + +## Perpetuals errors + + + +Common Hyperliquid failures include `ORDER_REJECTED`, `DEPOSIT_FAILED`, `INSUFFICIENT_BALANCE`, and +`HYPERLIQUID_ERROR` when the venue sub-account has not been funded. See +[Trade perpetuals](../guides/trade-perpetuals.md). + + + +## Predict errors + +| Code | Meaning | +| -------------------------------------- | -------------------------------------------- | +| `PREDICT_SETUP_REQUIRED` | Run `mm predict setup` before this operation | +| `PREDICT_AUTH_REQUIRED` | Predict credentials missing or expired | +| `PREDICT_INSUFFICIENT_BALANCE` | Insufficient pUSD in the deposit wallet | +| `PREDICT_INSUFFICIENT_FUNDING_BALANCE` | Insufficient USDC.e for `mm predict deposit` | +| `PREDICT_ERROR` | Generic predict error | + +## Network errors + +| Code | Meaning | +| --------------------- | ------------------- | +| `NETWORK_UNREACHABLE` | Network unreachable | + +## Related pages + +- [Troubleshooting](../troubleshooting.md) +- [Commands reference](commands.md) diff --git a/agent-wallet/reference/supported-chains.md b/agent-wallet/reference/supported-chains.md new file mode 100644 index 00000000000..f4c9bded7ca --- /dev/null +++ b/agent-wallet/reference/supported-chains.md @@ -0,0 +1,53 @@ +--- +description: Supported EVM chains for MetaMask Agent Wallet. +keywords: [MetaMask, Agent Wallet, chains, networks, EVM] +--- + +# Supported chains + +MetaMask Agent Wallet supports all EVM chains. +The authoritative list of preconfigured networks is the output of `mm chains list`. + +## List supported chains + +```bash +mm chains list +``` + +For machine-readable output: + +```bash +mm chains list --json +``` + +## Product coverage + +Agent Wallet supports all EVM-compatible chains. +Pass any EIP-155 chain ID to `--chain-id` for signing, transfers, balances, and other wallet +operations. + +The tables below list every network from `mm chains list`. +Availability varies by CLI version. +Always confirm with `mm chains list` before scripting against a specific network. + +| Network | Mainnet chain ID | Testnet | Testnet chain ID | +| ------------ | ---------------- | ---------------- | ---------------- | +| Arbitrum One | `42161` | Arbitrum Sepolia | `421614` | +| Avalanche | `43114` | Avalanche Fuji | `43113` | +| Base | `8453` | Base Sepolia | `84532` | +| BSC | `56` | BSC Testnet | `97` | +| Ethereum | `1` | Sepolia | `11155111` | +| Linea | `59144` | Linea Sepolia | `59141` | +| Optimism | `10` | Optimism Sepolia | `11155420` | +| Polygon | `137` | Polygon Amoy | `80002` | +| Celo | `42220` | | | + +## Per-chain balances + +Wallet balances and transfers are scoped to the chain you specify with `--chain-id`. +Fund each chain separately, or bridge with `mm swap execute` before transferring. + +## Related commands + +- [`mm chains list`](commands.md#mm-chains-list) +- [Send tokens](../guides/send-tokens.md) diff --git a/agent-wallet/troubleshooting.md b/agent-wallet/troubleshooting.md new file mode 100644 index 00000000000..bd8575f6447 --- /dev/null +++ b/agent-wallet/troubleshooting.md @@ -0,0 +1,104 @@ +--- +description: Diagnose and fix common mm CLI issues. +keywords: [MetaMask, Agent Wallet, troubleshooting, mm] +--- + +# Troubleshooting + +Symptom-first fixes for common `mm` CLI issues. + +## Authentication and access + +### `AUTH_FAILED`, `TOKEN_INVALID`, or `TOKEN_REFRESH_FAILED` + +Sign in again: + +```bash +mm login +mm auth status +``` + +For CI or headless agents, use `mm login --token ""`. + +### Early Access required + +If commands fail with authorization errors after sign-in, confirm your account has Early Access at +[MetaMask Agent Wallet Early Access](https://metamask.io/agent-wallet). + +### Reset local session + +```bash +mm reset +mm login +mm init --wallet server-wallet --mode guard +``` + +## Perpetuals + +### `HYPERLIQUID_ERROR` or `ORDER_REJECTED` on first perpetuals trade + +Deposit USDC from Arbitrum before opening a position: + +```bash +mm perps deposit --venue hyperliquid --amount +mm perps balance --venue hyperliquid +``` + +See [Trade perpetuals](guides/trade-perpetuals.md). + +## Prediction markets + +### `JsonRpcError: execution reverted` on predict deposit + +Run setup and fund the predict wallet with Polygon USDC.e: + +```bash +mm predict setup --wait +mm predict deposit --amount --wait +``` + +See [Trade prediction markets](guides/trade-prediction-markets.md). + +## Swaps + +### `NO_QUOTES` or no quote ID from `mm swap quote` + +Liquidity may be unavailable for the token pair or chain. Do not call `mm swap execute` without a +valid `quoteId` from a successful quote step. + +### Swap execute fails after a quote + +Re-run `mm swap quote` and execute immediately. Quotes can expire. + +## Transfers + +### Insufficient balance on the target chain + +`mm transfer` only spends balances on the chain specified by `--chain-id`. Bridge tokens with +`mm swap execute` first. + +### ENS names not resolving + +ENS is not supported for `--to`. Use a hex address. + +## Server-wallet polling + +### Command returned a `pollingId` but no hash + +Use `--wait` on signing and transfer commands, or watch the job: + +```bash +mm wallet requests watch --polling-id +``` + +See [Architecture](reference/architecture.md). + +## 2FA approval pending + +If a job status is `AWAITING_MFA`, approve or reject the transaction in MetaMask Mobile or through +the email approval link. + +## Related pages + +- [Error codes](reference/error-codes.md) +- [Commands reference](reference/commands.md) diff --git a/agent-wallet/use-the-cli-directly.md b/agent-wallet/use-the-cli-directly.md new file mode 100644 index 00000000000..c71cda5b675 --- /dev/null +++ b/agent-wallet/use-the-cli-directly.md @@ -0,0 +1,135 @@ +--- +description: Run mm CLI commands directly without an AI agent for testing, scripting, or CI. +keywords: [MetaMask, Agent Wallet, mm, CLI, headless] +--- + +# Use the CLI directly + +Run `mm` commands yourself when you are testing, scripting, or operating in CI without an AI agent. +For day-to-day use, prefer [Quickstart](quickstart.md) and prompt your agent in natural language. + +## Prerequisites + +- [Quickstart](quickstart.md) completed (CLI installed and signed in) +- An Early Access invite from [MetaMask Agent Wallet Early Access](https://metamask.io/agent-wallet) + +## 1. Install the CLI + +```bash npm2yarn +npm install -g @metamask/agentic-cli +``` + +## 2. Sign in + +```bash +mm login +mm auth status +``` + +During `mm login`, choose QR code, Google, or email. +Your sign-in method also determines how you receive 2FA approvals when a transaction needs your +confirmation: + +| Sign-in method | 2FA delivery | +| --------------- | ----------------------------------- | +| QR code | MetaMask Mobile push notification | +| Google or email | Email link with transaction details | + +For headless or CI environments: + +```bash +mm login google --no-wait +mm login --token "" +``` + +## 3. Initialize wallet + +Run `mm init` and follow the prompts to choose wallet mode and trading mode, or pass flags +explicitly. + +### Wallet modes + +#### Server wallet + +Keys are managed and secured server-side in a trusted execution environment (TEE), so agents can't +access your main wallet. +You retain self-custody. + +```bash +mm init --wallet server-wallet --mode guard +``` + +#### Bring your own wallet + +You supply a BIP-39 mnemonic. +Useful when you need local key control or an existing seed phrase. + +```bash +export MM_MNEMONIC="word1 word2 ..." +mm init --wallet byok +``` + +Optionally encrypt the mnemonic at rest with `mm wallet password set`. + +### Trading modes (server wallet only) + +| Mode | CLI flag | Summary | +| ------------------------ | -------------- | ------------------------------------------------------------------------------------------------- | +| Guard Mode (Recommended) | `--mode guard` | Designed for everyday traders. Transactions outside your policy limits require 2FA approval. | +| Beast Mode | `--mode beast` | Designed for power users. Malicious transactions are still blocked and surfaced for 2FA approval. | + +Guard Mode enforces threat scanning, network and recipient allowlists, address allowlists, and a +rolling 24-hour outflow limit. +2FA is required for malicious transactions, allowlist violations, and raising your outflow limit. + +Beast Mode keeps only the threat scanning guardrail. +2FA is required for malicious transactions and risky contracts. + +See [Trading modes](reference/architecture.md#trading-modes) for the full guardrail and approval +lists. + +Switch modes by re-running `mm init` with a different `--mode` value. + +### View current settings + +```bash +mm init show +``` + +## 4. Transfer funds and verify + +Get your Agent Wallet address: + +```bash +mm wallet address +``` + +Transfer funds to this address on the chain you plan to use (from another wallet or exchange). + +Verify the deposit: + +```bash +mm wallet balance --chain +``` + +Confirm your balance before you send transactions from this wallet. + +## 5. Send your first transfer + +```bash +mm transfer --to
--amount 0.001 --token native --chain-id 8453 --wait +``` + +## Machine-readable output + +Pass `--format json` or `--json` for scripts and automation: + +```bash +mm wallet balance --chain 8453 --json +mm auth status --json +``` + +## Next steps + +- [Commands reference](reference/commands.md) +- [Troubleshooting](troubleshooting.md) diff --git a/babel.config.js b/babel.config.js index bfd75dbdfc7..67526481891 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: [require.resolve("@docusaurus/core/lib/babel/preset")], -}; + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +} diff --git a/dashboard-sidebar.js b/dashboard-sidebar.js index 71f8f72d350..9d628f57b9a 100644 --- a/dashboard-sidebar.js +++ b/dashboard-sidebar.js @@ -1,21 +1,19 @@ const sidebar = { dashboardSidebar: [ - "index", + 'index', { - type: "category", - label: "Get started", - link: { type: "generated-index", slug: "/get-started" }, + type: 'category', + label: 'Get started', collapsed: false, - items: [{ type: "autogenerated", dirName: "get-started" }], + items: [{ type: 'autogenerated', dirName: 'get-started' }], }, { - type: "category", - label: "How to", - link: { type: "generated-index", slug: "/how-to" }, + type: 'category', + label: 'How to', collapsed: false, - items: [{ type: "autogenerated", dirName: "how-to" }], + items: [{ type: 'autogenerated', dirName: 'how-to' }], }, ], -}; +} -module.exports = sidebar; +module.exports = sidebar diff --git a/developer-tools/dashboard/get-started/create-api.md b/developer-tools/dashboard/get-started/create-api.md index 9d9e6524452..e68fa6764c5 100644 --- a/developer-tools/dashboard/get-started/create-api.md +++ b/developer-tools/dashboard/get-started/create-api.md @@ -7,47 +7,37 @@ sidebar_position: 2 :::important API key restrictions -Based on your plan, Infura allows for the following amount of API keys: +Based on your plan, Infura allows for the following number of API keys: - Free plan - Allows one API key. - Developer plan - Allows up to five API keys. - Team plans and higher - No limit on the number of API keys. -For more information, see to the [Infura pricing page](https://www.infura.io/pricing). +For more information, see the [Infura pricing page](https://www.infura.io/pricing). ::: Infura allows you to enable multiple network endpoints and expansion APIs for your API key. If calls are made to a disabled network or service, then all requests to that network or service will fail. -To keep your account secure and cost effective, add only the necessary endpoints, as some have usage limits or charges based -on request volume. +To keep your account secure and cost-effective, add only the necessary endpoints, as some have usage +limits or charges based on request volume. To create an API key: -1. Open the [Infura dashboard](https://infura.io/dashboard). Enter your login details, if required. -1. Select **CREATE NEW API KEY**. - -
-
- -
-
- -1. From the pop-up window, provide a name, then click **CREATE**. +1. Open the [MetaMask Developer dashboard](https://infura.io/dashboard). Enter your login details, if required. +1. In the top right corner, select **Create new API key**. +1. From the pop-up window, provide a name, then click **Create**. 1. Select the networks that you want your API key to access, and select **Save Changes**. -You can [configure additional security](../how-to/secure-an-api/api-key-secret.md) for your API key by requiring an API key secret or JWTs with -each API request. +You can [configure additional security](../how-to/secure-an-api/api-key-secret.md) for your API key by +requiring an API key secret or JWTs with each API request. ## Best practices for configuring API key endpoints We recommend the following best practices when creating your API keys: -- Group API key endpoints by environment. For example, create seperate API keys for production or development environments. -- Group API key endpoints by groups or individuals [sharing the API key](../how-to/project-sharing.md). +- Group API key endpoints by environment. For example, create separate API keys for production or development environments. - Limit the number of networks or services per API key only to the necessary endpoints. - Group the API key endpoints based on shared security considerations such as [allowlists](../how-to/secure-an-api/use-an-allowlist.md) or diff --git a/developer-tools/dashboard/how-to/credit-usage.md b/developer-tools/dashboard/how-to/credit-usage.md index 343fe351cdd..465d3ba9f6a 100644 --- a/developer-tools/dashboard/how-to/credit-usage.md +++ b/developer-tools/dashboard/how-to/credit-usage.md @@ -4,19 +4,10 @@ description: View your Infura credit usage stats. # View credit usage -:::info - -The [credit pricing model](/services/get-started/pricing) replaces request-based billing for free-tier (Core) -customers. Customers on Developer and Team plans will be transitioned to the credit model on -September 30, 2024. - -**Existing customers on Growth and Custom plans will remain on request-based billing**. -::: - You can view your daily credit usage in relation to your daily credit quota limit. Daily credit usage -counts are reset everyday at 00:00 UTC for all customers. +counts are reset every day at 00:00 UTC for all customers. -Select **View Usage** from the **Daily Credit Usage** section on the Infura dashboard, or select +Select **View Usage** from the **Daily Credit Usage** section on the dashboard, or select the **Usage** tab from the **Settings** > **Billing** dropdown. View your usage for the previous 24 hours, 7 days, or 30 days by methods used, networks, or API key. @@ -27,5 +18,4 @@ View your usage for the previous 24 hours, 7 days, or 30 days by methods used, n src={require('../../images/credit-usage.png').default} /> - - + diff --git a/developer-tools/dashboard/how-to/dashboard-stats.md b/developer-tools/dashboard/how-to/dashboard-stats.md index 1a4405ffecd..c80f46de28d 100644 --- a/developer-tools/dashboard/how-to/dashboard-stats.md +++ b/developer-tools/dashboard/how-to/dashboard-stats.md @@ -11,7 +11,7 @@ This data is crucial for optimizing your applications and ensuring they run smoo ## Specify stats to view -1. In the top menu of the [Infura dashboard](https://app.infura.io/), select **Stats**. +1. In the left menu of the [Infura dashboard](https://app.infura.io/), select **Stats**. The stats page displays the total volume of requests sent to Infura over the specified time period. By default, data is shown from the last 24 hours from all Web3 API keys. @@ -20,14 +20,13 @@ This data is crucial for optimizing your applications and ensuring they run smoo 3. To change the stats time range, make a selection from the time dropdown. Time values are given in Coordinated Universal Time (UTC). For Web3 API usage, you can choose from the following options: - - **Last 15 Minutes** - The last completed 15 minutes. This updates once a minute. - **Last 1 Hour** - The last fully completed hour, from 0 to 59 minutes and 59 seconds. - **Last 24 Hours** - The last fully completed 24 consecutive hours. This is the default. - **Last 7 Days** - The last fully completed seven consecutive days. - A day appears once it has completed. + A day appears once it has been completed. - **Last 30 Days** - The last fully completed 30 days. A day appears once it has completed. @@ -40,13 +39,13 @@ You can view your Web3 API usage stats in the following charts and tables. ### Requests Volume chart -This chart displays the total volume of requests sent to Infura using the selected API key(s) over +This chart displays the total volume of requests sent to Infura using the selected API keys over the selected time period. ### Product Request Volumes This chart displays the aggregate request volumes for the top five API methods called using the -selected API key(s) over the selected time period. +selected API keys over the selected time period. To view stats for a particular product (network) instead of the default of all products, make a selection from the products dropdown. This change will impact what API methods are displayed in the @@ -55,14 +54,14 @@ This change will impact what API methods are displayed in the ### Method Request Volumes This chart displays the aggregate request volumes for requests made on the top five networks using -the selected API key(s) over the selected time period. +the selected API keys over the selected time period. To view stats for a particular method instead of the default of all methods, make a selection from the methods dropdown. ### Requests Activity This table displays the total request volumes and successful and failed requests, based on each -product (network) and method called using the selected API key(s) over the selected time period. +product (network) and method called using the selected API keys over the selected time period. For more details about the failure status codes, select the two diagonal arrows to the right of the **FAILED REQUESTS (%)** values. @@ -72,7 +71,7 @@ requests, grouped by the returned status codes. ### Eth_call activity This table displays the activities made on the `eth_call` method, including contract addresses that -interacted with the selected API key(s). +interacted with the selected API keys. This table only shows the `eth_call` activity for the last 30 minutes, and is not impacted by any time period selection. @@ -85,15 +84,15 @@ You can view your IPFS usage stats in the following charts. ### Data Transfer Up -This chart displays the amount of data sent to the IPFS service using the selected API key(s) over +This chart displays the amount of data sent to the IPFS service using the selected API keys over the selected time period. ### Data Transfer Down -This chart displays the amount of data retrieved from the IPFS service using the selected API key(s) +This chart displays the amount of data retrieved from the IPFS service using the selected API keys over the selected time period. ### Total Storage -This chart displays the total amount of data stored by the selected API key(s) over the selected +This chart displays the total amount of data stored by the selected API keys over the selected time period. diff --git a/developer-tools/dashboard/how-to/network-status.md b/developer-tools/dashboard/how-to/network-status.md index afe49e8d920..94e3ff95b70 100644 --- a/developer-tools/dashboard/how-to/network-status.md +++ b/developer-tools/dashboard/how-to/network-status.md @@ -5,15 +5,11 @@ sidebar_position: 8 # View the network status -View the [Infura status page](https://status.infura.io/) to check for service outages and other incidents, as well as +View the [Infura status page](https://status.infura.io/) to check for service outages, incidents, and scheduled maintenance notices. You can also subscribe to status updates via email, SMS, webhook, Slack, and Atom/RSS. -You can also select the **Status** link at the top of the Infura dashboard to view the status page. +You can also select the **Status** link on the left of the MetaMask Developer dashboard to view the status page. -
-
- -
-
+

+ +

diff --git a/developer-tools/dashboard/how-to/project-sharing.md b/developer-tools/dashboard/how-to/project-sharing.md deleted file mode 100644 index 3d499f1ea62..00000000000 --- a/developer-tools/dashboard/how-to/project-sharing.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -description: Share your Infura API key -sidebar_position: 5 ---- - -# Share your API key with Infura users - -You can share access to your Infura API keys by inviting existing Infura account members. - -## Share API key access - -To share an API key: - -1. In the Infura dashboard, select the API that you want to share. -1. Select the **API Key Sharing** tab. -1. Select **INVITE MEMBERS** in the top right. - -
-
- -
-
- -1. Input one or more user emails, select the [user role](#user-roles), and select **SUBMIT**. -1. Confirm your email address and select **CONFIRM**. - -:::note - -- Infura blocks non-Infura account holders from collaborating on Infura API keys. - -::: - -## User roles - -### Owner - -- The Infura account owner who created the API key. - -:::note - -You cannot change ownership of an API key. - -::: - -### Admin - -- Has read/write access to the API key name, security settings, and collaborator list. -- Can edit security settings, change someone’s role, and revoke and resend invites. -- Can view the API key statistics. -- Admins cannot: - - Delete the API key or the owner. - - View billing details. - - View any other API key's stats. - -### Contributor - -- Has read-only access to the API key details and stats. -- Has limited access to the security settings and can only view the API key secret. -- Contributors cannot: - - View the API key sharing settings. - - View billing details - - View any other API key's stats. - -## Accept an invitation - -You'll receive an email invitation to access an API key. In the email invitation, select **CONFIRM EMAIL ADDRESS** -and accept the invitation. - -You can view all keys that you own, and all keys shared with you, by selecting **Key Sharing** in the **Settings** menu. - -## Update user role or remove user - -1. In the Infura dashboard, select the API key that the user is assigned to. -1. Select the **API Key Sharing** tab. -1. Select the vertical ellipsis icon next to the relevant user. - - - To remove a user, select **Remove Member**. They are removed immediately. - - To update a user's role, select **Update Role**. - -
-
- -
-
- -1. Upgrade or downgrade accordingly and select **UPDATE ROLE**. - -## Revoke or resend an invite - -While invitations remain in a pending state, they can be revoked or sent again. - -1. In the Infura dashboard, select the API key for the user. - -1. Select the **API Key Sharing** tab. - -1. Select the vertical ellipsis icon next to the relevant user and select - **Revoke Invitation** or **Resend Invite** and follow the steps. diff --git a/developer-tools/dashboard/how-to/secure-an-api/_category_.json b/developer-tools/dashboard/how-to/secure-an-api/_category_.json index 818d92efe04..31275b347a0 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/_category_.json +++ b/developer-tools/dashboard/how-to/secure-an-api/_category_.json @@ -1,11 +1,4 @@ { - "position": 3, "label": "Secure an API", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "dashboard/secure-an-api", - "description": "This section provides information about how to secure your API key using Infura's security settings." - } + "position": 1 } diff --git a/developer-tools/dashboard/how-to/secure-an-api/api-key-secret.md b/developer-tools/dashboard/how-to/secure-an-api/api-key-secret.md index f0e72a23237..9451848347b 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/api-key-secret.md +++ b/developer-tools/dashboard/how-to/secure-an-api/api-key-secret.md @@ -22,7 +22,7 @@ If your dapp operates solely on the client side without a server, use only the A The API key is exposed in client-side code, so you should secure it using [allowlists](use-an-allowlist.md). :::tip -For customers on the Developer tier or higher, Infura supports [overriding your allowlist](use-an-allowlist.md#overide-your-allowlist-settings) +For customers on the Developer tier or higher, Infura supports [overriding your allowlist](use-an-allowlist.md#override-your-allowlist-settings) when you specify an API key secret. This allows you to apply the principle of least privilege on the client side while allowing unrestricted access on the server side. ::: @@ -34,7 +34,7 @@ In the API key's **Settings** tab, select **Require API Key secret for all reque
diff --git a/developer-tools/dashboard/how-to/secure-an-api/api-key.md b/developer-tools/dashboard/how-to/secure-an-api/api-key.md index 7f864315f0a..4a1840fd0ea 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/api-key.md +++ b/developer-tools/dashboard/how-to/secure-an-api/api-key.md @@ -13,7 +13,7 @@ A request will fail if it does not have a valid API key appended to the request ::: -Select the API key in the Infura dashboard to view the key's details. The API key to include in your requests can be +Select the API key in the dashboard to view the key's details. The API key to include in your requests can be copied at the top of the page. Apply the principle of least privilege. Add only the endpoints that you plan to use, and then use the other @@ -34,7 +34,7 @@ secure your Infura API key: forums. This is equivalent to giving away your password. - **Use environment variables.** When developing locally or deploying your application, store your - [API key in environment variables](../../../../../services/how-to/javascript-dotenv) instead of hardcoding it into + [API key in environment variables](/services/how-to/javascript-dotenv) instead of hardcoding it into your application. This prevents the API key from being exposed in your codebase. - **Limit usage.** Infura allows you to [set daily request limits on your API key](set-rate-limits.md). Setting a limit can diff --git a/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits.md b/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits.md index 4a0b7ab5a2d..edda0622dee 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits.md +++ b/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits.md @@ -4,13 +4,6 @@ description: Set rate limits to control access to the API key. # Rate limits -:::info - -The credit pricing model replaces the request-based billing for free-tier (Core) customers. -**Existing paid customers will not be immediately affected and will continue to limit the number of requests per second**. - -::: - Set credit rate limits to control access to the API key and to limit costs in case of a leaked API key. Set rate limiting in the API key's **Settings** tab **Key Credit Limits** section. @@ -22,14 +15,30 @@ Set rate limiting in the API key's **Settings** tab **Key Credit Limits** sectio -- **PER SECOND CREDIT RATE-LIMITING** restricts credits per second (throughput) for the API key. Set - the maximum number of credits per second in whole numbers. When credits per second rate exceeds - this value, requests are rejected. When the credit rate drops below the limit, requests - are accepted again. - - The value `0` means default limits are applied. - -- **PER DAY TOTAL CREDITS** restricts total daily credit usage for the API key. Set a limit on number of - credits per day in integers, e.g. 20000. The value `0` means default limits are applied. - - When the number of used credits reach this limit, all requests will be rejected until the next day (00:00 UTC). +- **Per second credit rate-limiting** restricts credits per second (throughput) for the API key. Set + the maximum number of credits per second in whole numbers. When credits per second rate exceeds + this value, requests are rejected. When the credit rate drops below the limit, requests + are accepted again. + + The value `0` means default limits are applied. + +- **Per day total credits** restricts total daily credit usage for the API key. Set a limit on the number of + credits per day in integers, for example, 20000. The value `0` means default limits are applied. + + When the number of used credits reaches this limit, all requests will be rejected until the next day (00:00 UTC). + +If you exceed the specified limits, you'll receive a JSON response with an +[HTTP error status code `429`](/services/reference/ethereum/json-rpc-methods/#http-errors). For example: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "error": { + "code": 429, + "event": -33300, + "message": "Too Many Requests", + "details": "You have surpassed your user-defined key throughput limit setting. To make more requests with this key, review key setting configurations." + } +} +``` diff --git a/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist.md b/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist.md index b443d4bed9e..06a345a61c7 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist.md +++ b/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist.md @@ -29,16 +29,17 @@ Add the restriction details in the **ALLOWLISTS** section of your API key's **Se #### Allowlist behavior - If an API key has no allowlists, all requests are accepted. -- As soon as an API key has an allowlist definition, all requests must pass it. +- When an API key has an allowlist definition, all requests must pass the definition. - Each API key has a maximum of 30 allowlist entries per type. - Each allowlist type is "AND"ed together. - Multiple entries of the same type are "OR"ed. ## Contract addresses -If your application only queries data from specific Ethereum smart contracts or addresses, add those addresses to the **CONTRACT ADDRESSES** allowlist. +If your application only queries data from specific Ethereum smart contracts or addresses, add those +addresses to the **Contract Addresses** allowlist. -Any requests which query addresses that are not in the allowlist are rejected. +Any requests which query addresses that aren't in the allowlist are rejected. The following RPC methods take an Ethereum address parameter and are compatible with this type of allowlisting. @@ -52,7 +53,8 @@ The following RPC methods take an Ethereum address parameter and are compatible #### Example request -To allow a specific Ethereum address, click **ADD** and input it into the **CONTRACT ADDRESSES** allowlist. +To allow a specific Ethereum address, input it into the **Contract Addresses** field and select **Add**. +In the following example we'll use `0xfe05a3e72235c9f92fd9f2282f41a8154d6d342b`.
@@ -62,7 +64,7 @@ To allow a specific Ethereum address, click **ADD** and input it into the **CONT
-Test with a method from the list. +You can test using a method that supports this type of allowlisting. ```bash curl https://mainnet.infura.io/v3/ \ @@ -83,7 +85,7 @@ Result: ## User agents -To limit access to your application to specific user agents, add them to the **USER AGENTS** allowlist. +To limit access to your application to specific user agents, add them to the **User agents** allowlist. :::info @@ -95,15 +97,15 @@ When you add a User-Agent to an allowlist, any API requests originating from oth :::info -The **USER AGENTS** allowlist uses partial string matching. If the allowlisted string is present in the -request's full User-Agent, it is registered as a match. +The **User agents** allowlist uses partial string matching, meaning if the string is present in the +request's full User-Agent, it's registered as a match. ::: #### Example request -For example, to allow requests from Android phones alone, select **ADD** and input `Android` into -the **USER AGENTS** allowlist. +For example, to allow requests from Android phones alone, input `Android` into +the **User agent** field, and select **Add**.
@@ -113,7 +115,7 @@ the **USER AGENTS** allowlist.
-Test with a simple call from a desktop terminal. +Test with a call from a desktop terminal. ```bash curl https://mainnet.infura.io/v3/ \ @@ -136,7 +138,7 @@ Result: ## Origins -To limit access to your application to specific URLs, add them to the **ORIGINS** allowlist. +To limit access to your application to specific URLs, add them to the **Origins** allowlist. :::info @@ -148,7 +150,7 @@ When you add an origin to an allowlist, any API requests originating from other Origin allowlists support wildcard subdomain patterns. -For example, allowlist entry `https://*.example.com` matches `https://your-app.example.com` , +For example, allowlist entry `https://*.example.com` matches `https://your-app.example.com`, `https://our-app.example.com`, and `https://their-app.example.com`, etc. The origin scheme (HTTPS in the example above) is optional. However, if you include it, it must match. @@ -161,25 +163,14 @@ An entry with _only_ a scheme allows requests coming from that scheme alone. #### Example request -To limit requests to your hosted web3 application, click **ADD** and input `mydapp.example.com` into the **ORIGINS** allowlist. - -Any requests that do not include `Origin: mydapp.example.com` are rejected. +To limit requests to your hosted Web3 application, input `mydapp.example.com` into the **Origins** +field, and select **Add**. Any requests that don't include `Origin: mydapp.example.com` are rejected. ## API request method -To limit the methods allowed, add them to the **API REQUEST METHOD** allowlist. - -If the list is not empty, any method calls not specified in the list are rejected. - -Use the dropdown list to select a method. +To limit the methods allowed, select them from the **API request method** drop down. -
-
- -
-
+If the list isn't empty, any method calls not specified in the list are rejected. ## Override your allowlist settings @@ -188,7 +179,7 @@ This functionality is only available to customers on the Developer tier or highe [upgrade your plan](../upgrade-your-plan.md) if you're currently on the free Core tier. ::: -The **OVERIDE ALLOWLIST** switch lets you overide your allowlist settings when a request includes an +The **OVERRIDE ALLOWLIST** switch lets you override your allowlist settings when a request includes an [API key secret](api-key-secret.md). This means requests will be accepted even if an IP address or URL isn't on your allowlist, provided they include both the API key and the API key secret. diff --git a/developer-tools/dashboard/how-to/secure-an-api/use-jwts.md b/developer-tools/dashboard/how-to/secure-an-api/use-jwts.md index 51b6302a615..60ddb7b43e4 100644 --- a/developer-tools/dashboard/how-to/secure-an-api/use-jwts.md +++ b/developer-tools/dashboard/how-to/secure-an-api/use-jwts.md @@ -4,9 +4,9 @@ description: Use JSON Web Tokens to authorize users and external parties. # JWTs -Enable JSON Web Tokens (JWTs) for all requests in the **REQUIREMENTS** section of your API key's security settings. +Enable JSON Web Tokens (JWTs) for all requests in the API key's **Settings** tab. -Input the **JWT PUBLIC KEY NAME** and the key and select **ADD**. +Input the **JWT Public key name** and the key and select **Add**.
@@ -16,4 +16,4 @@ Input the **JWT PUBLIC KEY NAME** and the key and select **ADD**.
-For detailed instructions on how to secure Infura requests with JWTs, see the [JWT learning page](../../../../../services/how-to/json-web-token-jwt). +For detailed instructions on how to secure Infura requests with JWTs, see the [JWT learning page](/services/how-to/json-web-token-jwt). diff --git a/developer-tools/dashboard/how-to/submit-a-help-ticket.md b/developer-tools/dashboard/how-to/submit-a-help-ticket.md index 6d58d48feae..1a08c3a639e 100644 --- a/developer-tools/dashboard/how-to/submit-a-help-ticket.md +++ b/developer-tools/dashboard/how-to/submit-a-help-ticket.md @@ -6,23 +6,10 @@ description: Submit a help ticket To request help from the Infura customer support team, submit a help ticket using the following steps: -1. In the top menu of the [Infura dashboard](https://app.infura.io/), select **Help**. - This opens the [Infura Help Center](https://support.infura.io/), which contains a +1. In the left menu of the [Infura dashboard](https://app.infura.io/), select **Help**. + This opens the [Help Center](https://support.infura.io/), which contains a knowledge base of answers to common questions about using Infura. Search for your question in the Help Center. -2. If you can't find what you're looking for, in the bottom right corner, select **Support**. - -3. In the ticket form that pops up, enter the following information: - - - **Name and email address** - Include your contact information so the Infura customer support - team can respond to you. - - **Ticket type** - Select only the area that relates to your issue. - - **Subject and description** - Include a specific subject and description for your issue. - Include details such as what request you ran when you encountered the issue, what API key you - used, and what the issue or error looks like. - Be as detailed as possible. - - **Attachments** - Attach up to five files, such as screenshots, to help demonstrate your issue. - -4. Select **Send** to submit your ticket. - Someone from the Infura customer support team will respond to your ticket as soon as possible. +2. If you can't find what you're looking for, in the bottom right corner, select **Support** to + submit a ticket. diff --git a/developer-tools/dashboard/how-to/troubleshoot.md b/developer-tools/dashboard/how-to/troubleshoot.md index bf0f1f139f6..095bac6b724 100644 --- a/developer-tools/dashboard/how-to/troubleshoot.md +++ b/developer-tools/dashboard/how-to/troubleshoot.md @@ -7,7 +7,7 @@ sidebar_position: 9 ### Suspicious activity detected during registration -If you receive a "Suspicious activity detected" message during registration, it might be for of one of the following +If you receive a "Suspicious activity detected" message during registration, it might be for one of the following reasons: - You have another account: Infura does not allow users to create multiple accounts, so if diff --git a/developer-tools/dashboard/how-to/two-factor-authentication.md b/developer-tools/dashboard/how-to/two-factor-authentication.md index 7f12b9827e1..90bd2f02e6b 100644 --- a/developer-tools/dashboard/how-to/two-factor-authentication.md +++ b/developer-tools/dashboard/how-to/two-factor-authentication.md @@ -5,33 +5,40 @@ sidebar_position: 4 # Set up two-factor authentication -Two-factor authentication (2FA) is a security measure that adds an extra layer of protection to your online accounts. It requires you to provide two types of identification factors to verify your identity before you can access your accounts. +Two-factor authentication (2FA) is a security measure that adds an extra layer of protection to +your online accounts. It requires you to provide two types of identification factors to verify your +identity before you can access your accounts. ## Enable 2FA on your account -To enable 2FA authentication on your account, on the Infura dashboard go to **Settings** -> **Account**, and select **Enable**. +To enable 2FA authentication on your account, on the dashboard go to **Settings** -> **Account**, and +select **Enable**. -![](../../images/enable2fa.png) + Scan the QR code with your authenticator, and enter the initial six-digit token. Select **Verify** to proceed. -![](../../images/enter_token.png) +

+ +

-:::warning - -**Save your backup code to a secure location** +:::warning Important +**Save your backup code to a secure location.** If you ever lose access to your device, you can use this code to verify your identity. ::: Select **Continue** to finish the process. -![](../../images/backup_code.png) +

+ +

:::info -Most password managers allow you to add secure notes to an entry; you can add the backup code to the Infura login entry. Alternatively, write it down and store it somewhere safe. +Most password managers allow you to add secure notes to an entry; you can add the backup code to the +Infura login entry. Alternatively, write it down and store it somewhere safe. ::: @@ -39,31 +46,26 @@ Next time you log in to Infura, you'll be asked for your 2FA token in addition t ## Disable 2FA on your account -To disable 2FA on your account, on the Infura dashboard go to **Settings** -> **Account**, and select **Disable 2FA**. +To disable 2FA on your account, on the dashboard go to **Settings** -> **Account**, and select **Disable 2FA**. -![](../../images/disable2fa.png) + ## Lost your 2FA device? If you lose your 2FA device, you can still log in using your backup code. Alternatively, you can recover your account by raising a support request with Infura. -:::warning +:::warning Important **Keep your backup code safe!** - If you raise a support request to recover your account, Infura support must confirm that you're the owner of the account. ::: To log in without a 2FA device, log in to Infura with your username and password, and when confronted with the 2FA screen, select **Backup Code.** If you can't find it, your only option is to select **Recover your Account** and open a support case. -
-
- -
-
+

+ +

:::info diff --git a/developer-tools/dashboard/how-to/upgrade-your-plan.md b/developer-tools/dashboard/how-to/upgrade-your-plan.md index 6d7574b846b..1ea9bc51647 100644 --- a/developer-tools/dashboard/how-to/upgrade-your-plan.md +++ b/developer-tools/dashboard/how-to/upgrade-your-plan.md @@ -13,9 +13,21 @@ Infura implements the following restrictions on the number of API keys you can h - Developer plan - Allows up to five API keys. - Team plans and higher - No limit on the number of API keys. -For more information, see to the [Infura pricing page](https://www.infura.io/pricing). +For more information, see the [Infura pricing page](https://www.infura.io/pricing). ::: - diff --git a/metamask-connect/evm/quickstart/dynamic.md b/metamask-connect/evm/quickstart/dynamic.md new file mode 100644 index 00000000000..06b4ce018c9 --- /dev/null +++ b/metamask-connect/evm/quickstart/dynamic.md @@ -0,0 +1,241 @@ +--- +title: 'Dynamic SDK Integration - MetaMask Connect EVM' +sidebar_label: Dynamic SDK +description: Combine MetaMask with Dynamic SDK for multi-wallet support, social login, and embedded wallet features in your React dapp. +toc_max_heading_level: 3 +keywords: + [ + connect, + MetaMask, + Dynamic, + SDK, + dapp, + Wallet SDK, + dynamic xyz, + embedded wallet, + social login, + multi-wallet, + ] +unlisted: true +--- + +:::info Heads up +You've landed on a guide that still uses the MetaMask legacy SDK (`@metamask/sdk`). +The MetaMask Connect integration for this library is coming soon. Once ready, it will be linked +from the sidebar navigation. In the meantime, this guide is still valid if you're using +MetaMask SDK. +::: + +# Connect to MetaMask using Dynamic SDK + +Get started with MetaMask SDK and [Dynamic SDK](https://docs.dynamic.xyz/introduction/welcome). +Use MetaMask SDK features directly within Dynamic SDK. +[Download the quickstart template](#set-up-using-a-template) or [manually set up the SDKs](#set-up-manually) in an existing dapp. + +

+ + MetaMask Connect EVM with Dynamic SDK multi-wallet interface + +

+ +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- A [Dynamic Environment ID](https://app.dynamic.xyz/). + +## Set up using a template + +1. Download the [MetaMask SDK + Dynamic SDK template](https://github.com/MetaMask/metamask-sdk-examples/tree/main/partners/dynamic): + + ```bash + npx degit MetaMask/metamask-sdk-examples/partners/dynamic metamask-dynamic + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-dynamic + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask SDK examples repository and navigate into the `partners/dynamic` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-sdk-examples + cd metamask-sdk-examples/partners/dynamic + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Create a `.env.local` file: + + ```bash + touch .env.local + ``` + +5. In `.env.local`, add a `NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID` environment variable, replacing `` with your Dynamic Environment ID: + + ```text title=".env.local" + NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID= + ``` + +6. Run the project: + + ```bash + pnpm dev + ``` + +You've successfully set up MetaMask SDK and Dynamic SDK. +See how to [use the combined SDKs](#usage). + +## Set up manually + +### 1. Install dependencies + +Install the SDK and the required dependencies to an existing project: + +```bash npm2yarn +npm install @dynamic-labs/sdk-react-core @dynamic-labs/ethereum @dynamic-labs/wagmi-connector wagmi viem @tanstack/react-query +``` + +### 2. Configure providers + +Set up your providers in `app/providers.tsx`: + +```typescript title="providers.tsx" +"use client"; + +import { DynamicContextProvider } from "@dynamic-labs/sdk-react-core"; +import { EthereumWalletConnectors } from "@dynamic-labs/ethereum"; +import { DynamicWagmiConnector } from "@dynamic-labs/wagmi-connector"; +import { WagmiProvider } from "wagmi"; +import { config } from "@/wagmi.config"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +export function Providers({ children }: { children: React.ReactNode }) { + + const queryClient = new QueryClient(); + + return ( + + + + {children} + + + + ); +} +``` + +### 3. Set up environment variables + +Create a `.env.local` file. +In `.env.local`, add a `NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID` environment variable, replacing `` with your Dynamic Environment ID: + +```text title=".env.local" +NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID= +``` + +Test your dapp by running `pnpm run dev`. + +## Usage + +### Connect wallet + +Use the Dynamic Widget in your components: + +```typescript +"use client"; + +import { DynamicWidget } from "@dynamic-labs/sdk-react-core"; + +export const Navbar = () => { + return ( + + ); +}; +``` + +### Check wallet status + +Use the `useAccount` hook from Wagmi: + +```typescript +"use client"; + +import { useAccount } from "wagmi"; + +export const Hero = () => { + const { address, isConnected } = useAccount(); + + return ( +
+ {isConnected ? ( +

Connected: {address}

+ ) : ( +

Not connected

+ )} +
+ ); +}; +``` + +## Production readiness + +Before deploying your project to production: + +1. Update your `next.config.ts` with production domains. +2. Set up proper environment variables. +3. Configure your Dynamic SDK environment ID. +4. Ensure MetaMask SDK is properly initialized. + +## Troubleshooting + +Common issues and solutions include: + +- **SDK initialization error:** + - Ensure MetaMask is installed. + - Check environment variables. + - Verify network connectivity. +- **TypeScript errors:** + - Update type definitions. + - Check SDK versions compatibility. +- **Mobile experience issues:** + - Test on actual mobile devices. + - Verify redirect URLs. + - Check MetaMask mobile app installation. + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) + +## Live example + + diff --git a/metamask-connect/evm/quickstart/javascript.md b/metamask-connect/evm/quickstart/javascript.md new file mode 100644 index 00000000000..69fe4872b41 --- /dev/null +++ b/metamask-connect/evm/quickstart/javascript.md @@ -0,0 +1,250 @@ +--- +title: 'JavaScript Quickstart - MetaMask Connect EVM' +description: Set up MetaMask Connect EVM in a vanilla JavaScript dapp with createEVMClient, connect to wallets, and handle accounts and chain switching. +sidebar_label: JavaScript +keywords: + [ + connect, + MetaMask, + JavaScript, + SDK, + dapp, + Wallet SDK, + vanilla javascript, + createEVMClient, + eth_requestAccounts, + browser dapp, + metamask integration tutorial, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Connect to EVM quickstart + +Install `@metamask/connect-evm`, initialize an EVM client, and connect to the MetaMask wallet in under 5 minutes. MetaMask Connect EVM provides an EIP-1193 provider that works with viem, ethers.js, and web3.js, handles cross-platform connections (desktop extension, mobile QR code, and deeplinks), and persists sessions across page reloads. + + + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the Infura dashboard. + + + +## Steps + +### 1. Install MetaMask Connect EVM + +Install the EVM client in an existing JavaScript project: + +```bash npm2yarn +npm install @metamask/connect-evm +``` + +### 2. Initialize MetaMask Connect EVM + +Initialize the EVM client using [`createEVMClient`](../reference/methods.md#createevmclient). +The following is an example of initializing the client in a JavaScript project: + +```javascript +import { createEVMClient, getInfuraRpcUrls } from '@metamask/connect-evm' + +const evmClient = await createEVMClient({ + dapp: { + name: 'MetaMask Connect EVM Example', + url: window.location.href, + iconUrl: 'https://mydapp.com/icon.png', // Optional + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: 'YOUR_INFURA_API_KEY' }), + '0x1': 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + '0xaa36a7': 'https://sepolia.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, +}) +``` + +This example configures MetaMask Connect EVM with the following options: + +- `dapp` - Ensures trust by showing your dapp's `name`, `url`, and `iconUrl` during connection. + Use `base64Icon` instead of `iconUrl` when a hosted URL is unavailable (for example, in React + Native). +- `api.supportedNetworks` - A map of hex chain IDs to RPC URLs for all networks supported by the app. + Use the [`getInfuraRpcUrls`](../reference/methods.md#getinfurarpcurls) helper to generate URLs for all Infura-supported chains, or specify your own. + +:::info Async client +`createEVMClient` returns a promise. Always `await` it before using the client. +The client is a singleton; calling `createEVMClient` again returns the same instance. +::: + +### 3. Connect and use provider + +Connect to MetaMask and get the provider for RPC requests: + +```javascript +const provider = evmClient.getProvider() + +try { + const { accounts, chainId } = await evmClient.connect({ + chainIds: ['0x1', '0xaa36a7'], + }) + console.log('Connected account:', accounts[0]) + console.log('Active chain:', chainId) +} catch (error) { + if (error.code === 4001) { + console.log('User rejected the connection request') + } else if (error.code === -32002) { + console.log('Connection request already pending') + } else { + console.error('Connection failed:', error) + } +} + +const balance = await provider.request({ + method: 'eth_getBalance', + params: [accounts[0], 'latest'], +}) +console.log('Balance:', balance) +``` + +[`evmClient.connect`](../reference/methods.md#connect) handles cross-platform connection (desktop and mobile), including deeplinking. +Pass `chainIds` to request permission for specific chains (hex strings). Ethereum Mainnet (`0x1`) +is always included regardless of what you pass. + +Use [`provider.request`](../reference/provider-api.md#request) for arbitrary [JSON-RPC requests](../reference/json-rpc-api/index.md) like `eth_chainId` or `eth_getBalance`, or for [batching requests](../guides/metamask-exclusive/batch-requests.md) via `metamask_batch`. + +## Common MetaMask Connect EVM methods at a glance + +| Method | Description | +| ------------------------------------------------------------------------------ | -------------------------------------------------------- | +| [`connect`](../reference/methods.md#connect) | Triggers wallet connection flow | +| [`connectAndSign({ message: "..." })`](../reference/methods.md#connectandsign) | Connects and prompts the user to sign a message | +| [`getProvider`](../reference/methods.md#getprovider) | Returns the provider object for RPC requests | +| [`provider.request({ method, params })`](../reference/provider-api.md#request) | Calls any Ethereum JSON‑RPC method | +| [Batched RPC](../guides/metamask-exclusive/batch-requests.md) | Use `metamask_batch` to group multiple JSON-RPC requests | + +## Usage example + +```javascript +// 1. Connect and get accounts +const { accounts, chainId } = await evmClient.connect() + +// 2. Connect and sign in one step +const { signature } = await evmClient.connectAndSign({ + message: 'Sign in to the dapp', +}) + +// 3. Get provider for RPC requests +const provider = evmClient.getProvider() + +// 4. Make an RPC request +const result = await provider.request({ + method: 'eth_accounts', + params: [], +}) + +// 5. Batch multiple RPC requests +const batchResults = await provider.request({ + method: 'metamask_batch', + params: [{ method: 'eth_accounts' }, { method: 'eth_chainId' }], +}) +``` + + + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) +- [Use the Multichain SDK](../../multichain/quickstart/javascript.md) to connect to both EVM and Solana from a single session diff --git a/metamask-connect/evm/quickstart/nodejs.md b/metamask-connect/evm/quickstart/nodejs.md new file mode 100644 index 00000000000..775c4da11c6 --- /dev/null +++ b/metamask-connect/evm/quickstart/nodejs.md @@ -0,0 +1,215 @@ +--- +title: 'Node.js Quickstart - MetaMask Connect EVM' +description: Set up MetaMask Connect EVM in a Node.js application with createEVMClient, connect via QR code, and use the EIP-1193 provider for JSON-RPC requests. +sidebar_label: Node.js +keywords: + [ + connect, + MetaMask, + Node.js, + SDK, + CLI, + server-side, + createEVMClient, + EIP-1193, + QR code, + personal_sign, + node quickstart, + ] +--- + +# Connect to EVM - Node.js quickstart + +Get started with MetaMask Connect EVM in a Node.js application. +The SDK displays a QR code in the terminal that you scan with the MetaMask mobile app to establish a connection. + +:::info No polyfills required +Node.js has native support for `Buffer`, `crypto`, `stream`, and other modules that require +polyfilling in browser or React Native environments. +::: + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 20 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), or [pnpm](https://pnpm.io/installation). +- The [MetaMask mobile app](https://metamask.io/download/) installed on your phone. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the Infura dashboard. + +## Steps + +### 1. Install MetaMask Connect EVM + +Install the EVM client in an existing Node.js project: + +```bash npm2yarn +npm install @metamask/connect-evm +``` + +### 2. Initialize MetaMask Connect EVM + +Create a file (`index.mjs`) and initialize the client using [`createEVMClient`](../reference/methods.md#createevmclient). +In Node.js, there is no `window.location`, so you must set `dapp.url` explicitly: + +```javascript title="index.mjs" +import { createEVMClient, getInfuraRpcUrls } from '@metamask/connect-evm' + +const evmClient = await createEVMClient({ + dapp: { + name: 'My Node.js App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, +}) +``` + +:::info Async client +`createEVMClient` returns a promise. Always `await` it before using the client. +::: + +### 3. Connect to MetaMask + +Call [`connect`](../reference/methods.md#connect) to start the connection flow. +A QR code appears in the terminal. Scan it with the MetaMask mobile app: + +```javascript +try { + const { accounts, chainId } = await evmClient.connect({ + chainIds: ['0x1'], + }) + console.log('Connected account:', accounts[0]) + console.log('Active chain:', chainId) +} catch (error) { + if (error.code === 4001) { + console.log('User rejected the connection request') + } else if (error.code === -32002) { + console.log('Connection request already pending') + } else { + console.error('Connection failed:', error) + } +} +``` + +### 4. Use the provider + +Get the EIP-1193 provider and make JSON-RPC requests: + +```javascript +const provider = evmClient.getProvider() + +const balance = await provider.request({ + method: 'eth_getBalance', + params: [accounts[0], 'latest'], +}) +console.log('Balance (wei):', balance) +``` + +### 5. Sign a message + +Use [`personal_sign`](../reference/json-rpc-api/personal_sign.mdx) to request a signature from the connected wallet: + +```javascript +const message = '0x' + Buffer.from('Hello from Node.js!', 'utf8').toString('hex') + +const signature = await provider.request({ + method: 'personal_sign', + params: [message, accounts[0]], +}) +console.log('Signature:', signature) +``` + +### 6. Disconnect + +```javascript +await evmClient.disconnect() +console.log('Disconnected') +``` + +## Listen for events + +Use `eventHandlers` in the client configuration to react to connection state changes: + +```javascript +const evmClient = await createEVMClient({ + dapp: { + name: 'My Node.js App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, + eventHandlers: { + connect: ({ accounts, chainId }) => { + console.log('Connected:', accounts, 'on chain', chainId) + }, + disconnect: () => { + console.log('Disconnected') + }, + accountsChanged: accounts => { + console.log('Accounts changed:', accounts) + }, + chainChanged: chainId => { + console.log('Chain changed:', chainId) + }, + }, +}) +``` + +## Full example + +```javascript title="index.mjs" +import { createEVMClient, getInfuraRpcUrls } from '@metamask/connect-evm' + +const evmClient = await createEVMClient({ + dapp: { + name: 'My Node.js App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, +}) + +// Connect — scan the QR code with the MetaMask mobile app +const { accounts, chainId } = await evmClient.connect({ chainIds: ['0x1'] }) +console.log('Connected:', accounts[0], 'on', chainId) + +// Get balance +const provider = evmClient.getProvider() +const balance = await provider.request({ + method: 'eth_getBalance', + params: [accounts[0], 'latest'], +}) +console.log('Balance:', balance) + +// Sign a message +const message = '0x' + Buffer.from('Hello from Node.js!', 'utf8').toString('hex') +const signature = await provider.request({ + method: 'personal_sign', + params: [message, accounts[0]], +}) +console.log('Signature:', signature) + +// Disconnect +await evmClient.disconnect() +console.log('Disconnected') +``` + +Run it with: + +```bash +node index.mjs +``` + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) diff --git a/metamask-connect/evm/quickstart/rainbowkit.md b/metamask-connect/evm/quickstart/rainbowkit.md new file mode 100644 index 00000000000..0d757800e14 --- /dev/null +++ b/metamask-connect/evm/quickstart/rainbowkit.md @@ -0,0 +1,191 @@ +--- +title: 'RainbowKit Integration - MetaMask Connect EVM' +description: Add MetaMask wallet support to your React dapp using RainbowKit's ConnectButton component, wagmi hooks, and pre-built wallet modals. +toc_max_heading_level: 3 +sidebar_label: RainbowKit +keywords: + [ + connect, + MetaMask, + JavaScript, + RainbowKit, + SDK, + dapp, + Wallet SDK, + rainbowkit connector, + wallet modal, + connect button, + react wallet UI, + ] +unlisted: true +--- + +:::info Heads up +You've landed on a guide that still uses the MetaMask legacy SDK (`@metamask/sdk`). +The MetaMask Connect integration for this library is coming soon. Once ready, it will be linked +from the sidebar navigation. In the meantime, this guide is still valid if you're using +MetaMask SDK. +::: + +# Connect to MetaMask using JavaScript + RainbowKit + +Get started with MetaMask SDK in a JavaScript and RainbowKit dapp. +[Download the quickstart template](#set-up-using-a-template) or [manually set up MetaMask SDK](#set-up-manually) in an existing dapp. + +

+ + MetaMask Connect EVM with RainbowKit wallet selector interface + +

+ +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- A WalletConnect project ID from the [Reown dashboard](https://dashboard.reown.com/sign-in). + +## Set up using a template + +1. Download the [MetaMask SDK RainbowKit template](https://github.com/MetaMask/metamask-sdk-examples/tree/main/quickstarts/rainbowkit): + + ```bash + npx degit MetaMask/metamask-sdk-examples/quickstarts/rainbowkit metamask-rainbowkit + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-rainbowkit + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask SDK examples repository and navigate into the `quickstarts/rainbowkit` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-sdk-examples + cd metamask-sdk-examples/quickstarts/rainbowkit + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Create a `.env.local` file: + + ```bash + touch .env.local + ``` + +5. In `.env.local`, add a `VITE_WALLETCONNECT_PROJECT_ID` environment variable, replacing `` with your WalletConnect project ID: + + ```text title=".env.local" + VITE_WALLETCONNECT_PROJECT_ID= + ``` + +6. Run the project: + + ```bash + pnpm dev + ``` + +## Set up manually + +### 1. Install the SDK + +Install MetaMask SDK along with its peer dependencies to an existing React project: + +```bash npm2yarn +npm install @rainbow-me/rainbowkit wagmi viem@2.x @tanstack/react-query +``` + +### 2. Import required dependencies + +In the root of your project, import the required RainbowKit, Wagmi, and TanStack Query dependencies: + +```jsx +import '@rainbow-me/rainbowkit/styles.css' +import { getDefaultConfig, RainbowKitProvider } from '@rainbow-me/rainbowkit' +import { WagmiProvider } from 'wagmi' +import { metaMaskWallet } from '@rainbow-me/rainbowkit/wallets' +import { mainnet, linea, sepolia, lineaSepolia } from 'wagmi/chains' +import { QueryClientProvider, QueryClient } from '@tanstack/react-query' +``` + +### 3. Configure your project + +Set up your configuration with the desired chains and wallets. +In the following example, replace `` with your WalletConnect project ID: + +```jsx +const config = getDefaultConfig({ + appName: 'MetaMask SDK RainbowKit Quickstart', + projectId: '', + chains: [mainnet, linea, sepolia, lineaSepolia], + wallets: [ + { + groupName: 'Preferred', + wallets: [metaMaskWallet], + }, + ], + ssr: false, // true if your dapp uses server-side rendering. +}) +``` + +### 4. Set up providers + +Wrap your application with the `WagmiProvider`, `QueryClientProvider`, and `RainbowKitProvider` providers: + +```jsx +const queryClient = new QueryClient() + +createRoot(document.getElementById("root")!).render( + + + + + + + + + +); +``` + +### 5. Add the connect button + +Import and render the `ConnectButton` component: + +```jsx +import { ConnectButton } from '@rainbow-me/rainbowkit' + +function App() { + return +} + +export default App +``` + +Test your dapp by running `pnpm run dev`. + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) +- [Interact with smart contracts](../guides/interact-with-contracts.md) + +## Live example + + diff --git a/metamask-connect/evm/quickstart/react-native.md b/metamask-connect/evm/quickstart/react-native.md new file mode 100644 index 00000000000..9154dc584f8 --- /dev/null +++ b/metamask-connect/evm/quickstart/react-native.md @@ -0,0 +1,419 @@ +--- +title: 'React Native Quickstart - MetaMask Connect EVM' +description: Set up MetaMask Connect EVM in a React Native or Expo app with required polyfills, metro configuration, and mobile deeplink support. +sidebar_label: React Native +keywords: + [ + connect, + MetaMask, + React, + Native, + SDK, + dapp, + react native wallet, + mobile dapp, + polyfills, + metro config, + mobile deeplinks, + iOS, + Android, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Connect to EVM - React Native quickstart + +Get started with MetaMask Connect EVM in your React Native or Expo dapp. + +## Steps + +### 1. Create a new project + +Create a new React Native or Expo project: + + + + +```bash +npx react-native@latest init MyProject +``` + + + + +```bash +npx create-expo-app MyProject --template +``` + + + + +### 2. Install dependencies + +Install MetaMask Connect EVM and its required polyfill packages: + +```bash +npm install @metamask/connect-evm react-native-get-random-values buffer @react-native-async-storage/async-storage readable-stream +``` + +### 3. Create polyfills + +Create `polyfills.ts` (at the project root or in `src/`) with all required global shims. +This file must be imported before any SDK code: + +```typescript title="polyfills.ts" +import { Buffer } from 'buffer' + +global.Buffer = Buffer + +// Polyfill window object — React Native doesn't have one +let windowObj: any +if (typeof global !== 'undefined' && global.window) { + windowObj = global.window +} else if (typeof window !== 'undefined') { + windowObj = window +} else { + windowObj = {} +} + +if (!windowObj.location) { + windowObj.location = { + hostname: 'mydapp.com', + href: 'https://mydapp.com', + } +} +if (typeof windowObj.addEventListener !== 'function') { + windowObj.addEventListener = () => {} +} +if (typeof windowObj.removeEventListener !== 'function') { + windowObj.removeEventListener = () => {} +} +if (typeof windowObj.dispatchEvent !== 'function') { + windowObj.dispatchEvent = () => true +} + +if (typeof global !== 'undefined') { + global.window = windowObj +} + +// Polyfill Event if missing +if (typeof global.Event === 'undefined') { + class EventPolyfill { + type: string + bubbles: boolean + cancelable: boolean + defaultPrevented = false + constructor(type: string, options?: EventInit) { + this.type = type + this.bubbles = options?.bubbles ?? false + this.cancelable = options?.cancelable ?? false + } + preventDefault() { + this.defaultPrevented = true + } + stopPropagation() {} + stopImmediatePropagation() {} + } + global.Event = EventPolyfill as any + windowObj.Event = EventPolyfill as any +} + +// Polyfill CustomEvent if missing +if (typeof global.CustomEvent === 'undefined') { + const EventClass = + global.Event || + class { + type: string + constructor(type: string) { + this.type = type + } + } + class CustomEventPolyfill extends (EventClass as any) { + detail: any + constructor(type: string, options?: CustomEventInit) { + super(type, options) + this.detail = options?.detail ?? null + } + } + global.CustomEvent = CustomEventPolyfill as any + windowObj.CustomEvent = CustomEventPolyfill as any +} +``` + +:::note +The `Event` and `CustomEvent` polyfills above are only required if you also use Wagmi, which dispatches DOM events. The `@metamask/connect-*` packages use `eventemitter3` internally and don't need them. +::: + +:::tip +For detailed troubleshooting of polyfill issues, see [React Native Metro polyfill issues](../../troubleshooting/metro-polyfill-issues.md). +::: + +Create the empty module stub used by the Metro config: + +```javascript title="src/empty-module.js" +module.exports = {} +``` + +### 4. Configure Metro + +Metro cannot resolve Node.js built-in modules. +Map them to React Native-compatible shims or the empty module stub: + + + + +```javascript title="metro.config.js" +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config') +const path = require('path') + +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +const config = { + resolver: { + extraNodeModules: { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, + }, + }, +} + +module.exports = mergeConfig(getDefaultConfig(__dirname), config) +``` + + + + +Run `npx expo customize metro.config.js` to create a default config, then update it: + +```javascript title="metro.config.js" +const { getDefaultConfig } = require('expo/metro-config') +const path = require('path') + +const config = getDefaultConfig(__dirname) +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +config.resolver.extraNodeModules = { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, +} + +module.exports = config +``` + + + + +### 5. Set up the entry file + +The import order is critical. +`react-native-get-random-values` **must** be the very first import, followed by the polyfills file, +before any other code: + +```javascript title="index.js or App.tsx (Bare RN) / app/_layout.tsx (Expo Router)" +import 'react-native-get-random-values' +import './polyfills' +``` + +:::caution +If you import anything from `@metamask/connect-evm` before `react-native-get-random-values`, +you will get `crypto.getRandomValues is not a function`. +::: + +### 6. Use MetaMask Connect EVM + +Initialize the EVM client using [`createEVMClient`](../reference/methods.md#createevmclient). +`mobile.preferredOpenLink` is required; it tells MetaMask Connect how to open deeplinks to the MetaMask +Mobile app. +Use the client to connect, sign, and send transactions: + +```tsx +import React, { useEffect, useRef, useState, useCallback } from 'react' +import { View, Text, TouchableOpacity, StyleSheet, Alert, Linking } from 'react-native' +import { createEVMClient } from '@metamask/connect-evm' + +let clientPromise = null + +function getClient() { + if (!clientPromise) { + clientPromise = createEVMClient({ + dapp: { + name: 'My RN Dapp', + url: 'https://mydapp.com', + }, + api: { + supportedNetworks: { + '0x1': 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + '0xaa36a7': 'https://sepolia.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, + ui: { + preferExtension: false, + }, + mobile: { + preferredOpenLink: deeplink => Linking.openURL(deeplink), + }, + }) + } + return clientPromise +} + +export default function App() { + const clientRef = useRef(null) + const [accounts, setAccounts] = useState([]) + const [chainId, setChainId] = useState(null) + const [connecting, setConnecting] = useState(false) + + useEffect(() => { + let mounted = true + + async function init() { + const client = await getClient() + if (!mounted) return + clientRef.current = client + + const provider = client.getProvider() + provider.on('accountsChanged', accs => { + if (mounted) setAccounts(accs) + }) + provider.on('chainChanged', id => { + if (mounted) setChainId(id) + }) + provider.on('disconnect', () => { + if (mounted) { + setAccounts([]) + setChainId(null) + } + }) + } + + init() + return () => { + mounted = false + } + }, []) + + const handleConnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + + setConnecting(true) + try { + const result = await client.connect({ chainIds: ['0x1'] }) + setAccounts(result.accounts) + setChainId(result.chainId) + } catch (err) { + if (err.code === 4001) { + Alert.alert('Rejected', 'Connection was rejected.') + return + } + if (err.code === -32002) { + Alert.alert('Pending', 'Check MetaMask to approve the request.') + return + } + Alert.alert('Error', err.message ?? 'Connection failed') + } finally { + setConnecting(false) + } + }, []) + + const handleDisconnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + await client.disconnect() + setAccounts([]) + setChainId(null) + }, []) + + const isConnected = accounts.length > 0 + + return ( + + {!isConnected ? ( + + {connecting ? 'Connecting...' : 'Connect MetaMask'} + + ) : ( + + Account: {accounts[0]} + Chain: {chainId} + + Disconnect + + + )} + + ) +} + +const styles = StyleSheet.create({ + container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }, + button: { backgroundColor: '#037DD6', padding: 14, borderRadius: 8, marginVertical: 8 }, + buttonText: { color: '#fff', fontSize: 16, textAlign: 'center' }, + label: { fontSize: 14, marginVertical: 4 }, +}) +``` + +### 7. iOS configuration + +Add the `metamask` URL scheme to your `Info.plist` so the app can open the MetaMask mobile app: + +```xml title="ios/MyProject/Info.plist" +LSApplicationQueriesSchemes + + metamask + +``` + +### 8. Build and run + + + + +```bash +npx react-native run-android +npx react-native run-ios +``` + + + + +```bash +npx expo prebuild +npx expo run:android +npx expo run:ios +``` + + + + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) +- [Production readiness checklist](../guides/best-practices/production-readiness.md) +- [Troubleshoot bundler polyfill issues](../../troubleshooting/metro-polyfill-issues.md) diff --git a/metamask-connect/evm/quickstart/wagmi.md b/metamask-connect/evm/quickstart/wagmi.md new file mode 100644 index 00000000000..53ec5212017 --- /dev/null +++ b/metamask-connect/evm/quickstart/wagmi.md @@ -0,0 +1,364 @@ +--- +title: 'Wagmi Integration - MetaMask Connect EVM' +description: Integrate MetaMask Connect EVM into a React dapp using Wagmi hooks like useConnect and useConnection, with the MetaMask connector and wallet connection UI. +toc_max_heading_level: 3 +sidebar_label: Wagmi +keywords: + [ + connect, + MetaMask, + JavaScript, + Wagmi, + MetaMask Connect, + dapp, + connect-evm, + wagmi connector, + react hooks, + useConnect, + useConnection, + wallet connector, + web3 react, + ] +--- + +# Connect to EVM - Wagmi quickstart + +Get started with MetaMask Connect EVM in a React and Wagmi dapp. +[Download the quickstart template](#set-up-using-a-template) or [manually set up MetaMask Connect EVM](#set-up-manually) in an existing dapp. + +:::tip Migrating from `@metamask/sdk`? +If you are upgrading an existing Wagmi project that used `@metamask/sdk`, see the +[Wagmi connector migration reference](#migrate-from-metamasksdk) at the bottom of this page +for a parameter mapping table. +::: + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/download) installed in your browser or on mobile. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the Infura dashboard. + +## Set up using a template + +1. Download the [MetaMask Connect Wagmi template](https://github.com/MetaMask/metamask-connect-examples/tree/main/integrations/wagmi): + + ```bash + npx degit MetaMask/metamask-connect-examples/integrations/wagmi metamask-wagmi + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-wagmi + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask Connect examples repository and navigate into the `quickstarts/wagmi` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-connect-examples + cd metamask-connect-examples/integrations/wagmi + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Run the project: + + ```bash + pnpm dev + ``` + +## Set up manually + +### 1. Install dependencies + +Install MetaMask Connect EVM along with its peer dependencies to an existing React project: + +:::note Version requirements +This quickstart requires `wagmi@^3.6.0`. The `metaMask` connector is imported from the `wagmi/connectors` subpath (part of the `wagmi` package) and requires `@metamask/connect-evm@^2.1.0`. +::: + +```bash npm2yarn +npm install @metamask/connect-evm@^2.1.0 wagmi@^3.6.0 viem@2.x @tanstack/react-query +``` + +### 2. Import required dependencies + +In the root of your project, import the required dependencies: + +```jsx +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { http, WagmiProvider, createConfig } from 'wagmi' +import { mainnet, sepolia, lineaSepolia } from 'wagmi/chains' +import { metaMask } from 'wagmi/connectors' +``` + +### 3. Configure your project + +Set up your configuration with the desired chains and connectors. +In the following example, replace `` with your [Infura API key](/developer-tools/dashboard/get-started/create-api): + +```jsx +const INFURA_KEY = import.meta.env.VITE_INFURA_API_KEY + +const config = createConfig({ + chains: [mainnet, sepolia, lineaSepolia], + connectors: [ + metaMask({ + dapp: { + name: 'My Dapp', + url: window.location.origin, + }, + }), + ], + transports: { + [mainnet.id]: http(`https://mainnet.infura.io/v3/${INFURA_KEY}`), + [sepolia.id]: http(`https://sepolia.infura.io/v3/${INFURA_KEY}`), + [lineaSepolia.id]: http(`https://linea-sepolia.infura.io/v3/${INFURA_KEY}`), + }, +}) +``` + +### 4. Set up providers + +Wrap your application with the necessary providers: + +```jsx +const client = new QueryClient() + +const App = () => { + return ( + + + + + + ) +} +``` + +### 5. Add the connect button + +Add the wallet connect and disconnect buttons to your application: + +```jsx +import { useConnection, useConnect, useConnectors, useDisconnect } from 'wagmi' + +export const ConnectButton = () => { + const { address, isConnected } = useConnection() + const connectors = useConnectors() + const connect = useConnect() + const disconnect = useDisconnect() + + const handleConnect = async () => { + // highlight-start + const connector = connectors.find(c => c.id === 'metaMaskSDK') ?? connectors[0] + await connect.mutateAsync({ connector }) + // highlight-end + } + + return ( +
+ {isConnected ? ( + + ) : ( + + )} + {address &&

Connected: {address}

} +
+ ) +} +``` + +After adding the connect button, test your dapp by running `pnpm run dev`. + +## Common operations + +### Switch chains + +Use `useConnection`, `useChains`, and `useSwitchChain` to let users switch between your configured chains: + +```tsx +import { useConnection, useChains, useSwitchChain } from 'wagmi' + +function ChainSwitcher() { + const { chainId } = useConnection() + const chains = useChains() + const switchChain = useSwitchChain() + + return ( +
+ {chains.map(chain => ( + + ))} +
+ ) +} +``` + +### Sign a message + +Use `useSignMessage` to request a `personal_sign` signature from the connected wallet: + +```tsx +import { useSignMessage } from 'wagmi' + +function SignMessage() { + const signMessage = useSignMessage() + + const handleSign = async () => { + const signature = await signMessage.mutateAsync({ message: 'Hello from my dapp!' }) + console.log('Signature:', signature) + } + + return ( +
+ + {signMessage.data &&

Signature: {signMessage.data}

} +
+ ) +} +``` + +### Send a transaction + +Use `useSendTransaction` to send ETH: + +```tsx +import { useSendTransaction } from 'wagmi' +import { parseEther } from 'viem' + +function SendTransaction() { + const sendTx = useSendTransaction() + + const handleSend = async () => { + const hash = await sendTx.mutateAsync({ + to: '0xRecipientAddress', + value: parseEther('0.01'), + }) + console.log('Transaction hash:', hash) + } + + return ( +
+ + {sendTx.data &&

Transaction hash: {sendTx.data}

} +
+ ) +} +``` + +### Connect and sign + +Use the `connectAndSign` connector option to connect and prompt the user to sign a message in a single approval: + +```jsx +metaMask({ + dapp: { name: 'My Dapp', url: window.location.origin }, + connectAndSign: 'By signing, you agree to our Terms of Service.', +}) +``` + +### Connect and execute + +Use the `connectWith` connector option to connect and execute any RPC method in a single approval: + +```jsx +metaMask({ + dapp: { name: 'My Dapp', url: window.location.origin }, + connectWith: { + method: 'eth_signTypedData_v4', + params: [address, JSON.stringify(typedData)], + }, +}) +``` + +## Production readiness + +:::tip +For production deployments, use reliable RPC providers instead of public nodes. +We recommend using services like [Infura](https://app.infura.io/) to ensure better reliability and performance. +See the [production readiness checklist](../guides/best-practices/production-readiness.md) for more details. +::: + +## Migrate from `@metamask/sdk` + +If you previously used `@metamask/sdk` with Wagmi, the MetaMask connector now uses `@metamask/connect-evm` under the hood. Update your dependencies and connector configuration: + +1. Replace `@metamask/sdk` with `@metamask/connect-evm` and update Wagmi packages: + + ```bash npm2yarn + npm uninstall @metamask/sdk + npm install @metamask/connect-evm@^2.1.0 wagmi@^3.6.0 + ``` + +2. Update hook usage for Wagmi v3: + + | Old (Wagmi v2) | New (Wagmi v3) | Notes | + | --------------------------------- | -------------------------------------- | ------------------------------------------- | + | `useAccount` | `useConnection` | Returns `address`, `isConnected`, `chainId` | + | `useConnect` returns `connectors` | `useConnectors` hook | Connectors are a separate hook | + | `connect({ connector })` | `connect.mutate({ connector })` | Hooks return mutation objects | + | `signMessage({ message })` | `signMessage.mutateAsync({ message })` | Use `.mutateAsync` for async results | + | `sendTransaction({...})` | `sendTx.mutateAsync({...})` | Use `.mutateAsync` for async results | + | `switchChain({ chainId })` | `switchChain.mutate({ chainId })` | Mutation pattern | + +3. Update connector options: + + | Old parameter (`@metamask/sdk`) | New parameter (`@metamask/connect-evm`) | Notes | + | ------------------------------- | --------------------------------------- | --------------------------------------------- | + | `dappMetadata: { name, url }` | `dapp: { name, url, iconUrl }` | `dappMetadata` still works but is deprecated | + | `logging: { sdk: true }` | `debug: true` | `logging` still works but is deprecated | + | `useDeeplink: boolean` | `mobile: { useDeeplink: boolean }` | Moved into `mobile` namespace | + | `preferredOpenLink` | `mobile: { preferredOpenLink }` | Moved into `mobile` namespace | + | `forceDeleteProvider` | _(removed)_ | Not needed with new SDK | + | `forceInjectProvider` | _(removed)_ | Not needed with new SDK | + | `injectProvider` | _(removed)_ | Not needed with new SDK | + | `readonlyRPCMap` | _(auto-configured)_ | Built automatically from Wagmi's chain config | + +For non-Wagmi migration details, see the full [migration guide](../guides/migrate-from-sdk.md). + +## Next steps + +After completing the basic setup, follow these guides to add your own functionality: + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Manage networks](../guides/manage-networks.md) +- [Send transactions](../guides/send-transactions/index.md) +- [Sign data](../guides/sign-data/index.md) +- [Interact with smart contracts](../guides/interact-with-contracts.md) + + diff --git a/metamask-connect/evm/quickstart/web3auth.md b/metamask-connect/evm/quickstart/web3auth.md new file mode 100644 index 00000000000..fce64d49d48 --- /dev/null +++ b/metamask-connect/evm/quickstart/web3auth.md @@ -0,0 +1,245 @@ +--- +title: 'Web3Auth Embedded Wallets - MetaMask Connect EVM' +sidebar_label: Embedded Wallets SDK +description: Integrate MetaMask with Web3Auth Embedded Wallets SDK to enable email and social sign-in alongside browser wallet connections in your dapp. +toc_max_heading_level: 3 +keywords: + [ + connect, + MetaMask, + Embedded Wallets, + SDK, + dapp, + Wallet SDK, + web3auth, + embedded wallet, + social sign-in, + MPC wallet, + seedless onboarding, + ] +unlisted: true +--- + +:::info Heads up +You've landed on a guide that still uses the MetaMask legacy SDK (`@metamask/sdk`). +The MetaMask Connect integration for this library is coming soon. Once ready, it will be linked +from the sidebar navigation. In the meantime, this guide is still valid if you're using +MetaMask SDK. +::: + +# Connect to MetaMask using Embedded Wallets SDK + +Get started with MetaMask SDK and [Embedded Wallets SDK (previously Web3Auth)](/embedded-wallets), +enabling users to sign in with an email or social media account. +Use MetaMask SDK features directly within Embedded Wallets SDK. +[Download the quickstart template](#set-up-using-a-template) or [manually set up the SDKs](#set-up-manually) in an existing dapp. + +

+ + MetaMask Connect EVM with Web3Auth embedded wallet sign-in interface + +

+ +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- A [Web3Auth Client ID](/embedded-wallets/dashboard/#get-the-client-id). + +## Set up using a template + +1. Download the [MetaMask SDK + Web3Auth SDK template](https://github.com/MetaMask/metamask-sdk-examples/tree/main/partners/web3auth): + + ```bash + npx degit MetaMask/metamask-sdk-examples/partners/web3auth metamask-web3auth + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-web3auth + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask SDK examples repository and navigate into the `partners/web3auth` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-sdk-examples + cd metamask-sdk-examples/partners/web3auth + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Create a `.env.local` file: + + ```bash + touch .env.local + ``` + +5. In `.env.local`, add a `NEXT_PUBLIC_WEB3AUTH_CLIENT_ID` environment variable, replacing `` with your Web3Auth Client ID: + + ```text title=".env.local" + NEXT_PUBLIC_WEB3AUTH_CLIENT_ID= + ``` + +6. Run the project: + + ```bash + pnpm dev + ``` + +You've successfully set up MetaMask SDK and MetaMask Embedded Wallets. +See how to [use Embedded Wallets](#usage). + +## Set up manually + +### 1. Install dependencies + +Install the SDK and the required dependencies to an existing project: + +```bash npm2yarn +npm install viem wagmi @tanstack/react-query @web3auth/modal +``` + +### 2. Configure providers + +Set up your providers in `app/providers.tsx`: + +```typescript title="providers.tsx" +"use client"; + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { type ReactNode, useState } from "react"; +import { Web3AuthProvider } from "@web3auth/modal/react"; +import { WagmiProvider } from "@web3auth/modal/react/wagmi"; + +type Props = { + children: ReactNode; +}; + +export function Providers({ children }: Props) { + const [queryClient] = useState(() => new QueryClient()); + + return ( + + + +
{children}
+
+
+
+ ); +} +``` + +### 3. Set up environment variables + +Create a `.env.local` file. +In `.env.local`, add a `NEXT_PUBLIC_WEB3AUTH_CLIENT_ID` environment variable, replacing `` with your Web3Auth Client ID: + +```text title=".env.local" +NEXT_PUBLIC_WEB3AUTH_CLIENT_ID= +``` + +Test your dapp by running `pnpm run dev`. + +## Usage + +### Connect or sign in + +Use the `useWeb3AuthConnect` hook to enable users to connect or sign in to their wallet: + +```typescript +"use client"; + +import { useWeb3AuthConnect } from "@web3auth/modal/react"; + +export const Navbar = () => { + const { connect } = useWeb3AuthConnect(); + + return ( + + ); +}; +``` + +### Check wallet status + +Use the `useAccount` hook from Wagmi to check the wallet status: + +```typescript +"use client"; + +import { useAccount } from "wagmi"; + +export const Hero = () => { + const { address, isConnected } = useAccount(); + + return ( +
+ {isConnected ?

Connected: {address}

:

Not connected

} +
+ ); +}; +``` + +### Send a transaction + +Use the `useSendTransaction` hook from Wagmi to send a transaction: + +```typescript +"use client"; + +import { useSendTransaction } from "wagmi"; +import { parseEther } from "viem"; + +export const SendTransaction = () => { + const { sendTransaction } = useSendTransaction(); + + return ( + + ); +}; +``` + +## Next steps + +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Manage networks](../guides/manage-networks.md) +- [Sign data](../guides/sign-data/index.md) + +## Live example + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_accounts.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_accounts.mdx new file mode 100644 index 00000000000..1747506341f --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_accounts.mdx @@ -0,0 +1,29 @@ +--- +title: eth_accounts +sidebar_label: eth_accounts +description: Returns a list of addresses that the user has authorized the dapp to access. This method requires calling `wallet_requestPermissions` for permission. We recommend using `eth_requestAccounts`, which internally calls `wallet_requestPermission`. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_accounts', 'MetaMask', 'Restricted'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_blockNumber.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_blockNumber.mdx new file mode 100644 index 00000000000..473fc94e38a --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_blockNumber.mdx @@ -0,0 +1,29 @@ +--- +title: eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the number of most recent block. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_blockNumber'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_call.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_call.mdx new file mode 100644 index 00000000000..2f381843ccc --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_call.mdx @@ -0,0 +1,125 @@ +--- +title: eth_call +sidebar_label: eth_call +description: Executes a new message call immediately without creating a transaction on the block chain. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_call'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_chainId.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_chainId.mdx new file mode 100644 index 00000000000..ca7d21b7677 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_chainId.mdx @@ -0,0 +1,29 @@ +--- +title: eth_chainId +sidebar_label: eth_chainId +description: Returns the chain ID of the current network. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_chainId'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_coinbase.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_coinbase.mdx new file mode 100644 index 00000000000..13158ec780b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_coinbase.mdx @@ -0,0 +1,29 @@ +--- +title: eth_coinbase +sidebar_label: eth_coinbase +description: Returns the client coinbase address. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_coinbase'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_decrypt.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_decrypt.mdx new file mode 100644 index 00000000000..4c8ba6f095b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_decrypt.mdx @@ -0,0 +1,57 @@ +--- +title: eth_decrypt +sidebar_label: eth_decrypt +description: This method is deprecated and may be removed in the future. + + Requests that MetaMask decrypt the specified encrypted message. + The message must have been encrypted using the public encryption key of the specified Ethereum address. + Returns a promise that resolves to the decrypted message, or rejects if the decryption attempt fails. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_decrypt', 'MetaMask', 'Restricted', 'Deprecated'] +unlisted: true +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_estimateGas.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_estimateGas.mdx new file mode 100644 index 00000000000..53fd0bb8058 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_estimateGas.mdx @@ -0,0 +1,126 @@ +--- +title: eth_estimateGas +sidebar_label: eth_estimateGas +description: Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_estimateGas'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_feeHistory.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_feeHistory.mdx new file mode 100644 index 00000000000..485a2ecd489 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_feeHistory.mdx @@ -0,0 +1,80 @@ +--- +title: eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns transaction base fee per gas and effective priority fee per gas for the requested/supported block range. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_feeHistory'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_gasPrice.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_gasPrice.mdx new file mode 100644 index 00000000000..4418f24a66b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_gasPrice.mdx @@ -0,0 +1,29 @@ +--- +title: eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current price per gas in wei. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_gasPrice'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getBalance.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getBalance.mdx new file mode 100644 index 00000000000..e8218670c42 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getBalance.mdx @@ -0,0 +1,42 @@ +--- +title: eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of the account of given address. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getBalance'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByHash.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByHash.mdx new file mode 100644 index 00000000000..ffee363e88d --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByHash.mdx @@ -0,0 +1,79 @@ +--- +title: eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns information about a block by hash. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getBlockByHash'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByNumber.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByNumber.mdx new file mode 100644 index 00000000000..68002e5f65b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockByNumber.mdx @@ -0,0 +1,79 @@ +--- +title: eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns information about a block by number. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getBlockByNumber'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByHash.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByHash.mdx new file mode 100644 index 00000000000..45ad130e9d3 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByHash.mdx @@ -0,0 +1,36 @@ +--- +title: eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns the number of transactions in a block from a block matching the given block hash. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getBlockTransactionCountByHash'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByNumber.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByNumber.mdx new file mode 100644 index 00000000000..65ae0899830 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getBlockTransactionCountByNumber.mdx @@ -0,0 +1,36 @@ +--- +title: eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns the number of transactions in a block matching the given block number. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getBlockTransactionCountByNumber'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getCode.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getCode.mdx new file mode 100644 index 00000000000..407a782d332 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getCode.mdx @@ -0,0 +1,42 @@ +--- +title: eth_getCode +sidebar_label: eth_getCode +description: Returns code at a given address. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getCode'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getEncryptionPublicKey.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getEncryptionPublicKey.mdx new file mode 100644 index 00000000000..762d0fdcf81 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getEncryptionPublicKey.mdx @@ -0,0 +1,41 @@ +--- +title: eth_getEncryptionPublicKey +sidebar_label: eth_getEncryptionPublicKey +description: This method is deprecated and may be removed in the future. + + Requests that the user share their public encryption key. + Returns a public encryption key, or rejects if the user denies the request. + The public key is computed from entropy associated with the specified user account, using the NaCl implementation of the `X25519_XSalsa20_Poly1305` algorithm. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getEncryptionPublicKey', 'MetaMask', 'Restricted', 'Deprecated'] +unlisted: true +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getFilterChanges.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getFilterChanges.mdx new file mode 100644 index 00000000000..e8e37a42882 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getFilterChanges.mdx @@ -0,0 +1,59 @@ +--- +title: eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Polling method for the filter with the given ID (created using `eth_newFilter`). Returns an array of logs which occurred since last poll. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getFilterChanges'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getFilterLogs.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getFilterLogs.mdx new file mode 100644 index 00000000000..7cfb3f593f6 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getFilterLogs.mdx @@ -0,0 +1,59 @@ +--- +title: eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns an array of all logs matching the filter with the given ID (created using `eth_newFilter`). +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getFilterLogs'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getLogs.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getLogs.mdx new file mode 100644 index 00000000000..ab171516c6f --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getLogs.mdx @@ -0,0 +1,82 @@ +--- +title: eth_getLogs +sidebar_label: eth_getLogs +description: Returns an array of all logs matching the specified filter. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getLogs'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getProof.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getProof.mdx new file mode 100644 index 00000000000..3f8eed947b6 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getProof.mdx @@ -0,0 +1,77 @@ +--- +title: eth_getProof +sidebar_label: eth_getProof +description: Returns the merkle proof for a given account and optionally some storage keys. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getProof'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getStorageAt.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getStorageAt.mdx new file mode 100644 index 00000000000..b2d0fb6a389 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getStorageAt.mdx @@ -0,0 +1,48 @@ +--- +title: eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Returns the value from a storage position at a given address. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getStorageAt'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockHashAndIndex.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockHashAndIndex.mdx new file mode 100644 index 00000000000..09ee3da332e --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockHashAndIndex.mdx @@ -0,0 +1,58 @@ +--- +title: eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Returns information about a transaction by block hash and transaction index position. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getTransactionByBlockHashAndIndex'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockNumberAndIndex.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockNumberAndIndex.mdx new file mode 100644 index 00000000000..8872bacc08a --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByBlockNumberAndIndex.mdx @@ -0,0 +1,58 @@ +--- +title: eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Returns information about a transaction by block number and transaction index position. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getTransactionByBlockNumberAndIndex'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByHash.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByHash.mdx new file mode 100644 index 00000000000..6dbaefc0aaa --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionByHash.mdx @@ -0,0 +1,52 @@ +--- +title: eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Returns the information about a transaction requested by transaction hash. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getTransactionByHash'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionCount.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionCount.mdx new file mode 100644 index 00000000000..0de395bb4e6 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionCount.mdx @@ -0,0 +1,42 @@ +--- +title: eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Returns the number of transactions sent from an address. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getTransactionCount'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionReceipt.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionReceipt.mdx new file mode 100644 index 00000000000..227ba7217cc --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getTransactionReceipt.mdx @@ -0,0 +1,52 @@ +--- +title: eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Returns the receipt of a transaction by transaction hash. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getTransactionReceipt'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockHash.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockHash.mdx new file mode 100644 index 00000000000..18afc2c8f3c --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockHash.mdx @@ -0,0 +1,36 @@ +--- +title: eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Returns the number of uncles in a block from a block matching the given block hash. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getUncleCountByBlockHash'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockNumber.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockNumber.mdx new file mode 100644 index 00000000000..53127fb5ee4 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_getUncleCountByBlockNumber.mdx @@ -0,0 +1,36 @@ +--- +title: eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Returns the number of transactions in a block matching the given block number. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_getUncleCountByBlockNumber'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_newBlockFilter.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_newBlockFilter.mdx new file mode 100644 index 00000000000..a9eec410d33 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_newBlockFilter.mdx @@ -0,0 +1,29 @@ +--- +title: eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates a filter in the node, to notify when a new block arrives. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_newBlockFilter'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_newFilter.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_newFilter.mdx new file mode 100644 index 00000000000..7e4a60bbd0d --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_newFilter.mdx @@ -0,0 +1,59 @@ +--- +title: eth_newFilter +sidebar_label: eth_newFilter +description: Creates a filter object, based on filter options, to notify when the state changes (logs). +hide_title: true +hide_table_of_contents: true +keywords: ['eth_newFilter'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_newPendingTransactionFilter.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_newPendingTransactionFilter.mdx new file mode 100644 index 00000000000..caf29a4f64b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_newPendingTransactionFilter.mdx @@ -0,0 +1,29 @@ +--- +title: eth_newPendingTransactionFilter +sidebar_label: eth_newPendingTransactionFilter +description: Creates a filter in the node, to notify when new pending transactions arrive. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_newPendingTransactionFilter'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_requestAccounts.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_requestAccounts.mdx new file mode 100644 index 00000000000..ac40553853b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_requestAccounts.mdx @@ -0,0 +1,30 @@ +--- +title: eth_requestAccounts +sidebar_label: eth_requestAccounts +description: Requests that the user provide access to one or more Ethereum addresses. This method is specified by [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102). Internally, this method calls `wallet_requestPermissions` for permission to call `eth_accounts`. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_requestAccounts', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_sendRawTransaction.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_sendRawTransaction.mdx new file mode 100644 index 00000000000..9abe4f8d395 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_sendRawTransaction.mdx @@ -0,0 +1,38 @@ +--- +title: eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits a raw transaction. You can create and sign a transaction externally using a library such as [web3.js](https://docs.web3js.org/) or [ethers.js](https://docs.ethers.org/). For [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) transactions, the raw form must be the network form. This means it includes the blobs, KZG commitments, and KZG proofs. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_sendRawTransaction'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_sendTransaction.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_sendTransaction.mdx new file mode 100644 index 00000000000..8434b2643e6 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_sendTransaction.mdx @@ -0,0 +1,87 @@ +--- +title: eth_sendTransaction +sidebar_label: eth_sendTransaction +description: Creates a new wallet confirmation to make an Ethereum transaction from the user's account. This method requires that the user has granted permission to interact with their account first, so make sure to call `eth_requestAccounts` (recommended) or `wallet_requestPermissions` first. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_sendTransaction', 'MetaMask', 'Restricted', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_signTypedData_v4.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_signTypedData_v4.mdx new file mode 100644 index 00000000000..34986b8dc72 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_signTypedData_v4.mdx @@ -0,0 +1,153 @@ +--- +title: eth_signTypedData_v4 +sidebar_label: eth_signTypedData_v4 +description: Request EIP-712 structured typed data signatures using eth_signTypedData_v4 for human-readable, verifiable signing in MetaMask. +hide_title: true +hide_table_of_contents: true +keywords: + [ + eth_signTypedData_v4, + EIP-712, + structured data, + typed data signing, + metamask, + ethereum signature, + JSON-RPC, + ] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_subscribe.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_subscribe.mdx new file mode 100644 index 00000000000..a8b9b18ae22 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_subscribe.mdx @@ -0,0 +1,60 @@ +--- +title: eth_subscribe +sidebar_label: eth_subscribe +description: Subscribes to specific events on the Ethereum network, such as new blocks, or logs. When an event occurs, a notification is sent to the client with the corresponding data. To stop receiving notifications, the client can unsubscribe using `eth_unsubscribe`. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_subscribe', 'Ethereum', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_syncing.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_syncing.mdx new file mode 100644 index 00000000000..e23480b873b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_syncing.mdx @@ -0,0 +1,33 @@ +--- +title: eth_syncing +sidebar_label: eth_syncing +description: Returns an object with data about the sync status or false. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_syncing'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_uninstallFilter.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_uninstallFilter.mdx new file mode 100644 index 00000000000..fe483675374 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_uninstallFilter.mdx @@ -0,0 +1,36 @@ +--- +title: eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls a filter with given id. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_uninstallFilter'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/eth_unsubscribe.mdx b/metamask-connect/evm/reference/json-rpc-api/eth_unsubscribe.mdx new file mode 100644 index 00000000000..82c3d337591 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/eth_unsubscribe.mdx @@ -0,0 +1,37 @@ +--- +title: eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Unsubscribes from specific events on the Ethereum network, to which the client has been previously subscribed using `eth_subscribe`. The client must provide the subscription ID obtained from `eth_subscribe` to stop receiving notifications for the corresponding event. +hide_title: true +hide_table_of_contents: true +keywords: ['eth_unsubscribe', 'Ethereum', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/index.md b/metamask-connect/evm/reference/json-rpc-api/index.md new file mode 100644 index 00000000000..3919488ae0f --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/index.md @@ -0,0 +1,23 @@ +--- +title: 'JSON-RPC API Reference - MetaMask Connect EVM' +sidebar_label: JSON-RPC API +sidebar_class_name: 'hidden' +description: Interactive reference for MetaMask's JSON-RPC API, covering standard Ethereum methods and MetaMask-specific wallet methods for dapp integration. +keywords: + [ + JSON-RPC, + RPC API, + metamask, + ethereum, + eth_sendTransaction, + wallet_switchEthereumChain, + wallet_addEthereumChain, + wallet_sendCalls, + ] +--- + +# JSON-RPC API + +This section provides an interactive reference for MetaMask's JSON-RPC API. +The API builds on a set of standard Ethereum methods with MetaMask-specific enhancements, and is designed for seamless integration into dapps. +View the JSON-RPC API methods by selecting a method in the left sidebar. diff --git a/metamask-connect/evm/reference/json-rpc-api/personal_sign.mdx b/metamask-connect/evm/reference/json-rpc-api/personal_sign.mdx new file mode 100644 index 00000000000..e718531dbe9 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/personal_sign.mdx @@ -0,0 +1,46 @@ +--- +title: personal_sign +sidebar_label: personal_sign +description: Presents a plain text signature challenge to the user and returns the signed response. Prepends a safe prefix to the signed message to prevent the challenge tricking users into signing a financial transaction.

MetaMask implements `personal_sign` similarly to the Go Ethereum client's `eth_sign` implementation. MetaMask's `personal_sign` doesn't accept a password.

This method requires that the user has granted permission to interact with their account first, so make sure to call `eth_requestAccounts` (recommended) or `wallet_requestPermissions` first. +hide_title: true +hide_table_of_contents: true +keywords: ['personal_sign', 'MetaMask', 'Restricted', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_addEthereumChain.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_addEthereumChain.mdx new file mode 100644 index 00000000000..9b48f3e7918 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_addEthereumChain.mdx @@ -0,0 +1,155 @@ +--- +title: wallet_addEthereumChain +sidebar_label: wallet_addEthereumChain +description: Creates a confirmation asking the user to add the specified chain to the wallet application. The caller must specify a chain ID and some chain metadata. Specified by [EIP-3085](https://eips.ethereum.org/EIPS/eip-3085). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_addEthereumChain', 'MetaMask', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_getCallsStatus.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_getCallsStatus.mdx new file mode 100644 index 00000000000..62ee9c5c88d --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_getCallsStatus.mdx @@ -0,0 +1,67 @@ +--- +title: wallet_getCallsStatus +sidebar_label: wallet_getCallsStatus +description: Gets the status of a batch of calls that was previously sent using `wallet_sendCalls`. Specified by [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_getCallsStatus', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_getCapabilities.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_getCapabilities.mdx new file mode 100644 index 00000000000..e7bf3cad95b --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_getCapabilities.mdx @@ -0,0 +1,57 @@ +--- +title: wallet_getCapabilities +sidebar_label: wallet_getCapabilities +description: Returns information about the wallet's support for the `atomic` capability. The `atomic` capability specifies how the wallet will execute batches of transactions sent using `wallet_sendCalls`. `wallet_getCapabilities` is specified by [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_getCapabilities', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + +
  • `supported` - The wallet will execute calls sent using `wallet_sendCalls` atomically.
  • `ready` - The wallet can upgrade to `supported` pending user approval to upgrade their account via EIP-7702.
If the `atomic` capability is not `supported` or `ready` for a specified chain ID, the wallet will not return anything for that chain ID.', + }} + errors={[ + { code: '-32602', message: '', description: 'The wallet cannot parse the request.' }, + { + code: '4100', + message: '', + description: 'The requested account and/or method has not been authorized by the user.', + }, + ]} + exampleRequest={`await provider.request({ + method: 'wallet_getCapabilities', + params: ['0xd46e8dd67c5d32be8058bb8eb970870f07244567', ['0xaa36a7']], +})`} + exampleResponse={`{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "0xaa36a7": { + "atomic": { + "status": "ready" + } + } + } +}`} +/> diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_getPermissions.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_getPermissions.mdx new file mode 100644 index 00000000000..c6a9c4b660a --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_getPermissions.mdx @@ -0,0 +1,31 @@ +--- +title: wallet_getPermissions +sidebar_label: wallet_getPermissions +description: Gets the user's permissions. Specified by [EIP-2255](https://eips.ethereum.org/EIPS/eip-2255). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_getPermissions', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_registerOnboarding.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_registerOnboarding.mdx new file mode 100644 index 00000000000..fbd53859239 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_registerOnboarding.mdx @@ -0,0 +1,29 @@ +--- +title: wallet_registerOnboarding +sidebar_label: wallet_registerOnboarding +description: Registers the requesting site with MetaMask as the initiator of onboarding, enabling MetaMask to redirect the user back to the site after onboarding. Returns a promise that resolves to `true`, or rejects the request if there's an error. Instead of calling this method directly, you should use the [`@metamask/onboarding`](https://github.com/MetaMask/metamask-onboarding) library. +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_registerOnboarding', 'MetaMask', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_requestPermissions.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_requestPermissions.mdx new file mode 100644 index 00000000000..33792258e53 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_requestPermissions.mdx @@ -0,0 +1,55 @@ +--- +title: wallet_requestPermissions +sidebar_label: wallet_requestPermissions +description: Requests additional permissions from the user. This method accepts a single permission per call. Specified by [EIP-2255](https://eips.ethereum.org/EIPS/eip-2255). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_requestPermissions', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_revokePermissions.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_revokePermissions.mdx new file mode 100644 index 00000000000..71930aefb40 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_revokePermissions.mdx @@ -0,0 +1,49 @@ +--- +title: wallet_revokePermissions +sidebar_label: wallet_revokePermissions +description: Revokes previously granted permissions for the current dapp identified by its origin. This method accepts a single permission per call. Specified by [MIP-2](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md) and only available for the MetaMask browser extension. +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_revokePermissions', 'MetaMask', 'Experimental'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_scanQRCode.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_scanQRCode.mdx new file mode 100644 index 00000000000..95c23f91fe9 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_scanQRCode.mdx @@ -0,0 +1,37 @@ +--- +title: wallet_scanQRCode +sidebar_label: wallet_scanQRCode +description: Requests that the user scan a QR code using their device camera. Introduced by [EIP-945](https://github.com/ethereum/EIPs/issues/945). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_scanQRCode', 'MetaMask', 'Mobile', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_sendCalls.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_sendCalls.mdx new file mode 100644 index 00000000000..5bf6b24ce40 --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_sendCalls.mdx @@ -0,0 +1,171 @@ +--- +title: wallet_sendCalls +sidebar_label: wallet_sendCalls +description: Submit a batch of calls using wallet_sendCalls (EIP-5792) for atomic or sequential multi-transaction execution in MetaMask. +hide_title: true +hide_table_of_contents: true +keywords: + [ + wallet_sendCalls, + EIP-5792, + batch calls, + atomic transactions, + metamask, + JSON-RPC, + smart contract calls, + ] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_switchEthereumChain.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_switchEthereumChain.mdx new file mode 100644 index 00000000000..02295b600fe --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_switchEthereumChain.mdx @@ -0,0 +1,57 @@ +--- +title: wallet_switchEthereumChain +sidebar_label: wallet_switchEthereumChain +description: Requests that the wallet switches its active Ethereum chain. Specified by [EIP-3326](https://eips.ethereum.org/EIPS/eip-3326). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_switchEthereumChain', 'MetaMask'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/wallet_watchAsset.mdx b/metamask-connect/evm/reference/json-rpc-api/wallet_watchAsset.mdx new file mode 100644 index 00000000000..38d41dfad4f --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/wallet_watchAsset.mdx @@ -0,0 +1,136 @@ +--- +title: wallet_watchAsset +sidebar_label: wallet_watchAsset +description: Requests that the user track the specified token in MetaMask. Returns a boolean indicating if the token was successfully added. Once added, the token is indistinguishable from those added using legacy methods, such as a centralized registry. Introduced by [EIP-747](https://eips.ethereum.org/EIPS/eip-747). +hide_title: true +hide_table_of_contents: true +keywords: ['wallet_watchAsset', 'MetaMask', 'Experimental', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/json-rpc-api/web3_clientVersion.mdx b/metamask-connect/evm/reference/json-rpc-api/web3_clientVersion.mdx new file mode 100644 index 00000000000..975be359f3c --- /dev/null +++ b/metamask-connect/evm/reference/json-rpc-api/web3_clientVersion.mdx @@ -0,0 +1,29 @@ +--- +title: web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns the current MetaMask client version. This differs slightly per client. For example, the browser extension returns a string like `MetaMask/v10.33.1`, while the mobile app returns a string like `MetaMask/8.1.2/Mobile`. +hide_title: true +hide_table_of_contents: true +keywords: ['web3_clientVersion', 'Ethereum', 'Multichain'] +--- + +import SimplifiedApiReference from '@site/src/components/SimplifiedApiReference' + + diff --git a/metamask-connect/evm/reference/methods.md b/metamask-connect/evm/reference/methods.md new file mode 100644 index 00000000000..855aedfbd2c --- /dev/null +++ b/metamask-connect/evm/reference/methods.md @@ -0,0 +1,389 @@ +--- +title: 'MetaMask Connect EVM methods' +description: Complete API reference for MetaMask Connect EVM methods including connect, connectAndSign, connectWith, getProvider, getInfuraRpcUrls, and disconnect. +keywords: + [ + evm, + connect, + method, + methods, + dapp, + createEVMClient, + connectAndSign, + connectWith, + getProvider, + getInfuraRpcUrls, + disconnect, + EIP-1193, + API reference, + ] +toc_max_heading_level: 2 +--- + +# MetaMask Connect EVM methods + +MetaMask Connect EVM (`@metamask/connect-evm`) exposes several methods, including: + +- [`createEVMClient`](#createevmclient) to initialize the client. +- [`connect`](#connect) to establish a wallet session. +- [`connectAndSign`](#connectandsign) to connect and sign a message in one step. +- [`connectWith`](#connectwith) to connect and execute an RPC call atomically. +- [`getProvider`](#getprovider) to obtain the EIP-1193 provider for arbitrary JSON-RPC requests. + +## `createEVMClient` + +Creates a new EVM client instance. + +### Parameters + +| Name | Type | Required | Description | +| -------------------------- | ---------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `dapp.name` | `string` | Yes | Name of your dapp. | +| `dapp.url` | `string` | No | URL of your dapp. In browsers this is often set automatically; required in Node.js and React Native. | +| `dapp.iconUrl` | `string` | No | URL of your dapp icon. | +| `dapp.base64Icon` | `string` | No | Base64-encoded icon when a hosted URL is unavailable (for example, some React Native setups). Use instead of `iconUrl` when needed. | +| `api.supportedNetworks` | `Record` | No | Map of hex chain IDs to RPC URLs for read-only requests and transport. Use [`getInfuraRpcUrls`](#getinfurarpcurls) to generate Infura URLs, then merge custom endpoints. | +| `ui.headless` | `boolean` | No | Enables or disables [headless mode](../guides/headless-mode.md). The default is `false`. | +| `ui.preferExtension` | `boolean` | No | Directly connects through the MetaMask extension when it's installed. The default is `true`. | +| `mobile.preferredOpenLink` | `(deeplink: string) => void` | No | A function that's called to open a deeplink to the MetaMask Mobile App. Required in React Native. | +| `mobile.useDeeplink` | `boolean` | No | Controls use of deeplinks for mobile connection flows. | +| `ui.showInstallModal` | `boolean` | No | Shows the MetaMask install modal when the extension isn't detected. | +| `eventHandlers` | `object` | No | Optional callbacks for connection lifecycle and [provider events](provider-api.md#events). | +| `debug` | `boolean` | No | Enables verbose SDK logging. The default is `false`. | +| `skipAutoAnnounce` | `boolean` | No | Opts out of automatic EIP-6963 provider announcement (default since `@metamask/connect-evm` 2.0.0). Call `client.announceProvider()` to announce manually. | +| `analytics.enabled` | `boolean` | No | Set to `false` to opt out of analytics. | + +### Returns + +Returns a promise that resolves to an EVM client instance. +The client is a singleton; calling `createEVMClient` again returns the same instance. + +### Example + +```javascript +import { createEVMClient, getInfuraRpcUrls } from '@metamask/connect-evm' + +const evmClient = await createEVMClient({ + dapp: { + name: 'My Dapp', + url: window.location.href, + iconUrl: 'https://mydapp.com/icon.png', + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: process.env.INFURA_API_KEY }), + '0x89': 'https://polygon-rpc.com', + }, + }, + ui: { + headless: false, + preferExtension: true, + }, + mobile: { + preferredOpenLink: link => window.open(link, '_blank'), + }, +}) +``` + +## `connect` + +Connects to MetaMask and requests account access. + +### Parameters + +| Name | Type | Required | Description | +| ---------------------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `options.chainIds` | `Hex[]` | No | Array of hex chain IDs to request permission for (defaults to `['0x1']` if not provided). Ethereum Mainnet (`0x1`) is always included in the request regardless of what is passed. | +| `options.account` | `string` | No | Specific account address to connect. | +| `options.forceRequest` | `boolean` | No | Force a new connection request even if already connected. | + +### Returns + +A promise that resolves to an object containing `accounts` (an array of account addresses) and `chainId`. + +### Example + +```javascript +const { accounts, chainId } = await evmClient.connect({ + chainIds: ['0x1', '0x89'], +}) +console.log('Connected accounts:', accounts) +``` + +## `connectAndSign` + +Connects to MetaMask and signs a `personal_sign` message in a single user approval. + +### Parameters + +| Name | Type | Required | Description | +| ------------------ | -------- | -------- | ------------------------------------------------------------------------- | +| `options.message` | `string` | Yes | The message to sign. | +| `options.chainIds` | `Hex[]` | No | Array of hex chain IDs to request permission for (defaults to `['0x1']`). | + +### Returns + +A promise that resolves to an object with the following fields: + +| Field | Type | Description | +| ----------- | ----------- | ------------------------------------------------ | +| `accounts` | `Address[]` | The accounts permitted on the resulting session. | +| `chainId` | `Hex` | The selected chain ID as a hex string. | +| `signature` | `string` | The `personal_sign` signature as a hex string. | + +:::info Breaking change in `@metamask/connect-evm` 1.0.0 +`connectAndSign` previously returned the signature as a bare string. It now returns +`{ accounts, chainId, signature }`. Read `.signature` from the returned object to get the signed value. +::: + +:::tip +You can also subscribe to the `connectAndSign` event handler +when initializing the client with [`createEVMClient`](#createevmclient) to receive the same payload: + +```javascript +eventHandlers: { + connectAndSign: ({ accounts, chainId, signature }) => { + console.log('Accounts:', accounts, 'Chain:', chainId, 'Signature:', signature) + }, +} +``` + +::: + +### Example + +```javascript +const { accounts, chainId, signature } = await evmClient.connectAndSign({ + message: 'Sign in to My Dapp', + chainIds: ['0x1'], +}) +console.log('Accounts:', accounts, 'Chain:', chainId, 'Signature:', signature) +``` + +## `connectWith` + +Connects to MetaMask and executes a specific [JSON-RPC method](json-rpc-api/index.md) in a single user approval. + +### Parameters + +| Name | Type | Required | Description | +| ---------------------- | ---------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------- | +| `options.method` | `string` | Yes | The JSON-RPC method name. | +| `options.params` | `unknown[] \| (account: Address) => unknown[]` | Yes | The parameters for the method. Can be a function that receives the connected account and returns params. | +| `options.chainIds` | `Hex[]` | No | Array of hex chain IDs to request permission for (defaults to `['0x1']`). | +| `options.account` | `string` | No | Specific account address to connect. | +| `options.forceRequest` | `boolean` | No | Force a new connection request even if already connected. | + +### Returns + +A promise that resolves to an object with the following fields: + +| Field | Type | Description | +| ---------- | ----------- | ------------------------------------------------ | +| `accounts` | `Address[]` | The accounts permitted on the resulting session. | +| `chainId` | `Hex` | The selected chain ID as a hex string. | +| `result` | `unknown` | The result of the JSON-RPC method invocation. | + +:::info Breaking change in `@metamask/connect-evm` 1.0.0 +`connectWith` previously returned the raw RPC result. It now returns +`{ accounts, chainId, result }`. Read `.result` from the returned object to get the RPC response value. +::: + +:::tip +You can also subscribe to the `connectWith` event handler +when initializing the client with [`createEVMClient`](#createevmclient) to receive the same payload: + +```javascript +eventHandlers: { + connectWith: ({ accounts, chainId, result }) => { + console.log('Accounts:', accounts, 'Chain:', chainId, 'Result:', result) + }, +} +``` + +::: + +### Example + +```javascript +const { + accounts, + chainId, + result: txHash, +} = await evmClient.connectWith({ + method: 'eth_sendTransaction', + params: account => [ + { + from: account, + to: '0xRecipientAddress', + value: '0x2386F26FC10000', + }, + ], + chainIds: ['0x1'], +}) +console.log('Accounts:', accounts, 'Chain:', chainId, 'Transaction hash:', txHash) +``` + +## `getProvider` + +Returns the active EIP-1193 Ethereum provider object. +The provider is available immediately after `createEVMClient` resolves, even before calling `connect`. +Read-only RPC calls work immediately; account-dependent calls require `connect` first. + +### Returns + +An EIP-1193 compatible provider object. + +### Example + +```javascript +const provider = evmClient.getProvider() +const chainId = await provider.request({ method: 'eth_chainId' }) +console.log('Current chain:', chainId) +``` + +## `getAccount` + +Returns the currently selected account. + +### Returns + +`Address | undefined` - The currently selected account address, or `undefined` if not connected. + +### Example + +```javascript +const account = evmClient.getAccount() +console.log('Current account:', account) // e.g., '0x...' +``` + +## `getChainId` + +Returns the currently selected chain ID. + +### Returns + +`Hex | undefined` - The currently selected chain ID as a hex string, or `undefined` if not connected. + +### Example + +```javascript +const chainId = evmClient.getChainId() +console.log('Current chain:', chainId) // e.g., '0x1' +``` + +## `switchChain` + +Switches the active chain on the EVM client. +If the chain is not already added to the user's MetaMask wallet, the optional `chainConfiguration` +parameter triggers a `wallet_addEthereumChain` request as a fallback. + +:::note +Since `@metamask/connect-evm` 1.2.0, calling `switchChain` without `chainConfiguration` for an +unrecognized chain rejects with the wallet's raw `4902` error (not a "No chain configuration found." +message). Handle `4902` in a `catch` block by retrying with `chainConfiguration` or calling +`wallet_addEthereumChain`. +::: + +### Parameters + +| Name | Type | Required | Description | +| ---------------------------------------------- | ---------- | -------- | ----------------------------------------------------------------- | +| `options.chainId` | `Hex` | Yes | The hex chain ID to switch to. | +| `options.chainConfiguration` | `object` | No | Fallback chain details if the chain is not yet added to MetaMask. | +| `options.chainConfiguration.chainName` | `string` | Yes | Human-readable chain name. | +| `options.chainConfiguration.nativeCurrency` | `object` | Yes | `{ name, symbol, decimals }` for the native token. | +| `options.chainConfiguration.rpcUrls` | `string[]` | Yes | Array of RPC endpoint URLs. | +| `options.chainConfiguration.blockExplorerUrls` | `string[]` | No | Array of block explorer URLs. | + +### Example + +```javascript +await evmClient.switchChain({ + chainId: '0xa4b1', + chainConfiguration: { + chainName: 'Arbitrum One', + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrls: ['https://arb1.arbitrum.io/rpc'], + blockExplorerUrls: ['https://arbiscan.io'], + }, +}) +``` + +## `disconnect` + +Disconnects all EVM (`eip155`) scopes from MetaMask and cleans up local state. +This only revokes the EVM-specific scopes currently held in the session; it does not terminate the broader multichain session if non-EVM scopes (such as Solana) are also active. + +:::tip Multichain partial disconnect +If your dapp also uses Solana via the [multichain client](../../multichain/index.mdx), calling +`disconnect` on the EVM client only revokes EVM (`eip155`) scopes. +Non-EVM scopes remain active, so the user stays connected to Solana. +::: + +### Example + +```javascript +await evmClient.disconnect() +``` + +## `getInfuraRpcUrls` + +Generates a map of Infura RPC URLs keyed by hex chain ID. +Use this utility to populate `api.supportedNetworks` when calling [`createEVMClient`](#createevmclient). + +:::note +Each chain must be activated in your [Infura dashboard](https://app.infura.io/) before `getInfuraRpcUrls` can generate working URLs for it. +::: + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------ | +| `infuraApiKey` | `string` | Yes | Your Infura API key. | +| `chainIds` | `string[]` | No | Array of hex chain IDs to include (for example, `['0x1', '0x89']`). If omitted, all supported chains are included. | + +### Returns + +A `Record` mapping hex chain IDs to Infura RPC URLs. When `chainIds` is provided, only matching chains are included. + +### Example + +```javascript +import { createEVMClient, getInfuraRpcUrls } from '@metamask/connect-evm' + +const evmClient = await createEVMClient({ + dapp: { name: 'My Dapp', url: window.location.href }, + api: { + supportedNetworks: { + // Each chain must be active in your Infura dashboard + ...getInfuraRpcUrls({ infuraApiKey: 'YOUR_INFURA_API_KEY', chainIds: ['0x1', '0xaa36a7'] }), + }, + }, +}) +``` + +## Properties + +The EVM client exposes the following read-only properties: + +| Property | Type | Description | +| ----------------- | ---------------------- | ----------------------------------------------------------------------------------------------- | +| `accounts` | `Address[]` | Currently permitted accounts. | +| `selectedAccount` | `Address \| undefined` | Currently selected account (first in `accounts`). | +| `selectedChainId` | `Hex \| undefined` | Currently selected chain ID as a hex string. | +| `status` | `ConnectEvmStatus` | Connection status: `'loaded'`, `'pending'`, `'connecting'`, `'connected'`, or `'disconnected'`. | + +:::note +On the EVM client, `status` is a `ConnectEvmStatus`. Since `@metamask/connect-evm` 0.11.0 it +reflects the EVM client's own status and no longer proxies `MultichainClient.status`. +::: + +### Example + +```javascript +console.log('Status:', evmClient.status) +console.log('Accounts:', evmClient.accounts) +console.log('Selected account:', evmClient.selectedAccount) +console.log('Selected chain:', evmClient.selectedChainId) +``` diff --git a/metamask-connect/evm/reference/provider-api.md b/metamask-connect/evm/reference/provider-api.md new file mode 100644 index 00000000000..5bf69f5bfde --- /dev/null +++ b/metamask-connect/evm/reference/provider-api.md @@ -0,0 +1,363 @@ +--- +title: 'Ethereum Provider API - MetaMask Connect EVM' +sidebar_label: Ethereum Provider API +description: Reference for the MetaMask Ethereum provider API (EIP-1193), covering properties, the request method, and events like accountsChanged and chainChanged. +keywords: + [ + ethereum provider, + EIP-1193, + window.ethereum, + EIP-6963, + provider API, + metamask, + request method, + events, + accountsChanged, + chainChanged, + ] +--- + +# Ethereum provider API + +The MetaMask Ethereum provider API follows the EIP-1193 standard and exposes a `request` method for JSON-RPC calls, properties like `chainId` and `selectedAddress`, and events including `accountsChanged`, `chainChanged`, `connect`, and `disconnect`. MetaMask injects this provider as `window.ethereum`, and MetaMask Connect EVM returns the same interface via `getProvider`. + +Use the provider [properties](#properties), [methods](#methods), and [events](#events) in your dapp. + +:::info Note +MetaMask supports [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963), which introduces an +alternative wallet detection mechanism to the `window.ethereum` injected provider. +This alternative mechanism enables dapps to support wallet interoperability +by discovering multiple injected wallet providers in a user's browser. +We recommend using this mechanism to connect to MetaMask. + +Access the provider API using the selected EIP-6963 provider object. +Throughout this documentation, we refer to the selected provider using `provider`. + +When using MetaMask Connect EVM, you get the same EIP-1193 provider via `client.getProvider`. +The provider returned by MetaMask Connect EVM is available immediately after `createEVMClient` resolves +and supports the same methods, properties, and events documented below. + +Since `@metamask/connect-evm` 2.0.0, MetaMask Connect EVM announces its provider through EIP-6963 by +default when the native MetaMask extension hasn't already announced one. Pass `skipAutoAnnounce: true` +to `createEVMClient` to opt out, and call `client.announceProvider` to announce manually. +::: + +## Properties + +### `isMetaMask` + +This property is `true` if the user has MetaMask installed, and `false` otherwise. + +:::note +This property is non-standard. +Non-MetaMask providers may also set this property to `true`. +::: + +#### Example + +```typescript +provider.isMetaMask // Or window.ethereum.isMetaMask if you don't support EIP-6963. +``` + +## Methods + +### `isConnected` + +Indicates whether the provider is connected to the current chain. +If the provider isn't connected, reload the page to re-establish the connection. +See the [`connect`](#connect) and [`disconnect`](#disconnect) events for more information. + +:::note +This method is unrelated to [managing user accounts](../guides/manage-user-accounts.md). +In the provider interface, "connected" and "disconnected" refer to whether the provider can make RPC +requests to the current chain. +::: + +#### Parameters + +None. + +#### Returns + +`true` if the provider is connected to the current chain, `false` otherwise. + +#### Example + +```typescript +provider.isConnected() // Or window.ethereum.isConnected() if you don't support EIP-6963. +``` + +### `request` + +This method is used to submit [JSON-RPC API requests](json-rpc-api/index.md) to Ethereum using MetaMask. + +#### Parameters + +An object containing: + +- `method`: `string` - The JSON-RPC API method name. +- `params`: `array` or `object` - (Optional) Parameters of the RPC method. + In practice, if a method has parameters, they're almost always of type `array`. + +#### Returns + +A promise that resolves to the result of the RPC method call. +If the request fails, the promise rejects with an [error](#errors). + +#### Example + +The following is an example of using `request` to call +[`eth_sendTransaction`](json-rpc-api/index.md): + +```javascript +provider // Or window.ethereum if you don't support EIP-6963. + .request({ + method: 'eth_sendTransaction', + params: [ + { + from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155', + to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567', + gas: '0x76c0', // 30400 + gasPrice: '0x9184e72a000', // 10000000000000 + value: '0x9184e72a', // 2441406250 + data: '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675', + }, + ], + }) + .then(result => { + // The result varies by RPC method. + // For example, this method returns a transaction hash hexadecimal string upon success. + }) + .catch(error => { + // If the request fails, the Promise rejects with an error. + }) +``` + +### `_metamask.isUnlocked` + +:::caution +This method is experimental. +Use it at your own risk. +::: + +Indicates if MetaMask is unlocked by the user. +MetaMask must be unlocked to perform any operation involving user accounts. +Note that this method doesn't indicate if the user has exposed any accounts to the caller. + +#### Parameters + +None. + +#### Returns + +A promise that resolves to `true` if MetaMask is unlocked by the user, and `false` otherwise. + +#### Example + +```typescript +provider._metamask.isUnlocked() // Or window.ethereum._metamask.isUnlocked() if you don't support EIP-6963. +``` + +## Events + +The MetaMask provider emits events using the Node.js +[`EventEmitter`](https://nodejs.org/api/events.html) API. +The following is an example of listening to the [`accountsChanged`](#accountschanged) event. + +[Remove listeners](#remove-event-listeners) after you're done listening to an event (for example, on component +`unmount` in React). + +```javascript +function handleAccountsChanged(accounts) { + // Handle new accounts, or lack thereof. +} + +provider // Or window.ethereum if you don't support EIP-6963. + .on('accountsChanged', handleAccountsChanged) + +// Later + +provider // Or window.ethereum if you don't support EIP-6963. + .removeListener('accountsChanged', handleAccountsChanged) +``` + +### `accountsChanged` + +```typescript +provider // Or window.ethereum if you don't support EIP-6963. + .on("accountsChanged", handler: (accounts: Array) => void); +``` + +The provider emits this event when the return value of the +[`eth_accounts`](json-rpc-api/index.md) RPC +method changes. +`eth_accounts` returns either an empty array, or an array that contains the addresses of the accounts +the caller is permitted to access with the most recently used account first. +Callers are identified by their URL origin, which means that all sites with the same origin share +the same permissions. + +This means that the provider emits `accountsChanged` when the user's exposed account address changes. +Listen to this event to [handle accounts](../guides/manage-user-accounts.md). + +### `chainChanged` + +```typescript +provider // Or window.ethereum if you don't support EIP-6963. + .on("chainChanged", handler: (chainId: string) => void); +``` + +The provider emits this event when the currently connected chain changes. +The `chainId` is a hex string (for example, `0x1`), not a decimal number. +Listen to this event to [detect a user's network](../guides/manage-networks.md). + +### `connect` + +```typescript +interface ConnectInfo { + chainId: string; + accounts: string[]; +} + +provider // Or window.ethereum if you don't support EIP-6963. + .on("connect", handler: (connectInfo: ConnectInfo) => void); +``` + +The provider emits this event when it's first able to submit RPC requests to a chain. +When using MetaMask Connect EVM, the `connect` event also includes the `accounts` array. +We recommend listening to this event and using the +[`isConnected`](#isconnected) provider method to determine when +the provider is connected. + +### `disconnect` + +```typescript +provider // Or window.ethereum if you don't support EIP-6963. + .on("disconnect", handler: (error: ProviderRpcError) => void); +``` + +The provider emits this event if it becomes unable to submit RPC requests to a chain. +In general, this only happens due to network connectivity issues or some unforeseen error. + +When the provider emits this event, it doesn't accept new requests until the connection to the chain +is re-established, which requires reloading the page. +You can also use the [`isConnected`](#isconnected) provider method +to determine if the provider is disconnected. + +### `message` + +```typescript +interface ProviderMessage { + type: string; + data: unknown; +} + +provider // Or window.ethereum if you don't support EIP-6963. + .on("message", handler: (message: ProviderMessage) => void); +``` + +The provider emits this event when it receives a message that the user should be notified of. +The `type` property identifies the kind of message. + +RPC subscription updates are a common use case for this event. +For example, if you create a subscription using +[`eth_subscribe`](json-rpc-api/index.md), each +subscription update is emitted as a `message` event with a `type` of `eth_subscription`. + +### Remove event listeners + +#### `removeListener` + +Use the `removeListener` method to remove specific event listeners from an `EventEmitter` object. +In the following example `removeListener` is used to remove the `connect` and `accountsChanged` events: + +```javascript +// Use window.ethereum instead of provider if EIP-6963 is not supported. + +// Add listeners +provider.on('_initialized', updateWalletAndAccounts) +provider.on('connect', updateWalletAndAccounts) +provider.on('accountsChanged', updateWallet) +provider.on('chainChanged', updateWalletAndAccounts) +provider.on('disconnect', disconnectWallet) + +// Remove individual listeners +provider.removeListener('connect', updateWalletAndAccounts) +provider.removeListener('accountsChanged', updateWallet) +``` + +The first argument of `removeListener` is the event name, and the second argument is +a reference to the function passed to `on` for the event. + +#### `removeAllListeners` + +Use `removeAllListeners` to remove all listeners from the event emitter at once. This method is helpful when you need to clean up all listeners simultaneously. + +:::caution + +Use `removeAllListeners` with caution. +This method clears all event listeners associated with the emitter, not only the listeners set up by the application code. +Using this method can unexpectedly clear important event handlers, interfere with scripts, and make debugging more complex. +You can use the `removeListener` method to safely remove specific listeners. + +::: + +```javascript +// Use window.ethereum instead of provider if EIP-6963 is not supported. + +// Add listeners +provider.on('_initialized', updateWalletAndAccounts) +provider.on('connect', updateWalletAndAccounts) +provider.on('accountsChanged', updateWallet) +provider.on('chainChanged', updateWalletAndAccounts) +provider.on('disconnect', disconnectWallet) + +// Remove all listeners +provider.removeAllListeners() +``` + +In the provided code example, `removeAllListeners` is called to remove all event listeners attached to the `provider` object. This cleanup function deletes any event listeners that are no longer needed. + +## Errors + +All errors returned by the MetaMask provider follow this interface: + +```typescript +interface ProviderRpcError extends Error { + message: string + code: number + data?: unknown +} +``` + +The [`request`](#request) provider method throws errors eagerly. +You can use the error `code` property to determine why the request failed. +Common codes and their meaning include: + +- `4001` - The request is rejected by the user. +- `-32002` - A request is already pending. Don't send another request; wait for the user to respond in MetaMask. +- `4902` - The chain isn't recognized by the wallet. Add it with `wallet_addEthereumChain`, or pass `chainConfiguration` to [`switchChain`](methods.md#switchchain). +- `-32602` - The parameters are invalid. +- `-32603` - Internal error. + +For the complete list of errors, see [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193#provider-errors) +and [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474#error-codes). + +:::tip +The [`eth-rpc-errors`](https://npmjs.com/package/eth-rpc-errors) package implements all RPC errors +returned by the MetaMask provider, and can help you identify their meaning. +::: + +:::note Typed errors +When you use the multichain client, the core (`@metamask/connect-multichain`) exports typed error +classes for `instanceof` checks: `RPCInvokeMethodErr` (wraps wallet `invokeMethod` errors; read the +wallet's original code from `err.rpcCode`), `RPCHttpErr`, `RPCReadonlyResponseErr`, and +`RPCReadonlyRequestErr`. The EVM provider itself rejects with a standard EIP-1193 `ProviderRpcError` +(use `err.code`). +::: + +## Next steps + +- [JSON-RPC API reference](./json-rpc-api/index.md) +- [Manage user accounts](../guides/manage-user-accounts.md) +- [Manage networks](../guides/manage-networks.md) +- [Send transactions](../guides/send-transactions/index.md) diff --git a/metamask-connect/index.md b/metamask-connect/index.md new file mode 100644 index 00000000000..7ce9e74476e --- /dev/null +++ b/metamask-connect/index.md @@ -0,0 +1,105 @@ +--- +title: 'MetaMask Connect - Dapp Wallet Integration SDK' +sidebar_label: Introduction +toc_max_heading_level: 2 +description: Connect your dapp to the MetaMask wallet across desktop, mobile, and native apps with multichain EVM and Solana support using a single SDK integration. +keywords: + [ + connect, + sdk, + integrate, + dapp, + multichain, + evm, + solana, + metamask connect, + wallet connection, + browser extension, + mobile wallet, + CAIP-25, + wallet SDK, + web3 wallet, + cryptocurrency wallet, + ] +--- + +import CardList from '@site/src/components/CardList' + +# Seamlessly connect to the MetaMask wallet + +MetaMask Connect enables a fast, reliable connection from your dapp to the MetaMask browser extension and the MetaMask mobile app. +With a single integration, you can onboard users and interact with their accounts across desktop browsers, mobile browsers, and native apps. It offers multiple +[integration options](./integration-options.md), from single-ecosystem clients for EVM or Solana to a multichain client that connects to multiple chains in a single session. + +MetaMask Connect replaces the legacy MetaMask SDK with a complete rewrite built on the [CAIP-25 Multichain API](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md) and a more secure and robust relay server infrastructure for improved reliability. +MetaMask Connect detects the user's environment and selects the best connection method, whether it communicates directly with the MetaMask browser extension, prompts the user to scan a QR code, or deeplinks to the MetaMask mobile app. + +## Why use MetaMask Connect? + +If a user has the MetaMask browser extension installed, standards such as [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) and [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) support wallet discovery. +When the extension isn't available (for example, on mobile, in a different browser, or on a new device), users need another way to connect. +MetaMask Connect fills that gap and provides the following benefits: + +- **Cross-platform connections**: Reach users on any device. When the MetaMask browser extension isn't available, MetaMask Connect connects users through the MetaMask mobile app with no additional setup. +- **Multichain sessions**: Request access to EVM, Solana, and future ecosystems in a single connection instead of connecting per chain. +- **Persistent sessions**: Keep sessions across page reloads and new tabs so users don't need to reconnect. +- **Consistent API**: Use the same interface whether users connect through the extension or the MetaMask mobile app. + +## Get started + + + +## Frequently asked questions + +### How is MetaMask Connect different from the legacy MetaMask SDK? + +MetaMask Connect is a complete rewrite of the legacy SDK. +Key differences include: + +- Async initialization with `createEVMClient`. +- A singleton client pattern built on the shared `createMultichainClient` core (the EVM and Solana clients wrap it). +- Built-in multichain support for both EVM and Solana. +- CAIP-25 session management. +- Improved relay server infrastructure. + +See the [migration guide](evm/guides/migrate-from-sdk.md) for step-by-step upgrade instructions. + +### Does MetaMask Connect support mobile? + +Yes. MetaMask Connect automatically detects the user's platform and selects the best connection method. +On mobile browsers and native apps it uses deeplinks to open the MetaMask mobile app, and on desktop browsers without the extension it shows a QR code to scan with the MetaMask mobile app. +See [supported platforms](supported-platforms.md) for the full matrix. + +### Which blockchain networks does MetaMask Connect support? + +MetaMask Connect supports Ethereum and all EVM-compatible networks (Polygon, Arbitrum, Optimism, Linea, Base, etc.) through `@metamask/connect-evm`, Solana through `@metamask/connect-solana`, and both simultaneously through `@metamask/connect-multichain`. +See [integration options](integration-options.md) to choose the right package. + +### Do I need an Infura API key to use MetaMask Connect? + +We recommend using an Infura API key for reliable RPC access and relay connections. +You can get a free API key from the [Infura dashboard](/developer-tools/dashboard/get-started/create-api). +MetaMask Connect uses the API key to generate RPC URLs for supported networks via the `getInfuraRpcUrls` helper. diff --git a/metamask-connect/integration-options.md b/metamask-connect/integration-options.md new file mode 100644 index 00000000000..1dd2bca968f --- /dev/null +++ b/metamask-connect/integration-options.md @@ -0,0 +1,104 @@ +--- +title: 'MetaMask Connect Integration Options - Multichain, EVM, and Solana' +sidebar_label: Integration options +toc_max_heading_level: 2 +description: Compare MetaMask Connect integration options including multichain, single-ecosystem EVM, and Solana clients to find the right fit for your dapp. +keywords: + [ + connect, + sdk, + integration, + evm, + solana, + multichain, + packages, + connect-evm, + connect-solana, + connect-multichain, + single ecosystem, + npm package, + wallet integration guide, + ] +--- + +# Integration options + +MetaMask Connect offers three integration paths: + +- **Multichain** (`@metamask/connect-multichain`) for connecting to EVM and Solana in a single session. +- **Single-ecosystem** (`@metamask/connect-evm` or `@metamask/connect-solana`) for drop-in per-chain providers. +- **Multi-ecosystem** (both single-ecosystem packages together) for dapps supporting both chains with familiar interfaces. + +We recommend using the multichain client, which provides a single connection prompt across +all ecosystems. +If your dapp targets a single chain or you prefer per-chain provider interfaces, you can use the single-ecosystem or multi-ecosystem option. + +All options share the same underlying transport and session infrastructure, so you can start with the option that fits your dapp today and migrate later. +The EVM and Solana clients wrap the same `createMultichainClient` singleton core. + +## Multichain (recommended) + +Use [`@metamask/connect-multichain`](multichain/index.mdx) to work directly with the +[Multichain API](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md). This uses +scopes and `wallet_invokeMethod` instead of per-chain RPC, and supports a single connection prompt +across all ecosystems. + +## Single-ecosystem + +If your dapp targets a single ecosystem, use [`@metamask/connect-evm`](evm/index.mdx) or [`@metamask/connect-solana`](solana/index.mdx) to add MetaMask Connect to an existing dapp with minimal code changes. + +- **EVM**: Provides an [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) compatible provider that + works with `ethers.js`, `viem`, and `web3.js`. +- **Solana**: Provides a [Wallet Standard](https://github.com/wallet-standard/wallet-standard) + compatible wallet that works with the Solana Wallet Adapter ecosystem. + +## Multi-ecosystem + +If your dapp supports both EVM and Solana, use [`@metamask/connect-evm`](evm/index.mdx) and +[`@metamask/connect-solana`](solana/index.mdx) together to +support both ecosystems while keeping familiar provider interfaces for each. + +## Compare options + +| | Multichain | Single-ecosystem | Multi-ecosystem | +| ------------------ | -------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------- | +| **Package** | [`connect-multichain`](multichain/index.mdx) | [`connect-evm`](evm/index.mdx) or [`connect-solana`](solana/index.mdx) | Both `connect-evm` and `connect-solana` | +| **Effort** | Medium (scope-based API) | Low (drop-in provider) | Low (two providers) | +| **EVM support** | Via `wallet_invokeMethod` | EIP-1193 provider | EIP-1193 provider | +| **Solana support** | Via `wallet_invokeMethod` | Wallet Standard | Wallet Standard | +| **Cross-chain UX** | Single prompt for all ecosystems | Single ecosystem | Separate connect per ecosystem | +| **Sessions** | Full control | Automatic | Automatic per-client | +| **Best for** | Multichain-native dapps | Existing single-chain dapps | Dapps supporting EVM and Solana | + + + +## Frequently asked questions + +### Which integration option should I choose? + +Choose **multichain** (`@metamask/connect-multichain`) if your dapp needs to connect to both EVM and Solana in a single session with one approval prompt. +Choose **single-ecosystem** (`@metamask/connect-evm` or `@metamask/connect-solana`) if your dapp targets one chain and you want a drop-in provider compatible with existing libraries. +Choose **multi-ecosystem** (both single-ecosystem packages) if you want per-chain providers for both EVM and Solana. + +### Can I migrate between integration options later? + +Yes. All three options share the same underlying transport and session infrastructure, so you can start with a single-ecosystem client and migrate to multichain later without changing your backend or connection logic. +The migration involves updating your client initialization code and adopting scope-based RPC routing. + +### Does MetaMask Connect work with Wagmi, ethers.js, and viem? + +Yes. The EVM client (`@metamask/connect-evm`) provides an EIP-1193 compatible provider that works directly with viem's `custom` transport, ethers.js `BrowserProvider`, and web3.js `Web3` constructor. +The Solana client provides a Wallet Standard compatible wallet that works with the Solana Wallet Adapter ecosystem. diff --git a/metamask-connect/multichain/_assets/metamask-connect-modal.png b/metamask-connect/multichain/_assets/metamask-connect-modal.png new file mode 100644 index 00000000000..e589f889324 Binary files /dev/null and b/metamask-connect/multichain/_assets/metamask-connect-modal.png differ diff --git a/metamask-connect/multichain/concepts/accounts.md b/metamask-connect/multichain/concepts/accounts.md new file mode 100644 index 00000000000..5082241374d --- /dev/null +++ b/metamask-connect/multichain/concepts/accounts.md @@ -0,0 +1,48 @@ +--- +sidebar_label: Account IDs +description: Learn how CAIP-10 account IDs work in MetaMask Connect Multichain to uniquely identify accounts across chains. +keywords: + [ + multichain, + caip, + caip-10, + account ID, + chain address, + eip155, + solana account, + cross-chain identity, + ] +--- + +# Account IDs (CAIP-10) + +A plain address like `0xab16...` does not identify which chain it belongs to. The same address can +exist on Ethereum, Polygon, and other EVM chains. In a multichain context, you need to know which +account on which chain the user authorized. + +Account IDs solve this by combining a [scope](./scopes.md) with an address. After a user connects, the +[session](./sessions.md) returns account IDs, so you know which chain each address belongs to. + +## Format and examples + +An account ID uses `namespace:reference:address` format, as defined by +[CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md). + +| Ecosystem | Example | +| --------- | -------------------------------------------------------------------------------------- | +| EVM | `eip155:1:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb` | +| Solana | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:7S3P4HxJpyyigGzodYwHtCxZyUQe9JiBMHyRWXArAaKv` | + +Account IDs appear in the [`sessionScopes`](./sessions.md) returned by +[`getSession`](../reference/methods.md#getsession). To extract the address from a CAIP-10 +account ID: + +```javascript +const accountId = 'eip155:1:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb' +const address = accountId.split(':')[2] +``` + +## Next steps + +- [Scopes](./scopes.md): Understand CAIP-2 chain identifiers used in account IDs. +- [Sessions](./sessions.md): Learn how accounts are grouped into authorized sessions. diff --git a/metamask-connect/multichain/concepts/scopes.md b/metamask-connect/multichain/concepts/scopes.md new file mode 100644 index 00000000000..f7844ade6bf --- /dev/null +++ b/metamask-connect/multichain/concepts/scopes.md @@ -0,0 +1,85 @@ +--- +title: 'Multichain Scopes - MetaMask Connect' +sidebar_label: Scopes +description: Learn how CAIP-2 scopes work in MetaMask Connect Multichain to identify chains across ecosystems. +keywords: + [ + multichain, + caip, + scope, + caip-2, + chain id, + chain namespace, + blockchain identifier, + eip155, + solana scope, + ] +--- + +# Scopes (CAIP-2) + +MetaMask Connect Multichain uses CAIP standards to identify chains, [accounts](./accounts.md), +and [sessions](./sessions.md). + +Traditional single-chain dapps identify networks with a numeric chain ID (for example, `1` for +Ethereum Mainnet). That works within EVM ecosystems, but it does not generalize across ecosystems. +Solana does not use numeric chain IDs, and a raw value like `1` is ambiguous without an ecosystem +context. + +Scopes solve this by providing a **universal chain identifier** for a chain or set of chains. +When you [`connect`](../reference/methods.md#connect) to MetaMask, you pass an array of scopes to +declare exactly which chains your dapp needs. When you call +[`invokeMethod`](../reference/methods.md#invokemethod), you pass a scope to target the correct chain +without switching networks. + +## Format and examples + +A scope is a chain identifier in `namespace:reference` format, as defined by +[CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md). It identifies +a specific blockchain across any ecosystem. + +- The **namespace** identifies the ecosystem or standard (for example, `eip155` for EVM, `solana` + for Solana). +- The **reference** identifies a specific chain within that namespace. + +```javascript +// Connect to Ethereum, Polygon, and Solana in a single call +await client.connect( + [ + 'eip155:1', // Ethereum Mainnet + 'eip155:137', // Polygon Mainnet + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', // Solana Mainnet + ], + [] +) + +// Send an RPC request to a specific chain using its scope +const balance = await client.invokeMethod({ + scope: 'eip155:1', + request: { method: 'eth_getBalance', params: ['0xab1...', 'latest'] }, +}) +``` + +## Supported scopes + +| Ecosystem | Format | Examples | +| --------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| EVM | `eip155:` | `eip155:1` (Ethereum), `eip155:59144` (Linea), `eip155:137` (Polygon) | +| Solana | `solana:` | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` (Mainnet), `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` (Devnet), `solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z` (Testnet) | + +## Common EVM scopes + +| Network | Scope | +| ---------------- | ----------------- | +| Ethereum Mainnet | `eip155:1` | +| Linea Mainnet | `eip155:59144` | +| Base Mainnet | `eip155:8453` | +| Polygon Mainnet | `eip155:137` | +| Arbitrum One | `eip155:42161` | +| Optimism | `eip155:10` | +| Sepolia testnet | `eip155:11155111` | + +## Next steps + +- [Accounts](./accounts.md): Learn how CAIP-10 account IDs extend scopes with addresses. +- [Sessions](./sessions.md): Learn how scopes and accounts are grouped into authorized connections. diff --git a/metamask-connect/multichain/concepts/sessions.md b/metamask-connect/multichain/concepts/sessions.md new file mode 100644 index 00000000000..2c3d6cb7dfc --- /dev/null +++ b/metamask-connect/multichain/concepts/sessions.md @@ -0,0 +1,47 @@ +--- +sidebar_label: Sessions +description: Learn how CAIP-25 sessions work in MetaMask Connect Multichain to group authorized scopes and accounts into a single connection. +keywords: + [ + multichain, + caip, + caip-25, + session, + sessionScopes, + connection, + persistence, + disconnect, + getSession, + ] +--- + +# Sessions (CAIP-25) + +A session is an authorized connection between your dapp and MetaMask that can span multiple blockchain ecosystems and chains, as defined in +[CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md). +When a user approves a connection, MetaMask creates a session including the approved [scopes](./scopes.md) and [accounts](./accounts.md). + +MetaMask Connect Multichain provides the method [`getSession`](../reference/methods.md#getsession) to get information about the current session, +and the method [`disconnect`](../reference/methods.md#disconnect) to end or update the session. +For more information about the session lifecycle, see [CAIP-316](https://standards.chainagnostic.org/CAIPs/caip-316). + +A session is persistent, meaning it survives across page reloads and new tabs. + +A session includes `sessionScopes`, which contains the chains the user approved, each with its associated accounts. +The following example extracts the approved Ethereum Mainnet and Solana Mainnet accounts from `sessionScopes`: + +```javascript +const session = await client.provider.getSession() + +const ethAccounts = session.sessionScopes['eip155:1']?.accounts || [] +const solAccounts = session.sessionScopes['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']?.accounts || [] +``` + +:::note +MetaMask doesn't support session IDs. +::: + +## Next steps + +- [Scopes](./scopes.md): Understand CAIP-2 chain identifiers used in sessions. +- [Accounts](./accounts.md): Learn how CAIP-10 account IDs identify accounts across chains. diff --git a/metamask-connect/multichain/guides/headless-mode.md b/metamask-connect/multichain/guides/headless-mode.md new file mode 100644 index 00000000000..2c6661ac245 --- /dev/null +++ b/metamask-connect/multichain/guides/headless-mode.md @@ -0,0 +1,152 @@ +--- +title: 'Use Headless Mode - MetaMask Connect Multichain' +sidebar_label: Use headless mode +description: Render a custom QR code or connection UI by using headless mode with MetaMask Connect Multichain. +keywords: + [ + headless, + QR code, + custom UI, + display_uri, + multichain, + MetaMask, + Connect, + connection, + modal, + deeplink, + ] +--- + +# Use headless mode + +By default, MetaMask Connect renders its own QR code modal when connecting to MetaMask Mobile +via MetaMask Wallet Protocol (MWP). +Headless mode suppresses this built-in modal so you can render your own connection UI. + +Use headless mode when you want to: + +- Display a custom-styled QR code that matches your dapp's design. +- Show the connection URI in a different format (for example, a deeplink button instead of a QR code). +- Integrate the connection flow into an existing modal or onboarding wizard. + +## Prerequisites + +Follow Step 1 of the [quickstart](../quickstart/javascript.md) to install the multichain client. + +## Steps + +### 1. Initialize the client with headless mode + +Initialize a multichain client using [`createMultichainClient`](../reference/methods.md#createmultichainclient), and set `ui.headless` to `true`: + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'My Dapp', + url: window.location.href, + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: '' }), + }, + }, + ui: { headless: true }, +}) +``` + +### 2. Register a `display_uri` listener before connecting + +The `display_uri` event fires during the connecting phase with a one-time-use pairing URI. +You **must** register the listener before calling `connect`, or you may miss the event: + +```javascript +client.on('display_uri', uri => { + showCustomQrModal(uri) +}) + +// Register a session listener too, so restored sessions are captured. +client.on('wallet_sessionChanged', session => { + // Update your app state with the new session +}) +``` + +### 3. Connect and handle the result + +Call [`connect`](../reference/methods.md#connect) to connect to MetaMask, and handle the result: + +```javascript +try { + await client.connect(['eip155:1', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], []) + hideCustomQrModal() +} catch (err) { + hideCustomQrModal() + if (err.code === 4001) { + // User rejected — show retry UI + } else if (err.code === -32002) { + // A request is already pending — wait for the user to respond, don't call connect again + } else { + console.error('Connection failed:', err) + } +} +``` + +## Important considerations + +### URI is one-time-use + +The pairing URI delivered by `display_uri` is a one-time-use token. +Once used or expired, it cannot be reused. +If the connection fails, call `connect` again to generate a fresh URI. + +### `display_uri` only fires during connecting + +The event fires only while the client status is `'connecting'`. +After the connection resolves (success or error), `display_uri` stops firing. + +### Extension connections skip QR + +When the MetaMask browser extension is installed and `ui.preferExtension` is `true` (the default), +the SDK connects directly through the extension. +No `display_uri` event fires because no QR code is needed. + +To display the QR connection option even when the extension is available, set `ui.preferExtension` to `false`: + +```javascript +const client = await createMultichainClient({ + dapp: { name: 'My Dapp', url: window.location.href }, + ui: { + headless: true, + preferExtension: false, + }, +}) +``` + +### Monitor connection status + +Use the [`stateChanged`](../reference/methods.md#events) event to track the connection lifecycle and update your UI accordingly: + +```javascript +client.on('stateChanged', status => { + // status: 'loaded' | 'pending' | 'connecting' | 'connected' | 'disconnected' + switch (status) { + case 'connecting': + showLoadingIndicator() + break + case 'connected': + hideCustomQrModal() + showConnectedUI() + break + case 'disconnected': + showDisconnectedUI() + break + } +}) +``` + +## Next steps + +- [Send transactions on EVM and Solana](send-transactions.md) using `invokeMethod`. +- [Sign messages on EVM and Solana](sign-transactions.md) using `invokeMethod`. +- See the [Multichain methods reference](../reference/methods.md) for the full API. diff --git a/metamask-connect/multichain/guides/send-transactions.md b/metamask-connect/multichain/guides/send-transactions.md new file mode 100644 index 00000000000..127a2642f36 --- /dev/null +++ b/metamask-connect/multichain/guides/send-transactions.md @@ -0,0 +1,239 @@ +--- +title: 'Send Cross-Chain Transactions - MetaMask Connect Multichain' +sidebar_label: Send transactions +description: Send EVM and Solana transactions from a single MetaMask Connect Multichain session using invokeMethod, with no network switching required. +keywords: + [ + multichain, + evm, + solana, + transaction, + send, + invokeMethod, + signAndSendTransaction, + multichain transaction, + eth_sendTransaction, + RPC routing, + ] +--- + +# Send EVM and Solana transactions + +This guide shows you how to send transactions on both EVM networks and Solana from a single multichain session. +No network switching is required. + +## Prerequisites + +- Follow Step 1 of the [quickstart](../quickstart/javascript.md) to install the multichain client. +- To build Solana transactions, install `@solana/web3.js`: + +```bash npm2yarn +npm install @solana/web3.js +``` + +## Initialize and connect + +Initialize a multichain client using [`createMultichainClient`](../reference/methods.md#createmultichainclient), +and connect to both ecosystems using [`connect`](../reference/methods.md#connect): + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'Multichain Demo', + url: window.location.href, + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: 'YOUR_INFURA_API_KEY' }), + }, + }, +}) + +await client.connect( + ['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], // Ethereum, Polygon, Solana + [] +) +``` + +## Understand RPC routing + +The multichain client routes EVM methods based on type: + +| Route | Methods | Transport | +| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | +| **RPC node** | `eth_call`, `eth_getBalance`, `eth_getTransactionCount`, `eth_blockNumber`, `eth_getTransactionReceipt`, `eth_estimateGas`, `eth_getCode`, `eth_getLogs` | Infura / custom RPC URL from `supportedNetworks` | +| **Wallet** | `eth_sendTransaction`, `personal_sign`, `eth_signTypedData_v4`, `wallet_switchEthereumChain`, `wallet_addEthereumChain` | MetaMask (extension or mobile) | + +All Solana methods route through the MetaMask wallet. There is no RPC node fallback for Solana. + +## Send an EVM transaction + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`eth_sendTransaction`](../../evm/reference/json-rpc-api/eth_sendTransaction.mdx) to send a transaction on any EVM chain in the session: + +```javascript +const txHash = await client.invokeMethod({ + scope: 'eip155:1', // Ethereum Mainnet + request: { + method: 'eth_sendTransaction', + params: [ + { + from: '0xYourAddress', + to: '0xRecipientAddress', + value: '0x2386F26FC10000', // 0.01 ETH in hex wei + gas: '0x5208', // 21000 gas (optional) + }, + ], + }, +}) +console.log('ETH tx hash:', txHash) +``` + +Target a different chain by changing the `scope`; for example, `eip155:137` for Polygon: + +```javascript +const txHash = await client.invokeMethod({ + scope: 'eip155:137', + request: { + method: 'eth_sendTransaction', + params: [ + { + from: '0xYourAddress', + to: '0xRecipientAddress', + value: '0x2386F26FC10000', // 0.01 POL in hex wei + }, + ], + }, +}) +console.log('POL tx hash:', txHash) +``` + +## Estimate gas + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`eth_estimateGas`](../../evm/reference/json-rpc-api/eth_estimateGas.mdx) to estimate the gas cost before sending. +This routes to the RPC node and does not prompt the user: + +```javascript +const gasEstimate = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'eth_estimateGas', + params: [ + { + from: '0xYourAddress', + to: '0xRecipientAddress', + value: '0x2386F26FC10000', + }, + ], + }, +}) +console.log('Estimated gas:', gasEstimate) +``` + +## Build and send a Solana transaction + +Build a transaction with `@solana/web3.js`, serialize it to base64, then send it with `signAndSendTransaction`. +This signs and broadcasts the transaction in one step: + +```javascript +import { Connection, PublicKey, SystemProgram, Transaction } from '@solana/web3.js' + +const connection = new Connection('https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY') +const fromPubkey = new PublicKey('YourSolanaPublicKey') +const toPubkey = new PublicKey('RecipientSolanaPublicKey') + +const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey, + toPubkey, + lamports: 1_000_000, // 0.001 SOL + }) +) + +transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash +transaction.feePayer = fromPubkey + +const serialized = transaction.serialize({ + requireAllSignatures: false, + verifySignatures: false, +}) +const base64Transaction = Buffer.from(serialized).toString('base64') + +const result = await client.invokeMethod({ + scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', + request: { + method: 'signAndSendTransaction', + params: { + account: { address: fromPubkey.toBase58() }, + transaction: base64Transaction, + }, + }, +}) +console.log('SOL tx signature:', result.signature) +``` + +## Sign a Solana transaction without sending + +Use `signTransaction` to get the signed transaction back without broadcasting it. +This is useful when you need to inspect or modify the signed output before submitting: + +```javascript +const signResult = await client.invokeMethod({ + scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', + request: { + method: 'signTransaction', + params: { + account: { address: fromPubkey.toBase58() }, + transaction: base64Transaction, + }, + }, +}) + +// Broadcast the signed transaction yourself +const signedBuffer = Buffer.from(signResult.transaction, 'base64') +const txId = await connection.sendRawTransaction(signedBuffer) +console.log('Transaction ID:', txId) +``` + +## Error handling + +| Error code | Description | Action | +| ---------- | ------------------------- | ---------------------------------------------------------- | +| `4001` | User rejected the request | Show a retry option. Do not treat as an application error. | +| `-32002` | Request already pending | Wait for the user to respond in MetaMask before retrying. | + +
+ +```javascript +try { + const txHash = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'eth_sendTransaction', + params: [ + { + from: '0xYourAddress', + to: '0xRecipientAddress', + value: '0x2386F26FC10000', + }, + ], + }, + }) +} catch (err) { + if (err.code === 4001) { + console.log('User rejected the transaction') + return + } + if (err.code === -32002) { + console.log('A transaction request is already pending') + return + } + throw err +} +``` + +## Next steps + +- [Sign messages on EVM and Solana.](sign-transactions.md) +- See the [Multichain SDK methods reference](../reference/methods.md). diff --git a/metamask-connect/multichain/guides/sign-transactions.md b/metamask-connect/multichain/guides/sign-transactions.md new file mode 100644 index 00000000000..65c3bbd177d --- /dev/null +++ b/metamask-connect/multichain/guides/sign-transactions.md @@ -0,0 +1,186 @@ +--- +title: 'Sign Messages Across Chains - MetaMask Connect Multichain' +sidebar_label: Sign messages +description: Sign messages and typed data on both EVM and Solana chains from a single MetaMask Connect Multichain session using invokeMethod. +keywords: + [ + multichain, + evm, + solana, + sign, + personal_sign, + signTypedData, + signMessage, + invokeMethod, + multichain signing, + cross-chain signature, + ] +--- + +# Sign messages on EVM and Solana + +This guide shows you how to sign messages and typed data on both EVM networks and Solana from a single multichain session. +No network switching is required. + +All signing methods route to the MetaMask wallet and require user approval. + +## Prerequisites + +Follow Step 1 of the [quickstart](../quickstart/javascript.md) to install the multichain client. + +## Initialize and connect + +Initialize a multichain client using [`createMultichainClient`](../reference/methods.md#createmultichainclient), +and connect to both ecosystems using [`connect`](../reference/methods.md#connect): + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'Multichain Demo', + url: window.location.href, + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: 'YOUR_INFURA_API_KEY' }), + }, + }, +}) + +await client.connect( + ['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], // Ethereum, Polygon, Solana + [] +) +``` + +## Sign an EVM message (`personal_sign`) + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`personal_sign`](../../evm/reference/json-rpc-api/personal_sign.mdx) to sign a plaintext message. +The message must be hex-encoded, and the params order is `[message, account]`: + +```javascript +const message = 'Hello MetaMask!' +const hexMessage = + '0x' + + Array.from(new TextEncoder().encode(message)) + .map(b => b.toString(16).padStart(2, '0')) + .join('') + +const signature = await client.invokeMethod({ + scope: 'eip155:1', // Ethereum Mainnet + request: { + method: 'personal_sign', + params: [hexMessage, '0xYourAddress'], + }, +}) +console.log('Signature:', signature) +``` + +Target a different chain by changing the `scope`; for example, `eip155:137` for Polygon. + +## Sign EVM typed data (`eth_signTypedData_v4`) + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`eth_signTypedData_v4`](../../evm/reference/json-rpc-api/eth_signTypedData_v4.mdx) to sign [EIP-712](https://eips.ethereum.org/EIPS/eip-712) structured data. +The params order is `[account, typedDataJSON]`. The typed data must be passed as a JSON string, not an object: + +```javascript +const typedData = { + types: { + EIP712Domain: [ + { name: 'name', type: 'string' }, + { name: 'version', type: 'string' }, + { name: 'chainId', type: 'uint256' }, + { name: 'verifyingContract', type: 'address' }, + ], + Mail: [ + { name: 'from', type: 'string' }, + { name: 'to', type: 'string' }, + { name: 'contents', type: 'string' }, + ], + }, + primaryType: 'Mail', + domain: { + name: 'My Dapp', + version: '1', + chainId: 1, + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', + }, + message: { + from: 'Alice', + to: 'Bob', + contents: 'Hello!', + }, +} + +const signature = await client.invokeMethod({ + scope: 'eip155:1', // Ethereum Mainnet + request: { + method: 'eth_signTypedData_v4', + params: ['0xYourAddress', JSON.stringify(typedData)], + }, +}) +console.log('Typed data signature:', signature) +``` + +:::note +The `EIP712Domain` type must be declared in `types` even though `primaryType` is never `EIP712Domain`. +Chain IDs in the typed data `domain.chainId` are integers (for example, `1`), not hex strings. +::: + +## Sign a Solana message (`signMessage`) + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with `signMessage` to sign an arbitrary message on Solana. +The message must be base64-encoded: + +```javascript +const message = btoa('Hello from Solana!') + +const result = await client.invokeMethod({ + scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', // Solana Mainnet + request: { + method: 'signMessage', + params: { + account: { address: 'YourSolanaPublicKeyBase58' }, + message, + }, + }, +}) +console.log('Signature:', result.signature) +``` + +## Error handling + +| Error code | Description | Action | +| ---------- | ------------------------- | ---------------------------------------------------------- | +| `4001` | User rejected the request | Show a retry option. Do not treat as an application error. | +| `-32002` | Request already pending | Wait for the user to respond in MetaMask before retrying. | + +
+ +```javascript +try { + const signature = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'personal_sign', + params: [hexMessage, '0xYourAddress'], + }, + }) +} catch (err) { + if (err.code === 4001) { + console.log('User rejected the signature request') + return + } + if (err.code === -32002) { + console.log('A signing request is already pending') + return + } + throw err +} +``` + +## Next steps + +- [Send EVM and Solana transactions.](send-transactions.md) +- See the [Multichain SDK methods reference](../reference/methods.md). diff --git a/metamask-connect/multichain/index.mdx b/metamask-connect/multichain/index.mdx new file mode 100644 index 00000000000..2d8a5a2cb52 --- /dev/null +++ b/metamask-connect/multichain/index.mdx @@ -0,0 +1,120 @@ +--- +title: 'MetaMask Connect Multichain - Cross-Chain Wallet API' +sidebar_label: Introduction +toc_max_heading_level: 2 +description: Connect to Ethereum, Solana, and other blockchain ecosystems from a single session using the MetaMask Connect Multichain API built on CAIP-25. +keywords: + [ + multichain, + caip-25, + evm, + solana, + session, + scope, + metamask connect multichain, + createMultichainClient, + cross-chain, + unified wallet session, + blockchain interoperability, + ] +--- + +import CardList from '@site/src/components/CardList' + +# Connect to multiple ecosystems + +Use MetaMask Connect Multichain (`@metamask/connect-multichain`) to connect to multiple blockchain networks and ecosystems in MetaMask at the same time. + +With the multichain client, your dapp can request access to EVM networks, Solana, and future ecosystems in a single connection prompt, instead of using separate connection flows for each chain. +This gives you more control than the [ecosystem-specific clients](/metamask-connect/integration-options), but requires adapting your dapp to work with the Multichain API rather than traditional per-chain RPC. + +:::tip Ready to code? +Jump to the [Quickstart](/metamask-connect/multichain/quickstart/javascript) to set up MetaMask Connect Multichain in minutes. +::: + +## How the Multichain API works + +MetaMask Connect Multichain is built on the [Multichain API (CAIP-25)](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md) specification, a chain-agnostic standard for wallet-dapp communication. +For the full rationale and specification, see [MetaMask Improvement Proposal-5 (MIP-5)](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-5.md). + +Instead of connecting to one chain at a time, the Multichain API lets you: + +- **Request access to multiple ecosystems at once**: For example, request Ethereum Mainnet, Polygon, and Solana Mainnet in a single session. +- **Send requests to any chain in the session**: For example, send a Solana transaction and an EVM transaction through the same connection. +- **Manage the full session lifecycle**: Connect, retrieve session data, invoke methods on any chain, and disconnect using [SDK methods](reference/methods.md) that wrap the underlying [Multichain API](reference/api.md). + +For dapps that support both EVM and Solana, this means one session covers both, and users see a single approval prompt. + +

+ MetaMask Connect Multichain Connect Modal +

+ +## When to use the multichain client + +The multichain client is a good fit when you're: + +- **Building a new dapp** designed from the ground up for multiple ecosystems. +- **Looking for the best cross-chain UX**: one connection prompt for all chains. +- **Needing full control** over the session lifecycle. + +If you're adding MetaMask Connect Multichain to an existing dapp and want minimal code changes, the [ecosystem-specific clients](../integration-options.md) ([`@metamask/connect-evm`](../evm/index.mdx) or [`@metamask/connect-solana`](../solana/index.mdx)) are a simpler starting point. You can always migrate later. + +## Get started + + + +## Frequently asked questions + +### What chains does the multichain client support? + +MetaMask Connect Multichain supports all EVM-compatible networks (Ethereum, Polygon, Arbitrum, Optimism, Linea, Base, and any chain with a [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) scope) and Solana (mainnet, devnet, and testnet; devnet and testnet are supported only in the MetaMask browser extension). +Future ecosystems will be supported as they are added to MetaMask. +Specify which chains to connect to using CAIP-2 scopes (for example, `eip155:1` for Ethereum Mainnet or `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` for Solana Mainnet). + +### How does CAIP-25 work in MetaMask Connect? + +[CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md) is a chain-agnostic standard for wallet-dapp communication. When your dapp calls [`connect`](reference/methods.md#connect) with a list of CAIP-2 scopes, MetaMask creates a session that authorizes your dapp to send requests to those chains. You then use [`invokeMethod`](reference/methods.md#invokemethod) to send JSON-RPC requests to any authorized chain by specifying its scope. The user sees a single approval prompt for all requested chains. + +### Can I use the multichain client alongside ecosystem-specific clients? + +The multichain client and ecosystem-specific clients share the same underlying session infrastructure. +While you can use both, we recommend choosing one approach. +The multichain client gives you full control over sessions and cross-chain RPC, while the ecosystem-specific clients provide familiar per-chain provider interfaces. +See [integration options](../integration-options.md) for a detailed comparison. diff --git a/metamask-connect/multichain/quickstart/javascript.md b/metamask-connect/multichain/quickstart/javascript.md new file mode 100644 index 00000000000..81f4ec30ae3 --- /dev/null +++ b/metamask-connect/multichain/quickstart/javascript.md @@ -0,0 +1,199 @@ +--- +title: 'JavaScript Quickstart - MetaMask Connect Multichain' +sidebar_label: JavaScript +description: Set up MetaMask Connect Multichain in a Vite JavaScript dapp to connect to EVM and Solana ecosystems from a single session using CAIP-25. +keywords: + [ + multichain, + evm, + solana, + connect, + caip-25, + scope, + vite template, + createMultichainClient, + multichain setup, + EVM Solana dapp, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Multichain quickstart + +Get started with MetaMask Connect Multichain in your JavaScript (Vite) dapp. + + + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- [Vite](https://vite.dev/) installed and configured. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [Bun](https://bun.sh/). +- [MetaMask](https://metamask.io/download) installed in your browser or on mobile. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the [Infura dashboard](https://app.infura.io). + +:::note +This quickstart uses [Vite](https://vite.dev/) as the build tool for convenience, but MetaMask Connect Multichain works with vanilla JavaScript or any build tool of your choice. +::: + + + +## Steps + +### 1. Install MetaMask Connect Multichain + +Install the multichain client in an existing JavaScript (Vite) project: + +```bash npm2yarn +npm install @metamask/connect-multichain +``` + +### 2. Initialize MetaMask Connect Multichain + +Initialize the multichain client using [`createMultichainClient`](../reference/methods.md#createmultichainclient). +The following is an example of initializing the client in a JavaScript (Vite) project: + +```javascript +import { createMultichainClient } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'My Multichain Dapp', + url: window.location.href, + iconUrl: 'https://mydapp.com/icon.png', // Or use base64Icon for embedded icons (e.g., React Native) + }, + api: { + supportedNetworks: { + 'eip155:1': 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + 'eip155:137': 'https://polygon-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': + 'https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, +}) +``` + +This example configures MetaMask Connect Multichain with the following options: + +- `dapp` - Ensures trust by showing your dapp's `name`, `url`, and `iconUrl` during connection. +- `api.supportedNetworks` - A map of [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) chain IDs to RPC URLs for all networks supported by the dapp. + +### 3. Connect and use the Multichain client + +Connect to MetaMask, get accounts from the session, and invoke RPC methods on a chain of your choice: + +```javascript +await client.connect(['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], []) + +const session = await client.provider.getSession() +const ethAccounts = session.sessionScopes['eip155:1']?.accounts || [] +const solAccounts = session.sessionScopes['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']?.accounts || [] +console.log('ETH accounts:', ethAccounts) +console.log('SOL accounts:', solAccounts) + +if (ethAccounts.length > 0) { + const ethAddress = ethAccounts[0].split(':')[2] + const ethBalance = await client.invokeMethod({ + scope: 'eip155:1', // Ethereum Mainnet + request: { + method: 'eth_getBalance', + params: [ethAddress, 'latest'], + }, + }) + console.log('ETH balance:', ethBalance) +} +``` + +The user sees a single approval prompt for all requested chains. +Use [`invokeMethod`](../reference/methods.md#invokemethod) to call RPC methods on any chain in the session by specifying a [scope](../concepts/scopes.md). + +:::tip Restore sessions +Register a [`wallet_sessionChanged`](../reference/methods.md#events) listener before calling `connect`, +and skip `connect` when [`getSession`](../reference/methods.md#getsession) already returns a session +(for example, after a page reload). See [sessions](../concepts/sessions.md). +::: + +## Multichain client methods at a glance + +| Method | Description | +| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| [`connect(scopes, caipAccountIds)`](../reference/methods.md#connect) | Connects to MetaMask with multichain [scopes](../concepts/scopes.md) | +| [`getSession`](../reference/methods.md#getsession) | Returns the current [session](../concepts/sessions.md) with approved accounts | +| [`invokeMethod({ scope, request })`](../reference/methods.md#invokemethod) | Calls an RPC method on a specific chain using a [scope](../concepts/scopes.md) | +| [`disconnect`](../reference/methods.md#disconnect) | Disconnects all [scopes](../concepts/scopes.md) and ends the session | +| [`disconnect(scopes)`](../reference/methods.md#disconnect) | Disconnects specific [scopes](../concepts/scopes.md) without ending the session | +| [`on(event, handler)`](../reference/methods.md#on) | Registers an event handler | +| [`off(event, handler)`](../reference/methods.md#off) | Removes an event handler | +| [`getInfuraRpcUrls({ infuraApiKey })`](../reference/methods.md#getinfurarpcurls) | Generates Infura RPC URLs keyed by CAIP-2 chain ID | + +## Next steps + +- Understand [scopes](../concepts/scopes.md), [accounts](../concepts/accounts.md), and [sessions](../concepts/sessions.md) for CAIP-2 chain identifiers, CAIP-10 account IDs, and CAIP-25 sessions. +- [Send transactions on EVM and Solana](../guides/send-transactions.md) from a single multichain session. +- [Sign messages on EVM and Solana](../guides/sign-transactions.md) using `invokeMethod`. +- See [Create a multichain dapp](../tutorials/create-multichain-dapp.md) for a full step-by-step tutorial with React. diff --git a/metamask-connect/multichain/quickstart/nodejs.md b/metamask-connect/multichain/quickstart/nodejs.md new file mode 100644 index 00000000000..b4563804471 --- /dev/null +++ b/metamask-connect/multichain/quickstart/nodejs.md @@ -0,0 +1,279 @@ +--- +title: 'Node.js Quickstart - MetaMask Connect Multichain' +description: Set up MetaMask Connect Multichain in a Node.js application to connect to EVM and Solana simultaneously using createMultichainClient, CAIP-25 scopes, and invokeMethod. +sidebar_label: Node.js +keywords: + [ + multichain, + evm, + solana, + connect, + Node.js, + caip-25, + scope, + createMultichainClient, + invokeMethod, + getInfuraRpcUrls, + QR code, + node quickstart, + ] +--- + +# Multichain Node.js quickstart + +Get started with MetaMask Connect Multichain in a Node.js application. +Connect to EVM and Solana networks simultaneously through a single session. +The SDK displays a QR code in the terminal that you scan with the MetaMask mobile app. + +:::info No polyfills required +Node.js has native support for `Buffer`, `crypto`, `stream`, and other modules that require +polyfilling in browser or React Native environments. +::: + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 20 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), or [pnpm](https://pnpm.io/installation). +- The [MetaMask mobile app](https://metamask.io/download/) installed on your phone. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the [Infura dashboard](https://app.infura.io). + +## Steps + +### 1. Install MetaMask Connect Multichain + +Install the multichain client in an existing Node.js project: + +```bash npm2yarn +npm install @metamask/connect-multichain +``` + +### 2. Initialize MetaMask Connect Multichain + +Create a file (`index.mjs`) and initialize the client using [`createMultichainClient`](../reference/methods.md#createmultichainclient). +In Node.js, there is no `window.location`, so you must set `dapp.url` explicitly. +Use [`getInfuraRpcUrls`](../reference/methods.md#getinfurarpcurls) to generate RPC URLs for all Infura-supported chains: + +```javascript title="index.mjs" +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'My Node.js Multichain App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, +}) +``` + +:::info Async client +`createMultichainClient` returns a promise. Always `await` it before using the client. +The client is a singleton; calling it again returns the same instance with merged options, except the +`dapp` object from the first call, which is never overwritten. +::: + +### 3. Connect to MetaMask + +Register a [`wallet_sessionChanged`](../reference/api.md#wallet_sessionchanged) listener using the [`on`](../reference/methods.md#on) method to capture session data, then connect with both EVM and Solana scopes in a single call. +A QR code appears in the terminal. Scan it with the MetaMask mobile app: + +```javascript +let session +client.on('wallet_sessionChanged', s => { + session = s +}) + +await client.connect(['eip155:1', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], []) + +const ethAddress = session?.sessionScopes?.['eip155:1']?.accounts?.[0]?.split(':').pop() +const solAddress = session?.sessionScopes?.[ + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' +]?.accounts?.[0] + ?.split(':') + .pop() +console.log('ETH:', ethAddress) +console.log('SOL:', solAddress) +``` + +The user sees a single approval prompt for all requested chains. + +### 4. Invoke EVM methods + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with an EVM scope to make JSON-RPC requests. +Read methods route through the RPC node; signing methods route through the wallet: + +```javascript +// Read: get balance via RPC node +const balance = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'eth_getBalance', + params: [ethAddress, 'latest'], + }, +}) +console.log('ETH balance:', balance) + +// Sign: personal_sign via wallet +const ethMsg = '0x' + Buffer.from('Hello Ethereum!', 'utf8').toString('hex') +const ethSig = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'personal_sign', + params: [ethMsg, ethAddress], + }, +}) +console.log('ETH signature:', ethSig) +``` + +### 5. Invoke Solana methods + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with a Solana scope. All Solana methods route through the wallet: + +```javascript +const solMsg = Buffer.from('Hello Solana!', 'utf8').toString('base64') + +const solSig = await client.invokeMethod({ + scope: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', + request: { + method: 'signMessage', + params: { + account: { address: solAddress }, + message: solMsg, + }, + }, +}) +console.log('SOL signature:', solSig.signature) +``` + +### 6. Disconnect + +Use [`disconnect`](../reference/methods.md#disconnect) to disconnect all scopes and end the session. + +```javascript +// Disconnect all scopes +await client.disconnect() +console.log('Disconnected') + +// Or disconnect specific scopes only +// await client.disconnect(['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']) +``` + +## Listen for session events + +[Step 3](#3-connect-to-metamask) captures the session with a minimal `wallet_sessionChanged` listener. For production use, expand the handler to track all scope and account changes throughout the session lifecycle: + +```javascript +client.on('wallet_sessionChanged', session => { + if (session?.sessionScopes) { + const scopes = Object.keys(session.sessionScopes) + console.log('Active scopes:', scopes) + for (const [scope, data] of Object.entries(session.sessionScopes)) { + console.log(` ${scope}:`, data.accounts) + } + } else { + console.log('Session ended') + } +}) +``` + +## Multichain client methods at a glance + +| Method | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| [`connect(scopes, caipAccountIds)`](../reference/methods.md#connect) | Connects to MetaMask with multichain [scopes](../concepts/scopes.md). | +| [`getSession`](../reference/methods.md#getsession) | Returns the current [session](../concepts/sessions.md) with approved accounts. | +| [`invokeMethod({ scope, request })`](../reference/methods.md#invokemethod) | Calls an RPC method on a specific chain using a [scope](../concepts/scopes.md). | +| [`disconnect`](../reference/methods.md#disconnect) | Disconnects all [scopes](../concepts/scopes.md) and ends the session. | +| [`disconnect(scopes)`](../reference/methods.md#disconnect) | Disconnects specific [scopes](../concepts/scopes.md) without ending the session. | +| [`on(event, handler)`](../reference/methods.md#on) | Registers an event handler. | +| [`getInfuraRpcUrls({ infuraApiKey })`](../reference/methods.md#getinfurarpcurls) | Generates Infura RPC URLs keyed by CAIP-2 chain ID. | + +## Full example + +```javascript title="index.mjs" +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const ETH_MAINNET = 'eip155:1' +const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' + +const client = await createMultichainClient({ + dapp: { + name: 'My Node.js Multichain App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, +}) + +// Capture session data via event before connecting +let session +client.on('wallet_sessionChanged', s => { + session = s +}) + +// Connect — scan the QR code with the MetaMask mobile app +await client.connect([ETH_MAINNET, SOLANA_MAINNET], []) + +const ethAddress = session?.sessionScopes?.[ETH_MAINNET]?.accounts?.[0]?.split(':').pop() +const solAddress = session?.sessionScopes?.[SOLANA_MAINNET]?.accounts?.[0]?.split(':').pop() +console.log('ETH:', ethAddress) +console.log('SOL:', solAddress) + +// Get ETH balance +const balance = await client.invokeMethod({ + scope: ETH_MAINNET, + request: { + method: 'eth_getBalance', + params: [ethAddress, 'latest'], + }, +}) +console.log('ETH balance:', balance) + +// Sign an Ethereum message +const ethMsg = '0x' + Buffer.from('Hello Ethereum!', 'utf8').toString('hex') +const ethSig = await client.invokeMethod({ + scope: ETH_MAINNET, + request: { + method: 'personal_sign', + params: [ethMsg, ethAddress], + }, +}) +console.log('ETH signature:', ethSig) + +// Sign a Solana message +const solMsg = Buffer.from('Hello Solana!', 'utf8').toString('base64') +const solSig = await client.invokeMethod({ + scope: SOLANA_MAINNET, + request: { + method: 'signMessage', + params: { + account: { address: solAddress }, + message: solMsg, + }, + }, +}) +console.log('SOL signature:', solSig.signature) + +// Disconnect +await client.disconnect() +console.log('Disconnected') +``` + +Run it with: + +```bash +node index.mjs +``` + +## Next steps + +- Understand [scopes](../concepts/scopes.md), [accounts](../concepts/accounts.md), and [sessions](../concepts/sessions.md) for CAIP-2 chain identifiers, CAIP-10 account IDs, and CAIP-25 sessions. +- [Sign multichain transactions](../guides/sign-transactions.md) using `invokeMethod`. +- [Send multichain transactions](../guides/send-transactions.md) from a single session. +- See [Create a multichain dapp](../tutorials/create-multichain-dapp.md) for a full step-by-step tutorial with React. diff --git a/metamask-connect/multichain/quickstart/react-native.md b/metamask-connect/multichain/quickstart/react-native.md new file mode 100644 index 00000000000..977e9679753 --- /dev/null +++ b/metamask-connect/multichain/quickstart/react-native.md @@ -0,0 +1,501 @@ +--- +title: 'React Native Quickstart - MetaMask Connect Multichain' +description: Set up MetaMask Connect Multichain in a React Native or Expo app to connect to EVM and Solana simultaneously with polyfills, metro configuration, and mobile deeplink support. +sidebar_label: React Native +keywords: + [ + connect, + MetaMask, + React, + Native, + multichain, + SDK, + dapp, + mobile dapp, + EVM, + Solana, + polyfills, + metro config, + CAIP-25, + invokeMethod, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Multichain React Native quickstart + +Get started with MetaMask Connect Multichain in your React Native or Expo dapp. +Connect to EVM and Solana networks simultaneously through a single session. + +## Steps + +### 1. Create a new project + +Create a new React Native or Expo project: + + + + +```bash +npx react-native@latest init MyMultichainProject +``` + + + + +```bash +npx create-expo-app MyMultichainProject --template +``` + + + + +### 2. Install dependencies + +Install MetaMask Connect Multichain and required polyfill packages: + +```bash +npm install @metamask/connect-multichain react-native-get-random-values buffer @react-native-async-storage/async-storage readable-stream +``` + +For Solana transaction building (optional): + +```bash +npm install @solana/web3.js +``` + +### 3. Create polyfills + +Create `polyfills.ts` (at the project root or in `src/`) with all required global shims. +This file must be imported before any SDK code: + +```typescript title="polyfills.ts" +import { Buffer } from 'buffer' + +global.Buffer = Buffer + +let windowObj: any +if (typeof global !== 'undefined' && global.window) { + windowObj = global.window +} else if (typeof window !== 'undefined') { + windowObj = window +} else { + windowObj = {} +} + +if (!windowObj.location) { + windowObj.location = { + hostname: 'mydapp.com', + href: 'https://mydapp.com', + } +} +if (typeof windowObj.addEventListener !== 'function') { + windowObj.addEventListener = () => {} +} +if (typeof windowObj.removeEventListener !== 'function') { + windowObj.removeEventListener = () => {} +} +if (typeof windowObj.dispatchEvent !== 'function') { + windowObj.dispatchEvent = () => true +} + +if (typeof global !== 'undefined') { + global.window = windowObj +} + +if (typeof global.Event === 'undefined') { + class EventPolyfill { + type: string + bubbles: boolean + cancelable: boolean + defaultPrevented = false + constructor(type: string, options?: EventInit) { + this.type = type + this.bubbles = options?.bubbles ?? false + this.cancelable = options?.cancelable ?? false + } + preventDefault() { + this.defaultPrevented = true + } + stopPropagation() {} + stopImmediatePropagation() {} + } + global.Event = EventPolyfill as any + windowObj.Event = EventPolyfill as any +} + +if (typeof global.CustomEvent === 'undefined') { + const EventClass = + global.Event || + class { + type: string + constructor(type: string) { + this.type = type + } + } + class CustomEventPolyfill extends (EventClass as any) { + detail: any + constructor(type: string, options?: CustomEventInit) { + super(type, options) + this.detail = options?.detail ?? null + } + } + global.CustomEvent = CustomEventPolyfill as any + windowObj.CustomEvent = CustomEventPolyfill as any +} +``` + +:::note +The `Event` and `CustomEvent` polyfills above are only required if you also use Wagmi, which dispatches DOM events. The `@metamask/connect-*` packages use `eventemitter3` internally and don't need them. +::: + +Create the empty module stub used by the Metro config: + +```javascript title="src/empty-module.js" +module.exports = {} +``` + +:::tip +For detailed troubleshooting of polyfill issues, see [React Native Metro polyfill issues](../../troubleshooting/metro-polyfill-issues.md). +::: + +### 4. Configure Metro + +Metro cannot resolve Node.js built-in modules. +Map them to React Native-compatible shims or the empty module stub: + + + + +```javascript title="metro.config.js" +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config') +const path = require('path') + +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +const config = { + resolver: { + extraNodeModules: { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, + }, + }, +} + +module.exports = mergeConfig(getDefaultConfig(__dirname), config) +``` + + + + +Run `npx expo customize metro.config.js` to create a default config, then update it: + +```javascript title="metro.config.js" +const { getDefaultConfig } = require('expo/metro-config') +const path = require('path') + +const config = getDefaultConfig(__dirname) +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +config.resolver.extraNodeModules = { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, +} + +module.exports = config +``` + + + + +### 5. Set up the entry file + +The import order is critical. +`react-native-get-random-values` **must** be the very first import, followed by the polyfills file, +before any other code: + +```javascript title="index.js or App.tsx (Bare RN) / app/_layout.tsx (Expo Router)" +import 'react-native-get-random-values' +import './polyfills' +``` + +:::caution +If you import anything from `@metamask/connect-multichain` before `react-native-get-random-values`, +you will get `crypto.getRandomValues is not a function`. +::: + +### 6. Use MetaMask Connect Multichain + +Initialize the multichain client using [`createMultichainClient`](../reference/methods.md#createmultichainclient). +`mobile.preferredOpenLink` is required; it tells MetaMask Connect how to open deeplinks to the MetaMask +Mobile app. +Connect to both EVM and Solana networks in a single session using [`connect`](../reference/methods.md#connect): + +```tsx +import React, { useEffect, useRef, useState, useCallback } from 'react' +import { View, Text, TouchableOpacity, StyleSheet, Alert, Linking, ScrollView } from 'react-native' +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const ETH_MAINNET = 'eip155:1' +const POLYGON = 'eip155:137' +const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' + +let clientPromise = null + +function getClient() { + if (!clientPromise) { + clientPromise = createMultichainClient({ + dapp: { + name: 'My Multichain RN Dapp', + url: 'https://mydapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, + mobile: { + preferredOpenLink: deeplink => Linking.openURL(deeplink), + }, + }) + } + return clientPromise +} + +export default function App() { + const clientRef = useRef(null) + const [session, setSession] = useState(null) + const [connecting, setConnecting] = useState(false) + + useEffect(() => { + let mounted = true + + async function init() { + const client = await getClient() + if (!mounted) return + clientRef.current = client + + client.on('wallet_sessionChanged', newSession => { + if (mounted) setSession(newSession) + }) + } + + init() + return () => { + mounted = false + } + }, []) + + const handleConnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + + setConnecting(true) + try { + await client.connect([ETH_MAINNET, POLYGON, SOLANA_MAINNET], []) + const newSession = await client.provider.getSession() + setSession(newSession) + } catch (err) { + if (err.code === 4001) { + Alert.alert('Rejected', 'Connection was rejected.') + return + } + Alert.alert('Error', err.message ?? 'Connection failed') + } finally { + setConnecting(false) + } + }, []) + + const handleGetBalance = useCallback(async () => { + const client = clientRef.current + if (!client || !session) return + + const ethAccounts = session.sessionScopes?.[ETH_MAINNET]?.accounts ?? [] + if (ethAccounts.length === 0) return + + try { + const address = ethAccounts[0].split(':').pop() + const balance = await client.invokeMethod({ + scope: ETH_MAINNET, + request: { + method: 'eth_getBalance', + params: [address, 'latest'], + }, + }) + const ethBalance = (parseInt(balance, 16) / 1e18).toFixed(6) + Alert.alert('ETH Balance', `${ethBalance} ETH`) + } catch (err) { + Alert.alert('Error', err.message) + } + }, [session]) + + const handleSignSolana = useCallback(async () => { + const client = clientRef.current + if (!client || !session) return + + const solAccounts = session.sessionScopes?.[SOLANA_MAINNET]?.accounts ?? [] + if (solAccounts.length === 0) return + + try { + const pubkey = solAccounts[0].split(':').pop() + const message = Buffer.from('Hello from Multichain RN!').toString('base64') + const result = await client.invokeMethod({ + scope: SOLANA_MAINNET, + request: { + method: 'signMessage', + params: { account: { address: pubkey }, message }, + }, + }) + Alert.alert('Signed', result.signature.slice(0, 40) + '...') + } catch (err) { + Alert.alert('Sign failed', err.message) + } + }, [session]) + + const handleDisconnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + await client.disconnect() + setSession(null) + }, []) + + const scopes = Object.keys(session?.sessionScopes ?? {}) + const isConnected = scopes.length > 0 + + return ( + + {!isConnected ? ( + + + {connecting ? 'Connecting...' : 'Connect (EVM + Solana)'} + + + ) : ( + + Connected Scopes + {scopes.map(scope => { + const accs = session.sessionScopes[scope]?.accounts ?? [] + return ( + + {scope} + {accs.map(acc => ( + + {acc.split(':').pop()} + + ))} + + ) + })} + + Get ETH Balance + + + Sign Solana Message + + + Disconnect All + + + )} + + ) +} + +const styles = StyleSheet.create({ + container: { flexGrow: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }, + heading: { fontSize: 18, fontWeight: 'bold', marginBottom: 12 }, + scopeCard: { + backgroundColor: '#f5f5f5', + padding: 12, + borderRadius: 8, + marginVertical: 6, + width: '100%', + }, + scopeLabel: { fontSize: 14, fontWeight: '600', marginBottom: 4 }, + button: { + backgroundColor: '#037DD6', + padding: 14, + borderRadius: 8, + marginVertical: 8, + width: '100%', + }, + buttonText: { color: '#fff', fontSize: 16, textAlign: 'center' }, + label: { fontSize: 12, color: '#555' }, +}) +``` + +### 7. iOS configuration + +Add the `metamask` URL scheme to your `Info.plist` so the app can open the MetaMask mobile app: + +```xml title="ios/MyMultichainProject/Info.plist" +LSApplicationQueriesSchemes + + metamask + +``` + +### 8. Build and run + + + + +```bash +npx react-native run-android +npx react-native run-ios +``` + + + + +```bash +npx expo prebuild +npx expo run:android +npx expo run:ios +``` + + + + +## Multichain client methods at a glance + +| Method | Description | +| -------------------------------------------------------------------------- | --------------------------------------------------------------------- | +| [`connect(scopes, caipAccountIds)`](../reference/methods.md#connect) | Connects to MetaMask with multichain [scopes](../concepts/scopes.md). | +| [`getSession`](../reference/methods.md#getsession) | Returns the current session with approved accounts. | +| [`invokeMethod({ scope, request })`](../reference/methods.md#invokemethod) | Calls an RPC method on a specific chain. | +| [`disconnect`](../reference/methods.md#disconnect) | Disconnects all scopes and ends the session. | +| [`disconnect(scopes)`](../reference/methods.md#disconnect) | Disconnects specific scopes without ending the session. | +| [`on(event, handler)`](../reference/methods.md#on) | Registers an event handler. | + +## Next steps + +- Understand [scopes](../concepts/scopes.md), [accounts](../concepts/accounts.md), and [sessions](../concepts/sessions.md). +- [Sign multichain transactions.](../guides/sign-transactions.md) +- [Send multichain transactions.](../guides/send-transactions.md) +- Follow the [Create a multichain dapp tutorial](../tutorials/create-multichain-dapp.md). +- [Troubleshoot bundler polyfill issues.](../../troubleshooting/metro-polyfill-issues.md) diff --git a/metamask-connect/multichain/reference/api.md b/metamask-connect/multichain/reference/api.md new file mode 100644 index 00000000000..664e813ec69 --- /dev/null +++ b/metamask-connect/multichain/reference/api.md @@ -0,0 +1,428 @@ +--- +title: 'Multichain API Reference' +sidebar_label: Multichain API +description: Complete reference for the MetaMask Multichain API (CAIP-25), including wallet_createSession, wallet_invokeMethod, and wallet_revokeSession methods. +keywords: + [ + wallet_createSession, + wallet_getSession, + wallet_invokeMethod, + wallet_revokeSession, + CAIP-25, + multichain API, + metamask, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Multichain API + +The Multichain API is a standard wallet API that supports simultaneous interactions across multiple blockchain networks and ecosystems, as defined in [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md). + +:::info SDK methods vs. Multichain API +MetaMask Connect Multichain exposes [high-level SDK methods](methods.md) that wrap the standard Multichain API. +Use those methods if you're building with the multichain client. + +The standard Multichain API is client-agnostic, and is not entirely exposed by MetaMask Connect Multichain. +Use the standard methods referenced on this page if you're building your own client or need lower-level control. +::: + +:::note + +MetaMask implements an older version of the [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/899779996e8c30ec9c189ff49737704150606f31/CAIPs/caip-25.md) Multichain API specification. + +::: + +## Methods + +### `wallet_createSession` + +Creates a multichain session with a wallet, authorizing that wallet with the specified set of scopes +and properties. +This method is defined in [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/899779996e8c30ec9c189ff49737704150606f31/CAIPs/caip-25.md). + +#### Parameters + +- `optionalScopes`: `object` - (Optional) [CAIP-217](https://standards.chainagnostic.org/CAIPs/caip-217) authorization scopes the wallet can support for use with this dapp. + If scopes are specified, only the following properties are supported: + - `references`: `array` - (Optional) A list of references to specific blockchains for the namespace of this scope. + This property can only be used if the scope namespace does not already specify the blockchain. + For example, use this property for an `"eip155"` scope, but not an `"eip155:10"` scope. + + References are mainly used when there would otherwise be duplicate scopes. + + - `methods`: `array` - A list of JSON-RPC methods the wallet must support to be compatible with the dapp. + - `notifications`: `array` - A list of JSON-RPC notifications the wallet must support to be compatible with the dapp. + - `accounts`: `array` - (Optional) A list of [CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) + account IDs valid within this scope. + Dapps should include this only if they know which accounts they want the user to permit. + When supplied, these accounts are preselected by default in the account selection process. + Dapps typically omit this property for the user to select their own accounts. + +- `sessionProperties`: `object` - (Optional) Properties that the wallet can use to determine if the session is valid. +- `requiredScopes`: `object` - (Optional) [CAIP-217](https://standards.chainagnostic.org/CAIPs/caip-217) authorization scopes the wallet must support to be compatible with the dapp. + We don't recommend using `requiredScopes` with MetaMask. + MetaMask treats all `requiredScopes` as `optionalScopes`. + +#### Returns + +The scopes and properties of the created session. + +#### Example + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "wallet_createSession", + "params": { + "optionalScopes": { + "eip155": { + "methods": [ + "eth_sendTransaction", + "eth_signTransaction", + "eth_sign", + "eth_subscribe", + "get_balance", + "personal_sign" + ], + "notifications": ["eth_subscription"] + }, + "eip155:10": { + "methods": ["get_balance"], + "notifications": [] + }, + "eip155:42161": { + "methods": ["eth_sendTransaction", "eth_signTransaction", "get_balance", "personal_sign"], + "notifications": [] + } + } + } +} +``` + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "sessionScopes": { + "eip155": { + "references": ["1", "137"], + "methods": [ + "eth_sendTransaction", + "eth_signTransaction", + "eth_subscribe", + "get_balance", + "eth_sign", + "personal_sign" + ], + "notifications": ["eth_subscription"], + "accounts": [ + "eip155:1:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb", + "eip155:137:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb" + ] + }, + "eip155:10": { + "methods": ["get_balance"], + "notifications": [], + "accounts": [] + }, + "eip155:42161": { + "methods": ["personal_sign"], + "notifications": [], + "accounts": ["eip155:42161:0x0910e12C68d02B561a34569E1367c9AAb42bd810"] + } + }, + "sessionProperties": { + "expiry": "2022-11-30T17:07:31+00:00", + "globalConfig": { + "foo": "bar" + } + } + } +} +``` + + + + +### `wallet_getSession` + +Gets the scopes and properties within the active session. +This method is defined in [CAIP-312](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-312.md). + +:::note +MetaMask doesn't support session IDs. +::: + +#### Parameters + +None. + +#### Returns + +The scopes and properties of the session. + +#### Example + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "wallet_getSession", + "params": {} +} +``` + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "sessionScopes": { + "eip155:1": { + "methods": ["eth_signTransaction"], + "notifications": [], + "accounts": ["eip155:1:0xabc123"] + }, + "eip155:137": { + "methods": ["eth_sendTransaction"], + "notifications": [], + "accounts": ["eip155:137:0xdef456"] + }, + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1": { + "methods": ["getBalance", "getAccountInfo", "sendTransaction", "getBlock"], + "notifications": [], + "accounts": [ + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1:4Nd1mS8AUwK3kU3gdiAM6QCvqhA7Do8rKtMXsGyqrJxy" + ] + } + } + } +} +``` + + + + +### `wallet_invokeMethod` + +Invokes the specified JSON-RPC API method on the specified network +previously authorized to the dapp within a session. +This method is defined in [CAIP-27](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-27.md). + +:::note +MetaMask doesn't support session IDs. +::: + +#### Parameters + +- `scope`: `string` - A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) + chain ID previously authorized to the dapp within a session. +- `request`: `object` - A request object containing: + - `method`: `string` - The JSON-RPC API method to invoke, + previously authorized to the dapp within a session. + - `params`: `object` - The RPC method parameters (can be empty). + +#### Returns + +The response from the JSON-RPC method call. + +#### Example + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "wallet_invokeMethod", + "params": { + "scope": "eip155:1", + "request": { + "method": "eth_sendTransaction", + "params": [ + { + "to": "0x4B0897b0513FdBeEc7C469D9aF4fA6C0752aBea7", + "from": "0xDeaDbeefdEAdbeefdEadbEEFdeadbeefDEADbEEF", + "gas": "0x76c0", + "value": "0x8ac7230489e80000", + "data": "0x", + "gasPrice": "0x4a817c800" + } + ] + } + } +} +``` + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "scope": "eip155:1", + "result": { + "method": "eth_sendTransaction", + "result": "0x4e306b5a5a37532e1734503f7d2427a86f2c992fbe471f5be403b9f734e667c8" + } + } +} +``` + + + + +### `wallet_revokeSession` + +Revokes the active session. +This method is defined in [CAIP-285](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-285.md). + +:::note +MetaMask doesn't support session IDs. +::: + +#### Parameters + +None. + +#### Returns + +`true` if the revocation was successful. + +#### Example + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "wallet_revokeSession", + "params": {} +} +``` + + + + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": true +} +``` + + + + +## Events + +The Multichain API provides the following events that wallets can send to dapps to notify them of +changes to a session. + +### `wallet_notify` + +Notifies the dapp of events or state changes related to a specific, previously authorized network. +[CAIP-319](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-319.md) defines this event. + +:::note +MetaMask doesn't support session IDs. +::: + +#### Parameters + +- `scope`: `string` - A [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) + chain ID previously authorized to the dapp within a session. +- `notification`: `object` - A notification object containing: + - `method`: `string` - A JSON-RPC API notification method name + previously authorized to the dapp within a session. + - `params`: `object` - The RPC notification method parameters. + +#### Example + +```json +{ + "jsonrpc": "2.0", + "method": "wallet_notify", + "params": { + "scope": "eip155:1", + "notification": { + "method": "eth_subscription", + "params": { + "subscription": "0x12345678", + "result": { + "blockNumber": "0x1234", + "transactionHash": "0x5678", + "logIndex": "0x9abc" + } + } + } + } +} +``` + +### `wallet_sessionChanged` + +Notifies the dapp of updates to the active session's authorization scopes. +[CAIP-311](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-311.md) defines this method. + +:::note +MetaMask doesn't support session IDs. +::: + +#### Parameters + +`sessionScopes`: `object` - An object containing the full updated authorization scopes, each formatted +according to [CAIP-217](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-217.md). + +#### Example + +```json +{ + "jsonrpc": "2.0", + "method": "wallet_sessionChanged", + "params": { + "sessionScopes": { + "eip155:1": { + "methods": ["eth_signTransaction", "eth_sendTransaction"], + "notifications": [], + "accounts": ["eip155:1:0xabc123"] + }, + "eip155:137": { + "methods": ["eth_sendTransaction"], + "notifications": [], + "accounts": ["eip155:137:0xdef456"] + } + } + } +} +``` + +## Next steps + +- Follow the [JavaScript quickstart](../quickstart/javascript.md) to set up MetaMask Connect Multichain in a dapp. +- See the [MetaMask Connect Multichain methods](methods.md) for the client-level methods that wrap this API. +- Understand [scopes](../concepts/scopes.md), [accounts](../concepts/accounts.md), and [sessions](../concepts/sessions.md) for CAIP-2, CAIP-10, and CAIP-25 identifiers. +- See [Send transactions on EVM and Solana](../guides/send-transactions.md) for practical usage examples. diff --git a/metamask-connect/multichain/reference/methods.md b/metamask-connect/multichain/reference/methods.md new file mode 100644 index 00000000000..56da397dc8b --- /dev/null +++ b/metamask-connect/multichain/reference/methods.md @@ -0,0 +1,434 @@ +--- +title: 'MetaMask Connect Multichain methods' +description: Complete methods reference for MetaMask Connect Multichain, including connect, getSession, invokeMethod, disconnect, and session event handlers. +keywords: + [ + multichain, + evm, + solana, + connect, + createMultichainClient, + method, + methods, + dapp, + getSession, + invokeMethod, + disconnect, + session events, + API reference, + ] +toc_max_heading_level: 2 +--- + +# MetaMask Connect Multichain methods + +MetaMask Connect Multichain (`@metamask/connect-multichain`) exposes several methods, including: + +- [`createMultichainClient`](#createmultichainclient) to initialize the client. +- [`connect`](#connect) to create a [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md) session across multiple chains. +- [`getSession`](#getsession) to retrieve authorized scopes and accounts. +- [`invokeMethod`](#invokemethod) to send RPC requests to any chain in the session. +- [`disconnect`](#disconnect) to end the session. + +It also provides event handlers for session changes. +When building with MetaMask Connect Multichain, use these high-level methods to create and manage sessions. + +:::note +These high-level methods wrap the standard [Multichain API](api.md) methods. +Use those standard methods if you're building your own client or need lower-level control. +::: + +## `createMultichainClient` + +Creates the multichain client. The client is a singleton: the first call creates the instance, and +subsequent calls return that same instance. + +### Parameters + +| Name | Type | Required | Description | +| -------------------------- | ---------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dapp.name` | `string` | Yes | Name of your dapp. | +| `dapp.url` | `string` | Conditional | URL of your dapp. In browsers this is often set automatically; required in Node.js and React Native (no `window.location`). | +| `dapp.iconUrl` | `string` | No | URL of your dapp icon. | +| `dapp.base64Icon` | `string` | No | Base64-encoded icon when a hosted URL is unavailable (for example, some React Native setups). | +| `api.supportedNetworks` | `Record` | No | Map of [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain IDs to RPC URLs. Use [`getInfuraRpcUrls`](#getinfurarpcurls) to generate Infura URLs, then merge custom endpoints. | +| `ui.headless` | `boolean` | No | Enables or disables [headless mode](../guides/headless-mode.md). The default is `false`. | +| `ui.preferExtension` | `boolean` | No | Directly connects through the MetaMask extension when it's installed. The default is `true`. | +| `mobile.preferredOpenLink` | `(deeplink: string) => void` | No | A function that's called to open a deeplink to the MetaMask Mobile App. Required in React Native. | +| `mobile.useDeeplink` | `boolean` | No | Controls use of deeplinks for mobile connection flows. | + +### Returns + +Returns a promise that resolves to the multichain client instance. +The client is a singleton: calling `createMultichainClient` again returns the same instance and merges +any new options, except the `dapp` object from the first call, which is never overwritten. The +`api.supportedNetworks` map merges additively across calls. + +### Example + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { + name: 'My Multichain Dapp', + url: window.location.href, + iconUrl: 'https://mydapp.com/icon.png', + }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: process.env.INFURA_API_KEY }), + 'eip155:137': 'https://polygon-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, +}) +``` + +## `connect` + +Connects to MetaMask with specified [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain scopes. +The user sees a single approval prompt for all requested chains. + +### Parameters + +| Name | Type | Required | Description | +| ------------------- | ------------------- | -------- | -------------------------------------------------------------------------------------------------------------- | +| `scopes` | `Scope[]` | Yes | Array of [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain identifiers to request permission for. | +| `caipAccountIds` | `CaipAccountId[]` | Yes | Array of [CAIP-10](https://chainagnostic.org/CAIPs/caip-10) account identifiers to request. Pass `[]` for any. | +| `sessionProperties` | `SessionProperties` | No | Additional session properties. | +| `forceRequest` | `boolean` | No | Force a new connection request even if already connected. | + +### Returns + +A promise that resolves when the connection is established. + +### Example + +```javascript +await client.connect(['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], []) +``` + +To force a fresh connection prompt even when a session already exists, pass `forceRequest` as the +fourth argument: + +```javascript +await client.connect(['eip155:1'], [], undefined, true) +``` + +## `getSession` + +Returns the current multichain session, including the approved scopes and accounts. +Call this after [`connect`](#connect) to retrieve the accounts the user authorized. + +Access `getSession` through the `provider` property on the multichain client +(`client.provider.getSession()`). + +### Returns + +A promise that resolves to the current `Session` object containing `sessionScopes`, a map of +CAIP-2 scope IDs to their approved accounts. + +### Example + +```javascript +await client.connect(['eip155:1', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], []) + +const session = await client.provider.getSession() +const ethAccounts = session.sessionScopes['eip155:1']?.accounts || [] +const solAccounts = session.sessionScopes['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']?.accounts || [] +``` + +## `invokeMethod` + +Calls the underlying [`wallet_invokeMethod`](api.md#wallet_invokemethod) Multichain API method to send an RPC request to a specific chain in the active session. +Use this to interact with any chain the user has approved, without switching connections. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------ | --------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `options.scope` | `Scope` | Yes | The [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain identifier to invoke the method on. | +| `options.request.method` | `string` | Yes | The RPC method name. | +| `options.request.params` | `unknown[] \| object` | No | The method parameters. EVM methods take an array; Solana methods take an object (for example, `{ account: { address }, message }`). | + +### Returns + +A promise that resolves to the result of the RPC method call. + +### Example + +```javascript +const balance = await client.invokeMethod({ + scope: 'eip155:1', + request: { + method: 'eth_getBalance', + params: ['0xYourAddress', 'latest'], + }, +}) +console.log('ETH balance:', balance) +``` + +## `disconnect` + +Disconnects from MetaMask. +The behavior depends on whether `scopes` are provided: + +- **No arguments**: revokes all scopes and fully tears down the session. +- **With `scopes`**: revokes only the specified scopes. If other scopes remain, the session stays alive. + +### Parameters + +| Name | Type | Required | Description | +| -------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------- | +| `scopes` | `Scope[]` | No | Array of [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain identifiers to revoke. Omit to revoke all. | + +### Returns + +A promise that resolves when the disconnect is complete. + +### Example + +```javascript +// Fully disconnect — revokes all scopes and ends the session +await client.disconnect() + +// Selective disconnect — revokes only Solana, keeps EVM scopes active +await client.disconnect(['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']) +``` + +## `on` + +Registers an event handler. +See [Events](#events) for available event names. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ---------- | -------- | ---------------------------------------------------------- | +| `event` | `string` | Yes | The event name to listen for. | +| `handler` | `Function` | Yes | The callback function to invoke when the event is emitted. | + +### Example + +```javascript +client.on('wallet_sessionChanged', session => { + console.log('Session updated:', session) +}) +``` + +## `off` + +Removes a previously registered event handler. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ---------- | -------- | ------------------------------------- | +| `event` | `string` | Yes | The event name to stop listening for. | +| `handler` | `Function` | Yes | The callback function to remove. | + +### Example + +```javascript +const handler = session => { + console.log('Session updated:', session) +} + +client.on('wallet_sessionChanged', handler) + +// Later, remove the handler +client.off('wallet_sessionChanged', handler) +``` + +## `getInfuraRpcUrls` + +Generates a map of Infura RPC URLs keyed by [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain ID. +When called without `caipChainIds`, the returned map includes all [supported chains](#supported-chains). +Use this utility to populate `api.supportedNetworks` when calling `createMultichainClient`. + +:::tip Single-ecosystem dapps +If your dapp targets only EVM, use the +[`getInfuraRpcUrls`](../../evm/reference/methods.md#getinfurarpcurls) helper in `@metamask/connect-evm` +instead. It returns hex-chain-ID-keyed URLs that can be passed directly to `createEVMClient`. + +If your dapp targets only Solana, use the +[`getInfuraRpcUrls`](../../solana/reference/methods.md#getinfurarpcurls) helper in `@metamask/connect-solana` +instead. It returns network-name-keyed URLs (`mainnet`, `devnet`) that can be passed directly to +`createSolanaClient`. +::: + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ---------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `infuraApiKey` | `string` | Yes | Your Infura API key. | +| `caipChainIds` | `string[]` | No | Array of [CAIP-2](https://chainagnostic.org/CAIPs/caip-2) chain IDs to include. If omitted, all [supported chains](#supported-chains) are included. | + +### Returns + +A `Record` mapping CAIP-2 chain IDs to Infura RPC URLs. When `caipChainIds` is provided, only matching chains are included. + +### Supported chains + +The following chains are included by default when `caipChainIds` is omitted. + +| Ecosystem | Network | CAIP-2 chain ID | +| ---------- | ------- | ----------------------------------------- | +| Ethereum | Mainnet | `eip155:1` | +| Ethereum | Sepolia | `eip155:11155111` | +| Ethereum | Hoodi | `eip155:560048` | +| Linea | Mainnet | `eip155:59144` | +| Linea | Sepolia | `eip155:59141` | +| Polygon | Mainnet | `eip155:137` | +| Polygon | Amoy | `eip155:80002` | +| Optimism | Mainnet | `eip155:10` | +| Optimism | Sepolia | `eip155:11155420` | +| Arbitrum | Mainnet | `eip155:42161` | +| Arbitrum | Sepolia | `eip155:421614` | +| Base | Mainnet | `eip155:8453` | +| Base | Sepolia | `eip155:84532` | +| Blast | Mainnet | `eip155:81457` | +| Blast | Sepolia | `eip155:168587773` | +| ZKsync | Mainnet | `eip155:324` | +| ZKsync | Sepolia | `eip155:300` | +| BSC | Mainnet | `eip155:56` | +| BSC | Testnet | `eip155:97` | +| opBNB | Mainnet | `eip155:204` | +| opBNB | Testnet | `eip155:5611` | +| Scroll | Mainnet | `eip155:534352` | +| Scroll | Sepolia | `eip155:534351` | +| Mantle | Mainnet | `eip155:5000` | +| Mantle | Sepolia | `eip155:5003` | +| Sei | Mainnet | `eip155:1329` | +| Sei | Testnet | `eip155:713715` | +| Swellchain | Mainnet | `eip155:1923` | +| Swellchain | Testnet | `eip155:1924` | +| Unichain | Mainnet | `eip155:130` | +| Unichain | Sepolia | `eip155:1301` | +| Hemi | Mainnet | `eip155:43111` | +| Hemi | Testnet | `eip155:743111` | +| MegaETH | Mainnet | `eip155:6342` | +| MegaETH | Testnet | `eip155:6342001` | +| Monad | Mainnet | `eip155:143` | +| Monad | Testnet | `eip155:10143` | +| Palm | Mainnet | `eip155:11297108109` | +| Avalanche | Mainnet | `eip155:43114` | +| Avalanche | Fuji | `eip155:43113` | +| Celo | Mainnet | `eip155:42220` | +| Celo | Sepolia | `eip155:44787` | +| Solana | Mainnet | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | +| Solana | Devnet | `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` | + +:::note +Each chain must be activated in your [Infura dashboard](https://app.infura.io/) before `getInfuraRpcUrls` can generate working URLs for it. +::: + +### Example + +Include all supported chains: + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { name: 'My Dapp', url: 'https://mydapp.com' }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ infuraApiKey: 'YOUR_INFURA_API_KEY' }), + }, + }, +}) +``` + +Include only specific chains using `caipChainIds`: + +```javascript +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' + +const client = await createMultichainClient({ + dapp: { name: 'My Dapp', url: 'https://mydapp.com' }, + api: { + supportedNetworks: { + // Each chain must be active in your Infura dashboard + ...getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + caipChainIds: ['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], + }), + }, + }, +}) +``` + +## Properties + +| Property | Type | Description | +| ----------- | --------------------- | ----------------------------------------------------------------------------------------------- | +| `status` | `ConnectionStatus` | Connection status: `'loaded'`, `'pending'`, `'connecting'`, `'connected'`, or `'disconnected'`. | +| `provider` | `MultichainApiClient` | The underlying Multichain API client. | +| `transport` | `ExtendedTransport` | The active transport layer. | + +## Events + +Register event handlers using [`on`](#on) and remove them with [`off`](#off). + +| Event | Payload | Description | +| ----------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `wallet_sessionChanged` | `Session` | Fired when the session changes: on connect, when scopes or accounts are added or removed, and during asynchronous session restoration. Register it before calling `connect` so restored sessions are captured. | +| `display_uri` | `string` | Fired with a URI for custom QR code implementations (headless mode). | +| `stateChanged` | `ConnectionStatus` | Fired when the connection status changes. | + +### Example + +```javascript +client.on('wallet_sessionChanged', session => { + console.log('Session updated:', session) +}) + +client.on('display_uri', uri => { + // Display a custom QR code with this URI + displayMyCustomQRCode(uri) +}) + +client.on('stateChanged', status => { + console.log('Connection status:', status) +}) +``` + +## Error classes + +`@metamask/connect-multichain` exports typed error classes (all extending a common `BaseErr`) for granular error handling: + +| Class | Code | Description | +| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `RPCInvokeMethodErr` | 53 | A wallet `invokeMethod` call failed. Wraps the wallet's error: read `rpcCode`, `rpcMessage`, and `rpcData` for the original JSON-RPC / EIP-1193 details, and `reason` for the normalized message. | +| `RPCHttpErr` | 50 | An HTTP-level failure calling a read-only RPC endpoint (exposes `rpcEndpoint`, `method`, and `httpStatus`). | +| `RPCReadonlyResponseErr` | 51 | A read-only RPC endpoint returned an error response (exposes `reason`). | +| `RPCReadonlyRequestErr` | 52 | A read-only RPC request couldn't be issued (exposes `reason`). | + +### Example + +```javascript +import { RPCInvokeMethodErr } from '@metamask/connect-multichain' + +try { + await client.invokeMethod({ + scope: 'eip155:1', + request: { method: 'personal_sign', params: [message, address] }, + }) +} catch (err) { + if (err instanceof RPCInvokeMethodErr) { + // The wallet's original code is on err.rpcCode (for example, 4001 when the user rejects). + if (err.rpcCode === 4001) { + // User rejected — show retry UI + } + } +} +``` + +## Next steps + +- Follow the [JavaScript quickstart](../quickstart/javascript.md) to set up MetaMask Connect Multichain in a dapp. +- [Send transactions on EVM and Solana](../guides/send-transactions.md) using `invokeMethod`. +- [Sign messages on EVM and Solana](../guides/sign-transactions.md) using `invokeMethod`. +- [Use headless mode](../guides/headless-mode.md) for custom QR code rendering. +- See the [Multichain API reference](api.md) for the underlying CAIP-25 protocol methods. diff --git a/metamask-connect/multichain/tutorials/create-multichain-dapp.md b/metamask-connect/multichain/tutorials/create-multichain-dapp.md new file mode 100644 index 00000000000..62bebe7822c --- /dev/null +++ b/metamask-connect/multichain/tutorials/create-multichain-dapp.md @@ -0,0 +1,630 @@ +--- +title: 'Build a Multichain Dapp Tutorial - MetaMask Connect' +sidebar_label: Create a multichain dapp +description: Step-by-step tutorial to build a React dapp that connects to Ethereum, Linea, Base, and Solana using MetaMask Connect Multichain SDK. +keywords: + [ + tutorial, + multichain, + react, + vite, + evm, + solana, + caip, + metamask, + connect, + ethereum linea base solana, + multichain wallet, + step-by-step, + full stack dapp, + ] +--- + +# Create a multichain dapp + +In this tutorial, you'll build a React dapp that connects to four networks (Ethereum, Linea, Base, and Solana) using MetaMask Connect Multichain. +Your dapp will handle wallet sign-in and sign-out, read balances across all four chains, sign messages, and send transactions on all four chains. You'll learn how to do the following: + +- Set up a multichain session with a single connection prompt. +- Read account balances across EVM networks and Solana. +- Sign messages in both ecosystems. +- Send transactions on EVM and Solana. + +## Key concepts + +This tutorial uses [scopes](../concepts/scopes.md), [account IDs](../concepts/accounts.md), and [sessions](../concepts/sessions.md) to identify chains and +accounts across ecosystems. If you're unfamiliar with these concepts, review them before continuing. + +This tutorial uses the following scopes: + +| Chain | Scope (CAIP-2) | +| ---------------- | ----------------------------------------- | +| Ethereum Mainnet | `eip155:1` | +| Linea Mainnet | `eip155:59144` | +| Base Mainnet | `eip155:8453` | +| Solana Mainnet | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | + +:::note +Bitcoin and Tron support is coming soon. +The Multichain API is designed to be ecosystem-agnostic, so new chains can be added without changing +your integration pattern. +::: + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/download) installed in your browser. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the [Infura dashboard](https://app.infura.io). + +## Steps + +### 1. Scaffold the project + +Create a new React + TypeScript project with Vite: + +```bash +npm create vite@latest multichain-dapp -- --template react-ts +cd multichain-dapp +``` + +Install the MetaMask Connect multichain client and Solana Kit: + +```bash npm2yarn +npm install @metamask/connect-multichain @solana/kit +``` + +`@solana/kit` is needed to query Solana balances directly, since +[`invokeMethod`](../reference/api.md#wallet_invokemethod) doesn't currently support `getBalance` for +Solana. + +### 2. Initialize the multichain client + +Create a file `src/multichain.ts`, and initialize the client using [`createMultichainClient`](../reference/methods.md#createmultichainclient): + +```typescript title="src/multichain.ts" +import { createMultichainClient } from '@metamask/connect-multichain' + +export const SCOPES = { + ETHEREUM: 'eip155:1', + LINEA: 'eip155:59144', + BASE: 'eip155:8453', + SOLANA: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', +} as const + +let client: Awaited> | null = null + +export async function getClient() { + if (!client) { + client = await createMultichainClient({ + dapp: { + name: 'Multichain Tutorial Dapp', + url: window.location.href, + }, + api: { + supportedNetworks: { + [SCOPES.ETHEREUM]: 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.LINEA]: 'https://linea-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.BASE]: 'https://base-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.SOLANA]: 'https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, + }) + } + return client +} +``` + +Configure MetaMask Connect Multichain with the following options: + +- `dapp`: Your dapp's identity. + MetaMask shows the `name` and `url` during the connection prompt so users know who is requesting + access. +- `api.supportedNetworks`: A map of [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) + scope IDs to RPC endpoint URLs. + Each entry tells the client which chains your dapp supports and where to send RPC requests. + +### 3. Connect (sign-in) + +Call [`connect`](../reference/methods.md#connect) with the scopes you want. +The user sees a single approval prompt for all four chains: + +```typescript +import { getClient, SCOPES } from './multichain' + +const client = await getClient() + +await client.connect([SCOPES.ETHEREUM, SCOPES.LINEA, SCOPES.BASE, SCOPES.SOLANA], []) +``` + +:::tip Restore existing sessions +Register a [`wallet_sessionChanged`](../reference/methods.md#events) listener before calling `connect`, +and skip `connect` when [`getSession`](../reference/methods.md#getsession) already returns a session +(for example, after a page reload). +::: + +The second argument is an optional array of [CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) +account preferences. +Pass an empty array to let the user choose their own accounts. + +After connecting, retrieve the session to see which accounts the user authorized: + +```typescript +const session = await client.provider.getSession() + +const ethAccounts = session.sessionScopes[SCOPES.ETHEREUM]?.accounts || [] +const lineaAccounts = session.sessionScopes[SCOPES.LINEA]?.accounts || [] +const baseAccounts = session.sessionScopes[SCOPES.BASE]?.accounts || [] +const solAccounts = session.sessionScopes[SCOPES.SOLANA]?.accounts || [] +``` + +Each account is a CAIP-10 string like `eip155:1:0xabc123...` or `solana:5eykt...:83ast...`. +To extract the raw address, split on `:` and take everything after the second colon: + +```typescript +function extractAddress(caip10Account: string): string { + return caip10Account.split(':').slice(2).join(':') +} + +const ethAddress = extractAddress(ethAccounts[0]) +// "0xabc123..." +``` + +### 4. Disconnect (sign-out) + +Call [`disconnect`](../reference/methods.md#disconnect) to end the session and clear all authorizations: + +```typescript +await client.disconnect() +``` + +This revokes the active session +(`disconnect` wraps [`wallet_revokeSession`](../reference/api.md#wallet_revokesession)). +The user will need to approve a new connection prompt to use your dapp again. + +### 5. Fetch balances + +#### EVM balances + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`eth_getBalance`](../../evm/reference/json-rpc-api/eth_getBalance.mdx) to query the +balance on any EVM chain in the session. +The result is a hex-encoded wei value: + +```typescript +async function getEvmBalance(scope: string, accounts: string[]): Promise { + if (accounts.length === 0) return '0' + + const address = extractAddress(accounts[0]) + const balanceHex = await client.invokeMethod({ + scope, + request: { + method: 'eth_getBalance', + params: [address, 'latest'], + }, + }) + + const wei = BigInt(balanceHex as string) + const eth = Number(wei) / 1e18 + return eth.toFixed(6) +} + +const ethBalance = await getEvmBalance(SCOPES.ETHEREUM, ethAccounts) +const lineaBalance = await getEvmBalance(SCOPES.LINEA, lineaAccounts) +const baseBalance = await getEvmBalance(SCOPES.BASE, baseAccounts) +``` + +The same function works for all three EVM chains; only the `scope` changes. + +#### Solana balance + +:::note +`invokeMethod` doesn't currently support `getBalance` for Solana. +If this is something you'd like to see, +[raise a feature request](https://builder.metamask.io/c/feature-request/10) on the MetaMask +Builder Hub. +::: + +Use `@solana/kit` to query the Solana RPC directly: + +```typescript +import { address, createSolanaRpc } from '@solana/kit' + +async function getSolBalance(accounts: string[]): Promise { + if (accounts.length === 0) return '0' + + const solAddress = extractAddress(accounts[0]) + const rpc = createSolanaRpc('https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY') + const { value } = await rpc.getBalance(address(solAddress)).send() + + const sol = Number(value) / 1e9 + return sol.toFixed(6) +} + +const solBalance = await getSolBalance(solAccounts) +``` + +### 6. Sign a message + +#### EVM (`personal_sign`) + +To sign a message on an EVM chain, hex-encode the message and use [`invokeMethod`](../reference/methods.md#invokemethod) with [`personal_sign`](../../evm/reference/json-rpc-api/personal_sign.mdx): + +```typescript +function toHex(str: string): string { + return ( + '0x' + Array.from(new TextEncoder().encode(str), b => b.toString(16).padStart(2, '0')).join('') + ) +} + +const evmAddress = extractAddress(ethAccounts[0]) +const signature = await client.invokeMethod({ + scope: SCOPES.ETHEREUM, + request: { + method: 'personal_sign', + params: [toHex('Hello from my multichain dapp!'), evmAddress], + }, +}) +console.log('EVM signature:', signature) +``` + +#### Solana (`signMessage`) + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with `signMessage` to sign a message on Solana: + +```typescript +const solAddress = extractAddress(solAccounts[0]) +const signature = await client.invokeMethod({ + scope: SCOPES.SOLANA, + request: { + method: 'signMessage', + params: { + account: { address: solAddress }, + message: btoa('Hello from my multichain dapp!'), + }, + }, +}) +console.log('SOL signature:', signature) +``` + +### 7. Send a transaction + +#### EVM transaction + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with [`eth_sendTransaction`](../../evm/reference/json-rpc-api/eth_sendTransaction.mdx) to send a transaction on any EVM scope: + +```typescript +const fromAddress = extractAddress(ethAccounts[0]) + +const txHash = await client.invokeMethod({ + scope: SCOPES.ETHEREUM, + request: { + method: 'eth_sendTransaction', + params: [ + { + from: fromAddress, + to: '0x0000000000000000000000000000000000000000', + value: '0x0', + }, + ], + }, +}) +console.log('EVM tx hash:', txHash) +``` + +To send on a different chain, change the `scope`; for example, `SCOPES.LINEA` or `SCOPES.BASE`. +The same address format and RPC method works across all EVM chains. + +#### Solana transaction + +Use [`invokeMethod`](../reference/methods.md#invokemethod) with `signAndSendTransaction` to send a Solana base64-encoded transaction: + +```typescript +const solAddress = extractAddress(solAccounts[0]) +const result = await client.invokeMethod({ + scope: SCOPES.SOLANA, + request: { + method: 'signAndSendTransaction', + params: { + account: { address: solAddress }, + transaction: '', + }, + }, +}) +console.log('SOL tx signature:', result) +``` + +Building a Solana transaction requires assembling instructions, setting a fee payer, and fetching a +recent block hash using `@solana/kit`. +See [Send transactions](../guides/send-transactions.md) for a complete example. + +## Full example + +The following is the complete source for the two main files. +After scaffolding the project (Step 1), replace the contents of these files, run `npm run dev`, and +open the dapp in your browser. + +```typescript title="src/multichain.ts" +import { createMultichainClient } from '@metamask/connect-multichain' + +export const SCOPES = { + ETHEREUM: 'eip155:1', + LINEA: 'eip155:59144', + BASE: 'eip155:8453', + SOLANA: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', +} as const + +export const SCOPE_LABELS: Record = { + [SCOPES.ETHEREUM]: 'Ethereum', + [SCOPES.LINEA]: 'Linea', + [SCOPES.BASE]: 'Base', + [SCOPES.SOLANA]: 'Solana', +} + +let client: Awaited> | null = null + +export async function getClient() { + if (!client) { + client = await createMultichainClient({ + dapp: { + name: 'Multichain Tutorial Dapp', + url: window.location.href, + }, + api: { + supportedNetworks: { + [SCOPES.ETHEREUM]: 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.LINEA]: 'https://linea-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.BASE]: 'https://base-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + [SCOPES.SOLANA]: 'https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', + }, + }, + }) + } + return client +} + +export function extractAddress(caip10Account: string): string { + return caip10Account.split(':').slice(2).join(':') +} + +export function toHex(str: string): string { + return ( + '0x' + Array.from(new TextEncoder().encode(str), b => b.toString(16).padStart(2, '0')).join('') + ) +} +``` + +```tsx title="src/App.tsx" +import { useState } from 'react' +import { address, createSolanaRpc } from '@solana/kit' +import { getClient, SCOPES, SCOPE_LABELS, extractAddress, toHex } from './multichain' + +type ChainAccounts = Record + +export default function App() { + const [connected, setConnected] = useState(false) + const [accounts, setAccounts] = useState({}) + const [balances, setBalances] = useState>({}) + const [log, setLog] = useState([]) + + const addLog = (entry: string) => + setLog(prev => [`[${new Date().toLocaleTimeString()}] ${entry}`, ...prev]) + + // --- Connect / Disconnect --- + + const handleConnect = async () => { + try { + const client = await getClient() + await client.connect([SCOPES.ETHEREUM, SCOPES.LINEA, SCOPES.BASE, SCOPES.SOLANA], []) + const session = await client.provider.getSession() + const accts: ChainAccounts = {} + for (const scope of Object.values(SCOPES)) { + accts[scope] = session.sessionScopes[scope]?.accounts || [] + } + setAccounts(accts) + setConnected(true) + addLog('Connected to all chains.') + } catch (err: unknown) { + addLog(`Connection failed: ${(err as Error).message}`) + } + } + + const handleDisconnect = async () => { + try { + const client = await getClient() + await client.disconnect() + setConnected(false) + setAccounts({}) + setBalances({}) + addLog('Disconnected.') + } catch (err: unknown) { + addLog(`Disconnect failed: ${(err as Error).message}`) + } + } + + // --- Balances --- + + const fetchBalances = async () => { + const client = await getClient() + const result: Record = {} + + for (const scope of [SCOPES.ETHEREUM, SCOPES.LINEA, SCOPES.BASE] as const) { + const accts = accounts[scope] || [] + if (accts.length > 0) { + try { + const addr = extractAddress(accts[0]) + const hex = (await client.invokeMethod({ + scope, + request: { method: 'eth_getBalance', params: [addr, 'latest'] }, + })) as string + result[scope] = (Number(BigInt(hex)) / 1e18).toFixed(6) + } catch (err: unknown) { + result[scope] = `Error: ${(err as Error).message}` + } + } + } + + const solAccts = accounts[SCOPES.SOLANA] || [] + if (solAccts.length > 0) { + try { + const solAddr = extractAddress(solAccts[0]) + const rpc = createSolanaRpc('https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY') + const { value } = await rpc.getBalance(address(solAddr)).send() + result[SCOPES.SOLANA] = (Number(value) / 1e9).toFixed(6) + } catch (err: unknown) { + result[SCOPES.SOLANA] = `Error: ${(err as Error).message}` + } + } + + setBalances(result) + addLog('Balances fetched.') + } + + // --- Sign message --- + + const signEvmMessage = async () => { + try { + const client = await getClient() + const addr = extractAddress(accounts[SCOPES.ETHEREUM]?.[0] || '') + const sig = await client.invokeMethod({ + scope: SCOPES.ETHEREUM, + request: { + method: 'personal_sign', + params: [toHex('Hello from my multichain dapp!'), addr], + }, + }) + addLog(`EVM signature: ${sig}`) + } catch (err: unknown) { + addLog(`EVM sign failed: ${(err as Error).message}`) + } + } + + const signSolMessage = async () => { + try { + const client = await getClient() + const solAddress = extractAddress(accounts[SCOPES.SOLANA]?.[0] || '') + const sig = await client.invokeMethod({ + scope: SCOPES.SOLANA, + request: { + method: 'signMessage', + params: { + account: { address: solAddress }, + message: btoa('Hello from my multichain dapp!'), + }, + }, + }) + addLog(`SOL signature: ${JSON.stringify(sig)}`) + } catch (err: unknown) { + addLog(`SOL sign failed: ${(err as Error).message}`) + } + } + + // --- Send transaction --- + + const sendEvmTransaction = async () => { + try { + const client = await getClient() + const addr = extractAddress(accounts[SCOPES.ETHEREUM]?.[0] || '') + const txHash = await client.invokeMethod({ + scope: SCOPES.ETHEREUM, + request: { + method: 'eth_sendTransaction', + params: [{ from: addr, to: addr, value: '0x0' }], + }, + }) + addLog(`EVM tx hash: ${txHash}`) + } catch (err: unknown) { + addLog(`EVM tx failed: ${(err as Error).message}`) + } + } + + // --- Render --- + + return ( +
+

Multichain Dapp

+ + {!connected ? ( + + ) : ( + <> + +

Accounts

+ {Object.entries(accounts).map(([scope, accts]) => ( +

+ {SCOPE_LABELS[scope] || scope}:{' '} + {accts.length > 0 ? extractAddress(accts[0]) : 'none'} +

+ ))} +

Balances

+ + {Object.entries(balances).map(([scope, bal]) => ( +

+ {SCOPE_LABELS[scope] || scope}: {bal} +

+ ))} +

Sign Message

+ {' '} + +

Send Transaction

+ + + )} + +

Log

+
+        {log.length > 0 ? log.join('\n') : 'No activity yet.'}
+      
+
+ ) +} +``` + +## Best practices + +- **Handle user rejection.** + Users can decline the connection prompt or any signing request. + Always wrap SDK calls in `try/catch` and show a meaningful message when the user cancels. + +- **Request only the scopes you need.** + Don't request access to chains your dapp doesn't use. + A shorter list of scopes makes the approval prompt clearer and builds trust. + +- **Use CAIP-2 constants.** + Define scope IDs in one place (as shown in `src/multichain.ts`) instead of scattering string + literals across your codebase. + +- **Leverage session persistence.** + Sessions survive page reloads and new tabs. + Register a `wallet_sessionChanged` listener before calling `connect` to capture restored sessions, + and check for an existing session on startup with `getSession` before prompting the user to connect + again. + +- **Show chain context clearly.** + When displaying accounts, balances, or transaction prompts, always label which chain the action + applies to. + Users managing multiple chains need clear visual cues to avoid sending assets on the wrong + network. + +- **Degrade gracefully.** + If the user declines access to some scopes, your dapp should still work for the chains they did + approve. + Check `session.sessionScopes` for each scope before calling `invokeMethod`. + +## Next steps + +- See the [Multichain SDK methods](../reference/methods.md) for all available methods and events. +- See the [Multichain API reference](../reference/api.md) for all available methods and events. +- See [Sign transactions](../guides/sign-transactions.md) for more signing patterns + including Solana signing construction. +- See [Send transactions](../guides/send-transactions.md) for more transaction patterns + including Solana transfer construction. diff --git a/metamask-connect/solana/_assets/connect.gif b/metamask-connect/solana/_assets/connect.gif new file mode 100644 index 00000000000..d2f794ce8b6 Binary files /dev/null and b/metamask-connect/solana/_assets/connect.gif differ diff --git a/metamask-connect/solana/_assets/network.gif b/metamask-connect/solana/_assets/network.gif new file mode 100644 index 00000000000..ed597169380 Binary files /dev/null and b/metamask-connect/solana/_assets/network.gif differ diff --git a/metamask-connect/solana/_assets/personal_sign.png b/metamask-connect/solana/_assets/personal_sign.png new file mode 100644 index 00000000000..8e243237e64 Binary files /dev/null and b/metamask-connect/solana/_assets/personal_sign.png differ diff --git a/metamask-connect/solana/_assets/quickstart-connectkit.png b/metamask-connect/solana/_assets/quickstart-connectkit.png new file mode 100644 index 00000000000..fc479bfc673 Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart-connectkit.png differ diff --git a/metamask-connect/solana/_assets/quickstart-dynamic.png b/metamask-connect/solana/_assets/quickstart-dynamic.png new file mode 100644 index 00000000000..37aeb5772e6 Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart-dynamic.png differ diff --git a/metamask-connect/solana/_assets/quickstart-javascript.png b/metamask-connect/solana/_assets/quickstart-javascript.png new file mode 100644 index 00000000000..6eca779396f Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart-javascript.png differ diff --git a/metamask-connect/solana/_assets/quickstart-rainbowkit.png b/metamask-connect/solana/_assets/quickstart-rainbowkit.png new file mode 100644 index 00000000000..4ae351ee931 Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart-rainbowkit.png differ diff --git a/metamask-connect/solana/_assets/quickstart-web3auth.png b/metamask-connect/solana/_assets/quickstart-web3auth.png new file mode 100644 index 00000000000..d06ec7326f6 Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart-web3auth.png differ diff --git a/metamask-connect/solana/_assets/quickstart.jpg b/metamask-connect/solana/_assets/quickstart.jpg new file mode 100644 index 00000000000..6f023ecb93e Binary files /dev/null and b/metamask-connect/solana/_assets/quickstart.jpg differ diff --git a/metamask-connect/solana/_assets/signTypedData.png b/metamask-connect/solana/_assets/signTypedData.png new file mode 100644 index 00000000000..8991aeedbe6 Binary files /dev/null and b/metamask-connect/solana/_assets/signTypedData.png differ diff --git a/metamask-connect/solana/_assets/siwe-bad-domain-2.png b/metamask-connect/solana/_assets/siwe-bad-domain-2.png new file mode 100644 index 00000000000..2c287235765 Binary files /dev/null and b/metamask-connect/solana/_assets/siwe-bad-domain-2.png differ diff --git a/metamask-connect/solana/_assets/siwe-bad-domain.png b/metamask-connect/solana/_assets/siwe-bad-domain.png new file mode 100644 index 00000000000..c1b1566c53d Binary files /dev/null and b/metamask-connect/solana/_assets/siwe-bad-domain.png differ diff --git a/metamask-connect/solana/_assets/siwe.png b/metamask-connect/solana/_assets/siwe.png new file mode 100644 index 00000000000..7b75a79838f Binary files /dev/null and b/metamask-connect/solana/_assets/siwe.png differ diff --git a/metamask-connect/solana/_assets/watchasset-nft-2.png b/metamask-connect/solana/_assets/watchasset-nft-2.png new file mode 100644 index 00000000000..936056cf79b Binary files /dev/null and b/metamask-connect/solana/_assets/watchasset-nft-2.png differ diff --git a/metamask-connect/solana/_assets/watchasset-nft.png b/metamask-connect/solana/_assets/watchasset-nft.png new file mode 100644 index 00000000000..6d409644c36 Binary files /dev/null and b/metamask-connect/solana/_assets/watchasset-nft.png differ diff --git a/metamask-connect/solana/guides/send-transactions/batch.md b/metamask-connect/solana/guides/send-transactions/batch.md new file mode 100644 index 00000000000..02cba047c02 --- /dev/null +++ b/metamask-connect/solana/guides/send-transactions/batch.md @@ -0,0 +1,181 @@ +--- +title: 'Send Batch Solana Transactions - MetaMask Connect' +sidebar_label: Send batch transactions +description: Sign and send multiple Solana transactions by passing several inputs to the signAndSendTransaction Wallet Standard feature. +keywords: + [ + solana, + batch transactions, + signAndSendTransaction, + wallet-standard, + MetaMask, + Connect, + multiple transactions, + ] +--- + +# Send batch transactions + +The [`solana:signAndSendTransaction`](../../reference/methods.md#supported-wallet-standard-features) +Wallet Standard feature accepts multiple inputs: you can pass several transactions to a single call to +sign and send them, and it resolves to one result per transaction. +This is useful for operations that span several transactions, such as initializing multiple accounts, +batch token transfers, or multi-step program interactions. + +:::note +No separate `signAndSendAllTransactions` feature exists. Send a batch by passing several inputs to +`signAndSendTransaction`. +::: + +## Prerequisites + +Follow Step 1 of the [quickstart](../../quickstart/javascript.md) to install the Solana client. + +## Steps + +### 1. Initialize and connect + +Initialize a Solana client using [`createSolanaClient`](../../reference/methods.md#createsolanaclient) and connect to the user's wallet using [`getWallet`](../../reference/methods.md#getwallet) and [`standard:connect`](../../reference/methods.md#supported-wallet-standard-features): + +```javascript +import { createSolanaClient } from '@metamask/connect-solana' +import { + Connection, + Transaction, + SystemProgram, + PublicKey, + LAMPORTS_PER_SOL, +} from '@solana/web3.js' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, +}) + +const wallet = solanaClient.getWallet() +const { accounts } = await wallet.features['standard:connect'].connect() +const account = accounts[0] +const publicKey = new PublicKey(account.address) +const connection = new Connection('https://solana-devnet.infura.io/v3/') +``` + +### 2. Build the transactions + +Construct each transaction with a new block hash and fee payer. +Serialize each with `verifySignatures: false` since the wallet adds signatures: + +```javascript +const { blockhash } = await connection.getLatestBlockhash() + +const recipients = ['RECIPIENT_ADDRESS_1', 'RECIPIENT_ADDRESS_2', 'RECIPIENT_ADDRESS_3'] + +const serializedTransactions = recipients.map(recipient => { + const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey: publicKey, + toPubkey: new PublicKey(recipient), + lamports: 0.001 * LAMPORTS_PER_SOL, + }) + ) + transaction.recentBlockhash = blockhash + transaction.feePayer = publicKey + + return transaction.serialize({ verifySignatures: false }) +}) +``` + +### 3. Sign and send the transactions + +Pass each serialized transaction as a separate input to +[`signAndSendTransaction`](../../reference/methods.md#supported-wallet-standard-features). +The feature accepts one or more inputs and resolves to an array with one result per transaction: + +```javascript +const sendFeature = wallet.features['solana:signAndSendTransaction'] + +const results = await sendFeature.signAndSendTransaction( + ...serializedTransactions.map(transaction => ({ + account, + transaction, + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', + })) +) +``` + +Each result contains a `signature` as a `Uint8Array`, in the same order as the inputs. + +### 4. Confirm each transaction + +Always confirm transactions before updating the UI. +The Wallet Standard returns each signature as bytes, so encode it to base58 for +`confirmTransaction`: + +```javascript +import bs58 from 'bs58' + +for (const { signature } of results) { + const signatureStr = bs58.encode(signature) + const confirmation = await connection.confirmTransaction( + { + signature: signatureStr, + blockhash, + lastValidBlockHeight: (await connection.getLatestBlockhash()).lastValidBlockHeight, + }, + 'confirmed' + ) + + if (confirmation.value.err) { + console.error('Transaction failed on-chain:', confirmation.value.err) + } else { + console.log('Transaction confirmed:', signatureStr) + } +} +``` + +## Error handling + +When sending batch transactions, handle common errors. +Wallet calls reject with an `RPCInvokeMethodErr`, which exposes the wallet's original code on +`rpcCode`: + +```javascript +try { + const results = await sendFeature.signAndSendTransaction( + ...serializedTransactions.map(transaction => ({ + account, + transaction, + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', + })) + ) +} catch (err) { + const walletCode = err.rpcCode ?? err.code + if (walletCode === 4001) { + // User rejected — show retry UI + } else if (walletCode === -32002) { + // Request already pending — ask user to check MetaMask + } else { + console.error('Batch transaction error:', err) + } +} +``` + +## Important considerations + +- **New block hash:** Block hashes expire after ~60 seconds. + Call `getLatestBlockhash` immediately before building the batch. +- **Transaction size:** Each individual transaction is limited to 1,232 bytes. + If a single transaction exceeds this limit, split it into smaller transactions. +- **Sequential processing:** Inputs are processed in order, and the call resolves with one result per + transaction once all are submitted. +- **Confirmation:** A submitted transaction is not finalized until `confirmTransaction` returns. + Always confirm before reporting success to the user. +- **Devnet and testnet** are only supported in the MetaMask browser extension, not the mobile wallet. + +## Next steps + +- [Send a legacy transaction](legacy.md) for single transactions. +- [Send a versioned transaction](versioned.md) for transactions with Address + Lookup Tables. +- [MetaMask Connect Solana methods](../../reference/methods.md) for the full API reference. diff --git a/metamask-connect/solana/guides/send-transactions/legacy.md b/metamask-connect/solana/guides/send-transactions/legacy.md new file mode 100644 index 00000000000..72ee055e83e --- /dev/null +++ b/metamask-connect/solana/guides/send-transactions/legacy.md @@ -0,0 +1,128 @@ +--- +title: 'Send Solana Legacy Transactions - MetaMask Connect' +sidebar_label: Send a legacy transaction +description: Sign and send Solana legacy transactions through MetaMask Connect using the Wallet Standard signAndSendTransaction feature with @solana/web3.js. +keywords: + [ + solana, + legacy transaction, + send transaction, + metamask, + signAndSendTransaction, + wallet-standard, + solana web3.js, + SPL token transfer, + ] +--- + +# Send a legacy transaction + +Solana [legacy transactions](https://solana.com/developers/guides/advanced/versions) are the simpler of Solana's two transaction formats. +They don't support Address Lookup Tables and are capped at 32 addresses per transaction, but they work well for straightforward operations like transfers. + +This guide shows you how to sign and send legacy transactions through MetaMask. +See the [Solana documentation](https://solana.com/docs/core/transactions) for more background on Solana transactions. + +## Prerequisites + +- Follow Step 1 of the [quickstart](../../quickstart/javascript.md) to install the Solana client. +- Initialize a Solana client using [`createSolanaClient`](../../reference/methods.md#createsolanaclient) and connect to the user's wallet using [`getWallet`](../../reference/methods.md#getwallet) and [`standard:connect`](../../reference/methods.md#supported-wallet-standard-features): + + ```javascript + import { createSolanaClient } from '@metamask/connect-solana' + import { Connection, Transaction, SystemProgram, PublicKey } from '@solana/web3.js' + + const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, + }) + + const wallet = solanaClient.getWallet() + const { accounts } = await wallet.features['standard:connect'].connect() + const account = accounts[0] + ``` + +## Sign and send a transaction + +After creating an unsigned legacy transaction, use the wallet's [`solana:signAndSendTransaction`](../../reference/methods.md#supported-wallet-standard-features) feature to ask the user's MetaMask wallet to sign and send it. + +The method accepts a serialized transaction as a `Uint8Array` and returns an object containing the `signature`. + +```javascript +const connection = new Connection('https://solana-devnet.infura.io/v3/YOUR_INFURA_API_KEY') +const publicKey = new PublicKey(account.address) + +const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey: publicKey, + toPubkey: publicKey, + lamports: 10, + }) +) + +transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash +transaction.feePayer = publicKey + +const [{ signature }] = await wallet.features[ + 'solana:signAndSendTransaction' +].signAndSendTransaction({ + account, + transaction: transaction.serialize({ verifySignatures: false }), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) + +await connection.getSignatureStatus(signature) +``` + +## Sign and send multiple transactions + +To sign and send multiple legacy transactions, call `signAndSendTransaction` for each transaction: + +```javascript +const transactions = [new Transaction(), new Transaction()] + +for (const transaction of transactions) { + transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash + transaction.feePayer = publicKey + + const [{ signature }] = await wallet.features[ + 'solana:signAndSendTransaction' + ].signAndSendTransaction({ + account, + transaction: transaction.serialize({ verifySignatures: false }), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', + }) + + await connection.getSignatureStatus(signature) +} +``` + +## Sign a transaction without sending + +Use the [`solana:signTransaction`](../../reference/methods.md#supported-wallet-standard-features) feature when you need a signed transaction but want to submit it yourself. +For example, for offline signing or multisig workflows. + +```javascript +const [{ signedTransaction }] = await wallet.features['solana:signTransaction'].signTransaction({ + account, + transaction: transaction.serialize({ verifySignatures: false }), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) + +const txSignature = await connection.sendRawTransaction(signedTransaction) +await connection.getSignatureStatus(txSignature) +``` + +:::caution Chrome Android +There is a known issue with `@solana/wallet-adapter-react` on Chrome Android when used with the +Wallet Standard provider from `@metamask/connect-solana`. +Test Solana transaction flows on desktop Chrome and the MetaMask browser extension before targeting +mobile. +See [Troubleshooting](../../../troubleshooting/index.md#chrome-android) for details. +::: + +## Next steps + +To efficiently load more addresses in a single transaction, learn how to [send a versioned transaction](versioned.md) with Address Lookup Tables. diff --git a/metamask-connect/solana/guides/send-transactions/versioned.md b/metamask-connect/solana/guides/send-transactions/versioned.md new file mode 100644 index 00000000000..a25b4e50acd --- /dev/null +++ b/metamask-connect/solana/guides/send-transactions/versioned.md @@ -0,0 +1,240 @@ +--- +title: 'Send Solana Versioned Transactions - MetaMask Connect' +sidebar_label: Send a versioned transaction +description: Create, sign, and send Solana versioned (v0) transactions with Address Lookup Tables through MetaMask Connect using @solana/web3.js. +keywords: + [ + solana, + versioned transaction, + v0 transaction, + address lookup table, + metamask, + signAndSendTransaction, + wallet-standard, + solana web3.js, + ] +--- + +# Send a versioned transaction + +Solana [versioned transactions](https://solana.com/developers/guides/advanced/versions) (`v0`) support [Address Lookup Tables](https://solana.com/developers/guides/advanced/lookup-tables), which let you reference up to 256 addresses in a single transaction. This is useful for complex operations that would exceed the limits of legacy transactions. + +This guide shows you how to create, sign, and send versioned transactions through MetaMask. + +## Prerequisites + +- Follow Step 1 of the [quickstart](../../quickstart/javascript.md) to install the Solana client. +- Initialize a Solana client using [`createSolanaClient`](../../reference/methods.md#createsolanaclient) and connect to the user's wallet using [`getWallet`](../../reference/methods.md#getwallet) and [`standard:connect`](../../reference/methods.md#supported-wallet-standard-features): + + ```javascript + import { createSolanaClient } from '@metamask/connect-solana' + import { + Connection, + PublicKey, + SystemProgram, + TransactionMessage, + VersionedTransaction, + AddressLookupTableProgram, + } from '@solana/web3.js' + + const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, + }) + + const wallet = solanaClient.getWallet() + const { accounts } = await wallet.features['standard:connect'].connect() + const account = accounts[0] + const publicKey = new PublicKey(account.address) + const connection = new Connection('https://solana-devnet.infura.io/v3/YOUR_INFURA_API_KEY') + ``` + +## Create a versioned transaction + +Solana versioned transactions are created in a similar way to [legacy transactions](https://solana.com/docs/core/transactions). +The only difference is to use the `VersionedTransaction` class instead of the `Transaction` class. + +The following example shows how to create a simple transfer instruction, format the instruction into a `v0`-compatible transaction message, and create a versioned transaction that parses the message: + +```typescript +const { blockhash } = await connection.getLatestBlockhash() + +const instructions = [ + SystemProgram.transfer({ + fromPubkey: publicKey, + toPubkey: publicKey, + lamports: 10, + }), +] + +const messageV0 = new TransactionMessage({ + payerKey: publicKey, + recentBlockhash: blockhash, + instructions, +}).compileToV0Message() + +const transactionV0 = new VersionedTransaction(messageV0) +``` + +## Sign and send a versioned transaction + +After creating an unsigned versioned transaction, use the wallet's [`solana:signAndSendTransaction`](../../reference/methods.md#supported-wallet-standard-features) feature to ask the user's MetaMask wallet to sign and send it. + +The method returns a promise for an object containing the `signature`. + +```javascript +const [{ signature }] = await wallet.features[ + 'solana:signAndSendTransaction' +].signAndSendTransaction({ + account, + transaction: transactionV0.serialize(), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) + +await connection.getSignatureStatus(signature) +``` + +## Sign a transaction without sending + +Use the [`solana:signTransaction`](../../reference/methods.md#supported-wallet-standard-features) feature when you need a signed versioned transaction but want to submit it yourself. +For example, for offline signing or multisig workflows. + +```javascript +const [{ signedTransaction }] = await wallet.features['solana:signTransaction'].signTransaction({ + account, + transaction: transactionV0.serialize(), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) + +const txSignature = await connection.sendRawTransaction(signedTransaction) +``` + +## Create an Address Lookup Table + +Create an [Address Lookup Table (ALT)](https://solana.com/developers/guides/advanced/lookup-tables) to efficiently load addresses into tables, significantly increasing the number of addresses that can be used in a single transaction. + +Use the [`createLookupTable`](https://solana-foundation.github.io/solana-web3.js/classes/AddressLookupTableProgram.html#createlookuptable) method to create the instruction needed to create a new ALT and determine its address. +With this instruction, create a transaction, sign it, and send it to create an ALT onchain. +For example: + +```typescript +const slot = await connection.getSlot() +const { blockhash } = await connection.getLatestBlockhash() + +const [lookupTableInst, lookupTableAddress] = AddressLookupTableProgram.createLookupTable({ + authority: publicKey, + payer: publicKey, + recentSlot: slot, +}) + +const lookupMessage = new TransactionMessage({ + payerKey: publicKey, + recentBlockhash: blockhash, + instructions: [lookupTableInst], +}).compileToV0Message() + +const lookupTransaction = new VersionedTransaction(lookupMessage) + +const [{ signature: lookupSignature }] = await wallet.features[ + 'solana:signAndSendTransaction' +].signAndSendTransaction({ + account, + transaction: lookupTransaction.serialize(), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) +``` + +## Extend an Address Lookup Table + +After creating an ALT, extend it by appending addresses to the table. +Use the [`extendLookupTable`](https://solana-foundation.github.io/solana-web3.js/classes/AddressLookupTableProgram.html#extendlookuptable) method to create a new extend instruction, and send it in a transaction. +For example: + +```typescript +const extendInstruction = AddressLookupTableProgram.extendLookupTable({ + payer: publicKey, + authority: publicKey, + lookupTable: lookupTableAddress, + addresses: [publicKey, SystemProgram.programId], +}) + +const { blockhash: extensionBlockhash } = await connection.getLatestBlockhash() + +const extensionMessageV0 = new TransactionMessage({ + payerKey: publicKey, + recentBlockhash: extensionBlockhash, + instructions: [extendInstruction], +}).compileToV0Message() + +const extensionTransactionV0 = new VersionedTransaction(extensionMessageV0) + +const [{ signature: extensionSignature }] = await wallet.features[ + 'solana:signAndSendTransaction' +].signAndSendTransaction({ + account, + transaction: extensionTransactionV0.serialize(), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) +``` + +## Create, sign, and send a versioned transaction with an ALT + +After creating an ALT, create a versioned transaction with the ALT and ask the user's MetaMask wallet to sign and send it. + +First, use the [`getAddressLookupTable`](https://solana-foundation.github.io/solana-web3.js/classes/Connection.html#getaddresslookuptable) method to fetch the account of the created ALT: + +```typescript +const lookupTableAccount = await connection + .getAddressLookupTable(lookupTableAddress) + .then(res => res.value) +console.log('Table address from cluster:', lookupTableAccount.key.toBase58()) +``` + +Then, parse and read all the addresses currently stored in the fetched ALT: + +```typescript +for (let i = 0; i < lookupTableAccount.state.addresses.length; i++) { + const address = lookupTableAccount.state.addresses[i] + console.log(i, address.toBase58()) +} +``` + +The following example creates a simple transfer instruction, formats the instruction into a `v0`-compatible transaction message using the ALT's account, and creates a versioned transaction that parses the message. +Sign and send the transaction using the wallet's [`solana:signAndSendTransaction`](../../reference/methods.md#supported-wallet-standard-features) feature. + +```typescript +const { blockhash: altBlockhash } = await connection.getLatestBlockhash() + +const instructions = [ + SystemProgram.transfer({ + fromPubkey: publicKey, + toPubkey: publicKey, + lamports: minRent, + }), +] + +const messageV0 = new TransactionMessage({ + payerKey: publicKey, + recentBlockhash: altBlockhash, + instructions, +}).compileToV0Message([lookupTableAccount]) + +const transactionV0 = new VersionedTransaction(messageV0) + +const [{ signature }] = await wallet.features[ + 'solana:signAndSendTransaction' +].signAndSendTransaction({ + account, + transaction: transactionV0.serialize(), + chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', +}) +``` + +## Next steps + +- [Send a legacy transaction](legacy.md) for simpler transactions that don't require Address Lookup Tables. +- [Sign messages](../sign-data/sign-message.md) to verify wallet ownership or authorize offchain actions. +- [MetaMask Connect Solana methods](../../reference/methods.md) for the full API reference. +- [Use the Multichain SDK](../../../multichain/quickstart/javascript.md) to send transactions on both EVM and Solana from a single session. diff --git a/metamask-connect/solana/guides/sign-data/sign-message.md b/metamask-connect/solana/guides/sign-data/sign-message.md new file mode 100644 index 00000000000..46ea9acd4d1 --- /dev/null +++ b/metamask-connect/solana/guides/sign-data/sign-message.md @@ -0,0 +1,63 @@ +--- +title: 'Sign Messages on Solana - MetaMask Connect' +sidebar_label: Sign messages +description: Request offchain cryptographic signatures from users on Solana using MetaMask Connect's signMessage Wallet Standard feature. +keywords: + [ + solana sign message, + signMessage, + wallet-standard, + offchain signature, + message verification, + metamask, + solana, + ] +--- + +# Sign messages + +Your dapp can ask users to sign a message with their Solana account; for example, to verify ownership or authorize an action. + +## Prerequisites + +Follow the [quickstart](../../quickstart/javascript.md) to install, initialize, and connect the Solana client. + +## Use `solana:signMessage` + +Use the [`solana:signMessage`](../../reference/methods.md#supported-wallet-standard-features) feature to request a human-readable signature that doesn't need to be verified onchain. + +The following example requests a signed message using MetaMask: + +```javascript +import { createSolanaClient } from '@metamask/connect-solana' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, +}) + +const wallet = solanaClient.getWallet() + +// Connect and get the user's account +const { accounts } = await wallet.features['standard:connect'].connect() + +async function signMessage() { + const message = new TextEncoder().encode('Only good humans allowed. Paw-thorize yourself.') + + const [{ signature }] = await wallet.features['solana:signMessage'].signMessage({ + account: accounts[0], + message, + }) + + return signature +} +``` + +## Next steps + +- [Sign in with Solana (SIWS)](siws.md) to authenticate users with domain-bound, phishing-resistant sign-in messages. +- [Send a legacy transaction](../send-transactions/legacy.md) to transfer SOL or interact with Solana programs. +- [Send a versioned transaction](../send-transactions/versioned.md) to use Address Lookup Tables for complex operations. +- [MetaMask Connect Solana methods](../../reference/methods.md) for the full list of Wallet Standard features. diff --git a/metamask-connect/solana/guides/sign-data/siws.md b/metamask-connect/solana/guides/sign-data/siws.md new file mode 100644 index 00000000000..84d959099d3 --- /dev/null +++ b/metamask-connect/solana/guides/sign-data/siws.md @@ -0,0 +1,101 @@ +--- +title: 'Sign-In with Solana (SIWS) - MetaMask Connect' +sidebar_label: Sign in with Solana +description: Implement Sign-In with Solana (SIWS) authentication in your dapp using MetaMask Connect, with domain binding and phishing protection. +keywords: + [ + sign in with solana, + SIWS, + solana authentication, + domain binding, + offchain auth, + metamask, + solana login, + ] +--- + +# Sign in with Solana + +[Sign-In with Solana (SIWS)](https://docs.siws.xyz/) lets users sign in to your dapp by authenticating with their MetaMask wallet, instead of a traditional username and password. + +

+ Sign-in with Solana request +

+ +## Domain binding + +MetaMask supports domain binding with SIWS to help prevent phishing attacks. +When a site asks a user to sign a SIWS message, but the domain in the message doesn't match the site +the user is on, MetaMask displays a warning in the sign-in interface. +The user must explicitly select to proceed, accepting the risk of a phishing attack. + +:::caution important +MetaMask displays a prominent warning for mismatched domains, but does **not** block users from +bypassing the warning and accepting the sign-in request. +This avoids breaking existing dapps that may have use cases for mismatched domains. +::: + +
+
+ MetaMask Sign-In with Solana domain mismatch warning +
+
+ MetaMask Sign-In with Solana domain mismatch detailed warning popup +
+
+ +## Example + +The following example shows how to set up SIWS with MetaMask using +[`solana:signMessage`](../../reference/methods.md#supported-wallet-standard-features): + +```javascript title="index.js" +import { createSolanaClient } from '@metamask/connect-solana' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, +}) + +const wallet = solanaClient.getWallet() +const { accounts } = await wallet.features['standard:connect'].connect() + +const siwsSign = async siwsMessage => { + try { + const message = new TextEncoder().encode(siwsMessage) + const [{ signature }] = await wallet.features['solana:signMessage'].signMessage({ + account: accounts[0], + message, + }) + siwsResult.innerHTML = signature + } catch (err) { + console.error(err) + siwsResult.innerHTML = `Error: ${err.message}` + } +} + +siws.onclick = async () => { + const domain = window.location.host + const from = accounts[0].address + const siwsMessage = `${domain} wants you to sign in with your Solana account:\n${from}\n\nI accept the MetaMask Terms of Service: https://community.metamask.io/tos\n\nURI: https://${domain}\nVersion: 1\nChain ID: 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\nNonce: 32891757\nIssued At: 2021-09-30T16:25:24.000Z` + siwsSign(siwsMessage) +} +``` + +The following HTML displays the SIWS button: + +```html title="index.html" +

Sign-In with Solana

+ +

Result:

+``` + +See the [JavaScript quickstart](../../quickstart/javascript.md) for a complete working example. + +## Next steps + +- [Sign messages](sign-message.md) for general-purpose offchain signatures without domain binding. +- [Send a legacy transaction](../send-transactions/legacy.md) to transfer SOL or interact with Solana programs. +- See [MetaMask Connect Solana methods](../../reference/methods.md) for the full list of Wallet Standard features. diff --git a/metamask-connect/solana/guides/use-framework-kit.md b/metamask-connect/solana/guides/use-framework-kit.md new file mode 100644 index 00000000000..15c45ac4715 --- /dev/null +++ b/metamask-connect/solana/guides/use-framework-kit.md @@ -0,0 +1,123 @@ +--- +title: 'Use Framework Kit - MetaMask Connect Solana' +sidebar_label: Use Framework Kit +description: Set up Framework Kit with MetaMask Connect Solana in a React dapp for simplified RPC connections, wallet management, and hook-based state. +keywords: + [ + solana, + framework kit, + react, + hooks, + wallet, + connect, + react hooks, + solana hooks, + wallet hooks, + unified API, + ] +--- + +# Use Framework Kit + +[Framework Kit](https://www.framework-kit.com/) is a React library that simplifies Solana dapp +development. It handles RPC connections, wallet adapters, and state management, so you can interact +with Solana using React hooks. + +Framework Kit supports MetaMask out-of-the-box. This guide walks you through setting it up. + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later +- A package manager such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), + [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/) +- A React or Next.js project + +## Steps + +### 1. Install dependencies + +Install Framework Kit's Solana client and React hooks: + +```bash +npm install @solana/client @solana/react-hooks +``` + +### 2. Create the Solana provider + +Create a `SolanaProviderWrapper` component that initializes the Solana client with MetaMask support: + +```typescript title='components/SolanaProvider.tsx' +'use client'; + +import { createClient, metamask } from "@solana/client"; +import { SolanaProvider } from "@solana/react-hooks"; +import { FC, ReactNode } from 'react'; + +// Create a client pointing to Solana devnet +const client = createClient({ + endpoint: "https://solana-devnet.infura.io/v3/YOUR_INFURA_API_KEY", + walletConnectors: [...metamask()], +}); + +interface SolanaProviderWrapperProps { + children: ReactNode; +} + +export const SolanaProviderWrapper: FC = ({ children }) => { + return ( + + {children} + + ); +}; +``` + +### 3. Add the provider to your root layout + +Wrap your application with `SolanaProviderWrapper` so all components can access Solana hooks: + +```typescript +import './globals.css'; +import { SolanaProviderWrapper } from '@/components/SolanaProvider'; + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} +``` + +### 4. Connect to MetaMask + +Use the [`useWalletConnection`](https://www.framework-kit.com/docs/react-hooks#usewalletconnection) hook in any component to connect to the user's wallet: + +```typescript +import { useWalletConnection } from "@solana/react-hooks"; + +export const ConnectWallet = () => { + const { wallet, connect, disconnect } = useWalletConnection(); + + if (wallet) { + return ( +
+

Connected: {wallet.accounts[0].address}

+ +
+ ); + } + + return ; +}; +``` + +## Next steps + +See how to send a [legacy transaction](send-transactions/legacy.md) and a [versioned transaction](send-transactions/versioned.md). diff --git a/metamask-connect/solana/guides/use-wallet-adapter.md b/metamask-connect/solana/guides/use-wallet-adapter.md new file mode 100644 index 00000000000..20ee17af663 --- /dev/null +++ b/metamask-connect/solana/guides/use-wallet-adapter.md @@ -0,0 +1,167 @@ +--- +title: 'Use Solana Wallet Adapter - MetaMask Connect' +sidebar_label: Use the Wallet Adapter +description: Configure Solana's Wallet Adapter with MetaMask Connect in a React dapp using WalletProvider, ConnectionProvider, and useWallet hooks. +keywords: + [ + solana, + wallet adapter, + wallet standard, + connect, + react, + '@solana/wallet-adapter', + WalletProvider, + ConnectionProvider, + useWallet, + react solana, + ] +--- + +# Use the Wallet Adapter + +Solana's [Wallet Adapter](https://github.com/solana-labs/wallet-adapter) is the standard way for +Solana dapps to discover and connect to wallets. MetaMask Connect Solana implements the +[Wallet Standard](https://github.com/wallet-standard/wallet-standard), so it works with the Wallet +Adapter out-of-the-box. + +This guide shows you how to set up the Wallet Adapter with MetaMask in a React dapp. You can also use the +[`create-solana-dapp`](https://github.com/solana-foundation/create-solana-dapp) CLI tool to generate +a new project with the Wallet Adapter built in. + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later +- A package manager such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), + [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/) +- A React or Next.js project + +## Steps + +### 1. Install dependencies + +Install MetaMask Connect Solana and the Wallet Adapter packages: + +```bash +npm install @metamask/connect-solana \ + @solana/web3.js \ + @solana/wallet-adapter-base \ + @solana/wallet-adapter-react \ + @solana/wallet-adapter-react-ui \ + @solana/wallet-adapter-wallets +``` + +### 2. Create the Solana provider + +Create a `SolanaProvider` component that initializes MetaMask Connect Solana and wraps the Wallet Adapter +providers: + +```typescript title='components/SolanaProvider.tsx' +'use client'; + +import React, { FC, ReactNode, useEffect, useMemo, useState } from 'react'; +import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react'; +import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; +import { WalletModalProvider } from '@solana/wallet-adapter-react-ui'; +import { clusterApiUrl } from '@solana/web3.js'; +import { createSolanaClient } from '@metamask/connect-solana'; + +import '@solana/wallet-adapter-react-ui/styles.css'; + +interface SolanaProviderProps { + children: ReactNode; +} + +export const SolanaProvider: FC = ({ children }) => { + const network = WalletAdapterNetwork.Devnet; + const endpoint = useMemo(() => clusterApiUrl(network), [network]); + const [ready, setReady] = useState(false); + + useEffect(() => { + createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: window.location.origin, + }, + }).then(() => setReady(true)); + }, []); + + // Wait for createSolanaClient to resolve before mounting WalletProvider, so MetaMask + // is registered with the Wallet Standard registry before the wallet list renders. + if (!ready) { + return null; + } + + return ( + + + {children} + + + ); +}; +``` + +Calling [`createSolanaClient`](../reference/methods.md#createsolanaclient) registers MetaMask with +the [Wallet Standard](https://github.com/wallet-standard/wallet-standard) registry. +This displays MetaMask as a connection option in the wallet modal, even if the user doesn't have +MetaMask installed. + +:::warning Timing +MetaMask only appears in the wallet modal if `createSolanaClient` has resolved before the +`WalletProvider` mounts. The example above gates rendering on a `ready` flag to guarantee this. +As an alternative, await the client in your app's entry point before calling `createRoot().render()`. +See [Troubleshooting: MetaMask wallet not appearing](../../troubleshooting/index.md#metamask-wallet-not-appearing-in-solana-wallet-adapter) +for details. +::: + +### 3. Add the provider to your root layout + +Wrap your application with `SolanaProvider` so all components can access the wallet context: + +```typescript +import './globals.css'; +import '@solana/wallet-adapter-react-ui/styles.css'; +import { SolanaProvider } from '@/components/SolanaProvider'; + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} +``` + +### 4. Add a connect button + +Use the Wallet Adapter's [`WalletMultiButton`](https://github.com/anza-xyz/wallet-adapter/blob/master/packages/ui/react-ui/src/WalletMultiButton.tsx) component to add a connect button to your dapp: + +```typescript title='components/ConnectWallet.tsx' +'use client'; + +import { WalletMultiButton } from '@solana/wallet-adapter-react-ui'; + +export const ConnectWallet = () => { + return ; +}; +``` + +The button automatically displays a wallet selection modal that includes MetaMask. + +:::caution Chrome Android +There is a known issue with `@solana/wallet-adapter-react` on Chrome Android when used with the +Wallet Standard provider from `@metamask/connect-solana`. +Test Solana Wallet Adapter flows on desktop Chrome and the MetaMask browser extension before +targeting mobile. +See [Troubleshooting](../../troubleshooting/index.md#chrome-android) for details. +::: + +## Next steps + +See how to send a [legacy transaction](send-transactions/legacy.md) and a [versioned transaction](send-transactions/versioned.md). diff --git a/metamask-connect/solana/index.mdx b/metamask-connect/solana/index.mdx new file mode 100644 index 00000000000..c08c0181645 --- /dev/null +++ b/metamask-connect/solana/index.mdx @@ -0,0 +1,96 @@ +--- +title: 'MetaMask Connect Solana - Solana Dapp Integration' +sidebar_label: Introduction +toc_max_heading_level: 2 +description: Connect your dapp to Solana using MetaMask Connect Solana. Use Wallet Standard features, Wallet Adapter, or Framework Kit for React and vanilla JS apps. +keywords: + [ + solana, + connect, + wallet-standard, + wallet-adapter, + metamask connect solana, + createSolanaClient, + solana dapp, + SPL token, + solana wallet, + ] +--- + +import CardList from '@site/src/components/CardList' + +# Connect to Solana + +Use MetaMask Connect Solana (`@metamask/connect-solana`) to connect to your dapp to +[Solana](https://solana.com/), a high-performance network that provides fast transaction speeds and low fees. + +MetaMask Connect Solana implements the [Wallet Standard](https://github.com/wallet-standard/wallet-standard), +so it works with Solana's [Wallet Adapter](./guides/use-wallet-adapter.md), and integrates +with [Framework Kit](./guides/use-framework-kit.md) for a hooks-based React workflow. + +It handles platform detection, relay connections, and session persistence automatically. +You interact with the wallet through the client APIs. + +:::tip Ready to code? +Jump to the [Wallet Adapter guide](./guides/use-wallet-adapter.md) for a React dapp, or +the [JavaScript quickstart](./quickstart/javascript.md) to use Wallet Standard features +directly. +::: + +:::info Going multichain? +If your dapp targets both EVM and Solana from a single codebase, use +[`@metamask/connect-multichain`](../multichain/index.mdx) directly. +The multichain client provides a unified `invokeMethod` interface for both ecosystems and manages +scopes, sessions, and selective disconnect in one place. +Get started with the [multichain quickstart](../multichain/quickstart/javascript.md). +::: + +## Get started + + + +## Third-party libraries + +Several third-party libraries for Solana dapps detect and handle MetaMask out-of-the-box, including: + +- [Dynamic](https://docs.dynamic.xyz/introduction/welcome) +- [Privy](https://docs.privy.io/welcome) +- [Reown](https://docs.reown.com/appkit/overview) +- [Embedded Wallets](/embedded-wallets) + +## Frequently asked questions + +### What is Wallet Standard and why does MetaMask Connect Solana use it? + +[Wallet Standard](https://github.com/wallet-standard/wallet-standard) is a cross-wallet interface specification for the Solana ecosystem. `@metamask/connect-solana` implements this standard so MetaMask is automatically discoverable by any Solana dapp or library that supports the standard, including Solana Wallet Adapter. You get consistent connect, sign, and send APIs without writing MetaMask-specific code. + +### Can I use Solana Wallet Adapter with MetaMask Connect? + +Yes. When you call `createSolanaClient`, MetaMask is automatically registered with the Wallet Standard registry, so Solana Wallet Adapter detects it alongside other installed wallets. No extra configuration is needed. See the [Wallet Adapter guide](./guides/use-wallet-adapter.md) for a full React setup. + +### Which Solana networks does MetaMask Connect support? + +MetaMask Connect Solana supports mainnet, devnet, and testnet. Devnet and testnet are supported only in the MetaMask browser extension; on mobile, only mainnet is supported. You can configure custom RPC URLs for each network using the `api.supportedNetworks` option in `createSolanaClient`. If your dapp also targets EVM networks, use [`@metamask/connect-multichain`](../multichain/index.mdx) to manage both ecosystems in a single session. diff --git a/metamask-connect/solana/quickstart/dynamic.md b/metamask-connect/solana/quickstart/dynamic.md new file mode 100644 index 00000000000..aa648f18c42 --- /dev/null +++ b/metamask-connect/solana/quickstart/dynamic.md @@ -0,0 +1,269 @@ +--- +title: 'Dynamic SDK Integration - MetaMask Connect Solana' +sidebar_label: Dynamic SDK +description: Integrate MetaMask with Dynamic SDK for Solana dapps, combining wallet discovery UI with cross-platform MetaMask support and social sign-in. +toc_max_heading_level: 3 +keywords: + [ + connect, + MetaMask, + Dynamic, + SDK, + dapp, + Wallet SDK, + dynamic xyz, + solana embedded wallet, + social sign-in, + ] +unlisted: true +--- + +:::info Heads up +You've landed on a guide that still uses the MetaMask legacy SDK (`@metamask/sdk`). +The MetaMask Connect integration for this library is coming soon. Once ready, it will be linked +from the sidebar navigation. In the meantime, this guide is still valid if you're using +MetaMask SDK. +::: + +# Connect to Solana using Dynamic SDK + +This quickstart gets you up and running with MetaMask SDK inside [Dynamic SDK](https://docs.dynamic.xyz/introduction/welcome). +Dynamic handles wallet discovery and connection UI, and MetaMask SDK adds reliable cross-platform support for MetaMask. +[Download the template](#set-up-using-a-template) to start quickly, or [set up manually](#set-up-manually) in an existing project. + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- A [Dynamic Environment ID](https://app.dynamic.xyz/). + +## Set up using a template + +1. Download the [MetaMask SDK + Dynamic SDK template](https://github.com/MetaMask/metamask-sdk-examples/tree/main/partners/dynamic): + + ```bash + npx degit MetaMask/metamask-sdk-examples/partners/dynamic metamask-dynamic + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-dynamic + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask SDK examples repository and navigate into the `partners/dynamic` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-sdk-examples + cd metamask-sdk-examples/partners/dynamic + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Create a `.env.local` file: + + ```bash + touch .env.local + ``` + +5. In `.env.local`, add a `NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID` environment variable, replacing `` with your Dynamic Environment ID: + + ```text title=".env.local" + NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID= + ``` + +6. Run the project: + + ```bash + pnpm dev + ``` + +You've successfully set up MetaMask SDK and Dynamic SDK. +See how to [use the combined SDKs](#usage). + +## Set up manually + +### 1. Install dependencies + +Install Dynamic SDK with the Solana extension and Solana web3.js: + +```bash npm2yarn +npm install @dynamic-labs/client @dynamic-labs/solana-extension @solana/web3.js +``` + +### 2. Create the Dynamic client + +Create a Dynamic client extended with Solana support in `lib/dynamic.ts`: + +```typescript title="lib/dynamic.ts" +import { createClient } from '@dynamic-labs/client' +import { SolanaExtension } from '@dynamic-labs/solana-extension' + +export const dynamicClient = createClient({ + environmentId: process.env.NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID!, +}).extend(SolanaExtension()) +``` + +### 3. Set up environment variables + +Create a `.env.local` file. +In `.env.local`, add a `NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID` environment variable, replacing `` with your Dynamic Environment ID: + +```text title=".env.local" +NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID= +``` + +Test your dapp by running `pnpm run dev`. + +## Usage + +### Connect wallet + +Use the Dynamic Widget in your components: + +```typescript +"use client"; + +import { DynamicWidget } from "@dynamic-labs/sdk-react-core"; + +export const Navbar = () => { + return ( + + ); +}; +``` + +### Check wallet status + +Use the Dynamic client to check the primary wallet: + +```typescript +"use client"; + +import { dynamicClient } from '@/lib/dynamic' + +export const WalletStatus = () => { + const wallet = dynamicClient.wallets.primary + + return ( +
+ {wallet ? ( +

Connected: {wallet.address}

+ ) : ( +

Not connected

+ )} +
+ ); +}; +``` + +### Send a SOL transfer + +Use the Solana extension's `getConnection` and `getSigner` methods to build and send a transaction: + +```typescript +"use client"; + +import { dynamicClient } from '@/lib/dynamic' +import { + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + TransactionMessage, + VersionedTransaction, +} from '@solana/web3.js' + +export const SendSol = () => { + const send = async () => { + const wallet = dynamicClient.wallets.primary + if (!wallet) return + + const connection = dynamicClient.solana.getConnection({ + commitment: 'singleGossip', + }) + const signer = dynamicClient.solana.getSigner({ wallet }) + + const { blockhash } = await connection.getLatestBlockhash() + const fromKey = new PublicKey(wallet.address) + const toKey = new PublicKey('DESTINATION_PUBLIC_KEY') + + const instructions = [ + SystemProgram.transfer({ + fromPubkey: fromKey, + toPubkey: toKey, + lamports: 0.01 * LAMPORTS_PER_SOL, + }), + ] + + const messageV0 = new TransactionMessage({ + payerKey: fromKey, + recentBlockhash: blockhash, + instructions, + }).compileToV0Message() + + const transaction = new VersionedTransaction(messageV0) + const { signature } = await signer.signAndSendTransaction(transaction) + console.log('Transaction signature:', signature) + } + + return +}; +``` + +## Production readiness + +Before deploying your project to production: + +1. Update your `next.config.ts` with production domains. +2. Set up proper environment variables. +3. Configure your Dynamic SDK environment ID. +4. Ensure MetaMask SDK is properly initialized. + +## Troubleshooting + +Common issues and solutions include: + +- **SDK initialization error:** + - Ensure MetaMask is installed. + - Check environment variables. + - Verify network connectivity. +- **TypeScript errors:** + - Update type definitions. + - Check SDK versions compatibility. +- **Mobile experience issues:** + - Test on actual mobile devices. + - Verify redirect URLs. + - Check MetaMask mobile app installation. + +## Live example + + + +## Next steps + +- [Send a legacy transaction](../guides/send-transactions/legacy.md) to transfer SOL using MetaMask Connect. +- [Sign messages](../guides/sign-data/sign-message.md) to verify wallet ownership or authorize offchain actions. +- [MetaMask Connect Solana methods](../reference/methods.md) for the full API reference. diff --git a/metamask-connect/solana/quickstart/javascript.md b/metamask-connect/solana/quickstart/javascript.md new file mode 100644 index 00000000000..374cffcce5f --- /dev/null +++ b/metamask-connect/solana/quickstart/javascript.md @@ -0,0 +1,206 @@ +--- +title: 'JavaScript Quickstart - MetaMask Connect Solana' +description: Set up MetaMask Connect Solana in a vanilla JavaScript dapp using Wallet Standard features, signAndSendTransaction, and createSolanaClient. +sidebar_label: JavaScript +keywords: + [ + connect, + MetaMask, + JavaScript, + SDK, + dapp, + Wallet SDK, + vanilla javascript, + wallet-standard, + solana browser dapp, + signAndSendTransaction, + connect solana, + ] +--- + +# Connect to Solana quickstart + +This quickstart gets you up and running with MetaMask Connect Solana in a JavaScript dapp. + + + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the Infura dashboard. + + + +## Steps + +### 1. Install MetaMask Connect Solana + +Install the Solana Client in an existing JavaScript project: + +```bash npm2yarn +npm install @metamask/connect-solana +``` + +### 2. Initialize MetaMask Connect Solana + +Initialize the Solana client using [`createSolanaClient`](../reference/methods.md#createsolanaclient). +The following is an example of initializing the client in a JavaScript project: + +```javascript +import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'Example JavaScript Solana dapp', + url: window.location.href, + iconUrl: 'https://mydapp.com/icon.png', // Optional + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + networks: ['devnet'], + }), + }, +}) +``` + +:::info +[`createSolanaClient`](../reference/methods.md#createsolanaclient) is async and uses a singleton multichain core under the hood. +Calling it multiple times returns the same underlying session, so you can safely call it during +initialization without worrying about duplicate connections. +::: + +This example configures MetaMask Connect Solana with the following options: + +- `dapp` - Ensures trust by showing your dapp's `name`, `url`, and `iconUrl` during connection. +- `api.supportedNetworks` - A map of network names (`mainnet`, `devnet`, `testnet`) to RPC URLs for all networks supported by the dapp. + +### 3. Connect and use the wallet + +Get the [Wallet Standard](https://github.com/wallet-standard/wallet-standard) wallet instance and connect: + +```javascript +const wallet = solanaClient.getWallet() + +const { accounts } = await wallet.features['standard:connect'].connect() +console.log('Connected account:', accounts[0].address) +``` + +The client handles cross-platform connection (desktop and mobile), including deeplinking. + +:::note +This example uses devnet. Devnet and testnet are supported only in the MetaMask browser extension. +On mobile, only Solana mainnet is supported. +::: + +## Solana client methods at a glance + +| Method | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| [`getWallet`](../reference/methods.md#getwallet) | Returns a [Wallet Standard](https://github.com/wallet-standard/wallet-standard) compatible wallet instance | +| [`registerWallet`](../reference/methods.md#registerwallet) | Registers MetaMask with the Wallet Standard registry (no-op if auto-registered) | +| [`disconnect`](../reference/methods.md#disconnect) | Disconnects Solana scopes without terminating the broader multichain session | + +## Usage example + +```javascript +const wallet = solanaClient.getWallet() + +// 1. Connect and get accounts +try { + const { accounts } = await wallet.features['standard:connect'].connect() + console.log('Connected:', accounts[0].address) + + // 2. Sign a message + const message = new TextEncoder().encode('Hello from my dapp') + const [{ signature }] = await wallet.features['solana:signMessage'].signMessage({ + account: accounts[0], + message, + }) + console.log('Signature:', signature) +} catch (err) { + if (err.code === 4001) { + console.log('User rejected the request') + } else if (err.code === -32002) { + console.log('A request is already pending — check MetaMask') + } else { + console.error('Unexpected error:', err) + } +} + +// 3. Disconnect +await solanaClient.disconnect() +``` + +## Next steps + +- [Use the Wallet Adapter](../guides/use-wallet-adapter.md) to integrate MetaMask with Solana's standard wallet discovery in a React dapp. +- [Send a legacy transaction](../guides/send-transactions/legacy.md) to transfer SOL or interact with programs. +- [Sign messages](../guides/sign-data/sign-message.md) to verify wallet ownership or authorize offchain actions. diff --git a/metamask-connect/solana/quickstart/nodejs.md b/metamask-connect/solana/quickstart/nodejs.md new file mode 100644 index 00000000000..28dfa75d9f0 --- /dev/null +++ b/metamask-connect/solana/quickstart/nodejs.md @@ -0,0 +1,220 @@ +--- +title: 'Node.js Quickstart - MetaMask Connect Solana' +description: Set up MetaMask Connect Solana in a Node.js application using createSolanaClient with the multichain core for connecting, signing, and sending Solana transactions. +sidebar_label: Node.js +keywords: + [ + connect, + MetaMask, + Node.js, + Solana, + SDK, + CLI, + server-side, + createSolanaClient, + invokeMethod, + signMessage, + QR code, + node quickstart, + ] +--- + +# Connect to Solana - Node.js quickstart + +Get started with MetaMask Connect Solana in a Node.js application. +The SDK displays a QR code in the terminal that you scan with the MetaMask mobile app to establish a connection. + +:::info Wallet Standard is browser-only +[Wallet Standard](https://github.com/wallet-standard/wallet-standard) features (`getWallet`, +`wallet.features[...]`) are designed for browser environments. +In Node.js, use the multichain core directly via `client.core.connect` and +`client.core.invokeMethod` to interact with Solana. +::: + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 20 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), or [pnpm](https://pnpm.io/installation). +- The [MetaMask mobile app](https://metamask.io/download/) installed on your phone. +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the Infura dashboard. + +## Steps + +### 1. Install MetaMask Connect Solana + +Install the Solana client in an existing Node.js project: + +```bash npm2yarn +npm install @metamask/connect-solana +``` + +### 2. Initialize MetaMask Connect Solana + +Create a file (`index.mjs`) and initialize the client using [`createSolanaClient`](../reference/methods.md#createsolanaclient). +In Node.js, there is no `window.location`, so you must set `dapp.url` explicitly. +The `supportedNetworks` map uses network names (`mainnet`, `devnet`) as keys: + +```javascript title="index.mjs" +import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana' + +const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Node.js Solana App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + networks: ['mainnet'], + }), + }, +}) +``` + +:::info Async client +`createSolanaClient` returns a promise. Always `await` it before using the client. +The client uses a singleton multichain core under the hood; calling it multiple times +returns the same underlying session. +::: + +### 3. Connect to MetaMask + +Register a [`wallet_sessionChanged`](../../multichain/reference/api.md#wallet_sessionchanged) listener to capture session data, then connect with a Solana scope. +A QR code appears in the terminal. Scan it with the MetaMask mobile app: + +```javascript +let session +solanaClient.core.on('wallet_sessionChanged', s => { + session = s +}) + +await solanaClient.core.connect([SOLANA_MAINNET], []) + +const accounts = session?.sessionScopes?.[SOLANA_MAINNET]?.accounts ?? [] +const address = accounts[0]?.split(':').pop() +console.log('Connected:', address) +``` + +### 4. Sign a message + +Use [`invokeMethod`](../../multichain/reference/methods.md#invokemethod) to call the `signMessage` method on the Solana scope: + +```javascript +const message = Buffer.from('Hello from Node.js!', 'utf8').toString('base64') + +const result = await solanaClient.core.invokeMethod({ + scope: SOLANA_MAINNET, + request: { + method: 'signMessage', + params: { + account: { address }, + message, + }, + }, +}) +console.log('Signature:', result.signature) +``` + +### 5. Disconnect + +Use [`disconnect`](../reference/methods.md#disconnect) to revoke the Solana scopes. Any EVM or other scopes in the same multichain session stay active. + +```javascript +await solanaClient.disconnect() +console.log('Disconnected') +``` + +## Listen for session events + +[Step 3](#3-connect-to-metamask) captures the session with a minimal `wallet_sessionChanged` listener. For production use, expand the handler to track account changes throughout the session lifecycle: + +```javascript +solanaClient.core.on('wallet_sessionChanged', session => { + if (session?.sessionScopes) { + const solanaAccounts = session.sessionScopes[SOLANA_MAINNET]?.accounts ?? [] + console.log('Solana accounts:', solanaAccounts) + } else { + console.log('Session ended') + } +}) +``` + +## Solana CAIP-2 scope reference + +| Network | CAIP-2 scope | +| ------- | ----------------------------------------- | +| Mainnet | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | +| Devnet | `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` | +| Testnet | `solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z` | + +:::note +Devnet and testnet are supported only in the MetaMask browser extension. On mobile (including the +QR code flow in this quickstart), only Solana mainnet is supported. +::: + +## Full example + +```javascript title="index.mjs" +import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana' + +const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' + +const solanaClient = await createSolanaClient({ + dapp: { + name: 'My Node.js Solana App', + url: 'https://myapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + networks: ['mainnet'], + }), + }, +}) + +// Capture session data via event before connecting +let session +solanaClient.core.on('wallet_sessionChanged', s => { + session = s +}) + +// Connect — scan the QR code with the MetaMask mobile app +await solanaClient.core.connect([SOLANA_MAINNET], []) + +const accounts = session?.sessionScopes?.[SOLANA_MAINNET]?.accounts ?? [] +const address = accounts[0]?.split(':').pop() +console.log('Connected:', address) + +// Sign a message +const message = Buffer.from('Hello from Node.js!', 'utf8').toString('base64') +const result = await solanaClient.core.invokeMethod({ + scope: SOLANA_MAINNET, + request: { + method: 'signMessage', + params: { + account: { address }, + message, + }, + }, +}) +console.log('Signature:', result.signature) + +// Disconnect +await solanaClient.disconnect() +console.log('Disconnected') +``` + +Run it with: + +```bash +node index.mjs +``` + +## Next steps + +- [Send a legacy Solana transaction.](../guides/send-transactions/legacy.md) +- [Send a versioned Solana transaction.](../guides/send-transactions/versioned.md) +- [Sign a Solana message.](../guides/sign-data/sign-message.md) +- [Use the multichain client](../../multichain/quickstart/nodejs.md) to connect to both EVM and Solana from a single session. diff --git a/metamask-connect/solana/quickstart/react-native.md b/metamask-connect/solana/quickstart/react-native.md new file mode 100644 index 00000000000..2f84c3150e3 --- /dev/null +++ b/metamask-connect/solana/quickstart/react-native.md @@ -0,0 +1,440 @@ +--- +title: 'React Native Quickstart - MetaMask Connect Solana' +description: Set up MetaMask Connect Solana in a React Native or Expo app using the multichain client with polyfills, metro configuration, and mobile deeplink support. +sidebar_label: React Native +keywords: + [ + connect, + MetaMask, + React, + Native, + Solana, + SDK, + dapp, + mobile dapp, + polyfills, + metro config, + mobile deeplinks, + invokeMethod, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Connect to Solana - React Native quickstart + +Get started with MetaMask Connect Solana in your React Native or Expo dapp. + +:::info +`@solana/wallet-adapter-react` does not support React Native. +This guide uses `createMultichainClient` from `@metamask/connect-multichain` with `invokeMethod` +to call Solana RPC methods directly. +::: + +## Steps + +### 1. Create a new project + +Create a new React Native or Expo project: + + + + +```bash +npx react-native@latest init MySolanaProject +``` + + + + +```bash +npx create-expo-app MySolanaProject --template +``` + + + + +### 2. Install dependencies + +Install MetaMask Connect Multichain, Solana web3.js, and required polyfill packages: + +```bash +npm install @metamask/connect-multichain @solana/web3.js react-native-get-random-values buffer @react-native-async-storage/async-storage readable-stream +``` + +### 3. Create polyfills + +Create `polyfills.ts` (at the project root or in `src/`) with all required global shims. +This file must be imported before any SDK code: + +```typescript title="polyfills.ts" +import { Buffer } from 'buffer' + +global.Buffer = Buffer + +let windowObj: any +if (typeof global !== 'undefined' && global.window) { + windowObj = global.window +} else if (typeof window !== 'undefined') { + windowObj = window +} else { + windowObj = {} +} + +if (!windowObj.location) { + windowObj.location = { + hostname: 'mydapp.com', + href: 'https://mydapp.com', + } +} +if (typeof windowObj.addEventListener !== 'function') { + windowObj.addEventListener = () => {} +} +if (typeof windowObj.removeEventListener !== 'function') { + windowObj.removeEventListener = () => {} +} +if (typeof windowObj.dispatchEvent !== 'function') { + windowObj.dispatchEvent = () => true +} + +if (typeof global !== 'undefined') { + global.window = windowObj +} + +if (typeof global.Event === 'undefined') { + class EventPolyfill { + type: string + bubbles: boolean + cancelable: boolean + defaultPrevented = false + constructor(type: string, options?: EventInit) { + this.type = type + this.bubbles = options?.bubbles ?? false + this.cancelable = options?.cancelable ?? false + } + preventDefault() { + this.defaultPrevented = true + } + stopPropagation() {} + stopImmediatePropagation() {} + } + global.Event = EventPolyfill as any + windowObj.Event = EventPolyfill as any +} + +if (typeof global.CustomEvent === 'undefined') { + const EventClass = + global.Event || + class { + type: string + constructor(type: string) { + this.type = type + } + } + class CustomEventPolyfill extends (EventClass as any) { + detail: any + constructor(type: string, options?: CustomEventInit) { + super(type, options) + this.detail = options?.detail ?? null + } + } + global.CustomEvent = CustomEventPolyfill as any + windowObj.CustomEvent = CustomEventPolyfill as any +} +``` + +Create the empty module stub used by the Metro config: + +```javascript title="src/empty-module.js" +module.exports = {} +``` + +:::tip +For detailed troubleshooting of polyfill issues, see [React Native Metro polyfill issues](../../troubleshooting/metro-polyfill-issues.md). +::: + +### 4. Configure Metro + +Metro cannot resolve Node.js built-in modules. +Map them to React Native-compatible shims or the empty module stub: + + + + +```javascript title="metro.config.js" +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config') +const path = require('path') + +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +const config = { + resolver: { + extraNodeModules: { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, + }, + }, +} + +module.exports = mergeConfig(getDefaultConfig(__dirname), config) +``` + + + + +Run `npx expo customize metro.config.js` to create a default config, then update it: + +```javascript title="metro.config.js" +const { getDefaultConfig } = require('expo/metro-config') +const path = require('path') + +const config = getDefaultConfig(__dirname) +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +config.resolver.extraNodeModules = { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, +} + +module.exports = config +``` + + + + +### 5. Set up the entry file + +The import order is critical. +`react-native-get-random-values` **must** be the very first import, followed by the polyfills file, +before any other code: + +```javascript title="index.js or App.tsx (Bare RN) / app/_layout.tsx (Expo Router)" +import 'react-native-get-random-values' +import './polyfills' +``` + +:::caution +If you import anything from `@metamask/connect-multichain` before `react-native-get-random-values`, +you will get `crypto.getRandomValues is not a function`. +::: + +### 6. Use MetaMask Connect with Solana + +Initialize the multichain client using [`createMultichainClient`](../../multichain/reference/methods.md#createmultichainclient), and interact with Solana using [`invokeMethod`](../../multichain/reference/methods.md#invokemethod). +`mobile.preferredOpenLink` is required; it tells MetaMask Connect how to open deeplinks to the MetaMask +mobile app: + +```tsx +import React, { useEffect, useRef, useState, useCallback } from 'react' +import { View, Text, TouchableOpacity, StyleSheet, Alert, Linking } from 'react-native' +import { createMultichainClient, getInfuraRpcUrls } from '@metamask/connect-multichain' +import { Buffer } from 'buffer' + +const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' + +let clientPromise = null + +function getClient() { + if (!clientPromise) { + clientPromise = createMultichainClient({ + dapp: { + name: 'My Solana RN Dapp', + url: 'https://mydapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + }), + }, + mobile: { + preferredOpenLink: deeplink => Linking.openURL(deeplink), + }, + }) + } + return clientPromise +} + +export default function App() { + const clientRef = useRef(null) + const [accounts, setAccounts] = useState([]) + const [connecting, setConnecting] = useState(false) + + useEffect(() => { + let mounted = true + + async function init() { + const client = await getClient() + if (!mounted) return + clientRef.current = client + + client.on('wallet_sessionChanged', session => { + if (!mounted) return + const scopeData = session?.sessionScopes?.[SOLANA_MAINNET] + const accs = scopeData?.accounts?.map(a => a.split(':').pop()) ?? [] + setAccounts(accs) + }) + } + + init() + return () => { + mounted = false + } + }, []) + + const handleConnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + + setConnecting(true) + try { + await client.connect([SOLANA_MAINNET], []) + const session = await client.provider.getSession() + const scopeData = session?.sessionScopes?.[SOLANA_MAINNET] + const accs = scopeData?.accounts?.map(a => a.split(':').pop()) ?? [] + setAccounts(accs) + } catch (err) { + if (err.code === 4001) { + Alert.alert('Rejected', 'Connection was rejected.') + return + } + Alert.alert('Error', err.message ?? 'Connection failed') + } finally { + setConnecting(false) + } + }, []) + + const handleSignMessage = useCallback(async () => { + const client = clientRef.current + if (!client || accounts.length === 0) return + + try { + const message = Buffer.from('Hello from React Native!').toString('base64') + const result = await client.invokeMethod({ + scope: SOLANA_MAINNET, + request: { + method: 'signMessage', + params: { + account: { address: accounts[0] }, + message, + }, + }, + }) + Alert.alert('Signed', result.signature.slice(0, 40) + '...') + } catch (err) { + Alert.alert('Sign failed', err.message) + } + }, [accounts]) + + const handleDisconnect = useCallback(async () => { + const client = clientRef.current + if (!client) return + await client.disconnect([SOLANA_MAINNET]) + setAccounts([]) + }, []) + + const isConnected = accounts.length > 0 + + return ( + + {!isConnected ? ( + + + {connecting ? 'Connecting...' : 'Connect MetaMask (Solana)'} + + + ) : ( + + Address: {accounts[0]} + + Sign Message + + + Disconnect + + + )} + + ) +} + +const styles = StyleSheet.create({ + container: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 20 }, + button: { backgroundColor: '#037DD6', padding: 14, borderRadius: 8, marginVertical: 8 }, + buttonText: { color: '#fff', fontSize: 16, textAlign: 'center' }, + label: { fontSize: 14, marginVertical: 4 }, +}) +``` + +### 7. iOS configuration + +Add the `metamask` URL scheme to your `Info.plist` so the app can open the MetaMask mobile app: + +```xml title="ios/MySolanaProject/Info.plist" +LSApplicationQueriesSchemes + + metamask + +``` + +### 8. Build and run + + + + +```bash +npx react-native run-android +npx react-native run-ios +``` + + + + +```bash +npx expo prebuild +npx expo run:android +npx expo run:ios +``` + + + + +## Solana CAIP-2 scope reference + +| Network | CAIP-2 scope | +| ------- | ----------------------------------------- | +| Mainnet | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | +| Devnet | `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` | + +:::note +Devnet and testnet are supported only in the MetaMask browser extension. On mobile, only Solana mainnet is supported. +::: + +## Next steps + +- [Send a legacy Solana transaction.](../guides/send-transactions/legacy.md) +- [Send a versioned Solana transaction.](../guides/send-transactions/versioned.md) +- [Sign a Solana message.](../guides/sign-data/sign-message.md) +- [Troubleshoot bundler polyfill issues.](../../troubleshooting/metro-polyfill-issues.md) diff --git a/metamask-connect/solana/quickstart/web3auth.md b/metamask-connect/solana/quickstart/web3auth.md new file mode 100644 index 00000000000..39df381cf8f --- /dev/null +++ b/metamask-connect/solana/quickstart/web3auth.md @@ -0,0 +1,284 @@ +--- +title: 'Web3Auth Embedded Wallets - MetaMask Connect Solana' +sidebar_label: Embedded Wallets SDK +description: Integrate MetaMask with Web3Auth Embedded Wallets SDK for Solana, enabling email and social sign-in alongside MetaMask wallet support. +toc_max_heading_level: 3 +keywords: + [ + connect, + MetaMask, + Embedded Wallets, + SDK, + dapp, + Wallet SDK, + web3auth solana, + embedded wallet, + seedless, + social sign-in, + ] +unlisted: true +--- + +:::info Heads up +You've landed on a guide that still uses the MetaMask legacy SDK (`@metamask/sdk`). +The MetaMask Connect integration for this library is coming soon. Once ready, it will be linked +from the sidebar navigation. In the meantime, this guide is still valid if you're using +MetaMask SDK. +::: + +# Connect to Solana using Embedded Wallets SDK + +This quickstart gets you up and running with MetaMask SDK inside [Embedded Wallets SDK (previously Web3Auth)](/embedded-wallets), enabling users to sign in with an email or social media account. +[Download the template](#set-up-using-a-template) to start quickly, or [set up the SDKs manually](#set-up-manually) in an existing project. + + + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 19 or later installed. +- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [bun](https://bun.sh/). +- [MetaMask](https://metamask.io/) installed in your browser or on mobile. +- A [Web3Auth Client ID](/embedded-wallets/dashboard/#get-the-client-id). + +## Set up using a template + +1. Download the [MetaMask SDK + Web3Auth SDK template](https://github.com/MetaMask/metamask-sdk-examples/tree/main/partners/web3auth): + + ```bash + npx degit MetaMask/metamask-sdk-examples/partners/web3auth metamask-web3auth + ``` + +2. Navigate into the repository: + + ```bash + cd metamask-web3auth + ``` + +
+ Degit vs. Git clone +
+ + `degit` is a tool that enables cloning only the directory structure from a GitHub repository, without retrieving the entire repository. + + Alternatively, use `git clone` to download the entire repository. + Clone the MetaMask SDK examples repository and navigate into the `partners/web3auth` directory: + + ```bash + git clone https://github.com/MetaMask/metamask-sdk-examples + cd metamask-sdk-examples/partners/web3auth + ``` + +
+
+ +3. Install dependencies: + + ```bash + pnpm install + ``` + +4. Create a `.env.local` file: + + ```bash + touch .env.local + ``` + +5. In `.env.local`, add a `NEXT_PUBLIC_WEB3AUTH_CLIENT_ID` environment variable, replacing `` with your Web3Auth Client ID: + + ```text title=".env.local" + NEXT_PUBLIC_WEB3AUTH_CLIENT_ID= + ``` + +6. Run the project: + + ```bash + pnpm dev + ``` + +You've successfully set up MetaMask SDK and MetaMask Embedded Wallets. +See how to [use Embedded Wallets](#usage). + +## Set up manually + +### 1. Install dependencies + +Install Embedded Wallets SDK and Solana web3.js: + +```bash npm2yarn +npm install @web3auth/modal @solana/kit @solana-program/system +``` + +### 2. Configure providers + +Set up your providers in `app/providers.tsx` with Solana chain configuration: + +```typescript title="providers.tsx" +"use client"; + +import { type ReactNode } from "react"; +import { Web3AuthProvider } from "@web3auth/modal/react"; + +type Props = { + children: ReactNode; +}; + +export function Providers({ children }: Props) { + return ( + +
{children}
+
+ ); +} +``` + +### 3. Set up environment variables + +Create a `.env.local` file. +In `.env.local`, add a `NEXT_PUBLIC_WEB3AUTH_CLIENT_ID` environment variable, replacing `` with your Web3Auth Client ID: + +```text title=".env.local" +NEXT_PUBLIC_WEB3AUTH_CLIENT_ID= +``` + +Test your dapp by running `pnpm run dev`. + +## Usage + +### Connect or sign in + +Use the `useWeb3AuthConnect` hook to enable users to connect or sign in to their wallet: + +```typescript +"use client"; + +import { useWeb3AuthConnect } from "@web3auth/modal/react"; + +export const Navbar = () => { + const { connect } = useWeb3AuthConnect(); + + return ( + + ); +}; +``` + +### Check wallet status + +Use the `useSolanaWallet` hook to access the Solana wallet state: + +```typescript +"use client"; + +import { useSolanaWallet } from "@web3auth/modal/react/solana"; + +export const WalletStatus = () => { + const { address, connected } = useSolanaWallet(); + + return ( +
+ {connected ?

Connected: {address}

:

Not connected

} +
+ ); +}; +``` + +### Sign a message + +Use the `useSignMessage` hook to request a signed message: + +```typescript +"use client"; + +import { useSignMessage } from "@web3auth/modal/react/solana"; + +export const SignMessage = () => { + const { signMessage, isPending } = useSignMessage(); + + const handleSign = async () => { + try { + const message = new TextEncoder().encode("Hello from Solana!"); + const signature = await signMessage(message); + console.log("Signature:", signature); + } catch (err) { + console.error("Error signing message:", err); + } + }; + + return ( + + ); +}; +``` + +### Send a transaction + +Use the `useSignAndSendTransaction` hook to sign and send a Solana transaction: + +```typescript +"use client"; + +import { useSignAndSendTransaction } from "@web3auth/modal/react/solana"; +import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js"; + +export const SendTransaction = () => { + const { signAndSendTransaction, isPending } = useSignAndSendTransaction(); + + const handleSend = async () => { + try { + const transaction = new Transaction().add( + SystemProgram.transfer({ + fromPubkey: new PublicKey("YOUR_PUBLIC_KEY"), + toPubkey: new PublicKey("DESTINATION_PUBLIC_KEY"), + lamports: 0.01 * LAMPORTS_PER_SOL, + }) + ); + + const signature = await signAndSendTransaction(transaction); + console.log("Transaction signature:", signature); + } catch (err) { + console.error("Error sending transaction:", err); + } + }; + + return ( + + ); +}; +``` + +## Live example + + + +## Next steps + +- [Send a legacy transaction](../guides/send-transactions/legacy.md) to transfer SOL using MetaMask Connect. +- [Sign in with Solana (SIWS)](../guides/sign-data/siws.md) to authenticate users with their wallet instead of a username and password. +- [MetaMask Connect Solana methods](../reference/methods.md) for the full API reference. diff --git a/metamask-connect/solana/reference/methods.md b/metamask-connect/solana/reference/methods.md new file mode 100644 index 00000000000..9179cf21821 --- /dev/null +++ b/metamask-connect/solana/reference/methods.md @@ -0,0 +1,276 @@ +--- +title: 'MetaMask Connect Solana methods' +description: Complete methods reference for MetaMask Connect Solana, including createSolanaClient, getInfuraRpcUrls, and Wallet Standard features. +keywords: + [ + solana, + connect, + method, + methods, + dapp, + createSolanaClient, + getInfuraRpcUrls, + Wallet Standard features, + signTransaction, + signMessage, + API reference, + ] +toc_max_heading_level: 2 +--- + +# MetaMask Connect Solana methods + +MetaMask Connect Solana (`@metamask/connect-solana`) exposes several methods, including: + +- [`createSolanaClient`](#createsolanaclient) to initialize the client and automatically register the wallet for compatibility with the Solana Wallet Adapter ecosystem. +- [`getInfuraRpcUrls`](#getinfurarpcurls) to generate Infura RPC endpoints for Solana networks. +- [`getWallet`](#getwallet) to access [Wallet Standard features](#supported-wallet-standard-features) (`signTransaction`, `signAndSendTransaction`, `signMessage`). + +The client wraps `@metamask/connect-multichain` and handles wallet discovery and session management automatically. + +## `createSolanaClient` + +Creates a new Solana client instance. +By default, the wallet is automatically registered with the Wallet Standard registry on creation, +making MetaMask discoverable by Solana dapps and wallet adapters. + +Under the hood, `createSolanaClient` delegates to [`createMultichainClient`](../../multichain/reference/methods.md#createmultichainclient), which is a singleton. +Calling `createSolanaClient` multiple times returns the same underlying multichain core and session. + +### Parameters + +See [`SolanaConnectOptions`](#solanaconnectoptions). + +### Returns + +A promise that resolves to a [`SolanaClient`](#solanaclient) instance. +The client is a singleton; calling `createSolanaClient` again returns the same instance. + +### Example + +```javascript +import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana' + +const client = await createSolanaClient({ + dapp: { + name: 'My Solana Dapp', + url: 'https://mydapp.com', + }, + api: { + supportedNetworks: getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + networks: ['mainnet', 'devnet'], + }), + }, +}) +``` + +## `getInfuraRpcUrls` + +Generates Solana Infura RPC URLs keyed by network name. +The returned map can be passed directly to `createSolanaClient({ api: { supportedNetworks } })`. + +Under the hood, this delegates to the [multichain `getInfuraRpcUrls`](/metamask-connect/multichain/reference/methods#getinfurarpcurls), which maps CAIP-2 chain IDs to Infura endpoints, then translates the result back to Solana network names. + +:::note +Each chain must be activated in your [Infura dashboard](https://app.infura.io/) before `getInfuraRpcUrls` can generate working URLs for it. +::: + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ----------------- | -------- | ------------------------------------------------------------------ | +| `infuraApiKey` | `string` | Yes | Your Infura API key. | +| `networks` | `SolanaNetwork[]` | Yes | Solana networks to include (for example, `['mainnet', 'devnet']`). | + +### Returns + +[`SolanaSupportedNetworks`](#solanasupportednetworks), a map of network names to Infura RPC URLs. + +### Example + +```javascript +import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana' + +// Each chain must be active in your Infura dashboard +const supportedNetworks = getInfuraRpcUrls({ + infuraApiKey: 'YOUR_INFURA_API_KEY', + networks: ['mainnet', 'devnet'], +}) +// { +// mainnet: 'https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY', +// devnet: 'https://solana-devnet.infura.io/v3/YOUR_INFURA_API_KEY', +// } + +const client = await createSolanaClient({ + dapp: { name: 'My Solana Dapp', url: 'https://mydapp.com' }, + api: { supportedNetworks }, +}) +``` + +## `getWallet` + +Returns a Wallet Standard compatible MetaMask wallet instance. +Use this to access wallet features directly outside of the Solana Wallet Adapter. + +### Returns + +A Wallet Standard `Wallet` object. + +### Example + +```javascript +const wallet = client.getWallet() +console.log('Wallet name:', wallet.name) +``` + +## `registerWallet` + +Registers the MetaMask wallet with the Wallet Standard registry, making it automatically +discoverable by Solana dapps. +This is a no-op if the wallet was already auto-registered during creation (that is, +`skipAutoRegister` was not set to `true`). + +### Returns + +A promise that resolves when registration is complete. + +### Example + +```javascript +const client = await createSolanaClient({ + dapp: { name: 'My Solana Dapp', url: 'https://mydapp.com' }, + skipAutoRegister: true, +}) + +// Register manually when ready +await client.registerWallet() +``` + +## `disconnect` + +Disconnects all Solana scopes from MetaMask. +This only revokes the Solana-specific scopes: + +- `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` (mainnet) +- `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1` (devnet) +- `solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z` (testnet) + +It does not terminate the broader multichain session if non-Solana scopes (such as EVM) are also +active. + +### Returns + +A promise that resolves when the disconnect is complete. + +### Example + +```javascript +await client.disconnect() +``` + +## Properties + +| Property | Type | Description | +| -------- | ---------------- | --------------------------------------- | +| `core` | `MultichainCore` | The underlying MultichainCore instance. | + +The `core` property exposes the full multichain client, giving access to lower-level methods such as +[`connect`](../../multichain/reference/methods.md#connect), +[`getSession`](../../multichain/reference/methods.md#getsession), +[`invokeMethod`](../../multichain/reference/methods.md#invokemethod), +[`on`](../../multichain/reference/methods.md#on), and +[`off`](../../multichain/reference/methods.md#off). + +### Example + +```javascript +const session = await client.core.getSession() +const solAccounts = session.sessionScopes['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']?.accounts || [] +console.log('Solana accounts:', solAccounts) +``` + +## Supported Wallet Standard features + +The wallet returned by [`getWallet`](#getwallet) implements the following +[Wallet Standard](https://github.com/wallet-standard/wallet-standard) features. +Access them via `wallet.features['']`. + +| Feature | Description | +| ------------------------------- | ------------------------------------------------------------------------------------------------------ | +| `standard:connect` | Connect to the wallet and receive the user's accounts. | +| `standard:disconnect` | Disconnect from the wallet. | +| `standard:events` | Subscribe to account and chain change events. | +| `solana:signMessage` | Sign an arbitrary message (returns a signature). | +| `solana:signTransaction` | Sign one or more transactions without broadcasting them. | +| `solana:signAndSendTransaction` | Sign one or more transactions and broadcast them to the network. Pass multiple inputs to send a batch. | + +### Example + +```javascript +const wallet = client.getWallet() + +const { accounts } = await wallet.features['standard:connect'].connect() + +const message = new TextEncoder().encode('Hello Solana') +const [{ signature }] = await wallet.features['solana:signMessage'].signMessage({ + account: accounts[0], + message, +}) +``` + +## Types + +### `SolanaNetwork` + +```javascript +type SolanaNetwork = 'mainnet' | 'devnet' | 'testnet' +``` + +### `SolanaSupportedNetworks` + +A partial record mapping [`SolanaNetwork`](#solananetwork) names to RPC URL strings. + +```javascript +type SolanaSupportedNetworks = Partial> +``` + +### `SolanaConnectOptions` + +Configuration options passed to [`createSolanaClient`](#createsolanaclient). + +| Field | Type | Required | Description | +| --------------------------- | ------------------------- | -------- | -------------------------------------------------------------------------- | +| `dapp` | `object` | Yes | Dapp identification and branding settings. | +| `dapp.name` | `string` | Yes | Name of your dapp. | +| `dapp.url` | `string` | No | URL of your dapp. | +| `dapp.iconUrl` | `string` | No | URL of your dapp icon. | +| `api` | `object` | No | Optional API configuration. | +| `api.supportedNetworks` | `SolanaSupportedNetworks` | No | Map of network names (`mainnet`, `devnet`, `testnet`) to RPC URLs. | +| `analytics.integrationType` | `string` | No | Identifies your integration in analytics events. | +| `debug` | `boolean` | No | Reserved for future use; not currently forwarded to the underlying client. | +| `skipAutoRegister` | `boolean` | No | Skips auto-registering the wallet during creation. The default is `false`. | + +:::note +`createSolanaClient` does not accept `eventHandlers`. +To listen for lower-level multichain events (such as session changes), use `client.core.on` after +creating the client. See the [multichain event methods](../../multichain/reference/methods.md#on). +::: + +### `SolanaClient` + +The object returned by [`createSolanaClient`](#createsolanaclient). + +| Property / Method | Type | Description | +| ----------------- | --------------------- | -------------------------------------------------------------- | +| `core` | `MultichainCore` | The underlying `MultichainCore` instance. | +| `getWallet` | `() => Wallet` | Returns a Wallet Standard compatible MetaMask wallet instance. | +| `registerWallet` | `() => Promise` | Registers MetaMask with the Wallet Standard registry. | +| `disconnect` | `() => Promise` | Disconnects all Solana scopes from MetaMask. | + +## Next steps + +- Follow the [JavaScript quickstart](../quickstart/javascript.md) to set up MetaMask Connect Solana in a dapp. +- [Send a legacy transaction](../guides/send-transactions/legacy.md) using the `signAndSendTransaction` Wallet Standard feature. +- [Sign messages](../guides/sign-data/sign-message.md) using the `signMessage` Wallet Standard feature. +- See the [multichain methods](../../multichain/reference/methods.md) for the lower-level multichain client API. diff --git a/metamask-connect/supported-platforms.md b/metamask-connect/supported-platforms.md new file mode 100644 index 00000000000..c4a06c73e2d --- /dev/null +++ b/metamask-connect/supported-platforms.md @@ -0,0 +1,105 @@ +--- +title: 'MetaMask Connect Supported Platforms and Connection Methods' +sidebar_label: Supported platforms +description: View supported platforms, browsers, and connection methods for MetaMask Connect, including desktop extensions, mobile QR codes, and native deeplinks. +keywords: + [ + connect, + sdk, + platform, + desktop, + mobile, + deeplink, + qr code, + react, + react native, + node, + wagmi, + wallet standard, + solana, + evm, + multichain, + browser extension, + mobile browser, + native app, + connection methods, + QR code connection, + wallet deeplink, + cross-platform wallet, + ] +--- + +# Supported platforms + +MetaMask Connect works across multiple environments, ecosystems, and devices. +This page covers how MetaMask Connect routes connections depending on where your dapp runs, +and which development environments and blockchain ecosystems are supported. + +## Connection methods + +MetaMask Connect detects the user's environment and selects the best connection method automatically: + +- **Desktop web**: Connects directly to the MetaMask browser extension when available. If the extension isn't installed, a QR code is displayed so users can scan it with the MetaMask mobile app. +- **Mobile browser and native apps**: Generates a deeplink that opens the MetaMask mobile app directly, keeping the experience seamless on mobile devices. +- **Node.js**: Renders a QR code in the terminal for users to scan with the MetaMask mobile app, enabling wallet interactions from CLI tools and server-side scripts. + +Here's how each connection method compares across dapp locations: + +| Dapp location | User wallet | Connection method | MetaMask Connect | Other SDKs | +| ----------------------- | ----------------------------------------------------- | ------------------------------- | :--------------: | :----------: | +| Desktop web browser | 🧩 [Browser extension](https://metamask.io/download/) | Direct connection via extension | ✅ Supported | ✅ Supported | +| Desktop web browser | 📱 [Mobile app](https://metamask.io/download/) | QR code scan | ✅ Supported | ⚠️ Limited\* | +| Mobile browser | 📱 [Mobile app](https://metamask.io/download/) | Deeplink | ✅ Supported | ⚠️ Limited\* | +| MetaMask in-app browser | 📱 [Mobile app](https://metamask.io/download/) | Deeplink | ✅ Supported\*\* | ⚠️ Limited\* | +| Native mobile app | 📱 [Mobile app](https://metamask.io/download/) | Deeplink | ✅ Supported | ⚠️ Limited\* | +| Node.js | 📱 [Mobile app](https://metamask.io/download/) | QR code in terminal | ✅ Supported | ⚠️ Limited\* | + +\***Limited**: Most other SDKs don't include built-in QR code or deeplink support for connecting to the MetaMask mobile app, and require additional configuration or third-party relay services. + +\*\***MetaMask in-app browser**: Dapps can use the `https://link.metamask.io/dapp/{url}` [deeplink](./evm/guides/metamask-exclusive/use-deeplinks.md) to open directly inside the MetaMask mobile app's built-in browser, giving full wallet access without relay overhead. This works for any dapp regardless of ecosystem (EVM, Solana, or multichain). + +:::caution Third-party in-app browsers +WebViews inside apps like Twitter, Discord, or Reddit have inconsistent deeplink support. Some block external deeplinks or handle them incorrectly. Test in your target environments, or guide users to open your dapp in a full mobile browser. +::: + +:::tip +For relay-based connections (QR code and deeplink), use a reliable RPC provider instead of public nodes. +Relay connections are more sensitive to network latency, so services like [Infura](https://app.infura.io/) provide better reliability and performance. +::: + +## Supported environments + +The following table shows which environment and ecosystem combinations MetaMask Connect supports. +Select a ✅ to jump to the relevant quickstart or guide. + + + +| Environment | EVM | Solana | Multichain | +| ----------------------- | :-------------------------------------------------: | :-------------------------------------------------------: | :------------------------------------------------------: | +| Browser (vanilla JS/TS) | [✅](/metamask-connect/evm/quickstart/javascript) | [✅](/metamask-connect/solana/quickstart/javascript) | [✅](/metamask-connect/multichain/quickstart/javascript) | +| React | [✅](/metamask-connect/evm/quickstart/javascript) | [✅](/metamask-connect/solana/guides/use-wallet-adapter) | [✅](/metamask-connect/multichain/quickstart/javascript) | +| React Native | [✅](/metamask-connect/evm/quickstart/react-native) | [✅](/metamask-connect/solana) | [✅](/metamask-connect/multichain/quickstart/javascript) | +| Wagmi | [✅](/metamask-connect/evm) | — | — | +| Wallet Standard | — | [✅](/metamask-connect/solana/guides/use-wallet-adapter/) | — | +| Node.js | ✅ | — | ✅ | + + + +:::note +Node.js support uses QR code connections via the MetaMask mobile app. +In Node.js and React Native there's no `window.location`, so you must set `dapp.url` explicitly when +creating the client. +See the [Node.js playground](https://github.com/MetaMask/connect-monorepo/tree/main/playground/node-playground) for a working example. +::: + +:::note +On React Native and mobile, Solana supports mainnet only. Devnet and testnet are supported only in +the MetaMask browser extension. +::: + +## Next steps + +- [Explore integration options.](./integration-options.md) +- [Use deeplinks to route users to the MetaMask mobile app.](./evm/guides/metamask-exclusive/use-deeplinks.md) +- Follow the [EVM JavaScript quickstart](./evm/quickstart/javascript.md). +- Follow the [Solana JavaScript quickstart](./solana/quickstart/javascript.md). diff --git a/metamask-connect/troubleshooting/index.md b/metamask-connect/troubleshooting/index.md new file mode 100644 index 00000000000..1f921094871 --- /dev/null +++ b/metamask-connect/troubleshooting/index.md @@ -0,0 +1,337 @@ +--- +title: Troubleshooting - MetaMask Connect +description: Diagnose and fix common MetaMask Connect issues including connection failures, error codes, React Native polyfills, and session management. +sidebar_label: Overview +keywords: + [ + MetaMask, + Connect, + troubleshooting, + error codes, + connection, + polyfill, + React Native, + QR code, + headless, + session, + ] +--- + +# Troubleshooting + +MetaMask Connect packages (`@metamask/connect-multichain`, `@metamask/connect-evm`, +`@metamask/connect-solana`) work out of the box in modern browsers and Vite/Webpack-based setups +without polyfills. +The SDK handles its transport and crypto needs internally using browser-native APIs. + +**React Native** is the exception. +The React Native runtime lacks certain Web and Node.js APIs (`Buffer`, `crypto.getRandomValues`, +`stream`, `window`), so polyfills and Metro configuration are required. +The `Event` and `CustomEvent` globals aren't needed by the `@metamask/connect-*` packages (which use +`eventemitter3` internally); polyfill them only if you also use Wagmi. +See the [React Native Metro polyfill guide](metro-polyfill-issues.md) for step-by-step setup +instructions. + +## Error codes + +The following error codes appear in `err.code` on rejected promises from `connect`, +`invokeMethod`, and `provider.request` calls. +Always check `err.code` before `err.message` for reliable error categorization. + +| Code | Meaning | Recommended handling | +| -------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `4001` | User rejected the request | Show a retry button. Do not log this to error-tracking services. | +| `-32002` | Request already pending | Show "Check MetaMask to approve the pending request." Do **not** call `connect()` again. | +| `-32602` | Invalid parameters | Verify that parameters match the expected types (for example, hex chain IDs, not decimal). | +| `-32603` | Internal error | Unexpected server-side error. Retry with exponential backoff. | +| `4902` | Unrecognized chain ID | The chain isn't added to the wallet. Add it with `wallet_addEthereumChain`, or pass `chainConfiguration` to `switchChain`. See [Chain not configured](#chain-not-configured-in-supportednetworks). | +| `-32000` | Execution reverted / server error | Transaction would fail onchain. Check contract inputs and sender balance. | + +For the complete list of provider errors, see +[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193#provider-errors) and +[EIP-1474](https://eips.ethereum.org/EIPS/eip-1474#error-codes). + +MetaMask Connect Multichain also exports typed error classes for granular `instanceof` checks. The +class most relevant to wallet calls is `RPCInvokeMethodErr`, which wraps the wallet's response and +exposes the wallet's original error code on `err.rpcCode`: + +```typescript +import { RPCInvokeMethodErr } from '@metamask/connect-multichain' + +try { + await client.invokeMethod({ + scope: 'eip155:1', + request: { method: 'personal_sign', params: [message, address] }, + }) +} catch (err) { + if (err instanceof RPCInvokeMethodErr) { + // The wallet's original JSON-RPC / EIP-1193 code is on err.rpcCode (for example, 4001). + console.log('Wallet error code:', err.rpcCode) + } +} +``` + +The core also exports `RPCHttpErr`, `RPCReadonlyResponseErr`, and `RPCReadonlyRequestErr` for +read-only RPC failures. + +## Common issues + +### Connection hangs after `connect()` + +**Cause A:** The MetaMask extension is not detected, `preferExtension` is `true` (the default), and +headless mode is on without a `display_uri` listener. +The SDK falls through to MetaMask Wallet Protocol (MWP) but has nowhere to render the QR code. + +**Fix:** Register a `display_uri` event listener before calling `connect()`, or set +`ui.preferExtension: false` to force the QR/MWP flow: + +```javascript +const client = await createEVMClient({ + dapp: { name: 'My Dapp' }, + ui: { preferExtension: false }, +}) +``` + +**Cause B:** A concurrent `connect` call is already in progress over MWP. + +**Fix:** Guard against double-clicks with a loading state. +Look for error code `-32002` and show a "check MetaMask" message instead of retrying. + +### User rejected request (code `4001`) + +The user selected **Reject** in MetaMask. This is normal behavior. + +Handle gracefully by showing a retry button. +Do not treat this as an application error: + +```javascript +try { + await client.connect({ chainIds: ['0x1'] }) +} catch (err) { + if (err.code === 4001) { + // User rejected — show retry UI + return + } + throw err +} +``` + +### Connection already pending (code `-32002`) + +A previous `connect` call has not yet resolved. +The user may still have the MetaMask approval dialog open on mobile. + +Show a message like "Check MetaMask to approve the connection." +Do **not** call `connect` again; the original promise resolves once the user acts. + +### Chain not configured in `supportedNetworks` + +The chain ID passed to `connect` or `wallet_switchEthereumChain` is not listed in the +`api.supportedNetworks` configuration. +The wallet rejects the request with `err.code === 4902` (unrecognized chain ID). + +Add every chain the dapp needs to `supportedNetworks` with a valid RPC URL: + +```javascript +const client = await createEVMClient({ + dapp: { name: 'My Dapp' }, + api: { + supportedNetworks: { + ...getInfuraRpcUrls({ + infuraApiKey: '', + chainIds: ['0x1', '0x89', '0xaa36a7'], + }), + '0xa4b1': 'https://arb1.arbitrum.io/rpc', + }, + }, +}) +``` + +### QR code not appearing + +**Cause A:** Headless mode is enabled but no `display_uri` listener is registered. +The SDK generates the URI but has nowhere to render it. + +**Fix:** Register a `display_uri` listener **before** calling `connect`: + +```javascript +const client = await createEVMClient({ + dapp: { name: 'My Dapp' }, + ui: { headless: true }, +}) + +const provider = client.getProvider() +provider.on('display_uri', uri => { + renderQrCode(uri) // your QR rendering logic +}) + +await client.connect({ chainIds: ['0x1'] }) +``` + +**Cause B:** The MetaMask extension is detected and the SDK uses the extension transport. +`preferExtension` defaults to `true`, so when the extension is installed the client prefers it and does not generate a QR code, because none is needed for that path. +The same situation applies if you want a mobile QR flow while the extension is present. + +**Fix:** Force the MetaMask Wallet Protocol (MWP) / QR flow by setting `preferExtension` to `false` when creating the client: + +```javascript +const client = await createEVMClient({ + dapp: { name: 'My Dapp' }, + ui: { preferExtension: false }, +}) +``` + +**Cause C:** A strict Content Security Policy (CSP) is blocking the QR code from rendering. +The QR code embeds the MetaMask fox SVG as a `data:` URI. + +**Fix:** Allow the `data:` scheme in `img-src` and the MetaMask relay and analytics origins in +`connect-src`. +A minimal working policy looks like: + +```html + +``` + +- `img-src 'self' data:` - Required for the fox SVG embedded in the QR code. +- `wss://mm-sdk-relay.api.cx.metamask.io` - The relay used for remote (no-extension and mobile) + connections. +- `https://mm-sdk-analytics.api.cx.metamask.io` - The default analytics endpoint emitted during the + connection lifecycle. +- `style-src 'unsafe-inline'` - `@metamask/multichain-ui` injects component styles at runtime + inside Shadow DOM (Stencil). + +:::note Older versions +In earlier package versions, the QR-code modal materialized the fox icon via an `XMLHttpRequest` on +a `blob:` / `data:` URI, requiring `blob:` (and in some setups `data:`) in `connect-src`. +Upgrade to `@metamask/connect-evm` 1.0.0, `@metamask/connect-solana` 1.0.0, or +`@metamask/connect-multichain` 0.12.1 or later to remove this requirement — the fox SVG is now +embedded directly as a `data:` URI without an extra request. +A symptom on older versions looked like: + +`Refused to connect to 'data:image/svg+xml;base64,...' because it violates the following Content Security Policy directive: "connect-src 'self' https: wss:".` + +If you cannot upgrade, add `data: blob:` to `connect-src` as a fallback. +::: + +For the full reference, see +[Content Security Policy](https://github.com/MetaMask/connect-monorepo#content-security-policy) in `metamask/connect-monorepo`. + +### MetaMask wallet not appearing in Solana Wallet Adapter + +**Cause A:** `createSolanaClient` has not resolved before the `WalletProvider` renders. +MetaMask uses the Wallet Standard auto-discovery protocol, but the wallet must be registered before +discovery runs. + +**Fix:** Await client creation before rendering your app: + +```javascript +import { createSolanaClient } from '@metamask/connect-solana' + +async function bootstrap() { + await createSolanaClient({ + dapp: { name: 'My Dapp', url: window.location.href }, + }) + const root = createRoot(document.getElementById('root')) + root.render() +} +bootstrap() +``` + +**Cause B:** The `wallets` prop on `WalletProvider` is not an empty array. +MetaMask uses the Wallet Standard auto-discovery protocol and must **not** be listed manually. + +**Fix:** Always pass `wallets={[]}`: + +```jsx + + + + + +``` + +### Solana devnet or testnet not working + +Solana devnet and testnet are only supported in the **MetaMask browser extension**, not in the +MetaMask mobile wallet. +Ensure the user is connecting via the browser extension. + +### Session lost after page reload + +The app is not waiting for the `wallet_sessionChanged` event on initialization. +The SDK restores sessions asynchronously. + +Listen for `wallet_sessionChanged` before assuming the client is ready: + +```javascript +const provider = client.getProvider() +provider.on('wallet_sessionChanged', session => { + if (session.accounts.length > 0) { + // Session restored — update UI + } +}) +``` + +Do not call `connect` again immediately on page load if a session already exists. + +### `disconnect` doesn't fully disconnect + +Calling `disconnect(scopes)` with specific CAIP scopes only revokes those scopes, not the entire +session. + +Call `disconnect()` with **no arguments** to revoke all scopes and fully terminate the session: + +```javascript +// Partial — only revokes the specified scope +await client.disconnect(['eip155:1']) + +// Full disconnect +await client.disconnect() +``` + +### Chrome Android Solana wallet-adapter issue {#chrome-android} + +There is a known issue with `@solana/wallet-adapter-react` on Chrome Android when used with the +Wallet Standard provider from `@metamask/connect-solana`. +Treat Solana Wallet Adapter flows on mobile Chrome as fragile until verified explicitly. + +Test Solana flows on desktop Chrome and the MetaMask browser extension before targeting mobile. + +## React Native issues + +Polyfill setup, Metro `extraNodeModules`, entry-file import order, common bundler errors, and deeplinks to MetaMask Mobile are documented in [React Native Metro polyfill issues](metro-polyfill-issues.md). + +## Diagnostic checklist + +When any MetaMask Connect integration is misbehaving, ensure the following are true: + +- `supportedNetworks` has valid RPC URLs for every chain the dapp uses. +- Chain IDs are hex strings for EVM (`'0x1'`, not `1` or `'1'`). +- In React Native dapps: + - Polyfills are loaded: `react-native-get-random-values` is the first entry-file + import; `window` shim is present; `Event`/`CustomEvent` shims are present **only if using Wagmi**; + `Buffer` is set as a safety net for peer dependencies. + - `preferredOpenLink` is set for deeplinks to open MetaMask Mobile (see [Deeplinks not opening MetaMask app](metro-polyfill-issues.md#deeplinks-not-opening-metamask-app)). + - Import order is correct: polyfills before SDK imports; `react-native-get-random-values` is the + very first import. +- Error codes are handled in catch blocks: at minimum handle `4001` (user rejected) and `-32002` + (pending). +- A singleton client is not recreated: `createEVMClient` / `createMultichainClient` is called once; + subsequent calls merge into the existing instance. +- `display_uri` listener is registered before calling `connect` in headless mode for QR codes. +- Solana `wallets` prop is `[]`: MetaMask uses Wallet Standard discovery, not manual registration. +- Solana devnet/testnet is used only with the browser extension. +- `debug: true` is set for verbose console output when debugging. + +## Next steps + +- [React Native Metro polyfill issues](metro-polyfill-issues.md) +- [EVM quickstart](../evm/quickstart/javascript.md) +- [Solana quickstart](../solana/quickstart/javascript.md) +- [Production readiness checklist](../evm/guides/best-practices/production-readiness.md) diff --git a/metamask-connect/troubleshooting/metro-polyfill-issues.md b/metamask-connect/troubleshooting/metro-polyfill-issues.md new file mode 100644 index 00000000000..842c2836681 --- /dev/null +++ b/metamask-connect/troubleshooting/metro-polyfill-issues.md @@ -0,0 +1,311 @@ +--- +title: React Native Metro Polyfill Issues - MetaMask Connect +description: Resolve Metro bundler polyfills, import order, and React Native issues such as deeplinks when using MetaMask Connect. +sidebar_label: React Native Metro polyfill issues +keywords: + [ + MetaMask, + Connect, + polyfill, + React Native, + Metro, + Expo, + bundler, + troubleshooting, + Buffer, + Event, + CustomEvent, + crypto, + deeplink, + preferredOpenLink, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# React Native Metro polyfill issues + +React Native uses the Metro bundler, which cannot resolve Node.js built-in modules. +MetaMask Connect packages and their dependencies reference modules like `stream`, `crypto`, `buffer`, and `http`. +Some code paths expect a browser-like `window` object, which React Native does not provide. +MetaMask Connect uses `eventemitter3` internally and does not require DOM `Event` or `CustomEvent` globals; if you use **Wagmi**, you may need to polyfill those. + +This guide walks through the required polyfills, Metro configuration, and related React Native setup (including deeplinks to MetaMask Mobile). + +:::info Expo-managed workflow +Polyfilling is not supported with the "Expo Go" app. +It is compatible only with Custom Dev Client and [Expo Application Services (EAS)](https://docs.expo.dev/eas/) builds. +[Prebuild your Expo app](https://docs.expo.dev/workflow/continuous-native-generation/#usage) to generate native code before proceeding. +::: + +## Steps + +### 1. Install required packages + +```bash npm2yarn +npm install react-native-get-random-values buffer readable-stream @react-native-async-storage/async-storage +``` + +`react-native-get-random-values` provides `crypto.getRandomValues`, which MetaMask Connect requires. +React Native versions before 0.72 have no native `crypto.getRandomValues`; later versions may include +one, but this polyfill remains the reliable cross-version default. It must be the first import, before +any other module. +`readable-stream` provides a `stream` shim for Metro. +`buffer` provides the `Buffer` global. +`@react-native-async-storage/async-storage` is needed for session persistence. + +### 2. Configure Metro + +Map Node.js built-in modules to React Native-compatible shims or an empty module stub. +Create an empty module file first: + +```javascript title="src/empty-module.js" +module.exports = {} +``` + +Then update your Metro config: + + + + +```javascript title="metro.config.js" +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config') +const path = require('path') + +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +const config = { + resolver: { + extraNodeModules: { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, + }, + }, +} + +module.exports = mergeConfig(getDefaultConfig(__dirname), config) +``` + + + + +```javascript title="metro.config.js" +const { getDefaultConfig } = require('expo/metro-config') +const path = require('path') + +const config = getDefaultConfig(__dirname) +const emptyModule = path.resolve(__dirname, 'src/empty-module.js') + +config.resolver.extraNodeModules = { + stream: require.resolve('readable-stream'), + crypto: emptyModule, + http: emptyModule, + https: emptyModule, + net: emptyModule, + tls: emptyModule, + zlib: emptyModule, + os: emptyModule, + dns: emptyModule, + assert: emptyModule, + url: emptyModule, + path: emptyModule, + fs: emptyModule, +} + +module.exports = config +``` + + + + +### 3. Create the polyfills file + +Create `polyfills.ts` at the project root (or `src/polyfills.ts`) with the following global shims. + +#### Base polyfills (MetaMask Connect) + +These cover `Buffer`, `crypto.getRandomValues` (via your entry import), and a minimal `window` shim: + +```typescript title="polyfills.ts" +import { Buffer } from 'buffer' + +global.Buffer = Buffer + +// Polyfill window — React Native doesn't have a browser window object +let windowObj: any +if (typeof global !== 'undefined' && global.window) { + windowObj = global.window +} else if (typeof window !== 'undefined') { + windowObj = window +} else { + windowObj = {} +} + +if (!windowObj.location) { + windowObj.location = { + hostname: 'mydapp.com', + href: 'https://mydapp.com', + } +} +if (typeof windowObj.addEventListener !== 'function') { + windowObj.addEventListener = () => {} +} +if (typeof windowObj.removeEventListener !== 'function') { + windowObj.removeEventListener = () => {} +} +if (typeof windowObj.dispatchEvent !== 'function') { + windowObj.dispatchEvent = () => true +} + +if (typeof global !== 'undefined') { + global.window = windowObj +} +``` + +#### Optional Wagmi polyfills for Event and CustomEvent + +If you use **Wagmi**, add the following to `polyfills.ts` after the `window` shim (React Native does not provide DOM `Event` or `CustomEvent`, which Wagmi-related code may expect): + +```typescript +// Polyfill Event if missing +if (typeof global.Event === 'undefined') { + class EventPolyfill { + type: string + bubbles: boolean + cancelable: boolean + defaultPrevented = false + constructor(type: string, options?: EventInit) { + this.type = type + this.bubbles = options?.bubbles ?? false + this.cancelable = options?.cancelable ?? false + } + preventDefault() { + this.defaultPrevented = true + } + stopPropagation() {} + stopImmediatePropagation() {} + } + global.Event = EventPolyfill as any + windowObj.Event = EventPolyfill as any +} + +// Polyfill CustomEvent if missing +if (typeof global.CustomEvent === 'undefined') { + const EventClass = + global.Event || + class { + type: string + constructor(type: string) { + this.type = type + } + } + class CustomEventPolyfill extends (EventClass as any) { + detail: any + constructor(type: string, options?: CustomEventInit) { + super(type, options) + this.detail = options?.detail ?? null + } + } + global.CustomEvent = CustomEventPolyfill as any + windowObj.CustomEvent = CustomEventPolyfill as any +} +``` + +## Step 4: Set up the entry file import order + +The import order is **critical**. +`react-native-get-random-values` must be the very first import, followed by the polyfills file, before any SDK or application code: + + + + +```javascript title="index.js" +import 'react-native-get-random-values' // Must be first +import './polyfills' // Must be second + +import { AppRegistry } from 'react-native' +import App from './App' +import { name as appName } from './app.json' + +AppRegistry.registerComponent(appName, () => App) +``` + + + + +```javascript title="app/_layout.tsx" +import 'react-native-get-random-values' // Must be first +import '../polyfills' // Must be second + +// ... rest of layout +``` + + + + +## Deeplinks not opening MetaMask app + +If MetaMask Mobile does not open when your dapp initiates a connection, the `mobile.preferredOpenLink` callback is probably not set. Pass a function that calls `Linking.openURL`: + +```typescript +import { Linking } from 'react-native' + +const client = await createEVMClient({ + dapp: { name: 'My Dapp', url: 'https://mydapp.com' }, + mobile: { + preferredOpenLink: deeplink => Linking.openURL(deeplink), + }, +}) +``` + +Use the same `mobile.preferredOpenLink` pattern with [`createMultichainClient`](../multichain/reference/methods.md) or [`createSolanaClient`](../solana/reference/methods.md) when you initialize those clients in React Native. + +## Common errors and solutions + +### `crypto.getRandomValues is not a function` + +**Cause**: `react-native-get-random-values` was not imported before MetaMask Connect. + +**Fix**: Ensure `import 'react-native-get-random-values'` is the very first import in your entry file, before any MetaMask Connect imports or polyfills. + +### `Buffer is not defined` + +**Cause**: The `Buffer` polyfill was not loaded before something in the bundle accessed `Buffer`, or a peer dependency (for example `eciesjs`) ran before MetaMask Connect’s React Native entry could apply its own `Buffer` shim. + +**Fix**: Set `global.Buffer = Buffer` in your polyfills file, and import that file immediately after `react-native-get-random-values` so the global is defined before other imports run. + +### `Cannot resolve module 'stream'` (or `crypto`, `http`, etc.) + +**Cause**: Metro does not know how to resolve Node.js built-in modules. + +**Fix**: Add `extraNodeModules` to your `metro.config.js` as shown in [Step 2](#2-configure-metro). Map `stream` to `readable-stream` and stub the rest with the empty module. + +### `Event is not defined` or `CustomEvent is not defined` + +**Cause**: React Native does not provide browser `Event` or `CustomEvent` classes. This typically appears when using **Wagmi** (or another dependency that expects DOM events). MetaMask Connect uses `eventemitter3` internally and does not require these globals. + +**Fix**: If you use Wagmi, append the `Event` and `CustomEvent` polyfills from [Optional Wagmi polyfills for Event and CustomEvent](#optional-wagmi-polyfills-for-event-and-customevent) to your `polyfills.ts` after the base `window` shim. + +### Expo Go not working + +**Cause**: Polyfilling native modules is not supported with Expo Go. + +**Fix**: Use a [Custom Dev Client](https://docs.expo.dev/develop/development-builds/introduction/) or [EAS builds](https://docs.expo.dev/eas/). Run `npx expo prebuild` before building. + +## Next steps + +- See the [troubleshooting overview](index.md). +- Follow the [EVM React Native quickstart](../evm/quickstart/react-native.md). +- Follow the [Solana React Native quickstart](../solana/quickstart/react-native.md). diff --git a/middleware.ts b/middleware.ts new file mode 100644 index 00000000000..b7b852fa4e3 --- /dev/null +++ b/middleware.ts @@ -0,0 +1,42 @@ +import { next, rewrite } from '@vercel/edge' + +/** + * Accept: text/markdown content negotiation. + * + * The corresponding `rewrites` rule in vercel.json does NOT fire for paths + * that resolve to an existing static asset (e.g. `/embedded-wallets/index.html`), + * which is every documentation page on this site. Vercel Edge Middleware + * runs before static file serving, so it's the only place we can route + * `Accept: text/markdown` requests to the `.md` sibling that + * `docusaurus-plugin-llms` (wrapped by `src/plugins/llms-html-injector`) emits + * next to each page. + * + * The matcher excludes static asset directories so the middleware doesn't run + * on every image, font, or script request. The `\.[a-zA-Z0-9]+$` clause + * excludes any path that already ends in an extension (`/foo.md`, `/foo.png`, + * `/llms-snaps.txt`, etc.) so those are served unmodified. + */ +export const config = { + matcher: ['/((?!_next|api|img|js|fonts|logos|.*\\.[a-zA-Z0-9]+$).*)'], +} + +export default function middleware(request: Request) { + const accept = request.headers.get('accept') || '' + if (!/text\/markdown/i.test(accept)) return next() + + const url = new URL(request.url) + if (url.pathname.endsWith('.md')) return next() + + let pathname = url.pathname + if (pathname.endsWith('/')) pathname = pathname.slice(0, -1) + if (!pathname) { + // The homepage has no `.md` sibling (the root index.html is skipped by the + // llms-html-injector by design), so route agents to the documentation + // index, which is already served as text/markdown. + url.pathname = '/llms.txt' + return rewrite(url) + } + + url.pathname = `${pathname}.md` + return rewrite(url) +} diff --git a/mm-connect-sidebar.js b/mm-connect-sidebar.js new file mode 100644 index 00000000000..cf43ec69027 --- /dev/null +++ b/mm-connect-sidebar.js @@ -0,0 +1,326 @@ +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const metamaskConnectSidebar = { + overview: [ + 'index', + 'architecture', + 'integration-options', + 'supported-platforms', + { + type: 'category', + label: 'Reference', + collapsible: false, + collapsed: false, + items: [ + { + type: 'category', + label: '@metamask/connect-multichain', + collapsible: true, + collapsed: true, + items: ['multichain/reference/methods', 'multichain/reference/api'], + }, + { + type: 'category', + label: '@metamask/connect-evm', + collapsible: true, + collapsed: true, + items: ['evm/reference/methods', 'evm/reference/provider-api'], + }, + { + type: 'category', + label: '@metamask/connect-solana', + collapsible: true, + collapsed: true, + items: ['solana/reference/methods'], + }, + ], + }, + { + type: 'category', + label: 'Troubleshooting', + collapsible: true, + collapsed: true, + link: { type: 'doc', id: 'troubleshooting/index' }, + items: ['troubleshooting/metro-polyfill-issues'], + }, + ], + multichain: [ + 'multichain/index', + { + type: 'category', + label: 'Quickstart', + collapsible: false, + collapsed: false, + items: [ + 'multichain/quickstart/javascript', + 'multichain/quickstart/nodejs', + 'multichain/quickstart/react-native', + ], + }, + { + type: 'category', + label: 'Concepts', + collapsible: false, + collapsed: false, + items: [ + 'multichain/concepts/scopes', + 'multichain/concepts/accounts', + 'multichain/concepts/sessions', + ], + }, + { + type: 'category', + label: 'Guides', + collapsible: false, + collapsed: false, + items: [ + 'multichain/guides/sign-transactions', + 'multichain/guides/send-transactions', + 'multichain/guides/headless-mode', + ], + }, + { + type: 'category', + label: 'Tutorials', + collapsible: false, + collapsed: false, + items: ['multichain/tutorials/create-multichain-dapp'], + }, + { + type: 'category', + label: 'Reference', + collapsible: false, + collapsed: false, + items: ['multichain/reference/methods', 'multichain/reference/api'], + }, + ], + evm: [ + 'evm/index', + { + type: 'category', + label: 'Quickstart', + collapsible: false, + collapsed: false, + items: [ + 'evm/quickstart/javascript', + 'evm/quickstart/wagmi', + 'evm/quickstart/nodejs', + // 'evm/quickstart/rainbowkit', + // 'evm/quickstart/connectkit', + 'evm/quickstart/react-native', + // 'evm/quickstart/dynamic', + // 'evm/quickstart/web3auth', + ], + }, + { + type: 'category', + label: 'Guides', + collapsible: false, + collapsed: false, + items: [ + 'evm/guides/migrate-from-sdk', + 'evm/guides/manage-user-accounts', + 'evm/guides/manage-networks', + { + type: 'category', + label: 'Send transactions', + collapsible: true, + collapsed: true, + link: { type: 'doc', id: 'evm/guides/send-transactions/index' }, + items: ['evm/guides/send-transactions/batch-transactions'], + }, + { + type: 'category', + label: 'Sign data', + collapsible: true, + collapsed: true, + link: { type: 'doc', id: 'evm/guides/sign-data/index' }, + items: ['evm/guides/sign-data/siwe'], + }, + 'evm/guides/headless-mode', + 'evm/guides/interact-with-contracts', + { + type: 'category', + label: 'MetaMask exclusive', + collapsible: false, + collapsed: false, + items: [ + 'evm/guides/metamask-exclusive/batch-requests', + 'evm/guides/metamask-exclusive/use-deeplinks', + 'evm/guides/metamask-exclusive/display-tokens', + ], + }, + { + type: 'category', + label: 'Best practices', + collapsible: true, + collapsed: true, + items: [ + 'evm/guides/best-practices/display', + 'evm/guides/best-practices/run-devnet', + 'evm/guides/best-practices/production-readiness', + ], + }, + ], + }, + { + type: 'category', + label: 'Tutorials', + collapsible: false, + collapsed: false, + items: [ + // { + // type: "link", + // label: "Create a wallet AI agent", + // href: "/tutorials/create-wallet-ai-agent" + // }, + { + type: 'link', + label: 'Upgrade an EOA to a smart account', + href: '/tutorials/upgrade-eoa-to-smart-account', + }, + ], + }, + { + type: 'category', + label: 'Reference', + collapsible: false, + collapsed: false, + items: [ + 'evm/reference/methods', + 'evm/reference/provider-api', + { + type: 'category', + label: 'JSON-RPC API', + collapsible: true, + collapsed: true, + link: { type: 'doc', id: 'evm/reference/json-rpc-api/index' }, + items: [ + 'evm/reference/json-rpc-api/wallet_addEthereumChain', + 'evm/reference/json-rpc-api/wallet_getCallsStatus', + 'evm/reference/json-rpc-api/wallet_getCapabilities', + 'evm/reference/json-rpc-api/wallet_getPermissions', + 'evm/reference/json-rpc-api/wallet_registerOnboarding', + 'evm/reference/json-rpc-api/wallet_requestPermissions', + 'evm/reference/json-rpc-api/wallet_revokePermissions', + 'evm/reference/json-rpc-api/wallet_scanQRCode', + 'evm/reference/json-rpc-api/wallet_sendCalls', + 'evm/reference/json-rpc-api/wallet_switchEthereumChain', + 'evm/reference/json-rpc-api/wallet_watchAsset', + 'evm/reference/json-rpc-api/eth_accounts', + 'evm/reference/json-rpc-api/eth_blockNumber', + 'evm/reference/json-rpc-api/eth_call', + 'evm/reference/json-rpc-api/eth_chainId', + 'evm/reference/json-rpc-api/eth_coinbase', + 'evm/reference/json-rpc-api/eth_estimateGas', + 'evm/reference/json-rpc-api/eth_feeHistory', + 'evm/reference/json-rpc-api/eth_gasPrice', + 'evm/reference/json-rpc-api/eth_getBalance', + 'evm/reference/json-rpc-api/eth_getBlockByHash', + 'evm/reference/json-rpc-api/eth_getBlockByNumber', + 'evm/reference/json-rpc-api/eth_getBlockTransactionCountByHash', + 'evm/reference/json-rpc-api/eth_getBlockTransactionCountByNumber', + 'evm/reference/json-rpc-api/eth_getCode', + 'evm/reference/json-rpc-api/eth_getFilterChanges', + 'evm/reference/json-rpc-api/eth_getFilterLogs', + 'evm/reference/json-rpc-api/eth_getLogs', + 'evm/reference/json-rpc-api/eth_getProof', + 'evm/reference/json-rpc-api/eth_getStorageAt', + 'evm/reference/json-rpc-api/eth_getTransactionByBlockHashAndIndex', + 'evm/reference/json-rpc-api/eth_getTransactionByBlockNumberAndIndex', + 'evm/reference/json-rpc-api/eth_getTransactionByHash', + 'evm/reference/json-rpc-api/eth_getTransactionCount', + 'evm/reference/json-rpc-api/eth_getTransactionReceipt', + 'evm/reference/json-rpc-api/eth_getUncleCountByBlockHash', + 'evm/reference/json-rpc-api/eth_getUncleCountByBlockNumber', + 'evm/reference/json-rpc-api/eth_newBlockFilter', + 'evm/reference/json-rpc-api/eth_newFilter', + 'evm/reference/json-rpc-api/eth_newPendingTransactionFilter', + 'evm/reference/json-rpc-api/eth_requestAccounts', + 'evm/reference/json-rpc-api/eth_sendRawTransaction', + 'evm/reference/json-rpc-api/eth_sendTransaction', + 'evm/reference/json-rpc-api/eth_signTypedData_v4', + 'evm/reference/json-rpc-api/eth_subscribe', + 'evm/reference/json-rpc-api/eth_syncing', + 'evm/reference/json-rpc-api/eth_uninstallFilter', + 'evm/reference/json-rpc-api/eth_unsubscribe', + 'evm/reference/json-rpc-api/personal_sign', + 'evm/reference/json-rpc-api/web3_clientVersion', + ], + }, + ], + }, + ], + solana: [ + 'solana/index', + { + type: 'category', + label: 'Quickstart', + collapsible: false, + collapsed: false, + items: [ + 'solana/quickstart/javascript', + 'solana/quickstart/nodejs', + 'solana/quickstart/react-native', + // 'solana/quickstart/dynamic', + // 'solana/quickstart/web3auth', + ], + }, + { + type: 'category', + label: 'Guides', + collapsible: false, + collapsed: false, + items: [ + 'solana/guides/use-framework-kit', + 'solana/guides/use-wallet-adapter', + { + type: 'category', + label: 'Send transactions', + collapsible: true, + collapsed: true, + items: [ + 'solana/guides/send-transactions/legacy', + 'solana/guides/send-transactions/versioned', + 'solana/guides/send-transactions/batch', + ], + }, + { + type: 'category', + label: 'Sign data', + collapsible: true, + collapsed: true, + items: ['solana/guides/sign-data/sign-message', 'solana/guides/sign-data/siws'], + }, + ], + }, + // { + // type: 'category', + // label: 'Tutorials', + // collapsible: false, + // collapsed: false, + // items: [ + // { + // type: "link", + // label: "Integrate SNS with MetaMask Connect", + // href: "/tutorials/" + // }, + // { + // type: "link", + // label: "Integrate Solana Pay with MetaMask Connect", + // href: "/tutorials/" + // }, + // ], + // }, + { + type: 'category', + label: 'Reference', + collapsible: false, + collapsed: false, + items: ['solana/reference/methods'], + }, + ], +} + +module.exports = metamaskConnectSidebar diff --git a/package-lock.json b/package-lock.json index 0af87d63306..9edfe5f7718 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,233 +9,239 @@ "version": "1.0.0", "license": "(MIT OR Apache-2.0)", "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.6.4", - "@docusaurus/core": "^3.5.2", - "@docusaurus/plugin-content-docs": "^3.5.2", - "@docusaurus/plugin-content-pages": "^3.5.2", - "@docusaurus/theme-common": "^3.5.2", - "@docusaurus/theme-mermaid": "^3.5.2", - "@intercom/messenger-js-sdk": "^0.0.11", - "@mdx-js/react": "^3.0.0", - "@metamask/design-tokens": "^1.11.1", - "@metamask/docusaurus-openrpc": "^0.4.1", - "@metamask/profile-sync-controller": "^0.6.0", - "@metamask/sdk": "^0.29.0", - "@rjsf/core": "^5.18.4", - "@rjsf/utils": "^5.18.4", - "@rjsf/validator-ajv8": "^5.18.4", - "@sentry/browser": "^8.30.0", + "@apidevtools/json-schema-ref-parser": "^14.2.0", + "@docsearch/css": "^4.6.2", + "@docsearch/react": "^4.6.2", + "@docusaurus/core": "^3.10.1", + "@docusaurus/plugin-client-redirects": "^3.10.1", + "@docusaurus/plugin-content-docs": "^3.10.1", + "@docusaurus/plugin-content-pages": "^3.10.1", + "@docusaurus/plugin-google-gtag": "^3.10.1", + "@docusaurus/plugin-google-tag-manager": "^3.10.1", + "@docusaurus/preset-classic": "^3.10.1", + "@docusaurus/remark-plugin-npm2yarn": "^3.10.1", + "@docusaurus/theme-common": "^3.10.1", + "@docusaurus/theme-mermaid": "^3.10.1", + "@lottiefiles/react-lottie-player": "^3.6.0", + "@mdx-js/react": "^3.1.0", + "@mermaid-js/layout-elk": "^0.1.9", + "@metamask/design-tokens": "^7.1.0", + "@metamask/eth-sig-util": "^7.0.3", + "@metamask/profile-sync-controller": "^16.0.0", + "@metamask/sdk": "^0.33.1", + "@rjsf/core": "^5.24.12", + "@rjsf/utils": "^5.24.13", + "@rjsf/validator-ajv8": "^5.24.12", + "@sentry/browser": "^10.22.0", "@types/react": "^18.3.3", - "clsx": "^1.2.1", + "@vercel/edge": "^1.3.1", + "cheerio": "1.0.0-rc.12", + "classnames": "^2.5.1", + "clsx": "^2.1.1", + "copy-to-clipboard": "^3.3.3", + "docusaurus-plugin-llms": "^0.2.2", "docusaurus-plugin-sass": "^0.2.5", - "docusaurus-plugin-segment": "^1.0.4", - "dotenv": "^16.4.5", - "ethers": "^6.13.2", + "dotenv": "^17.2.1", + "ethers": "^6.15.0", "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", - "launchdarkly-js-client-sdk": "^3.3.0", + "katex": "^0.16.25", + "launchdarkly-js-client-sdk": "^3.9.0", + "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", "lodash.isplainobject": "^4.0.6", + "node-html-markdown": "^2.0.0", "node-polyfill-webpack-plugin": "^2.0.1", - "prettier": "^3.3.3", - "prism-react-renderer": "^2.1.0", + "prettier": "^3.6.2", + "prism-react-renderer": "^2.4.1", "react": "^18.0.0", "react-alert": "^7.0.3", + "react-bookmark": "^0.8.2", "react-dom": "^18.0.0", - "react-dropdown-select": "^4.11.2", - "react-modal": "^3.16.1", - "react-player": "^2.13.0", + "react-dropdown-select": "^4.12.2", + "react-icons": "^5.5.0", + "react-markdown": "^10.1.0", + "react-modal": "^3.16.3", + "react-player": "^3.3.1", + "react-select": "^5.10.2", + "react-spinners": "^0.17.0", + "react-spring": "^10.0.3", "react-tippy": "^1.4.0", + "rehype-katex": "^7.0.1", "remark-codesandbox": "^0.10.1", "remark-docusaurus-tabs": "^0.2.0", - "sass": "^1.77.6" + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "sass": "^1.93.0" }, "devDependencies": { - "@docusaurus/eslint-plugin": "^3.5.2", - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/plugin-client-redirects": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@docusaurus/types": "^3.5.2", - "@eslint/js": "^8.57.1", - "@tsconfig/docusaurus": "^1.0.5", + "@docusaurus/eslint-plugin": "^3.10.1", + "@docusaurus/module-type-aliases": "^3.10.1", + "@docusaurus/tsconfig": "^3.10.1", + "@docusaurus/types": "^3.10.1", + "@eslint/js": "^9.39.2", + "@tsconfig/docusaurus": "^2.0.7", "@types/react-alert": "^7.0.6", "@types/react-modal": "^3.16.3", - "@typescript-eslint/parser": "^8.6.0", - "eslint": "^8.57.1", - "eslint-plugin-react": "^7.34.2", + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^9.35.0", + "eslint-plugin-react": "^7.37.5", + "husky": "^9.1.7", + "lint-staged": "^16.4.0", "stylelint": "^15.0.0 ", "stylelint-config-standard": "^34.0.0", "tsc-files": "^1.1.4", - "typescript": "^5.5.4" + "typescript": "^5.8.3" }, "engines": { - "node": ">=18" + "node": "20.x" } }, "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/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "node_modules/@algolia/abtesting": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.7.0.tgz", + "integrity": "sha512-hOEItTFOvNLI6QX6TSGu7VE4XcUcdoKZT8NwDY+5mWwu87rGhkjlY7uesKTInlg6Sh8cyRkDBYRumxbkoBbBhA==", + "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "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-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" } }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "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.9.3" + "@algolia/autocomplete-shared": "1.19.2" }, "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "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/cache-browser-local-storage": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", - "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", - "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", - "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", - "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "node_modules/@algolia/client-abtesting": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.41.0.tgz", + "integrity": "sha512-iRuvbEyuHCAhIMkyzG3tfINLxTS7mSKo7q8mQF+FbQpWenlAlrXnfZTN19LRwnVjx0UtAdZq96ThMWGS6cQ61A==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", - "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.41.0.tgz", + "integrity": "sha512-OIPVbGfx/AO8l1V70xYTPSeTt/GCXPEl6vQICLAXLCk9WOUbcLGcy6t8qv0rO7Z7/M/h9afY6Af8JcnI+FBFdQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "node_modules/@algolia/client-common": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.41.0.tgz", + "integrity": "sha512-8Mc9niJvfuO8dudWN5vSUlYkz7U3M3X3m1crDLc9N7FZrIVoNGOUETPk3TTHviJIh9y6eKZKbq1hPGoGY9fqPA==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@algolia/client-insights": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.41.0.tgz", + "integrity": "sha512-vXzvCGZS6Ixxn+WyzGUVDeR3HO/QO5POeeWy1kjNJbEf6f+tZSI+OiIU9Ha+T3ntV8oXFyBEuweygw4OLmgfiQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.6.1.tgz", - "integrity": "sha512-4MGqXqiAyqsUJw+KamKWZO2Gxn9iMpc05vC0vy8+iQRjKRZEDB1a+3Da6CnkWzXa162pJb7a/chDAAKA9rye8A==", - "peer": true, + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", - "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.41.0.tgz", + "integrity": "sha512-tkymXhmlcc7w/HEvLRiHcpHxLFcUB+0PnE9FcG6hfFZ1ZXiWabH+sX+uukCVnluyhfysU9HRU2kUmUWfucx1Dg==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", + "node_modules/@algolia/client-query-suggestions": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.41.0.tgz", + "integrity": "sha512-vyXDoz3kEZnosNeVQQwf0PbBt5IZJoHkozKRIsYfEVm+ylwSDFCW08qy2YIVSHdKy69/rWN6Ue/6W29GgVlmKQ==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.6.1.tgz", - "integrity": "sha512-HloeR0Ef29vf2yJc1lhjw1OYial3YgB0f3TQaqqMlSnM/IkAw9TnX1IOYLurnI91apMKggFpA9t8lRp7TGEKEg==", - "peer": true, + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.41.0.tgz", + "integrity": "sha512-G9I2atg1ShtFp0t7zwleP6aPS4DcZvsV4uoQOripp16aR6VJzbEnKFPLW4OFXzX7avgZSpYeBAS+Zx4FOgmpPw==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.6.1", - "@algolia/requester-browser-xhr": "5.6.1", - "@algolia/requester-fetch": "5.6.1", - "@algolia/requester-node-http": "5.6.1" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" }, "engines": { "node": ">= 14.0.0" @@ -244,129 +250,93 @@ "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", - "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", - "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", - "dependencies": { - "@algolia/logger-common": "4.24.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", - "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@algolia/ingestion": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.41.0.tgz", + "integrity": "sha512-sxU/ggHbZtmrYzTkueTXXNyifn+ozsLP+Wi9S2hOBVhNWPZ8uRiDTDcFyL7cpCs1q72HxPuhzTP5vn4sUl74cQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "node_modules/@algolia/monitoring": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.41.0.tgz", + "integrity": "sha512-UQ86R6ixraHUpd0hn4vjgTHbViNO8+wA979gJmSIsRI3yli2v89QSFF/9pPcADR6PbtSio/99PmSNxhZy+CR3Q==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", + "node_modules/@algolia/recommend": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.41.0.tgz", + "integrity": "sha512-DxP9P8jJ8whJOnvmyA5mf1wv14jPuI0L25itGfOHSU6d4ZAjduVfPjTS3ROuUN5CJoTdlidYZE+DtfWHxJwyzQ==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.24.0" + "@algolia/client-common": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.6.1.tgz", - "integrity": "sha512-tY1RW60sGF9sMpxbd8j53IqLLwnkNhrAarVhFfNZzDZNvI8WyzG78W5ZD/SFvtkgNPPSav3T/3LpBT8xBpzbGw==", - "peer": true, + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.41.0.tgz", + "integrity": "sha512-C21J+LYkE48fDwtLX7YXZd2Fn7Fe0/DOEtvohSfr/ODP8dGDhy9faaYeWB0n1AvmZltugjkjAXT7xk0CYNIXsQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.6.1" + "@algolia/client-common": "5.41.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/requester-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", - "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==" - }, "node_modules/@algolia/requester-fetch": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.6.1.tgz", - "integrity": "sha512-4TvR5IodrH+o+ji4ka+VBufWY0GfHr43nFqnDTStabtjspfo4rlcV16x534vvnbfp694oBxrz0SO/Ny8VemvXg==", - "peer": true, + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.41.0.tgz", + "integrity": "sha512-FhJy/+QJhMx1Hajf2LL8og4J7SqOAHiAuUXq27cct4QnPhSIuIGROzeRpfDNH5BUbq22UlMuGd44SeD4HRAqvA==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.6.1" + "@algolia/client-common": "5.41.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.6.1.tgz", - "integrity": "sha512-K7tlss87aq6UnWnU8+fPIe+Is9Mvyqwzysp6Ty/HpQ7YNKUU7opgkMOVKxzTwt3fm40NfNX4ENvVKHoYABL6vw==", - "peer": true, + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.41.0.tgz", + "integrity": "sha512-tYv3rGbhBS0eZ5D8oCgV88iuWILROiemk+tQ3YsAKZv2J4kKUNvKkrX/If/SreRy4MGP2uJzMlyKcfSfO2mrsQ==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.6.1" + "@algolia/client-common": "5.41.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/transporter": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", - "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", - "dependencies": { - "@algolia/cache-common": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/requester-common": "4.24.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -375,57 +345,74 @@ "node": ">=6.0.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/@apidevtools/json-schema-ref-parser": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.0.tgz", - "integrity": "sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.2.0.tgz", + "integrity": "sha512-NaGMMWwppbByagq+LwQMq6PMXHFWVu6kSwwx+eJfYTJ5zdpOvb9TIk6ZWxEEeXMUvGdVOZq3JalYsjsTZDvtkA==", + "license": "MIT", "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" }, "engines": { - "node": ">= 16" + "node": ">= 20" }, "funding": { "url": "https://github.com/sponsors/philsturgeon" + }, + "peerDependencies": { + "@types/json-schema": "^7.0.15" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -442,57 +429,48 @@ }, "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.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@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.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "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/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -502,23 +480,23 @@ }, "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.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", + "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", + "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.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.29.0", "semver": "^6.3.1" }, "engines": { @@ -532,17 +510,19 @@ "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.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "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.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -556,58 +536,88 @@ "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.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-define-polyfill-provider/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/@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.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "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.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -617,32 +627,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "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.24.7" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "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.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@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" @@ -652,13 +665,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -667,163 +681,74 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "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.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.27.1", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "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.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.27.1", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.26.10", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/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==" - }, - "node_modules/@babel/highlight/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==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -833,12 +758,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "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.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -848,11 +774,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -862,11 +789,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "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.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -875,29 +803,14 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz", + "integrity": "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -906,78 +819,44 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz", - "integrity": "sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-default-from": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "peer": true, + "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.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@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.0.0-0" + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "peer": true, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@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" }, @@ -989,6 +868,21 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1000,6 +894,8 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1011,6 +907,8 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1025,6 +923,7 @@ "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" }, @@ -1032,13 +931,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz", - "integrity": "sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw==", - "peer": true, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1047,55 +946,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1105,6 +965,8 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1116,6 +978,8 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1124,11 +988,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1141,6 +1006,8 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1152,6 +1019,8 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1163,6 +1032,8 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1174,6 +1045,8 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1185,6 +1058,8 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1196,6 +1071,8 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1207,6 +1084,8 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1221,6 +1100,8 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1232,11 +1113,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", - "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1249,6 +1131,7 @@ "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" @@ -1261,11 +1144,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1275,14 +1159,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1292,13 +1176,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1308,11 +1193,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1322,11 +1208,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1336,12 +1223,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1351,13 +1239,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1367,16 +1255,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1386,12 +1275,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1401,11 +1291,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1415,12 +1307,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1430,11 +1323,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1444,12 +1338,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1459,12 +1354,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "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.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1473,13 +1368,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1488,13 +1384,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1503,14 +1399,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", - "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", - "peer": true, + "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.24.8", - "@babel/plugin-syntax-flow": "^7.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1520,12 +1415,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "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.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1535,13 +1431,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "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.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1551,12 +1448,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1566,11 +1463,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1580,12 +1478,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1595,11 +1493,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1609,12 +1508,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1624,13 +1524,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1640,14 +1540,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1657,12 +1558,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1672,12 +1574,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1687,11 +1590,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1701,12 +1605,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1716,12 +1620,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1731,14 +1635,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1748,12 +1654,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "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.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1763,12 +1670,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1778,13 +1685,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1794,11 +1701,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1808,12 +1716,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1823,14 +1732,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1840,11 +1749,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1854,11 +1764,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz", - "integrity": "sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1868,11 +1779,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1882,15 +1794,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1900,26 +1813,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", - "peer": true, + "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/helper-plugin-utils": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1928,13 +1827,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", - "peer": true, + "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-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1943,13 +1843,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1958,27 +1858,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "regenerator-transform": "^0.15.2" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1988,15 +1890,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", - "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "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": { @@ -2010,16 +1913,18 @@ "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2029,12 +1934,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2044,11 +1950,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2058,11 +1965,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2072,11 +1980,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "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.24.8" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2086,15 +1995,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", - "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2104,11 +2014,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "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.24.7" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2118,12 +2029,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2133,12 +2045,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "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.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2148,12 +2061,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2163,92 +2077,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", - "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.29.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.5.tgz", + "integrity": "sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@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-safari-rest-destructuring-rhs-array": "^7.29.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@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", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@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.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.4", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@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.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -2258,35 +2161,33 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz", + "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.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-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-flow-strip-types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "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", @@ -2297,16 +2198,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "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.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@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" @@ -2316,15 +2218,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "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.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" + "@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" @@ -2333,201 +2236,153 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", - "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", - "peer": true, + "node_modules/@babel/runtime": { + "version": "7.26.10", + "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "peer": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/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==", - "peer": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/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==", - "peer": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" } }, - "node_modules/@babel/register/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==", - "peer": true, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/@babel/register/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==", - "peer": true, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/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==", - "peer": true, - "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/register/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", "peer": true, "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", - "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@braintree/sanitize-url": { + "version": "7.1.1", + "license": "MIT" }, - "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.1.2.tgz", + "integrity": "sha512-XTsjvDVB5nDZBQB8o0o/0ozNelQtn2KrUVteIHSlPd2VAV2utEb6JzyCJaJ8tGxACR4RiBNWy5uYUHX2eji88Q==", + "license": "Apache-2.0", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@chevrotain/gast": "11.1.2", + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" } }, - "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "node_modules/@chevrotain/gast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.1.2.tgz", + "integrity": "sha512-Z9zfXR5jNZb1Hlsd/p+4XWeUFugrHirq36bKzPWDSIacV+GPSVXdk+ahVWZTwjhNwofAWg/sZg58fyucKSQx5g==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@chevrotain/types": "11.1.2", + "lodash-es": "4.17.23" } }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", - "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.1.2.tgz", + "integrity": "sha512-nMU3Uj8naWer7xpZTYJdxbAs6RIv/dxYzkYU8GSwgUtcAAlzjcPfX1w+RKRcYG8POlzMeayOQ/znfwxEGo5ulw==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.1.2.tgz", + "integrity": "sha512-4mudFAQ6H+MqBTfqLmU7G1ZwRzCLfJEooL/fsF6rCX5eePMbGhoy5n4g+G4vlh2muDcsCTJtL+uKbOzWxs5LHA==", + "license": "Apache-2.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/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-parser-algorithms": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", - "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -2539,6 +2394,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, @@ -2548,8 +2404,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", - "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -2561,14 +2415,13 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" } }, "node_modules/@csstools/media-query-list-parser": { "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", - "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -2580,6 +2433,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, @@ -2588,11 +2442,10 @@ "@csstools/css-tokenizer": "^2.4.1" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", - "dev": true, + "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", @@ -2603,10748 +2456,11238 @@ "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": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "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==", + "node_modules/@csstools/postcss-alpha-function/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": ">=10.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docsearch/css": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.1.tgz", - "integrity": "sha512-VtVb5DS+0hRIprU2CO6ZQjK2Zg4QU5HrDM1+ix6rT0umsYvFvatMAnf97NHZlVWDaaLlx7GRfR/7FikANiM2Fg==" - }, - "node_modules/@docsearch/react": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.1.tgz", - "integrity": "sha512-qXZkEPvybVhSXj0K7U3bXc233tk5e8PfhoZ6MhPOiik/qUQxYC+Dn9DnoS7CxHQQhHfCvTiN0eY9M12oRghEXw==", + "node_modules/@csstools/postcss-alpha-function/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": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.6.1", - "algoliasearch": "^4.19.1" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/core": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.5.2.tgz", - "integrity": "sha512-4Z1WkhCSkX4KO0Fw5m/Vuc7Q3NxBG53NE5u59Rs96fWkMPZVSrzEPP16/Nk6cWb/shK7xXPndTmalJtw7twL/w==", - "dependencies": { - "@babel/core": "^7.23.3", - "@babel/generator": "^7.23.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/preset-react": "^7.22.5", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@babel/runtime-corejs3": "^7.22.6", - "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "autoprefixer": "^10.4.14", - "babel-loader": "^9.1.3", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.2", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.31.1", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "html-minifier-terser": "^7.2.0", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.5.3", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.7.6", - "p-map": "^4.0.0", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "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", - "rtl-detect": "^1.0.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.5", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.88.1", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-dev-server": "^4.15.1", - "webpack-merge": "^5.9.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, + "node_modules/@csstools/postcss-alpha-function/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.0" + "node": ">=18" }, "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.5.2.tgz", - "integrity": "sha512-D3KiQXOMA8+O0tqORBrTOEQyQxNIfPm9jEaJoALjjSjc2M/ZAWcUfPQEnwr2JB2TadHw2gqWgpZckQmrVWkytA==", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-alpha-function/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.0" + "node": ">=18" } }, - "node_modules/@docusaurus/eslint-plugin": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/eslint-plugin/-/eslint-plugin-3.5.2.tgz", - "integrity": "sha512-9zBtXQwRgj2unY+peS5HIISvG7kDQDoWl8dZ+sN41B2qIctNUWpBFkFAPHZSPy2cvEDQwWshNpPYDjp+sv+CVA==", - "dev": true, + "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": { - "@typescript-eslint/utils": "^5.62.0", - "tslib": "^2.6.0" + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.5.2.tgz", - "integrity": "sha512-LHC540SGkeLfyT3RHK3gAMK6aS5TRqOD4R72BEU/DE2M/TY8WwEUAMY576UUc/oNJXv8pGhBmQB6N9p3pt8LQw==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.5.2.tgz", - "integrity": "sha512-ku3xO9vZdwpiMIVd8BzWV0DCqGEbCP5zs1iHfKX50vw6jX8vQo0ylYo1YJMZyz6e+JFJ17HYHT5FzVidz2IflA==", - "dependencies": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.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": "^1.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" - }, + "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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.5.2.tgz", - "integrity": "sha512-Z+Xu3+2rvKef/YKTMxZHsEXp1y92ac0ngjDiExRdqGTmEKtCUpkbNYH8v5eXo5Ls+dnW88n6WTa+Q54kLOkwPg==", + "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": { - "@docusaurus/types": "3.5.2", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "peerDependencies": { - "react": "*", - "react-dom": "*" + "engines": { + "node": ">=4" } }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.5.2.tgz", - "integrity": "sha512-GMU0ZNoVG1DEsZlBbwLPdh0iwibrVZiRfmdppvX17SnByCVP74mb/Nne7Ss7ALgxQLtM4IHbXi8ij90VVjAJ+Q==", - "dev": true, + "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": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.5.2.tgz", - "integrity": "sha512-R7ghWnMvjSf+aeNDH0K4fjyQnt5L0KzUEnUhmf1e3jZrv3wogeytZNN6n7X8yHcMsuZHPOrctQhXWnmxu+IRRg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" + "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.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.5.2.tgz", - "integrity": "sha512-Bt+OXn/CPtVqM3Di44vHjE7rPCEsRCB/DMo2qoOuozB9f7+lsdrHvD0QCHdBs0uhz6deYJDppAr2VgqybKPlVQ==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.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", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, + "node_modules/@csstools/postcss-color-function-display-p3-linear/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.5.2.tgz", - "integrity": "sha512-WzhHjNpoQAUz/ueO10cnundRz+VUtkjFhhaQ9jApyv1a46FPURO4cef89pyNIOMny1fjDz/NUN2z6Yi+5WUrCw==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" + "node_modules/@csstools/postcss-color-function-display-p3-linear/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.5.2.tgz", - "integrity": "sha512-kBK6GlN0itCkrmHuCS6aX1wmoWc5wpd5KJlqQ1FyrF0cLDnvsYSnh7+ftdwzt7G6lGBho8lrVwkkL9/iQvaSOA==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-color-function-display-p3-linear/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.5.2.tgz", - "integrity": "sha512-rjEkJH/tJ8OXRE9bwhV2mb/WP93V441rD6XnM6MIluu7rk8qg38iSxS43ga2V2Q/2ib53PcqbDEJDG/yWQRJhQ==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-color-function-display-p3-linear/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.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "node": ">=18" } }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.5.2.tgz", - "integrity": "sha512-lm8XL3xLkTPHFKKjLjEEAHUrW0SZBSHBE1I+i/tmYMBsjCcUB5UJ52geS5PSiOCFVR74tbPGcPHEV/gaaxFeSA==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-color-function/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.5.2.tgz", - "integrity": "sha512-QkpX68PMOMu10Mvgvr5CfZAzZQFx8WLlOiUQ/Qmmcl6mjGK6H21WLT5x7xDmcpCoKA/3CegsqIqBR+nA137lQg==", + "node_modules/@csstools/postcss-color-function/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": { - "@docusaurus/core": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.5.2.tgz", - "integrity": "sha512-DnlqYyRAdQ4NHY28TfHuVk414ft2uruP4QWCH//jzpHjqvKyXjj2fmDtI8RPUBh9K8iZKFMHRnLtzJKySPWvFA==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.5.2.tgz", - "integrity": "sha512-XRpinSix3NBv95Rk7xeMF9k4safMkwnpSgThn0UNQNumKvmcIYjfkwfh2BhwYh/BxMXQHJ/PdmNh22TQFpIaYg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/plugin-content-blog": "3.5.2", - "@docusaurus/plugin-content-docs": "3.5.2", - "@docusaurus/plugin-content-pages": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/theme-translations": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.44", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "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" - }, + "node_modules/@csstools/postcss-color-function/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/theme-classic/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/@csstools/postcss-color-function/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": ">=6" + "node": ">=18" } }, - "node_modules/@docusaurus/theme-common": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.5.2.tgz", - "integrity": "sha512-QXqlm9S6x9Ibwjs7I2yEDgsCocp708DrCrgHgKwg2n2AY0YQ6IjU0gAK35lHRLOvAoJUfCKpQAwUykB0R7+Eew==", + "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": { - "@docusaurus/mdx-loader": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.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" + "@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.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@docusaurus/theme-common/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/@csstools/postcss-color-mix-function/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": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/theme-mermaid": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.5.2.tgz", - "integrity": "sha512-7vWCnIe/KoyTN1Dc55FIyqO5hJ3YaV08Mr63Zej0L0mX1iGzt+qKSmeVUAJ9/aOalUhF0typV0RmNUSy5FAmCg==", - "dependencies": { - "@docusaurus/core": "3.5.2", - "@docusaurus/module-type-aliases": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/types": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "mermaid": "^10.4.0", - "tslib": "^2.6.0" + "node_modules/@csstools/postcss-color-mix-function/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.5.2.tgz", - "integrity": "sha512-qW53kp3VzMnEqZGjakaV90sst3iN1o32PH+nawv1uepROO8aEGxptcq2R5rsv7aBShSRbZwIobdvSYKsZ5pqvA==", - "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.5.2", - "@docusaurus/logger": "3.5.2", - "@docusaurus/plugin-content-docs": "3.5.2", - "@docusaurus/theme-common": "3.5.2", - "@docusaurus/theme-translations": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-validation": "3.5.2", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", - "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" - }, + "node_modules/@csstools/postcss-color-mix-function/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.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/theme-search-algolia/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/@csstools/postcss-color-mix-function/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": ">=6" + "node": ">=18" } }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.5.2.tgz", - "integrity": "sha512-GPZLcu4aT1EmqSTmbdpVrDENGR2yObFEX8ssEFYTCiAIVc0EihNSdOIBTazUvgNqwvnoU1A8vIs1xyzc3LITTw==", + "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": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.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.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@docusaurus/tsconfig": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.5.2.tgz", - "integrity": "sha512-rQ7toURCFnWAIn8ubcquDs0ewhPwviMzxh6WpRjBW7sJVCXb6yzwUaY3HMNa0VXCFw+qkIbFywrMTf+Pb4uHWQ==", - "dev": true - }, - "node_modules/@docusaurus/types": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.5.2.tgz", - "integrity": "sha512-N6GntLXoLVUwkZw7zCxwy9QiuEXIcTVzA9AkmNw16oc0AP3SXLrMmDMMBIfgqwuKWa6Ox6epHol9kMtJqekACw==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments/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": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/utils": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.5.2.tgz", - "integrity": "sha512-33QvcNFh+Gv+C2dP9Y9xWEzMgf3JzrpL2nW9PopidiohS1nDcyknKRx2DWaFvyVTTYIkkABVSr073VTj/NITNA==", + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments/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": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "@svgr/webpack": "^8.1.0", - "escape-string-regexp": "^4.0.0", - "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", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=18.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/utils-common": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.5.2.tgz", - "integrity": "sha512-i0AZjHiRgJU6d7faQngIhuHKNrszpL/SHQPgF1zH4H+Ij6E9NBYGy6pkcGWToIv7IVPbs+pQLh1P3whn0gWXVg==", - "dependencies": { - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments/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.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.5.2.tgz", - "integrity": "sha512-m+Foq7augzXqB6HufdS139PFxDC5d5q2QKZy8q0qYYvGdI6nnlNsGH4cIGsgBnV7smz+mopl3g4asbSDvMV0jA==", - "dependencies": { - "@docusaurus/logger": "3.5.2", - "@docusaurus/utils": "3.5.2", - "@docusaurus/utils-common": "3.5.2", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments/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.0" + "node": ">=18" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", - "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "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": { - "@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.2.0", - "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-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==" - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/@csstools/postcss-content-alt-text/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": ">=0.10.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@emotion/babel-plugin/node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "node_modules/@emotion/cache": { - "version": "11.13.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", - "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", - "dependencies": { - "@emotion/memoize": "^0.9.0", - "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.0", - "@emotion/weak-memoize": "^0.4.0", - "stylis": "4.2.0" + "node_modules/@csstools/postcss-content-alt-text/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/@emotion/cache/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==" - }, - "node_modules/@emotion/cache/node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "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==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", - "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "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": { - "@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==" - }, - "node_modules/@emotion/react": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz", - "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" + "node_modules/@csstools/postcss-contrast-color-function/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": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@emotion/serialize": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", - "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "node_modules/@csstools/postcss-contrast-color-function/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": { - "@emotion/hash": "^0.9.2", - "@emotion/memoize": "^0.9.0", - "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.1", - "csstype": "^3.0.2" + "@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/@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==" - }, - "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "node_modules/@csstools/postcss-contrast-color-function/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" } - } - }, - "node_modules/@emotion/unitless": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", - "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@emotion/utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", - "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "node_modules/@endo/env-options": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@endo/env-options/-/env-options-1.1.6.tgz", - "integrity": "sha512-Uqy94PwLTco90Yfign43muvDtjsYTbL6Ck4W5sSWQUqJiFOL+YP8kiBOoGyQynDsGTY0MCQvMxEPfphaJKnzlQ==" - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "devOptional": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + ], + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", - "devOptional": true, + "node_modules/@csstools/postcss-contrast-color-function/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": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "devOptional": true, + "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": { - "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" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "devOptional": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "node_modules/@csstools/postcss-exponential-functions/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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node": ">=18" }, - "engines": { - "node": "*" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, + "node_modules/@csstools/postcss-exponential-functions/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": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "devOptional": true, + "node_modules/@csstools/postcss-exponential-functions/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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" } }, - "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==", + "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": { - "@ethereumjs/util": "^8.1.0", - "crc-32": "^1.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==", - "bin": { - "rlp": "bin/rlp" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "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==", - "dependencies": { - "@ethereumjs/common": "^3.2.0", - "@ethereumjs/rlp": "^4.0.1", - "@ethereumjs/util": "^8.1.0", - "ethereum-cryptography": "^2.0.0" + "node": ">=18" }, - "engines": { - "node": ">=14" + "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==", + "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": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", - "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "node_modules/@csstools/postcss-gamut-mapping/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": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz", - "integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==", + "node_modules/@csstools/postcss-gamut-mapping/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": { - "@fortawesome/fontawesome-common-types": "6.6.0" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", - "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", - "dependencies": { - "prop-types": "^15.8.1" + "node_modules/@csstools/postcss-gamut-mapping/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": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.3" + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@csstools/postcss-gamut-mapping/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/@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", - "devOptional": true, + "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": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@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": ">=10.10.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@csstools/postcss-gradients-interpolation-method/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/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "node_modules/@csstools/postcss-gradients-interpolation-method/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": { - "brace-expansion": "^1.1.7" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": "*" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "devOptional": true, + "node_modules/@csstools/postcss-gradients-interpolation-method/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": ">=12.22" + "node": ">=18" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "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", - "devOptional": true - }, - "node_modules/@intercom/messenger-js-sdk": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@intercom/messenger-js-sdk/-/messenger-js-sdk-0.0.11.tgz", - "integrity": "sha512-jBHXO2+cGoBHYQMPaLP8eUm4AREcTWXlfd9shlBLSyEkFuW8+So/ynUDlftvWYz81KvGohRWYauw6vLRH/AlfA==" - }, - "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==", - "peer": true, + "node_modules/@csstools/postcss-gradients-interpolation-method/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": ">=12" + "node": ">=18" } }, - "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==", - "peer": true, + "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": { - "@jest/types": "^29.6.3" + "@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": "^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==", - "peer": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "node": ">=18" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", - "peer": true, - "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" - }, + "node_modules/@csstools/postcss-hwb-function/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": "^14.15.0 || ^16.10.0 || >=18.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==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" + "node": ">=18" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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/@csstools/postcss-hwb-function/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": { - "@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" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "node": ">=18" }, - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@csstools/postcss-hwb-function/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": ">=6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "node_modules/@json-schema-spec/json-pointer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@json-schema-spec/json-pointer/-/json-pointer-0.1.2.tgz", - "integrity": "sha512-BYY7IavBjwsWWSmVcMz2A9mKiDD9RvacnsItgmy1xV8cmgbtxFfKmKMtkVpD7pYtkx4mIW4800yZBXueVFIWPw==" - }, - "node_modules/@json-schema-tools/dereferencer": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@json-schema-tools/dereferencer/-/dereferencer-1.5.5.tgz", - "integrity": "sha512-ntnTXO47DOLTLmcU9yJ7Fu29L8Du9+ly4rwxLaYd/aWVhBDtvG8VIQRMJVrrTZOQo0Cv/wHHuEj47n43MFqIjA==", - "dependencies": { - "@json-schema-tools/reference-resolver": "^1.2.4", - "@json-schema-tools/traverse": "^1.7.8", - "fast-safe-stringify": "^2.0.7" - } - }, - "node_modules/@json-schema-tools/meta-schema": { - "version": "1.6.19", - "resolved": "https://registry.npmjs.org/@json-schema-tools/meta-schema/-/meta-schema-1.6.19.tgz", - "integrity": "sha512-55zuWFW7tr4tf/G5AYmybcPdGOkVAreQbt2JdnogX4I2r/zkxZiimYPJESDf5je9BI2oRveak2p296HzDppeaA==" - }, - "node_modules/@json-schema-tools/reference-resolver": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@json-schema-tools/reference-resolver/-/reference-resolver-1.2.4.tgz", - "integrity": "sha512-Oag20zDuapO6nBQp00k8Rd5sDTb8Gfz9uH43Tf7dHKNx7nHDK/WdeTe7OxkOmLQCL6aS+mCJx1Zv+fZBCD+tzQ==", - "dependencies": { - "@json-schema-spec/json-pointer": "^0.1.2", - "isomorphic-fetch": "^3.0.0" - } - }, - "node_modules/@json-schema-tools/traverse": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@json-schema-tools/traverse/-/traverse-1.10.4.tgz", - "integrity": "sha512-9e42zjhLIxzBONroNC4SGsTqdB877tzwH2S6lqgTav9K24kWJR9vNieeMVSuyqnY8FlclH21D8wsm/tuD9WA9Q==" - }, - "node_modules/@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" - }, - "node_modules/@keystonehq/alias-sampling": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@keystonehq/alias-sampling/-/alias-sampling-0.1.2.tgz", - "integrity": "sha512-5ukLB3bcgltgaFfQfYKYwHDUbwHicekYo53fSEa7xhVkAEqsA74kxdIwoBIURmGUtXe3EVIRm4SYlgcrt2Ri0w==", - "peer": true - }, - "node_modules/@keystonehq/base-eth-keyring": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@keystonehq/base-eth-keyring/-/base-eth-keyring-0.14.1.tgz", - "integrity": "sha512-rhsbN7YlwWEcaUcwapApZe4EC/xQFJVnU0CpzLN0r9b2nqyEp8q9oz42jPr8W6vXHD72bezAZKMvqU/6rCecQQ==", - "peer": true, - "dependencies": { - "@ethereumjs/tx": "^4.0.2", - "@ethereumjs/util": "^8.0.0", - "@keystonehq/bc-ur-registry-eth": "^0.19.1", - "hdkey": "^2.0.1", - "rlp": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "node_modules/@keystonehq/base-eth-keyring/node_modules/rlp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-3.0.0.tgz", - "integrity": "sha512-PD6U2PGk6Vq2spfgiWZdomLvRGDreBLxi5jv5M8EpRo3pU6VEm31KO+HFxE18Q3vgqfDrQ9pZA3FP95rkijNKw==", - "peer": true, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/@keystonehq/bc-ur-registry": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.6.4.tgz", - "integrity": "sha512-j8Uy44DuAkvYkbf0jMxRY3UizJfn8wsEQr7GS3miRF44vcq7k0/yemVkftbn3jQ+0JYaUXf5wY7lVpLhAeW5nQ==", - "peer": true, - "dependencies": { - "@ngraveio/bc-ur": "^1.1.5", - "bs58check": "^2.1.2", - "tslib": "^2.3.0" - } - }, - "node_modules/@keystonehq/bc-ur-registry-eth": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@keystonehq/bc-ur-registry-eth/-/bc-ur-registry-eth-0.19.1.tgz", - "integrity": "sha512-5+skb1zsmMEIGZCbk+4KssZTpLMTriaFlt+Lc6pZLmxexXrX8a/9aHoho3asOqf7GeXXqkB9YKs8i8TN/hbaHA==", - "peer": true, - "dependencies": { - "@ethereumjs/util": "^8.0.0", - "@keystonehq/bc-ur-registry": "^0.6.0", - "hdkey": "^2.0.1", - "uuid": "^8.3.2" - } - }, - "node_modules/@keystonehq/metamask-airgapped-keyring": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@keystonehq/metamask-airgapped-keyring/-/metamask-airgapped-keyring-0.14.1.tgz", - "integrity": "sha512-ffBa+LMkZUMj0KKW/YYoncxuUqsnBPn9xss1kHEgvva5GviylMcosbVyV2AAbtnRii1VK6wTSWzAzUdR8giq3A==", - "peer": true, - "dependencies": { - "@ethereumjs/tx": "^4.0.2", - "@keystonehq/base-eth-keyring": "^0.14.1", - "@keystonehq/bc-ur-registry-eth": "^0.19.1", - "@metamask/obs-store": "^9.0.0", - "rlp": "^2.2.6", - "uuid": "^8.3.2" + "node_modules/@csstools/postcss-hwb-function/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/@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==" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "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": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.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" + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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": { - "@types/react": ">=16", - "react": ">=16" + "postcss": "^8.4" } }, - "node_modules/@metamask/abi-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@metamask/abi-utils/-/abi-utils-2.0.4.tgz", - "integrity": "sha512-StnIgUB75x7a7AgUhiaUZDpCsqGp7VkNnZh2XivXkJ6mPkE83U8ARGQj5MbRis7VJY8BC5V1AbB1fjdh0hupPQ==", - "peer": true, + "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": { - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.0.0" + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/accounts-controller": { - "version": "18.2.2", - "resolved": "https://registry.npmjs.org/@metamask/accounts-controller/-/accounts-controller-18.2.2.tgz", - "integrity": "sha512-bCMa62mVvE3WOcG2s/uT614/xe1t+r29OF7YeIF/vridmOBqJwEVpRLUExCPxv40jG+GgrkBLPW+P493BUtY/Q==", - "peer": true, - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "@metamask/base-controller": "^7.0.1", - "@metamask/eth-snap-keyring": "^4.3.6", - "@metamask/keyring-api": "^8.1.3", - "@metamask/snaps-sdk": "^6.5.0", - "@metamask/snaps-utils": "^8.1.1", - "@metamask/utils": "^9.1.0", - "deepmerge": "^4.2.2", - "ethereum-cryptography": "^2.1.2", - "immer": "^9.0.6", - "uuid": "^8.3.2" - }, + "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.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/keyring-controller": "^17.0.0", - "@metamask/snaps-controllers": "^9.7.0" + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@metamask/approval-controller": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@metamask/approval-controller/-/approval-controller-7.1.0.tgz", - "integrity": "sha512-dhqUeX8wMzW88U+Vgr7oKf0Vouol10ncB3lxmvWyC1VZJhSOdO3VUkn0tH1lzt3ybxYVMOkPaB3gfdksfnNRyA==", - "peer": 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", "dependencies": { - "@metamask/base-controller": "^7.0.1", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/utils": "^9.1.0", - "nanoid": "^3.1.31" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=4" } }, - "node_modules/@metamask/base-controller": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@metamask/base-controller/-/base-controller-7.0.1.tgz", - "integrity": "sha512-U1strOKT4v/kSJ2h4tgn9iUVVuv5Ja64J+OR145ITHd4574FaUYVJR80/imn6WmCbo8B6AYwHwEovdZ5qLGSKw==", + "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": { - "@metamask/utils": "^9.1.0", - "immer": "^9.0.6" + "@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.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/browser-passworder": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@metamask/browser-passworder/-/browser-passworder-4.3.0.tgz", - "integrity": "sha512-RU1TVVV5DkbZRr6zPYg0NkexZ0/T2LCKNvF3A50jvUweyxDFuoNbSTN6z8K3Fy8O6/X2JQ1yyAbVzxZLq0qrGg==", - "peer": true, - "dependencies": { - "@metamask/utils": "^8.2.0" - }, + "node_modules/@csstools/postcss-light-dark-function/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": ">=14.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/browser-passworder/node_modules/@metamask/utils": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", - "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", - "peer": true, - "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" - }, + "node_modules/@csstools/postcss-light-dark-function/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": ">=16.0.0" + "node": ">=18" } }, - "node_modules/@metamask/browser-passworder/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "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": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@metamask/controller-utils": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@metamask/controller-utils/-/controller-utils-11.3.0.tgz", - "integrity": "sha512-5b+Jg9sKKESzvQcuipHC1D7KSh98MVIi7hXQUk7iX+YVMl4KoKDv94Bl+li8g+jCBshMOV9bRMRh25/hdEvTZQ==", - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "@metamask/eth-query": "^4.0.0", - "@metamask/ethjs-unit": "^0.3.0", - "@metamask/utils": "^9.1.0", - "@spruceid/siwe-parser": "2.1.0", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "eth-ens-namehash": "^2.0.8", - "fast-deep-equal": "^3.1.3" - }, + "license": "MIT-0", "engines": { - "node": "^18.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/design-tokens": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@metamask/design-tokens/-/design-tokens-1.12.0.tgz", - "integrity": "sha512-hoAnXYjx/NrlcpjsQGHLe383G7K/PHxXKGwGjJq7+iwnqpxjPHvyyai0Xh6hhT88ydq1n6OJRG/pwvD1mkQPug==", + "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.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/docusaurus-openrpc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@metamask/docusaurus-openrpc/-/docusaurus-openrpc-0.4.1.tgz", - "integrity": "sha512-D1vEROn8dr68QZRewEHRmAchzWmGnWiFo48plfulZ1/ppuoCIQfCB1PDGMhPa7LISyENnJbfEj3pP9lDzbKLlg==", - "dependencies": { - "@docusaurus/core": "^3.0.0", - "@docusaurus/plugin-content-blog": "^3.0.0", - "@docusaurus/plugin-content-docs": "^3.0.0", - "@docusaurus/plugin-content-pages": "^3.0.0", - "@docusaurus/plugin-debug": "^3.0.0", - "@docusaurus/plugin-google-analytics": "^3.0.0", - "@docusaurus/plugin-google-gtag": "^3.0.0", - "@docusaurus/plugin-google-tag-manager": "^3.0.0", - "@docusaurus/plugin-sitemap": "^3.0.0", - "@docusaurus/theme-classic": "^3.0.0", - "@docusaurus/theme-common": "^3.0.0", - "@docusaurus/theme-search-algolia": "^3.0.0", - "@docusaurus/types": "^3.0.0", - "@metamask/open-rpc-docs-react": "^0.2.0", - "@open-rpc/schema-utils-js": "^1.16.1", - "node-polyfill-webpack-plugin": "^2.0.1", - "process": "^0.11.10" - }, + "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": ">=16.0.0" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/core": "^3.0.0", - "@docusaurus/theme-common": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "postcss": "^8.4" } }, - "node_modules/@metamask/eth-hd-keyring": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@metamask/eth-hd-keyring/-/eth-hd-keyring-7.0.4.tgz", - "integrity": "sha512-+qXgo8hetQbRJb/j4poloBng1HxNMTQvZG2SsGmfXaauQrpIk7T7T/r3i8K0v1rKVwhqELooyRuB0QzWE1OrRQ==", - "peer": true, + "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": { - "@ethereumjs/util": "^8.1.0", - "@metamask/eth-sig-util": "^7.0.3", - "@metamask/scure-bip39": "^2.1.1", - "@metamask/utils": "^9.2.1", - "ethereum-cryptography": "^2.1.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^18.18 || >=20" - } - }, - "node_modules/@metamask/eth-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@metamask/eth-query/-/eth-query-4.0.0.tgz", - "integrity": "sha512-j2yPO2axYGyxwdqXRRhk2zBijt1Nd/xKCIXQkzvfWac0sKP0L9mSt1ZxMOe/sOF1SwS2R+NSaq+gsQDsQvrC4Q==", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" + "node": ">=18" }, - "engines": { - "node": ">=16.0.0" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/eth-sig-util": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-7.0.3.tgz", - "integrity": "sha512-PAtGnOkYvh90k2lEZldq/FK7GTLF6WxE+2bV85PoA3pqlJnmJCAY62tuvxHSwnVngSKlc4mcNvjnUg2eYO6JGg==", - "peer": true, + "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": { - "@ethereumjs/util": "^8.1.0", - "@metamask/abi-utils": "^2.0.4", - "@metamask/utils": "^9.0.0", - "@scure/base": "~1.1.3", - "ethereum-cryptography": "^2.1.2", - "tweetnacl": "^1.0.3" + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/utilities": "^2.0.0" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/eth-simple-keyring": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@metamask/eth-simple-keyring/-/eth-simple-keyring-6.0.5.tgz", - "integrity": "sha512-VqpD/TnBMHyEC/16YNEcGF+A29tZ/bwMKZTjFvQTQbTjbDS9ext2zmZsO9KA6PBGqGkoIdAERuKoxedjcCWoYg==", - "peer": true, - "dependencies": { - "@ethereumjs/util": "^8.1.0", - "@metamask/eth-sig-util": "^7.0.3", - "@metamask/utils": "^9.2.1", - "ethereum-cryptography": "^2.1.2", - "randombytes": "^2.1.0" - }, + "node_modules/@csstools/postcss-logical-viewport-units/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.18 || >=20" + "node": ">=18" } }, - "node_modules/@metamask/eth-snap-keyring": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@metamask/eth-snap-keyring/-/eth-snap-keyring-4.3.6.tgz", - "integrity": "sha512-jds0NdBDWM99FnO7WjODnRo+fnRoo11lJZlFS+cIa4ol7TMQmJ0HQdpno7R2LNfweoTioDMQd1LY1mCBq4zXnA==", - "peer": true, + "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": { - "@ethereumjs/tx": "^4.2.0", - "@metamask/eth-sig-util": "^7.0.3", - "@metamask/snaps-controllers": "^9.7.0", - "@metamask/snaps-sdk": "^6.5.1", - "@metamask/snaps-utils": "^7.8.1", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.2.1", - "@types/uuid": "^9.0.8", - "uuid": "^9.0.1" + "@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.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/keyring-api": "^8.1.3" + "postcss": "^8.4" } }, - "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/base-controller": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@metamask/base-controller/-/base-controller-6.0.3.tgz", - "integrity": "sha512-neUqsCXRT6QYcZO51y6Y5u9NPTHuxgNsW5Z4h///o1gDdV8lBeIG/b1ne+QPK422DZMAm4ChnkG1DDNf4PkErw==", - "peer": true, - "dependencies": { - "@metamask/utils": "^9.1.0", - "immer": "^9.0.6" - }, + "node_modules/@csstools/postcss-media-minmax/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.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/slip44": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@metamask/slip44/-/slip44-3.1.0.tgz", - "integrity": "sha512-bFlJ8jhTYJ4iQ0zgh2WMO2615UJ4Ne5J831EjsqKYaZs3qd6UTw/cy76hAmSxhnBluNAH5S6zZzxESLrTitCmQ==", - "peer": true, + "node_modules/@csstools/postcss-media-minmax/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": ">=14.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/snaps-utils": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@metamask/snaps-utils/-/snaps-utils-7.8.1.tgz", - "integrity": "sha512-v0xNoiWeJGHvtJqP0aU5dj+phqpV6vKCJoV5tNBXl8/AvMTaV2YL4SLO/z+PTo0RWZFplgAuuDsY254kAXi9Fw==", - "peer": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/types": "^7.23.0", - "@metamask/base-controller": "^6.0.2", - "@metamask/key-tree": "^9.1.2", - "@metamask/permission-controller": "^11.0.0", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/slip44": "^3.1.0", - "@metamask/snaps-registry": "^3.2.1", - "@metamask/snaps-sdk": "^6.1.0", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.1.0", - "@noble/hashes": "^1.3.1", - "@scure/base": "^1.1.1", - "chalk": "^4.1.2", - "cron-parser": "^4.5.0", - "fast-deep-equal": "^3.1.3", - "fast-json-stable-stringify": "^2.1.0", - "fast-xml-parser": "^4.3.4", - "marked": "^12.0.1", - "rfdc": "^1.3.0", - "semver": "^7.5.4", - "ses": "^1.1.0", - "validate-npm-package-name": "^5.0.0" - }, + "node_modules/@csstools/postcss-media-minmax/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.16 || >=20" + "node": ">=18" } }, - "node_modules/@metamask/eth-snap-keyring/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/@csstools/postcss-media-minmax/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": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@metamask/ethjs-unit": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@metamask/ethjs-unit/-/ethjs-unit-0.3.0.tgz", - "integrity": "sha512-HZtg69ODXYS9+ovKUYofZuIAwq4fc2/MGazD4vBQRKWMhPu4ySdmgR0EuzbxEK4uhr18KA4pbL+mCYjyjGxY7w==", - "dependencies": { - "@metamask/number-to-bn": "^1.7.1", - "bn.js": "^5.2.1" - }, + "license": "MIT", "engines": { - "node": ">=8.17.0", - "npm": ">=6" + "node": ">=18" }, "peerDependencies": { - "@babel/runtime": "^7.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/json-rpc-engine": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-9.0.3.tgz", - "integrity": "sha512-efeRXW7KaL0BJcAeudSGhzu6sD3hMpxx9nl3V+Yemm1bsyc66yVUhYPR+XH+Y6ZvB2p05ywgvd1Ev5PBwFzr/g==", + "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": { - "@metamask/rpc-errors": "^6.3.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^9.1.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/json-rpc-middleware-stream": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-8.0.3.tgz", - "integrity": "sha512-x0rh4EzzLtkpBi7adrAZ2qSAXBwk4knARZdR1j5YOyXYN7r0AeoTiTgmw7pfrUIF62x2si+WAOMm9R1hWNteGw==", - "dependencies": { - "@metamask/json-rpc-engine": "^9.0.3", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^9.1.0", - "readable-stream": "^3.6.2" - }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values/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.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/key-tree": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@metamask/key-tree/-/key-tree-9.1.2.tgz", - "integrity": "sha512-oznbIDlIn7bQsyf/RVhuVX9TsK+QUlTDeksUjBjTPKhGkFHAgn9duBHPE8P30VcCdWlt/oYSqfJVC5WK1/OXKw==", - "dependencies": { - "@metamask/scure-bip39": "^2.1.1", - "@metamask/utils": "^9.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@scure/base": "^1.0.0" - }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values/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": ">=16.0.0" + "node": ">=18" } }, - "node_modules/@metamask/keyring-api": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@metamask/keyring-api/-/keyring-api-8.1.3.tgz", - "integrity": "sha512-Ztm4G/U5hc+GKS/VOnqLWYVh2O26lFQ03bNpeufrfKq7regydIqYuHFcSowbQyj7xCZqKPsvl9jxhKdYIxvCXQ==", - "peer": true, - "dependencies": { - "@metamask/snaps-sdk": "^6.5.1", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.2.1", - "@types/uuid": "^9.0.8", - "bech32": "^2.0.0", - "uuid": "^9.0.1" - }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values/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.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/providers": "^17.2.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/keyring-api/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "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": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@metamask/keyring-controller": { - "version": "17.2.2", - "resolved": "https://registry.npmjs.org/@metamask/keyring-controller/-/keyring-controller-17.2.2.tgz", - "integrity": "sha512-Shqk0ybcTPrHQLlBJ1V+InuYC7nD3/a6Ws0XCcBCOfkLTXvtSooKIWBioK83XlHMHkfsM6+bySxSqXJVgJvBZw==", - "peer": true, + "license": "MIT-0", "dependencies": { - "@ethereumjs/util": "^8.1.0", - "@keystonehq/metamask-airgapped-keyring": "^0.14.1", - "@metamask/base-controller": "^7.0.1", - "@metamask/browser-passworder": "^4.3.0", - "@metamask/eth-hd-keyring": "^7.0.4", - "@metamask/eth-sig-util": "^7.0.1", - "@metamask/eth-simple-keyring": "^6.0.5", - "@metamask/keyring-api": "^8.1.3", - "@metamask/message-manager": "^10.1.1", - "@metamask/utils": "^9.1.0", - "async-mutex": "^0.5.0", - "ethereumjs-wallet": "^1.0.1", - "immer": "^9.0.6" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^18.18 || >=20" - } - }, - "node_modules/@metamask/message-manager": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@metamask/message-manager/-/message-manager-10.1.1.tgz", - "integrity": "sha512-VFFqEPKOyo59P79CP/vlPDpMng1a1mMHIaXuvEJYTOf/UOqeVpw77G5IHVfjuG+tZNlAQIHYp7sEmPkob+rzcA==", - "peer": true, - "dependencies": { - "@metamask/base-controller": "^7.0.1", - "@metamask/controller-utils": "^11.3.0", - "@metamask/eth-sig-util": "^7.0.1", - "@metamask/utils": "^9.1.0", - "@types/uuid": "^8.3.0", - "jsonschema": "^1.2.4", - "uuid": "^8.3.2" + "node": ">=18" }, - "engines": { - "node": "^18.18 || >=20" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/message-manager/node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "peer": true - }, - "node_modules/@metamask/number-to-bn": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@metamask/number-to-bn/-/number-to-bn-1.7.1.tgz", - "integrity": "sha512-qCN+Au4amvcVii2LdOJNndYhdmk5Lk9tlStJhKpZ8tGeYQDJTghqYXJuSUVPHvfl6FUfKY1i1Or2j2EbnEerSQ==", + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "bn.js": "5.2.1", - "strip-hex-prefix": "1.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8.17.0", - "npm": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/object-multiplex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.0.0.tgz", - "integrity": "sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA==", + "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": { - "once": "^1.4.0", - "readable-stream": "^3.6.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" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/obs-store": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@metamask/obs-store/-/obs-store-9.0.0.tgz", - "integrity": "sha512-GDsEh2DTHgmISzJt8erf9T4Ph38iwD2yDJ6J1YFq/IcWRGnT1bkgSEVqZMv9c9JloX02T5bFIUK6+9m9EycI6A==", - "peer": true, - "dependencies": { - "@metamask/safe-event-emitter": "^3.0.0", - "readable-stream": "^3.6.2" - }, + "node_modules/@csstools/postcss-oklab-function/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": "^14.21 || ^16.20 || ^18.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/onboarding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@metamask/onboarding/-/onboarding-1.0.1.tgz", - "integrity": "sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ==", + "node_modules/@csstools/postcss-oklab-function/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": { - "bowser": "^2.9.0" - } - }, - "node_modules/@metamask/open-rpc-docs-react": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@metamask/open-rpc-docs-react/-/open-rpc-docs-react-0.2.0.tgz", - "integrity": "sha512-lR0RuLLq9D5i3cRFw6osqwKtkl25+uDjmpvkLCCER32q7FWFYqF1v7X1XYlvQciZKwyQaOFukaCFT/tOrjEUdg==", - "dependencies": { - "@json-schema-tools/traverse": "^1.10.1", - "@open-rpc/examples": "^1.6.1", - "@rjsf/core": "^5.6.2", - "@rjsf/utils": "^5.6.2", - "@rjsf/validator-ajv8": "^5.6.2", - "@stoplight/json-schema-viewer": "^4.9.1", - "@stoplight/markdown-viewer": "^5", - "@stoplight/mosaic": "^1.32", - "@stoplight/mosaic-code-viewer": "^1.32", - "hash-color-material": "^1.1.3", - "lodash": "^4.17.15", - "qs": "^6.11.1", - "react-markdown": "^8.0.7", - "react-syntax-highlighter": "^15.4.3" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/permission-controller": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@metamask/permission-controller/-/permission-controller-11.0.2.tgz", - "integrity": "sha512-hB+xaxrpAXx2rQiwGvUG3XucWJxipWXlo9/T3VTo9b3JQPZCB536tJafRBK8eP9THMxkAz7VPwAD2f075mN5SQ==", - "dependencies": { - "@metamask/base-controller": "^7.0.1", - "@metamask/controller-utils": "^11.3.0", - "@metamask/json-rpc-engine": "^9.0.3", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/utils": "^9.1.0", - "@types/deep-freeze-strict": "^1.1.0", - "deep-freeze-strict": "^1.1.1", - "immer": "^9.0.6", - "nanoid": "^3.1.31" - }, + "node_modules/@csstools/postcss-oklab-function/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.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/approval-controller": "^7.0.0" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/phishing-controller": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@metamask/phishing-controller/-/phishing-controller-12.0.3.tgz", - "integrity": "sha512-CR1qN2FkMJp+MyNSXVTvrZY7MjCdkvsofW/kyv6oshPtLV6BGBWFyueS2UgjMNsmQDW/vMXUJMZfcMS6rs3S4w==", - "peer": true, - "dependencies": { - "@metamask/base-controller": "^7.0.1", - "@metamask/controller-utils": "^11.3.0", - "@noble/hashes": "^1.4.0", - "@types/punycode": "^2.1.0", - "eth-phishing-detect": "^1.2.0", - "ethereum-cryptography": "^2.1.2", - "fastest-levenshtein": "^1.0.16", - "punycode": "^2.1.1" - }, - "engines": { - "node": "^18.18 || >=20" + "node_modules/@csstools/postcss-oklab-function/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/@metamask/post-message-stream": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@metamask/post-message-stream/-/post-message-stream-8.1.1.tgz", - "integrity": "sha512-Z5LHqE8MI0g9xKT7dOr4G11Qjf2bWg9rFonpFnUJwxJvfIl6KuGVnfOTo7PVXH3zdlWotlhhC2F65QW9WxVSPQ==", - "peer": true, - "dependencies": { - "@metamask/utils": "^9.0.0", - "readable-stream": "3.6.2" - }, + "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": "^16.20 || ^18.16 || >=20", - "yarn": "^1.22.22" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/profile-sync-controller": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@metamask/profile-sync-controller/-/profile-sync-controller-0.6.0.tgz", - "integrity": "sha512-L1dIvghOQKRbZLY99NQ4+pYR71o3514AdJaBKP9iybySYZ36qAbg2hohz7+6k62nzLSPFHbflX/bDMbg9lkKPQ==", + "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": { - "@metamask/base-controller": "^7.0.1", - "@metamask/snaps-sdk": "^6.5.0", - "@metamask/snaps-utils": "^8.1.1", - "@noble/ciphers": "^0.5.2", - "@noble/hashes": "^1.4.0", - "immer": "^9.0.6", - "loglevel": "^1.8.1", - "siwe": "^2.3.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/accounts-controller": "^18.1.1", - "@metamask/keyring-controller": "^17.2.0", - "@metamask/snaps-controllers": "^9.7.0" + "postcss": "^8.4" } }, - "node_modules/@metamask/providers": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-17.2.0.tgz", - "integrity": "sha512-99EIsZo1vIuA7Wc9ruWOd9LGr0GCqEY9lR0/hcjasUZH31MGUe0H/0NdMcz2tRXhsYRvt6M+2lsM4dDG1+atRw==", + "node_modules/@csstools/postcss-property-rule-prelude-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz", + "integrity": "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@metamask/json-rpc-engine": "^9.0.1", - "@metamask/json-rpc-middleware-stream": "^8.0.1", - "@metamask/object-multiplex": "^2.0.0", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/safe-event-emitter": "^3.1.1", - "@metamask/utils": "^9.0.0", - "detect-browser": "^5.2.0", - "extension-port-stream": "^4.1.0", - "fast-deep-equal": "^3.1.3", - "is-stream": "^2.0.0", - "readable-stream": "^3.6.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=18" }, "peerDependencies": { - "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" + "postcss": "^8.4" } }, - "node_modules/@metamask/rpc-errors": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.3.1.tgz", - "integrity": "sha512-ugDY7cKjF4/yH5LtBaOIKHw/AiGGSAmzptAUEiAEGr/78LwuzcXAxmzEQfSfMIfI+f9Djr8cttq1pRJJKfTuCg==", - "dependencies": { - "@metamask/utils": "^9.0.0", - "fast-safe-stringify": "^2.0.6" - }, + "node_modules/@csstools/postcss-property-rule-prelude-list/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": ">=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/safe-event-emitter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz", - "integrity": "sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==", + "node_modules/@csstools/postcss-property-rule-prelude-list/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": ">=12.0.0" + "node": ">=18" } }, - "node_modules/@metamask/scure-bip39": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@metamask/scure-bip39/-/scure-bip39-2.1.1.tgz", - "integrity": "sha512-1K8aBsAqr6+8jWhguVl06n8e+zjV9sUnys+5PLyVU4mb8LbulQ60F6cq7iQys3xX/yCwKt1+7c7j2nuTEpW+ZQ==", + "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": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/scure-bip39/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "node_modules/@csstools/postcss-random-function/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": ">= 16" + "node": ">=18" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/sdk": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.29.0.tgz", - "integrity": "sha512-tWzb/hLt2F6MeByGueDXrW+Svv7sBbEFcNxIL/5DZHUEubLyk+uxPMIFBDuu12z1lYKq/X+W2zeIuwE02Q6VIg==", - "dependencies": { - "@metamask/onboarding": "^1.0.1", - "@metamask/providers": "16.1.0", - "@metamask/sdk-communication-layer": "0.29.0", - "@metamask/sdk-install-modal-web": "0.28.1", - "@types/dom-screen-wake-lock": "^1.0.0", - "@types/uuid": "^10.0.0", - "bowser": "^2.9.0", - "cross-fetch": "^4.0.0", - "debug": "^4.3.4", - "eciesjs": "^0.3.15", - "eth-rpc-errors": "^4.0.3", - "eventemitter2": "^6.4.7", - "i18next": "23.11.5", - "i18next-browser-languagedetector": "7.1.0", - "obj-multiplex": "^1.0.0", - "pump": "^3.0.0", - "qrcode-terminal-nooctal": "^0.12.1", - "react-native-webview": "^11.26.0", - "readable-stream": "^3.6.2", - "rollup-plugin-visualizer": "^5.9.2", - "socket.io-client": "^4.5.1", - "util": "^0.12.4", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true + "node_modules/@csstools/postcss-random-function/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" }, - "react-dom": { - "optional": true + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" } - } - }, - "node_modules/@metamask/sdk-communication-layer": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.29.0.tgz", - "integrity": "sha512-e8o+ENJ8+UtLll9+BXdPAAnVCJvOtRtLTp9V2Z3Y+ZQZMwI3rAOO5J/THSxLX2gAuFH326twsicXs6uhFZIaGA==", - "dependencies": { - "bufferutil": "^4.0.8", - "date-fns": "^2.29.3", - "debug": "^4.3.4", - "utf-8-validate": "^5.0.2", - "uuid": "^8.3.2" + ], + "license": "MIT", + "engines": { + "node": ">=18" }, "peerDependencies": { - "cross-fetch": "^4.0.0", - "eciesjs": "^0.3.16", - "eventemitter2": "^6.4.7", - "readable-stream": "^3.6.2", - "socket.io-client": "^4.5.1" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/sdk-install-modal-web": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.28.1.tgz", - "integrity": "sha512-mHkIjWTpYQMPDMtLEEtTVXhae4pEjy7jDBfV7497L0U3VCPQrBl/giZBwA6AgKEX1emYcM2d1WRHWR9N4YhyJA==", - "dependencies": { - "qr-code-styling": "^1.6.0-rc.1" - }, - "peerDependencies": { - "i18next": "23.11.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-native": "*" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true + "node_modules/@csstools/postcss-random-function/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" }, - "react-native": { - "optional": true + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" } + ], + "license": "MIT", + "engines": { + "node": ">=18" } }, - "node_modules/@metamask/sdk/node_modules/@metamask/json-rpc-engine": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-8.0.2.tgz", - "integrity": "sha512-IoQPmql8q7ABLruW7i4EYVHWUbF74yrp63bRuXV5Zf9BQwcn5H9Ww1eLtROYvI1bUXwOiHZ6qT5CWTrDc/t/AA==", + "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": { - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.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": ">=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/sdk/node_modules/@metamask/json-rpc-middleware-stream": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-7.0.2.tgz", - "integrity": "sha512-yUdzsJK04Ev98Ck4D7lmRNQ8FPioXYhEUZOMS01LXW8qTvPGiRVXmVltj2p4wrLkh0vW7u6nv0mNl5xzC5Qmfg==", - "dependencies": { - "@metamask/json-rpc-engine": "^8.0.2", - "@metamask/safe-event-emitter": "^3.0.0", - "@metamask/utils": "^8.3.0", - "readable-stream": "^3.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@metamask/sdk/node_modules/@metamask/providers": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-16.1.0.tgz", - "integrity": "sha512-znVCvux30+3SaUwcUGaSf+pUckzT5ukPRpcBmy+muBLC0yaWnBcvDqGfcsw6CBIenUdFrVoAFa8B6jsuCY/a+g==", - "dependencies": { - "@metamask/json-rpc-engine": "^8.0.1", - "@metamask/json-rpc-middleware-stream": "^7.0.1", - "@metamask/object-multiplex": "^2.0.0", - "@metamask/rpc-errors": "^6.2.1", - "@metamask/safe-event-emitter": "^3.1.1", - "@metamask/utils": "^8.3.0", - "detect-browser": "^5.2.0", - "extension-port-stream": "^3.0.0", - "fast-deep-equal": "^3.1.3", - "is-stream": "^2.0.0", - "readable-stream": "^3.6.2", - "webextension-polyfill": "^0.10.0" - }, + "node_modules/@csstools/postcss-relative-color-syntax/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.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/sdk/node_modules/@metamask/utils": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-8.5.0.tgz", - "integrity": "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ==", + "node_modules/@csstools/postcss-relative-color-syntax/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": { - "@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" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/sdk/node_modules/@metamask/utils/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/@csstools/postcss-relative-color-syntax/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": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@metamask/sdk/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==" - }, - "node_modules/@metamask/sdk/node_modules/extension-port-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-3.0.0.tgz", - "integrity": "sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==", - "dependencies": { - "readable-stream": "^3.6.2 || ^4.4.2", - "webextension-polyfill": ">=0.10.0 <1.0" - }, + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/sdk/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==" - }, - "node_modules/@metamask/slip44": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@metamask/slip44/-/slip44-4.0.0.tgz", - "integrity": "sha512-MQMocMvFmp1MWownjKMuxevivwYeNQPSpNyIg9K7nmxKuoatp5NUc9L8EJ3Bh//rOfl6fBfXn9byfS0t+NE02Q==", + "node_modules/@csstools/postcss-relative-color-syntax/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.16 || >=20" + "node": ">=18" } }, - "node_modules/@metamask/snaps-controllers": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@metamask/snaps-controllers/-/snaps-controllers-9.9.0.tgz", - "integrity": "sha512-L5wHVHtIBwYrFO6PyKWH6vB4w6B2TOBpeMOqOi6SxzN9M1E9YDHCmZHJbpR0ho1KGcWhSs8T7D9nkqJX/xkubA==", - "peer": true, + "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": { - "@metamask/approval-controller": "^7.0.2", - "@metamask/base-controller": "^6.0.2", - "@metamask/json-rpc-engine": "^9.0.2", - "@metamask/json-rpc-middleware-stream": "^8.0.2", - "@metamask/object-multiplex": "^2.0.0", - "@metamask/permission-controller": "^11.0.0", - "@metamask/phishing-controller": "^12.0.2", - "@metamask/post-message-stream": "^8.1.1", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/snaps-registry": "^3.2.1", - "@metamask/snaps-rpc-methods": "^11.2.0", - "@metamask/snaps-sdk": "^6.6.0", - "@metamask/snaps-utils": "^8.2.0", - "@metamask/utils": "^9.2.1", - "@xstate/fsm": "^2.0.0", - "browserify-zlib": "^0.2.0", - "concat-stream": "^2.0.0", - "fast-deep-equal": "^3.1.3", - "get-npm-tarball-url": "^2.0.3", - "immer": "^9.0.6", - "nanoid": "^3.1.31", - "readable-stream": "^3.6.2", - "readable-web-to-node-stream": "^3.0.2", - "tar-stream": "^3.1.7" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^18.16 || >=20" + "node": ">=18" }, "peerDependencies": { - "@metamask/snaps-execution-environments": "^6.8.0" - }, - "peerDependenciesMeta": { - "@metamask/snaps-execution-environments": { - "optional": true - } + "postcss": "^8.4" } }, - "node_modules/@metamask/snaps-controllers/node_modules/@metamask/base-controller": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@metamask/base-controller/-/base-controller-6.0.3.tgz", - "integrity": "sha512-neUqsCXRT6QYcZO51y6Y5u9NPTHuxgNsW5Z4h///o1gDdV8lBeIG/b1ne+QPK422DZMAm4ChnkG1DDNf4PkErw==", - "peer": true, + "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": { - "@metamask/utils": "^9.1.0", - "immer": "^9.0.6" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=4" } }, - "node_modules/@metamask/snaps-registry": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@metamask/snaps-registry/-/snaps-registry-3.2.1.tgz", - "integrity": "sha512-MnG1BBJk4UK9iJArK+h/iz8wlt+xjsvgnj0k39p5658hWZu6cuumHoV1EIupCwsCv7XXOBLc8iAgjvITXKC1FQ==", + "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": { - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": "^18.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/snaps-rpc-methods": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@metamask/snaps-rpc-methods/-/snaps-rpc-methods-11.2.0.tgz", - "integrity": "sha512-5OZd8tMnrTd8plDL46uNouecmo1UQdyFsD0ivNI70aTvFKeRugCDTMgu/kboT63Cl3/UW+rIRn85NlM91G2NkQ==", - "peer": true, - "dependencies": { - "@metamask/key-tree": "^9.1.2", - "@metamask/permission-controller": "^11.0.0", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/snaps-sdk": "^6.6.0", - "@metamask/snaps-utils": "^8.2.0", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.2.1", - "@noble/hashes": "^1.3.1" - }, + "node_modules/@csstools/postcss-sign-functions/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.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/snaps-sdk": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@metamask/snaps-sdk/-/snaps-sdk-6.6.0.tgz", - "integrity": "sha512-KHPcf6F4oMw9rJTqL8gYW77zp/Zd+MCxAmxOHVCyRGAxmXwc/lpWUYweEH4qX8409p/R6zVYE73y/2d35pA1qQ==", - "dependencies": { - "@metamask/key-tree": "^9.1.2", - "@metamask/providers": "^17.1.2", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.2.1" - }, + "node_modules/@csstools/postcss-sign-functions/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.16 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/snaps-utils": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@metamask/snaps-utils/-/snaps-utils-8.2.0.tgz", - "integrity": "sha512-e7KsgY+SkbcbDz4nczClfuUeeOLRtW9/DYMW9jXBXQxENAcN821XZQd4xEVtOdh0jZ9ZL5xtgWEn2OvzObFtBw==", - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/types": "^7.23.0", - "@metamask/base-controller": "^6.0.2", - "@metamask/key-tree": "^9.1.2", - "@metamask/permission-controller": "^11.0.0", - "@metamask/rpc-errors": "^6.3.1", - "@metamask/slip44": "^4.0.0", - "@metamask/snaps-registry": "^3.2.1", - "@metamask/snaps-sdk": "^6.6.0", - "@metamask/superstruct": "^3.1.0", - "@metamask/utils": "^9.2.1", - "@noble/hashes": "^1.3.1", - "@scure/base": "^1.1.1", - "chalk": "^4.1.2", - "cron-parser": "^4.5.0", - "fast-deep-equal": "^3.1.3", - "fast-json-stable-stringify": "^2.1.0", - "fast-xml-parser": "^4.4.1", - "marked": "^12.0.1", - "rfdc": "^1.3.0", - "semver": "^7.5.4", - "ses": "^1.1.0", - "validate-npm-package-name": "^5.0.0" - }, + "node_modules/@csstools/postcss-sign-functions/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.16 || >=20" + "node": ">=18" } }, - "node_modules/@metamask/snaps-utils/node_modules/@metamask/base-controller": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@metamask/base-controller/-/base-controller-6.0.3.tgz", - "integrity": "sha512-neUqsCXRT6QYcZO51y6Y5u9NPTHuxgNsW5Z4h///o1gDdV8lBeIG/b1ne+QPK422DZMAm4ChnkG1DDNf4PkErw==", + "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": { - "@metamask/utils": "^9.1.0", - "immer": "^9.0.6" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": "^18.18 || >=20" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@metamask/superstruct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz", - "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@metamask/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-/u663aUaB6+Xe75i3Mt/1cCljm41HDYIsna5oBrwGvgkY2zH7/9k9Zjd706cxoAbxN7QgLSVAReUiGnuxCuXrQ==", - "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" - }, + "node_modules/@csstools/postcss-stepped-value-functions/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": ">=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@metamask/utils/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/@csstools/postcss-stepped-value-functions/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": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@ndhoule/each": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ndhoule/each/-/each-2.0.1.tgz", - "integrity": "sha512-wHuJw6x+rF6Q9Skgra++KccjBozCr9ymtna0FhxmV/8xT/hZ2ExGYR8SV8prg8x4AH/7mzDYErNGIVHuzHeybw==", - "dependencies": { - "@ndhoule/keys": "^2.0.0" - } - }, - "node_modules/@ndhoule/keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@ndhoule/keys/-/keys-2.0.0.tgz", - "integrity": "sha512-vtCqKBC1Av6dsBA8xpAO+cgk051nfaI+PnmTZep2Px0vYrDvpUmLxv7z40COlWH5yCpu3gzNhepk+02yiQiZNw==" - }, - "node_modules/@ndhoule/map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ndhoule/map/-/map-2.0.1.tgz", - "integrity": "sha512-WOEf2An9mL4DVY6NHgaRmFC82pZGrmzW4I0hpPPdczDP4Gp5+Q1Nny77x3w0qzENA8+cbgd9+Lx2ClSTLvkB0g==", - "dependencies": { - "@ndhoule/each": "^2.0.1" - } - }, - "node_modules/@ngraveio/bc-ur": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@ngraveio/bc-ur/-/bc-ur-1.1.13.tgz", - "integrity": "sha512-j73akJMV4+vLR2yQ4AphPIT5HZmxVjn/LxpL7YHoINnXoH6ccc90Zzck6/n6a3bCXOVZwBxq+YHwbAKRV+P8Zg==", - "peer": true, - "dependencies": { - "@keystonehq/alias-sampling": "^0.1.1", - "assert": "^2.0.0", - "bignumber.js": "^9.0.1", - "cbor-sync": "^1.0.4", - "crc": "^3.8.0", - "jsbi": "^3.1.5", - "sha.js": "^2.4.11" - } - }, - "node_modules/@noble/ciphers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", - "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", - "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", - "dependencies": { - "@noble/hashes": "1.5.0" - }, + "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">=18" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@noble/hashes": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "node_modules/@csstools/postcss-stepped-value-functions/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": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=18" } }, - "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==", + "node_modules/@csstools/postcss-syntax-descriptor-syntax-production": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz", + "integrity": "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": ">= 8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/@csstools/postcss-syntax-descriptor-syntax-production/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": ">= 8" + "node": ">=18" } }, - "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==", + "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": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@open-rpc/examples": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@open-rpc/examples/-/examples-1.7.2.tgz", - "integrity": "sha512-wEvviOPc+gyBVmxvGQVl/hqYslEacxLe0UETupyp1JjXUAZxW27da+F1IxbP6NYdx6jt4RyLg+V0GBVTsN6RRA==" - }, - "node_modules/@open-rpc/meta-schema": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@open-rpc/meta-schema/-/meta-schema-1.14.2.tgz", - "integrity": "sha512-vD4Nbkrb7wYFRcSQf+j228LwOy1C6/KKpy5NADlpMElGrAWPRxhTa2yTi6xG+x88OHzg2+cydQ0GAD6o40KUcg==" - }, - "node_modules/@open-rpc/schema-utils-js": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@open-rpc/schema-utils-js/-/schema-utils-js-1.16.2.tgz", - "integrity": "sha512-55vQov3o8KkXD+wiw1nKZaYws2LHSntjK5Sfja4vfGN7A6Xis0r0d0MUDVj32E3pKF9Z2sTZL3sKO/nB0DKUDg==", - "dependencies": { - "@json-schema-tools/dereferencer": "1.5.5", - "@json-schema-tools/meta-schema": "1.6.19", - "@json-schema-tools/reference-resolver": "1.2.4", - "@open-rpc/meta-schema": "1.14.2", - "ajv": "^6.10.0", - "detect-node": "^2.0.4", - "fast-safe-stringify": "^2.0.7", - "fs-extra": "^10.1.0", - "is-url": "^1.2.4", - "isomorphic-fetch": "^3.0.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@open-rpc/schema-utils-js/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==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/@csstools/postcss-system-ui-font-family/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": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "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/@csstools/postcss-system-ui-font-family/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": ">=12.22.0" + "node": ">=18" } }, - "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/@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": { - "graceful-fs": "4.2.10" + "@csstools/color-helpers": "^5.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12.22.0" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==" - }, - "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/@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": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" - }, - "node_modules/@react-hook/debounce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz", - "integrity": "sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag==", - "dependencies": { - "@react-hook/latest": "^1.0.2" + "node": ">=18" }, "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-hook/event": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@react-hook/event/-/event-1.2.6.tgz", - "integrity": "sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q==", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-hook/latest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", - "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-hook/passive-layout-effect": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz", - "integrity": "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==", - "peerDependencies": { - "react": ">=16.8" + "postcss": "^8.4" } }, - "node_modules/@react-hook/resize-observer": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@react-hook/resize-observer/-/resize-observer-1.2.6.tgz", - "integrity": "sha512-DlBXtLSW0DqYYTW3Ft1/GQFZlTdKY5VAFIC4+km6IK5NiPPDFchGbEJm1j6pSgMqPRHbUQgHJX7RaR76ic1LWA==", - "dependencies": { - "@juggle/resize-observer": "^3.3.1", - "@react-hook/latest": "^1.0.2", - "@react-hook/passive-layout-effect": "^1.2.0" + "node_modules/@csstools/postcss-trigonometric-functions/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": { - "react": ">=16.8" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@react-hook/size": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@react-hook/size/-/size-2.1.2.tgz", - "integrity": "sha512-BmE5asyRDxSuQ9p14FUKJ0iBRgV9cROjqNG9jT/EjCM+xHha1HVqbPoT+14FQg1K7xIydabClCibUY4+1tw/iw==", - "dependencies": { - "@react-hook/passive-layout-effect": "^1.2.0", - "@react-hook/resize-observer": "^1.2.1" + "node_modules/@csstools/postcss-trigonometric-functions/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": { - "react": ">=16.8" + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@react-hook/throttle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz", - "integrity": "sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg==", - "dependencies": { - "@react-hook/latest": "^1.0.2" + "node_modules/@csstools/postcss-trigonometric-functions/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/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": { - "react": ">=16.8" + "postcss": "^8.4" } }, - "node_modules/@react-hook/window-size": { + "node_modules/@csstools/selector-specificity": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.1.1.tgz", - "integrity": "sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g==", - "dependencies": { - "@react-hook/debounce": "^3.0.0", - "@react-hook/event": "^1.2.1", - "@react-hook/throttle": "^2.2.0" + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "react": ">=16.8" + "postcss-selector-parser": "^6.0.13" } }, - "node_modules/@react-native-community/cli": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-14.1.0.tgz", - "integrity": "sha512-k7aTdKNZIec7WMSqMJn9bDVLWPPOaYmshXcnjWy6t5ItsJnREju9p2azMTR5tXY5uIeynose3cxettbhk2Tbnw==", - "peer": true, - "dependencies": { - "@react-native-community/cli-clean": "14.1.0", - "@react-native-community/cli-config": "14.1.0", - "@react-native-community/cli-debugger-ui": "14.1.0", - "@react-native-community/cli-doctor": "14.1.0", - "@react-native-community/cli-server-api": "14.1.0", - "@react-native-community/cli-tools": "14.1.0", - "@react-native-community/cli-types": "14.1.0", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "rnc-cli": "build/bin.js" - }, + "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/@react-native-community/cli-clean": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-14.1.0.tgz", - "integrity": "sha512-/C4j1yntLo6faztNgZnsDtgpGqa6j0+GYrxOY8LqaKAN03OCnoeUUKO6w78dycbYSGglc1xjJg2RZI/M2oF2AA==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "14.1.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@react-native-community/cli-config": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-14.1.0.tgz", - "integrity": "sha512-P3FK2rPUJBD1fmQHLgTqpHxsc111pnMdEEFR7KeqprCNz+Qr2QpPxfNy0V7s15tGL5rAv+wpbOGcioIV50EbxA==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "14.1.0", - "chalk": "^4.1.2", - "cosmiconfig": "^9.0.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", - "joi": "^17.2.1" + "node_modules/@docsearch/core": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.2.tgz", + "integrity": "sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA==", + "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/@react-native-community/cli-config/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "peer": true, + "node_modules/@docsearch/css": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.2.tgz", + "integrity": "sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.2.tgz", + "integrity": "sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w==", + "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" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" + "@algolia/autocomplete-core": "1.19.2", + "@docsearch/core": "4.6.2", + "@docsearch/css": "4.6.2" }, "peerDependencies": { - "typescript": ">=4.9.5" + "@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": { - "typescript": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { "optional": true } } }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-14.1.0.tgz", - "integrity": "sha512-+YbeCL0wLcBcqDwraJFGsqzcXu9S+bwTVrfImne/4mT6itfe3Oa93yrOVJgNbstrt5pJHuwpU76ZXfXoiuncsg==", - "peer": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-14.1.0.tgz", - "integrity": "sha512-xIf0oQDRKt7lufUenRwcLYdINGc0x1FSXHaHjd7lQDGT5FJnCEYlIkYEDDgAl5tnVJSvM/IL2c6O+mffkNEPzQ==", - "peer": true, + "node_modules/@docusaurus/babel": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.1.tgz", + "integrity": "sha512-DZzFO1K3v/GoEt1fx1DiYHF4en+PuhtQf1AkQJa5zu3CoeKSpr5cpQRUlz3jr0m44wyzmSXu9bVpfir+N4+8bg==", + "license": "MIT", "dependencies": { - "@react-native-community/cli-config": "14.1.0", - "@react-native-community/cli-platform-android": "14.1.0", - "@react-native-community/cli-platform-apple": "14.1.0", - "@react-native-community/cli-platform-ios": "14.1.0", - "@react-native-community/cli-tools": "14.1.0", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.13.0", - "execa": "^5.0.0", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/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==", - "peer": true, + "@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/traverse": "^7.25.9", + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "babel-plugin-dynamic-import-node": "^2.3.3", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, "engines": { - "node": ">=6" + "node": ">=20.0" } }, - "node_modules/@react-native-community/cli-doctor/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==", - "peer": true, + "node_modules/@docusaurus/bundler": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.1.tgz", + "integrity": "sha512-HIqQPvbqnnQRe4NsBd1774KRarjXqS6wHsWELtyuSs1gCfvixJO2jUGH/OEBtr1Gvzpw+ze5CjGMvSJ8UE1KUw==", + "license": "MIT", "dependencies": { - "ansi-regex": "^4.1.0" + "@babel/core": "^7.25.9", + "@docusaurus/babel": "3.10.1", + "@docusaurus/cssnano-preset": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "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": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=20.0" + }, + "peerDependencies": { + "@docusaurus/faster": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } } }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-14.1.0.tgz", - "integrity": "sha512-4JnXkAV+ca8XdUhZ7xjgDhXAMwTVjQs8JqiwP7FTYVrayShXy2cBXm/C3HNDoe+oQOF5tPT2SqsDAF2vYTnKiQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "14.1.0", + "node_modules/@docusaurus/core": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.1.tgz", + "integrity": "sha512-3pf2fXXw0eVk8WnC3T4LIigRDupcpvngpKo9Vy7mYyBhuddc0klDUuZAIfzMoK6z05pdlk6EFC/vBSX43+1O5w==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.10.1", + "@docusaurus/bundler": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "boxen": "^6.2.1", "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1", - "logkitty": "^0.7.1" + "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.3", + "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.7", + "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": { + "@docusaurus/faster": "*", + "@mdx-js/react": "^3.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } } }, - "node_modules/@react-native-community/cli-platform-apple": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-14.1.0.tgz", - "integrity": "sha512-DExd+pZ7hHxXt8I6BBmckeYUxxq7PQ+o4YSmGIeQx0xUpi+f82obBct2WNC3VWU72Jw6obwfoN6Fwe6F7Wxp5Q==", - "peer": true, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.1.tgz", + "integrity": "sha512-eNfHGcTKCSq6xmcavAkX3RRclHaE2xRCMParlDXLdXVP01/a2e/jKXMj/0ULnLFQSNwwuI62L0Ge8J+nZsR7UQ==", + "license": "MIT", "dependencies": { - "@react-native-community/cli-tools": "14.1.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1", - "ora": "^5.4.1" + "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/@react-native-community/cli-platform-ios": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-14.1.0.tgz", - "integrity": "sha512-ah/ZTiJXUdCVHujyRJ4OmCL5nTq8OWcURcE3UXa1z0sIIiA8io06n+v5n299T9rtPKMwRtVJlQjtO/nbODABPQ==", - "peer": true, + "node_modules/@docusaurus/eslint-plugin": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-GS0zphpvFMCHUWalNrklew1gJo/44YzCrHPNFoka0asJnjfgnQDLl+KxCjWUXvw3U34NaVhwlJQaieClez8o/A==", + "dev": true, + "license": "MIT", "dependencies": { - "@react-native-community/cli-platform-apple": "14.1.0" + "@typescript-eslint/utils": "^5.62.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "eslint": ">=6" } }, - "node_modules/@react-native-community/cli-server-api": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-14.1.0.tgz", - "integrity": "sha512-1k2LBQaYsy9RDWFIfKVne3frOye73O33MV6eYMoRPff7wqxHCrsX1CYJQkmwpgVigZHxYwalHj+Axtu3gpomCA==", - "peer": true, + "node_modules/@docusaurus/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "dev": true, + "license": "MIT", "dependencies": { - "@react-native-community/cli-debugger-ui": "14.1.0", - "@react-native-community/cli-tools": "14.1.0", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^6.2.3" + "@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/@react-native-community/cli-server-api/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" + "node_modules/@docusaurus/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@react-native-community/cli-tools": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-14.1.0.tgz", - "integrity": "sha512-r1KxSu2+OSuhWFoE//1UR7aSTXMLww/UYWQprEw4bSo/kvutGX//4r9ywgXSWp+39udpNN4jQpNTHuWhGZd/Bg==", - "peer": true, + "node_modules/@docusaurus/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^7.5.2", - "shell-quote": "^1.7.3", - "sudo-prompt": "^9.0.0" + "@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/@react-native-community/cli-tools/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "peer": true, + "node_modules/@docusaurus/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "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" + }, "engines": { - "node": ">=4" + "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/@react-native-community/cli-tools/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "peer": true, + "node_modules/@docusaurus/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "dev": true, + "license": "MIT", "dependencies": { - "is-wsl": "^1.1.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@react-native-community/cli-types": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-14.1.0.tgz", - "integrity": "sha512-aJwZI9mGRx3HdP8U4CGhqjt3S4r8GmeOqv4kRagC1UHDk4QNMC+bZ8JgPA4W7FrGiPey+lJQHMDPAXOo51SOUw==", - "peer": true, + "node_modules/@docusaurus/logger": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.1.tgz", + "integrity": "sha512-oPjNFnfJsRCkePVjkGrxWGq4MvJKRQT0r9jOP0eRBTZ7Wr9FAbzdP/Gjs0I2Ss6YRkPoEgygKG112OkE6skvJw==", + "license": "MIT", "dependencies": { - "joi": "^17.2.1" + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" } }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "peer": true, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.1.tgz", + "integrity": "sha512-GRmeb/wQ+iXRrFwcHBfgQhrJxGElgCsoTWZYDhccjsZVne1p8MK/EpQVIloXttz76TCe78kKD5AEG9n1xc1oxQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@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": "^12.20.0 || >=14" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native-community/cli/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==", - "peer": true, + "node_modules/@docusaurus/module-type-aliases": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.1.tgz", + "integrity": "sha512-YoOZKUdGlp8xSYhuAkGdSo5Ydkbq4V4eK3sD8v0a2hloxCWdQbNBhkc+Ko9QyjpESc0BYcIGM5iHVAy5hdFV6w==", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@docusaurus/types": "3.10.1", + "@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-client-redirects": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.10.1.tgz", + "integrity": "sha512-LHgd+YDvkhfOHMAE6XtUng3DQNzVM765RqVRrMJgHtzAvfopQhY6ieprqjxDVBdv21cLma6I0jHr+YCZH8fL9A==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.1.tgz", + "integrity": "sha512-mmkgE6Q2+K74tnkou7tXlpDLvoCU/qkSa2GSQ3XUiHWvcebCoDQzS670RR3tO8PmaWlIyWWISYWzZLuMfxunRA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "cheerio": "1.0.0-rc.12", + "combine-promises": "^1.1.0", + "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/@react-native-community/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "peer": true, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.1.tgz", + "integrity": "sha512-2jRVrtzjf8LClGTHQlwlwuD3wQXRx3WEoF7XUarJ8Ou+0onV+SLtejsyfY9JLpfUh9hPhXM4pbBGkyAY4Bi3HQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@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": ">= 4.0.0" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/assets-registry": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.75.3.tgz", - "integrity": "sha512-i7MaRbYR06WdpJWv3a0PQ2ScFBUeevwcJ0tVopnFwTg0tBWp3NFEMDIcU8lyXVy9Y59WmrP1V2ROaRDaPiESgg==", - "peer": true, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.1.tgz", + "integrity": "sha512-huJpaRPMl42nsFwuCXvV8bVDj2MazuwRJIUylI/RSlmZeJssVoZXeCjVf1y+1Drtpa9SKcdGn8yoJ76IRJijtw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "fs-extra": "^11.1.1", + "tslib": "^2.6.0", + "webpack": "^5.88.1" + }, "engines": { - "node": ">=18" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.75.3.tgz", - "integrity": "sha512-8JmXEKq+Efb9AffsV48l8gmKe/ZQ2PbBygZjHdIf8DNZZhO/z5mt27J4B43MWNdp5Ww1l59T0mEaf8l/uywQUg==", - "peer": true, + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.1.tgz", + "integrity": "sha512-r//fn+MNHkE1wCof8T29VAQezt1enGCpsFxoziBbvLgBM4JfXN2P3rxrBaavHmvLvm7lYkpJeitcDthwnmWCTw==", + "license": "MIT", "dependencies": { - "@react-native/codegen": "0.75.3" + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" } }, - "node_modules/@react-native/babel-preset": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.75.3.tgz", - "integrity": "sha512-VZQkQEj36DKEGApXFYdVcFtqdglbnoVr7aOZpjffURSgPcIA9vWTm1b+OL4ayOaRZXTZKiDBNQCXvBX5E5AgQg==", - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.18.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.20.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.20.0", - "@babel/plugin-transform-flow-strip-types": "^7.20.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.20.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "@react-native/babel-plugin-codegen": "0.75.3", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" + "node_modules/@docusaurus/plugin-debug": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.1.tgz", + "integrity": "sha512-9KqOpKNfAyqGZykRb9LhIT/vyRF6sm/ykhjj/39JvaJahDS+jZJE0Z1Wfz9q3DUNDTMNN0Q7u/kk4rKKU+IJuA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^2.3.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" }, "peerDependencies": { - "@babel/core": "*" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/codegen": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.75.3.tgz", - "integrity": "sha512-I0bz5jwOkiR7vnhYLGoV22RGmesErUg03tjsCiQgmsMpbyCYumudEtLNN5+DplHGK56bu8KyzBqKkWXGSKSCZQ==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.20.0", - "glob": "^7.1.1", - "hermes-parser": "0.22.0", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.1.tgz", + "integrity": "sha512-8o0P1KtmgdYQHH+oInitPpRWI0Of5XednAX4+DMhQNSmGSRNrsEEHg1ebv35m9AgRClfAytCJ5jA9KvcASTyuA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" }, "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.75.3.tgz", - "integrity": "sha512-njsYm+jBWzfLcJcxavAY5QFzYTrmPtjbxq/64GSqwcQYzy9qAkI7LNTK/Wprq1I/4HOuHJO7Km+EddCXB+ByRQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-server-api": "14.1.0", - "@react-native-community/cli-tools": "14.1.0", - "@react-native/dev-middleware": "0.75.3", - "@react-native/metro-babel-transformer": "0.75.3", - "chalk": "^4.0.0", - "execa": "^5.1.1", - "metro": "^0.80.3", - "metro-config": "^0.80.3", - "metro-core": "^0.80.3", - "node-fetch": "^2.2.0", - "readline": "^1.3.0" + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.1.tgz", + "integrity": "sha512-pu3xIUo5o/zCMLfUY9BO5KOwSH0zIsAGyFRPvXHayFSA5XIhCU/SFuB0g0ZNjFn9niZLCaNvoeAuOGFJZq0fdw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@types/gtag.js": "^0.0.20", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.75.3.tgz", - "integrity": "sha512-99bLQsUwsxUMNR7Wa9eV2uyR38yfd6mOEqfN+JIm8/L9sKA926oh+CZkjDy1M8RmCB6spB5N9fVFVkrVdf2yFA==", - "peer": true, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.1.tgz", + "integrity": "sha512-f6fyGHiCm7kJHBtAisGQS5oNBnpnMTYQZxDXeVrnw/3zWU+LMA22pr6UHGYkBKDbN+qPC5QHG3NuOfzQLq3+Lw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "tslib": "^2.6.0" + }, "engines": { - "node": ">=18" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.75.3.tgz", - "integrity": "sha512-h2/6+UGmeMWjnT43axy27jNqoDRsE1C1qpjRC3sYpD4g0bI0jSTkY1kAgj8uqGGXLnHXiHOtjLDGdbAgZrsPaA==", - "peer": true, - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.75.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "selfsigned": "^2.4.1", - "serve-static": "^1.13.1", - "ws": "^6.2.2" + "node_modules/@docusaurus/plugin-sitemap": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.1.tgz", + "integrity": "sha512-C26MbmmqgdjkDq1htaZ3aD7LzEDKFWXfpyQpt0EOUThuq5nV77zDaedV20yHcVo9p+3ey9aZ4pbHA0D3QcZTzg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.1.tgz", + "integrity": "sha512-6SFxsmjWFkVLDmBUvFK6i72QjUwqyQFe4Ovz+SUJophJjOyVG3ZZG5IQpBC/kX/Gfv1yWeU9nWauH6F6Q7QX/Q==", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@docusaurus/core": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@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/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/@react-native/dev-middleware/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==", - "peer": true, + "node_modules/@docusaurus/preset-classic": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.1.tgz", + "integrity": "sha512-YO/FL8v1zmbxoTso6mjMz/RDjhaTJxb1UpFFTDdY5847LLDCeyYiYlrhyTbgN1RIN3xnkLKZ9Lj1x8hUzI4JOg==", + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "@docusaurus/core": "3.10.1", + "@docusaurus/plugin-content-blog": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/plugin-content-pages": "3.10.1", + "@docusaurus/plugin-css-cascade-layers": "3.10.1", + "@docusaurus/plugin-debug": "3.10.1", + "@docusaurus/plugin-google-analytics": "3.10.1", + "@docusaurus/plugin-google-gtag": "3.10.1", + "@docusaurus/plugin-google-tag-manager": "3.10.1", + "@docusaurus/plugin-sitemap": "3.10.1", + "@docusaurus/plugin-svgr": "3.10.1", + "@docusaurus/theme-classic": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-search-algolia": "3.10.1", + "@docusaurus/types": "3.10.1" }, "engines": { - "node": ">=8" + "node": ">=20.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "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==", - "peer": true, + "node_modules/@docusaurus/remark-plugin-npm2yarn": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/remark-plugin-npm2yarn/-/remark-plugin-npm2yarn-3.10.1.tgz", + "integrity": "sha512-HNxVv5Y9yx934/WLZBHJC7dYua7DVAHvhMl3hbQuzYGOghClP30Rt3hjZ0tqj/K7KqbSbVN0T4M1rBGk+e3t9A==", + "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.75.3.tgz", - "integrity": "sha512-mSfa/Mq/AsALuG/kvXz5ECrc6HdY5waMHal2sSfa8KA0Gt3JqYQVXF9Pdwd4yR5ClPZDI2HRa1tdE8GVlhMvPA==", - "peer": true, + "mdast-util-mdx": "^3.0.0", + "npm-to-yarn": "^3.0.0", + "tslib": "^2.6.0", + "unified": "^11.0.3", + "unist-util-visit": "^5.0.0" + }, "engines": { - "node": ">=18" + "node": ">=20.0" } }, - "node_modules/@react-native/js-polyfills": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.75.3.tgz", - "integrity": "sha512-+JVFJ351GSJT3V7LuXscMqfnpR/UxzsAjbBjfAHBR3kqTbVqrAmBccqPCA3NLzgb/RY8khLJklwMUVlWrn8iFg==", - "peer": true, + "node_modules/@docusaurus/theme-classic": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.1.tgz", + "integrity": "sha512-VU1RK0qb2pab0si4r7HFK37cYco8VzqLj3u1PspVipSr/z/GPVKHO4/HXbnePqHoWDk8urjyGSeatH0NIMBM1A==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/plugin-content-blog": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/plugin-content-pages": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-translations": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.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": ">=18" + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.75.3.tgz", - "integrity": "sha512-gDlEl6C2mwQPLxFOR+yla5MpJpDPNOFD6J5Hd9JM9+lOdUq6MNujh1Xn4ZMvglW7rfViq3nMjg4xPQeGUhDG+w==", - "peer": true, - "dependencies": { - "@babel/core": "^7.20.0", - "@react-native/babel-preset": "0.75.3", - "hermes-parser": "0.22.0", - "nullthrows": "^1.1.1" + "node_modules/@docusaurus/theme-common": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.1.tgz", + "integrity": "sha512-0YtmIeoNo1fIw65LO8+/1dPgmDV86UmhMkow37gzjytuiCSQm9xob6PJy0L4kuQEMTLfUOGvkXvZr7GPrHquMA==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "@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": ">=18" + "node": ">=20.0" }, "peerDependencies": { - "@babel/core": "*" + "@docusaurus/plugin-content-docs": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@react-native/normalize-colors": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.75.3.tgz", - "integrity": "sha512-3mhF8AJFfIN0E5bEs/DQ4U2LzMJYm+FPSwY5bJ1DZhrxW1PFAh24bAPrSd8PwS0iarQ7biLdr1lWf/8LFv8pDA==", - "peer": true - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.75.3.tgz", - "integrity": "sha512-cTLm7k7Y//SvV8UK8esrDHEw5OrwwSJ4Fqc3x52Imi6ROuhshfGIPFwhtn4pmAg9nWHzHwwqiJ+9hCSVnXXX+g==", - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" + "node_modules/@docusaurus/theme-mermaid": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.1.tgz", + "integrity": "sha512-2gxpmln8Pc4EN1oWzshQEx2HTs67jk14v7MmgqGs8ZU7Nm8oihg+fTouof2u4vN8DtB3Fln4cDJu4UprSX1S3Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.1", + "@docusaurus/module-type-aliases": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "mermaid": ">=11.6.0", + "tslib": "^2.6.0" }, "engines": { - "node": ">=18" + "node": ">=20.0" }, "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" + "@mermaid-js/layout-elk": "^0.1.9", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { - "@types/react": { + "@mermaid-js/layout-elk": { "optional": true } } }, - "node_modules/@react-types/checkbox": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.3.tgz", - "integrity": "sha512-f4c1mnLEt0iS1NMkyZXgT3q3AgcxzDk7w6MSONOKydcnh0xG5L2oefY14DhVDLkAuQS7jThlUFwiAs+MxiO3MA==", - "dependencies": { - "@react-types/shared": "^3.24.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@react-types/shared": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.24.1.tgz", - "integrity": "sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@rehooks/component-size": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@rehooks/component-size/-/component-size-1.0.3.tgz", - "integrity": "sha512-pnYld+8SSF2vXwdLOqBGUyOrv/SjzwLjIUcs/4c1JJgR0q4E9eBtBfuZMD6zUD51fvSehSsbnlQMzotSmPTXPg==", - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/@rjsf/core": { - "version": "5.21.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.21.1.tgz", - "integrity": "sha512-qURYyhL5RO8S8mkBKFL506mzc20ywJiIQbByozUYudAc25TL7ebxskwscdwhMnuzqQbMjBBimvHJGjcwzfIVxQ==", - "dependencies": { + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.1.tgz", + "integrity": "sha512-OTaARARVZj2GvkJQjB+1jOIxntRaXea+G+fMsNqrZBAU1O1vJKDW22R7kECOHW27oJCLFN9HKaZeRrfAUyviug==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "^1.19.2", + "@docsearch/react": "^3.9.0 || ^4.3.2", + "@docusaurus/core": "3.10.1", + "@docusaurus/logger": "3.10.1", + "@docusaurus/plugin-content-docs": "3.10.1", + "@docusaurus/theme-common": "3.10.1", + "@docusaurus/theme-translations": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-validation": "3.10.1", + "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", - "lodash-es": "^4.17.21", - "markdown-to-jsx": "^7.4.1", - "nanoid": "^3.3.7", - "prop-types": "^15.8.1" + "tslib": "^2.6.0", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=14" + "node": ">=20.0" }, "peerDependencies": { - "@rjsf/utils": "^5.20.x", - "react": "^16.14.0 || >=17" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@rjsf/utils": { - "version": "5.21.1", - "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.21.1.tgz", - "integrity": "sha512-KEwEtIswzKE2WTLRxvh5vwMwvNMTHnRSxwaRlz3QKz5/iQr9XGJTWcmArjIN3y0ypfLk+X6qZsboamQBIhTV3w==", + "node_modules/@docusaurus/theme-translations": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.1.tgz", + "integrity": "sha512-cLMyaKivjBVWKMJuWqyFVVgtqe8DPJNPkog0bn8W1MDVAKcPdxRFycBfC1We1RaNp7Rdk513bmtW78RR6OBxBw==", + "license": "MIT", "dependencies": { - "json-schema-merge-allof": "^0.8.1", - "jsonpointer": "^5.0.1", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-is": "^18.2.0" + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.14.0 || >=17" + "node": ">=20.0" } }, - "node_modules/@rjsf/validator-ajv8": { - "version": "5.21.1", - "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.21.1.tgz", - "integrity": "sha512-wR8sSQCnHQT51JzGZMsJfYednOKs3nahnpInkkZmJrK+FvlWkfMfB2QOl8ZgTrKX3egde3362QtBp9QCKEXYxg==", + "node_modules/@docusaurus/tsconfig": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.1.tgz", + "integrity": "sha512-rYvB7yqkdqWIpAbDzQljGfM4cDBkLTbhmagZBEcsyj6oPUsz47lmW2pYdN1j+7sGFgltbAmQH62xfbrij4Eh6Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docusaurus/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz", + "integrity": "sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw==", + "license": "MIT", "dependencies": { - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21" - }, - "engines": { - "node": ">=14" + "@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": { - "@rjsf/utils": "^5.20.x" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@rjsf/validator-ajv8/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/@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": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@rjsf/validator-ajv8/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==" - }, - "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==", - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "node_modules/@docusaurus/utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.1.tgz", + "integrity": "sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/types": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "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" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=20.0" } }, - "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/@docusaurus/utils-common": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.1.tgz", + "integrity": "sha512-5mFSgEADtnFxFH7RLw02QA5MpU5JVUCj0MPeIvi/aF4Fi45tQRIuTwXoXDqJ+1VfQJuYJGz3SI63wmGz4HvXzA==", + "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "@docusaurus/types": "3.10.1", + "tslib": "^2.6.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==", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=20.0" } }, - "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==", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "node_modules/@docusaurus/utils-validation": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.1.tgz", + "integrity": "sha512-cRv1X69jwaWv47waglllgZVWzeBFLhl53XT/XED/83BerVBTC5FTP8WTcVl8Z6sZOegDSwitu/wpCSPCDOT6lg==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.10.1", + "@docusaurus/utils": "3.10.1", + "@docusaurus/utils-common": "3.10.1", + "fs-extra": "^11.2.0", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.6.0" }, - "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==", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=20.0" } }, - "node_modules/@segment/snippet": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@segment/snippet/-/snippet-4.16.2.tgz", - "integrity": "sha512-2fgsrt4U+vKv14ohOAsViCEzeZotaawF2Il7YUbmYVrhPn8Hq7xuGznHKRdZeoxScQ87X36xDX2Fzh5bAYRN7g==", + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "license": "MIT", "dependencies": { - "@ndhoule/map": "^2.0.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.2.0", + "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/@sentry-internal/browser-utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.32.0.tgz", - "integrity": "sha512-DpUGhk5O1OVjT0fo9wsbEdO1R/S9gGBRDtn9+FFVeRtieJHwXpeZiLK+tZhTOvaILmtSoTPUEY3L5sK4j5Xq9g==", - "dependencies": { - "@sentry/core": "8.32.0", - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" - }, - "engines": { - "node": ">=14.18" - } + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" }, - "node_modules/@sentry-internal/feedback": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.32.0.tgz", - "integrity": "sha512-XB7hiVJQW1tNzpoXIHbvm3rjipIt7PZiJJtFg2vxaqu/FzdgOcYqQiwIKivJVAKuRZ9rIeJtK1jdXQFOc/TRJA==", - "dependencies": { - "@sentry/core": "8.32.0", - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" - }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", "engines": { - "node": ">=14.18" + "node": ">=0.10.0" } }, - "node_modules/@sentry-internal/replay": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.32.0.tgz", - "integrity": "sha512-yiEUnn2yyo1AIQIFNeRX3tdK8fmyKIkxdFS1WiVQmeYI/hFwYBTZPly0FcO/g3xnRMSA2tvrS+hZEaaXfK4WhA==", - "dependencies": { - "@sentry-internal/browser-utils": "8.32.0", - "@sentry/core": "8.32.0", - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" - }, - "engines": { - "node": ">=14.18" - } + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "license": "MIT" }, - "node_modules/@sentry-internal/replay-canvas": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.32.0.tgz", - "integrity": "sha512-oBbhtDBkD+5z/T0NVJ5VenBWAid/S9QdVrod/UqxVqU7F8N+E9/INFQI48zCWr4iVlUMcszJPDElvJEsMDvvBQ==", + "node_modules/@emotion/cache": { + "version": "11.13.1", + "license": "MIT", "dependencies": { - "@sentry-internal/replay": "8.32.0", - "@sentry/core": "8.32.0", - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" - }, - "engines": { - "node": ">=14.18" + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" } }, - "node_modules/@sentry/browser": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.32.0.tgz", - "integrity": "sha512-AEKFj64g4iYwEMRvVcxiY0FswmClRXCP1IEvCqujn8OBS8AjMOr1z/RwYieEs0D90yNNB3YEqF8adrKENblJmw==", + "node_modules/@emotion/cache/node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.11.0", + "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.32.0", - "@sentry-internal/feedback": "8.32.0", - "@sentry-internal/replay": "8.32.0", - "@sentry-internal/replay-canvas": "8.32.0", - "@sentry/core": "8.32.0", - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" }, - "engines": { - "node": ">=14.18" + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sentry/core": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.32.0.tgz", - "integrity": "sha512-+xidTr0lZ0c755tq4k75dXPEb8PA+qvIefW3U9+dQMORLokBrYoKYMf5zZTG2k/OfSJS6OSxatUj36NFuCs3aA==", + "node_modules/@emotion/serialize": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "license": "MIT", "dependencies": { - "@sentry/types": "8.32.0", - "@sentry/utils": "8.32.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" }, - "engines": { - "node": ">=14.18" + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "node_modules/@emotion/utils": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "license": "MIT" + }, + "node_modules/@endo/env-options": { + "version": "1.1.8", + "license": "Apache-2.0" + }, + "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", "dependencies": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=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/@sentry/hub/node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@sentry/hub/node_modules/@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "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==" + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/@sentry/minimal/node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "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==" - }, - "node_modules/@sentry/react": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-6.19.7.tgz", - "integrity": "sha512-VzJeBg/v41jfxUYPkH2WYrKjWc4YiMLzDX0f4Zf6WkJ4v3IlDDSkX6DfmWekjTKBho6wiMkSNy2hJ1dHfGZ9jA==", + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/browser": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "hoist-non-react-statics": "^3.3.2", - "tslib": "^1.9.3" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=6" - }, - "peerDependencies": { - "react": "15.x || 16.x || 17.x || 18.x" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@sentry/react/node_modules/@sentry/browser": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.7.tgz", - "integrity": "sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" + "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": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@sentry/react/node_modules/@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@sentry/react/node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "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": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry/react/node_modules/@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", "dependencies": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/@sentry/react/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/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } }, - "node_modules/@sentry/types": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.32.0.tgz", - "integrity": "sha512-hxckvN2MzS5SgGDgVQ0/QpZXk13Vrq4BtZLwXhPhyeTmZtUiUfWvcL5TFQqLinfKdTKPe9q2MxeAJ0D4LalhMg==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=14.18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@sentry/utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.32.0.tgz", - "integrity": "sha512-t1WVERhgmYURxbBj9J4/H2P2X+VKqm7B3ce9iQyrZbdf5NekhcU4jHIecPUWCPHjQkFIqkVTorqeBmDTlg/UmQ==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "8.32.0" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" }, "engines": { - "node": ">=14.18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "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==", + "node_modules/@ethereumjs/common": { + "version": "3.2.0", + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.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==" - }, - "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==" - }, - "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/@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==", - "engines": { - "node": ">=10" + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "engines": { + "node": ">=14" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "peer": true, + "node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "license": "MPL-2.0", "dependencies": { - "type-detect": "4.0.8" + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" } }, - "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==", - "peer": true, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", "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==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" - }, - "node_modules/@spruceid/siwe-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.1.0.tgz", - "integrity": "sha512-tFQwY2oQLa4qvHE6npKsVgVdVLQOCGP1zJM3yjZOHut43LqCwdSwitZndFLrJHZLpqru9FnmYHRakvsPvrI+qA==", + "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": { - "@noble/hashes": "^1.1.2", - "apg-js": "^4.1.1", - "uri-js": "^4.4.1", - "valid-url": "^1.0.9" + "@floating-ui/utils": "^0.2.10" } }, - "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/@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": { - "@stablelib/int": "^1.0.1" + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" } }, - "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==" - }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^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==", + "license": "MIT" }, - "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==" - }, - "node_modules/@stoplight/json": { - "version": "3.21.7", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.7.tgz", - "integrity": "sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==", - "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - }, - "engines": { - "node": ">=8.3.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/@stoplight/json-schema-merge-allof": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.8.0.tgz", - "integrity": "sha512-g8e0s43v96Xbzvd8d6KKUuJTO16CS2oJglJrviUi8ASIUxzFvAJqTHWLtGmpTryisQopqg1evXGJfi0+164+Qw==", + "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": { - "compute-lcm": "^1.1.0", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@stoplight/json-schema-tree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-4.0.0.tgz", - "integrity": "sha512-SAGtof+ihIdPqETR+7XXOaqZJcrbSih/xEahaw5t1nXk5sVW6ss2l5A1WCIuvtvnQiUKnBfanmZU4eoM1ZvItg==", - "dependencies": { - "@stoplight/json": "^3.12.0", - "@stoplight/json-schema-merge-allof": "^0.8.0", - "@stoplight/lifecycle": "^2.3.2", - "@types/json-schema": "^7.0.7", - "magic-error": "0.0.1" - }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=10.18" + "node": ">=18.18.0" } }, - "node_modules/@stoplight/json-schema-viewer": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.16.1.tgz", - "integrity": "sha512-gQ1v9/Dj1VP43zERuZoFMOr7RQDBZlgfF7QFh+R0sadP6W30oYFJtD7y2PG2gIQDohKElVuPjhFUbVH/81MnSg==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@stoplight/json": "^3.20.1", - "@stoplight/json-schema-tree": "^4.0.0", - "@stoplight/react-error-boundary": "^2.0.0", - "@types/json-schema": "^7.0.7", - "classnames": "^2.2.6", - "fnv-plus": "^1.3.1", - "jotai": "^1.4.5", - "lodash": "^4.17.19" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "@stoplight/markdown-viewer": "^5", - "@stoplight/mosaic": "^1.32", - "@stoplight/mosaic-code-viewer": "^1.32", - "react": ">=16.8", - "react-dom": ">=16.8" + "node": ">=18.18.0" } }, - "node_modules/@stoplight/lifecycle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@stoplight/lifecycle/-/lifecycle-2.3.3.tgz", - "integrity": "sha512-JbPRTIzPZabeYPAk5+gdsnfwAxqW35G9e0ZjOG3toUmNViLOsEzuK4vpWd+Prv2Mw8HRmu+haiYizteZp6mk0w==", - "dependencies": { - "tslib": "^2.3.1", - "wolfy87-eventemitter": "~5.2.8" - }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/@stoplight/markdown": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@stoplight/markdown/-/markdown-3.2.0.tgz", - "integrity": "sha512-Hhnrj7xb+f4iMQQeZBKLgfst3OJyV8T4BKr8BSYnKpp070B6fE63V/lkPuKqrpvidcv6kz3INDBU/GE7K2Q0uw==", - "dependencies": { - "@stoplight/types": "^12.3.0", - "@stoplight/yaml": "^4.2.2", - "github-slugger": "^1.3.0", - "hast-util-whitespace": "^2.0.0", - "lodash": "^4.17.21", - "mdast-util-to-string": "^3.1.0", - "remark-frontmatter": "^3.0.0", - "remark-gfm": "^1.0.0", - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.1", - "tslib": "^2.3.0", - "unified": "^9.2.1", - "unist-util-select": "^4.0.0", - "unist-util-visit": "^3.1.0" + "node": ">=18.18" }, - "engines": { - "node": ">=12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stoplight/markdown-viewer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@stoplight/markdown-viewer/-/markdown-viewer-5.7.1.tgz", - "integrity": "sha512-EiJC0w/l+Juc49fVCBOEOOg/NdCWDC8o1lS7d6P5skHS5G+hw1c3GNlCZ2BSqs8z8kkmSzSDWo5XY1S16NVJbQ==", - "dependencies": { - "@rehooks/component-size": "^1.0.3", - "@stoplight/markdown": "^3.1.3", - "@stoplight/react-error-boundary": "^2.0.0", - "deepmerge": "^4.2.2", - "hast-to-hyperscript": "^10.0.1", - "hast-util-raw": "7.0.0", - "hast-util-sanitize": "^4.0.0", - "hastscript": "^7.0.2", - "mdast-util-to-hast": "^11.1.1", - "remark-parse": "^9.0.0", - "unified": "^9.2.1", - "unist-builder": "^3.0.0", - "unist-util-select": "^4.0.1", - "unist-util-visit": "^3.1.0" - }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=12.22" }, - "peerDependencies": { - "@stoplight/mosaic": "^1.24.4", - "@stoplight/mosaic-code-viewer": "^1.24.4", - "react": ">=16.14", - "react-dom": ">=16.14" - } - }, - "node_modules/@stoplight/markdown-viewer/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==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@stoplight/markdown-viewer/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==" - }, - "node_modules/@stoplight/markdown-viewer/node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stoplight/markdown-viewer/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/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@stoplight/markdown-viewer/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "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/@stoplight/markdown-viewer/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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/@stoplight/markdown-viewer/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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, + "engines": { + "node": ">=12" } }, - "node_modules/@stoplight/markdown-viewer/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/@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", + "peer": true, "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@stoplight/markdown-viewer/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@istanbuljs/load-nyc-config/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", + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/@stoplight/markdown-viewer/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/@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", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/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/@istanbuljs/load-nyc-config/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", + "peer": true, "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" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@stoplight/markdown-viewer/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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@stoplight/markdown-viewer/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/@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", + "peer": true, "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/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/@istanbuljs/load-nyc-config/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", + "peer": true, "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" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "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", + "peer": true, "dependencies": { - "mdast-util-from-markdown": "^0.8.0" + "p-limit": "^2.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "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", + "peer": true, "dependencies": { - "@types/unist": "^2.0.0" + "@jest/types": "^29.6.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown-viewer/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", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "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", + "peer": true, "dependencies": { - "@types/unist": "^2.0.2" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", + "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", + "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "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": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/@jest/transform/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": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@stoplight/markdown/node_modules/@stoplight/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", - "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", + "node_modules/@jest/types": { + "version": "29.6.3", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@stoplight/markdown/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/@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": { - "@types/unist": "^2" - } - }, - "node_modules/@stoplight/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==" - }, - "node_modules/@stoplight/markdown/node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@stoplight/markdown/node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@stoplight/markdown/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@stoplight/markdown/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@stoplight/markdown/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT" }, - "node_modules/@stoplight/markdown/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@stoplight/markdown/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==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "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/wooorm" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/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/@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/wooorm" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/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/@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/wooorm" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/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/@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": ">=8" - } - }, - "node_modules/@stoplight/markdown/node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "node": ">=10.0" + }, "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/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==", + "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": { - "repeat-string": "^1.0.0" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "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": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@stoplight/markdown/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/@keystonehq/alias-sampling": { + "version": "0.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/@keystonehq/base-eth-keyring": { + "version": "0.14.1", + "license": "MIT", + "peer": true, "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@ethereumjs/tx": "^4.0.2", + "@ethereumjs/util": "^8.0.0", + "@keystonehq/bc-ur-registry-eth": "^0.19.1", + "hdkey": "^2.0.1", + "rlp": "^3.0.0", + "uuid": "^8.3.2" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-from-markdown/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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@keystonehq/base-eth-keyring/node_modules/rlp": { + "version": "3.0.0", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "node_modules/@keystonehq/bc-ur-registry": { + "version": "0.6.4", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "micromark-extension-frontmatter": "^0.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@ngraveio/bc-ur": "^1.1.5", + "bs58check": "^2.1.2", + "tslib": "^2.3.0" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "node_modules/@keystonehq/bc-ur-registry-eth": { + "version": "0.19.1", + "license": "ISC", + "peer": true, "dependencies": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@ethereumjs/util": "^8.0.0", + "@keystonehq/bc-ur-registry": "^0.6.0", + "hdkey": "^2.0.1", + "uuid": "^8.3.2" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "node_modules/@keystonehq/metamask-airgapped-keyring": { + "version": "0.14.1", + "license": "MIT", + "peer": true, "dependencies": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@ethereumjs/tx": "^4.0.2", + "@keystonehq/base-eth-keyring": "^0.14.1", + "@keystonehq/bc-ur-registry-eth": "^0.19.1", + "@metamask/obs-store": "^9.0.0", + "rlp": "^2.2.6", + "uuid": "^8.3.2" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "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/@stoplight/markdown/node_modules/mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "node_modules/@lottiefiles/react-lottie-player": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/react-lottie-player/-/react-lottie-player-3.6.0.tgz", + "integrity": "sha512-WK5TriLJT93VF3w4IjSVyveiedraZCnDhKzCPhpbeLgQeMi6zufxa3dXNc4HmAFRXq+LULPAy+Idv1rAfkReMA==", + "license": "MIT", "dependencies": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" + "lottie-web": "^5.12.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "16 - 19" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "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": { - "mdast-util-to-markdown": "~0.6.0" + "@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/@stoplight/markdown/node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "node_modules/@mdx-js/react": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" + "@types/mdx": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" } }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-to-markdown/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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@stoplight/markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/@mermaid-js/layout-elk": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@mermaid-js/layout-elk/-/layout-elk-0.1.9.tgz", + "integrity": "sha512-HuvaqFZBr6yT9PpWYockvKAZPJVd89yn/UjOYPxhzbZxlybL2v+2BjVCg7MVH6vRs1irUohb/s42HEdec1CCZw==", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "d3": "^7.9.0", + "elkjs": "^0.9.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "mermaid": "^11.0.2" } }, - "node_modules/@stoplight/markdown/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/@mermaid-js/parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.0.1.tgz", + "integrity": "sha512-opmV19kN1JsK0T6HhhokHpcVkqKpF+x2pPDKKM2ThHtZAB5F4PROopk0amuVYK5qMrIA4erzpNm8gmPNJgMDxQ==", + "license": "MIT", "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" + "langium": "^4.0.0" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "node_modules/@metamask/abi-utils": { + "version": "2.0.4", + "license": "(Apache-2.0 AND MIT)", "dependencies": { - "fault": "^1.0.0" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^9.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "node_modules/@metamask/accounts-controller": { + "version": "30.0.0", + "license": "MIT", + "peer": true, "dependencies": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" + "@ethereumjs/util": "^9.1.0", + "@metamask/base-controller": "^8.0.1", + "@metamask/eth-snap-keyring": "^13.0.0", + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-internal-api": "^6.2.0", + "@metamask/keyring-utils": "^3.0.0", + "@metamask/snaps-sdk": "^7.1.0", + "@metamask/snaps-utils": "^9.4.0", + "@metamask/utils": "^11.2.0", + "deepmerge": "^4.2.2", + "ethereum-cryptography": "^2.1.2", + "immer": "^9.0.6", + "uuid": "^8.3.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || >=20" + }, + "peerDependencies": { + "@metamask/keyring-controller": "^22.0.0", + "@metamask/network-controller": "^23.0.0", + "@metamask/providers": "^22.0.0", + "@metamask/snaps-controllers": "^12.0.0", + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "dependencies": { - "micromark": "~2.11.3" + "node_modules/@metamask/accounts-controller/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "node_modules/@metamask/accounts-controller/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "micromark": "~2.11.0" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "node_modules/@metamask/accounts-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "micromark": "~2.11.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@metamask/accounts-controller/node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/markdown/node_modules/micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "node_modules/@metamask/approval-controller": { + "version": "7.1.3", + "license": "MIT", + "peer": true, "dependencies": { - "micromark": "~2.11.0" + "@metamask/base-controller": "^8.0.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/utils": "^11.1.0", + "nanoid": "^3.3.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@stoplight/markdown/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/@metamask/approval-controller/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, "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" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@stoplight/markdown/node_modules/remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "node_modules/@metamask/approval-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/markdown/node_modules/remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "dependencies": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@metamask/approval-controller/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/markdown/node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "node_modules/@metamask/base-controller": { + "version": "8.0.1", + "license": "MIT", "dependencies": { - "mdast-util-from-markdown": "^0.8.0" + "@metamask/utils": "^11.2.0", + "immer": "^9.0.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@stoplight/markdown/node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@stoplight/markdown/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "node_modules/@metamask/base-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/markdown/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@metamask/base-controller/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/markdown/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", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "node_modules/@metamask/browser-passworder": { + "version": "4.3.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/unist": "^2.0.2" + "@metamask/utils": "^8.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@stoplight/markdown/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", + "node_modules/@metamask/browser-passworder/node_modules/@metamask/utils": { + "version": "8.5.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@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/@stoplight/markdown/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/@metamask/browser-passworder/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/markdown/node_modules/unist-util-visit/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/@metamask/controller-utils": { + "version": "11.9.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@ethereumjs/util": "^9.1.0", + "@metamask/eth-query": "^4.0.0", + "@metamask/ethjs-unit": "^0.3.0", + "@metamask/utils": "^11.2.0", + "@spruceid/siwe-parser": "2.1.0", + "@types/bn.js": "^5.1.5", + "bignumber.js": "^9.1.2", + "bn.js": "^5.2.1", + "cockatiel": "^3.1.2", + "eth-ens-namehash": "^2.0.8", + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || >=20" + }, + "peerDependencies": { + "@babel/runtime": "^7.0.0" } }, - "node_modules/@stoplight/markdown/node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "node_modules/@metamask/controller-utils/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/markdown/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "node_modules/@metamask/controller-utils/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/markdown/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/@metamask/controller-utils/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/markdown/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@metamask/controller-utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/mosaic": { - "version": "1.53.4", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.53.4.tgz", - "integrity": "sha512-k3D9B2bM/Ko7ibKKWxJuhomHCOAxooPNPZNX0aY+3kTmQf7tJL+70iwcwD7TbrMyOj7L8SzJPRpJ9fcM8LaDNA==", - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@react-hook/size": "^2.1.1", - "@react-hook/window-size": "^3.0.7", - "@react-types/button": "3.4.1", - "@react-types/radio": "3.1.2", - "@react-types/shared": "3.9.0", - "@react-types/switch": "3.1.2", - "@react-types/textfield": "3.3.0", - "@stoplight/types": "^13.7.0", - "@types/react": "^17.0.3", - "@types/react-dom": "^17.0.3", - "clsx": "^1.1.1", - "copy-to-clipboard": "^3.3.1", - "dom-helpers": "^3.3.1", - "lodash.get": "^4.4.2", - "nano-memoize": "^1.2.1", - "polished": "^4.1.3", - "react-fast-compare": "^3.2.0", - "react-overflow-list": "^0.5.0", - "ts-keycode-enum": "^1.0.6", - "tslib": "^2.1.0", - "use-resize-observer": "^9.0.2", - "zustand": "^3.5.2" - }, - "peerDependencies": { - "react": ">= 16.14" - } - }, - "node_modules/@stoplight/mosaic-code-viewer": { - "version": "1.53.4", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.53.4.tgz", - "integrity": "sha512-RZEZ7+UodFQtuuVHyCONg/8wNDlFCuDz0knneGrDaQ1vDa3ddePPjBQnpqVFY0ndXqoaxZTuQu4GvcC8wKdk0Q==", - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.2.0", - "@react-hook/size": "^2.1.1", - "@react-hook/window-size": "^3.0.7", - "@react-types/radio": "3.1.2", - "@react-types/shared": "3.9.0", - "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.53.4", - "@stoplight/types": "^13.7.0", - "clsx": "^1.1.1", - "copy-to-clipboard": "^3.3.1", - "dom-helpers": "^3.3.1", - "lodash.get": "^4.4.2", - "nano-memoize": "^1.2.1", - "polished": "^4.1.3", - "prism-react-renderer": "^1.2.1", - "prismjs": "^1.23.0", - "react-fast-compare": "^3.2.0", - "react-overflow-list": "^0.5.0", - "ts-keycode-enum": "^1.0.6", - "tslib": "^2.1.0", - "use-resize-observer": "^9.0.2", - "zustand": "^3.5.2" - }, - "peerDependencies": { - "react": ">= 16.14" + "node_modules/@metamask/design-tokens": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@stoplight/mosaic-code-viewer/node_modules/@react-types/radio": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.1.2.tgz", - "integrity": "sha512-vkIic8abrVUyl/YjKU3yTVwn8QgebzuadfV89PsaKc3hdmSiHhDsln5wYsfWOEotqMwPrG1aEv9yRMYO78OQXQ==", + "node_modules/@metamask/error-reporting-service": { + "version": "1.0.0", + "license": "MIT", + "peer": true, "dependencies": { - "@react-types/shared": "^3.8.0" + "@metamask/base-controller": "^8.0.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@stoplight/mosaic-code-viewer/node_modules/@react-types/shared": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.9.0.tgz", - "integrity": "sha512-YYksINfR6q92P10AhPEGo47Hd7oz1hrnZ6Vx8Gsrq62IbqDdv1XOTzPBaj17Z1ymNY2pitLUSEXsLmozt4wxxQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "node_modules/@metamask/eth-block-tracker": { + "version": "12.0.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@metamask/eth-json-rpc-provider": "^4.1.5", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^11.0.1", + "json-rpc-random-id": "^1.0.1", + "pify": "^5.0.0" + }, + "engines": { + "node": "^18.16 || ^20 || >=22" } }, - "node_modules/@stoplight/mosaic-code-viewer/node_modules/@react-types/switch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.1.2.tgz", - "integrity": "sha512-EaYWoLvUCpOnt//Ov8VBxOjbs4hBpYE/rBAzzIknXaFvKOu867iZBFL7FJbcemOgC8/dwyaj6GUZ1Gw3Z1g59w==", + "node_modules/@metamask/eth-block-tracker/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@react-types/checkbox": "^3.2.3", - "@react-types/shared": "^3.8.0" + "@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" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/mosaic-code-viewer/node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "peerDependencies": { - "react": ">=0.14.9" + "node_modules/@metamask/eth-block-tracker/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/mosaic/node_modules/@react-types/button": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.4.1.tgz", - "integrity": "sha512-B54M84LxdEppwjXNlkBEJyMfe9fd+bvFV7R6+NJvupGrZm/LuFNYjFcHk7yjMKWTdWm6DbpIuQz54n5qTW7Vlg==", + "node_modules/@metamask/eth-hd-keyring": { + "version": "12.1.0", + "license": "ISC", + "peer": true, "dependencies": { - "@react-types/shared": "^3.8.0" + "@ethereumjs/util": "^9.1.0", + "@metamask/eth-sig-util": "^8.2.0", + "@metamask/key-tree": "^10.0.2", + "@metamask/scure-bip39": "^2.1.1", + "@metamask/utils": "^11.1.0", + "ethereum-cryptography": "^2.1.2" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@stoplight/mosaic/node_modules/@react-types/radio": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.1.2.tgz", - "integrity": "sha512-vkIic8abrVUyl/YjKU3yTVwn8QgebzuadfV89PsaKc3hdmSiHhDsln5wYsfWOEotqMwPrG1aEv9yRMYO78OQXQ==", + "node_modules/@metamask/eth-hd-keyring/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@react-types/shared": "^3.8.0" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/mosaic/node_modules/@react-types/shared": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.9.0.tgz", - "integrity": "sha512-YYksINfR6q92P10AhPEGo47Hd7oz1hrnZ6Vx8Gsrq62IbqDdv1XOTzPBaj17Z1ymNY2pitLUSEXsLmozt4wxxQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "node_modules/@metamask/eth-hd-keyring/node_modules/@ethereumjs/util/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@stoplight/mosaic/node_modules/@react-types/switch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.1.2.tgz", - "integrity": "sha512-EaYWoLvUCpOnt//Ov8VBxOjbs4hBpYE/rBAzzIknXaFvKOu867iZBFL7FJbcemOgC8/dwyaj6GUZ1Gw3Z1g59w==", + "node_modules/@metamask/eth-hd-keyring/node_modules/@metamask/abi-utils": { + "version": "3.0.0", + "license": "(Apache-2.0 AND MIT)", + "peer": true, "dependencies": { - "@react-types/checkbox": "^3.2.3", - "@react-types/shared": "^3.8.0" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/mosaic/node_modules/@react-types/textfield": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.3.0.tgz", - "integrity": "sha512-lOf0tx3c3dVaomH/uvKpOKFVTXQ232kLnMhOJTtj97JDX7fTr3SNhDUV0G8Zf4M0vr+l+xkTrJkywYE23rzliw==", + "node_modules/@metamask/eth-hd-keyring/node_modules/@metamask/eth-sig-util": { + "version": "8.2.0", + "license": "ISC", + "peer": true, "dependencies": { - "@react-types/shared": "^3.9.0" + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^3.0.0", + "@metamask/utils": "^11.0.1", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/mosaic/node_modules/@types/react": { - "version": "17.0.82", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.82.tgz", - "integrity": "sha512-wTW8Lu/PARGPFE8tOZqCvprOKg5sen/2uS03yKn2xbCDFP9oLncm7vMDQ2+dEQXHVIXrOpW6u72xUXEXO0ypSw==", + "node_modules/@metamask/eth-hd-keyring/node_modules/@metamask/eth-sig-util/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.5.tgz", - "integrity": "sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==", + "node_modules/@metamask/eth-hd-keyring/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, + "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": ">=8" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/path": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==", - "engines": { - "node": ">=8" + "node_modules/@metamask/eth-hd-keyring/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@stoplight/react-error-boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-2.0.0.tgz", - "integrity": "sha512-r9cyaaH2h0kFe5c0aP+yJuY9CyXgfbBaMO6660M/wRQXqM49K5Ul7kexE4ei2cqYgo+Cd6ALl6RXSZFYwf2kCA==", + "node_modules/@metamask/eth-json-rpc-infura": { + "version": "10.2.0", + "license": "ISC", + "peer": true, "dependencies": { - "@sentry/react": "^6.13.2" + "@metamask/eth-json-rpc-provider": "^4.1.7", + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/utils": "^11.0.1" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/types": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", - "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", + "node_modules/@metamask/eth-json-rpc-infura/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, "engines": { - "node": "^12.20 || >=14.13" + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@stoplight/yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.3.0.tgz", - "integrity": "sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==", + "node_modules/@metamask/eth-json-rpc-infura/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.5", - "@stoplight/types": "^14.1.1", - "@stoplight/yaml-ast-parser": "0.0.50", - "tslib": "^2.2.0" + "@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": ">=10.8" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@stoplight/yaml-ast-parser": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.50.tgz", - "integrity": "sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==" + "node_modules/@metamask/eth-json-rpc-infura/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.1.tgz", - "integrity": "sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==", + "node_modules/@metamask/eth-json-rpc-middleware": { + "version": "17.0.1", + "license": "ISC", + "peer": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@metamask/eth-block-tracker": "^12.0.0", + "@metamask/eth-json-rpc-provider": "^4.1.7", + "@metamask/eth-sig-util": "^8.1.2", + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.1.0", + "@types/bn.js": "^5.1.5", + "bn.js": "^5.2.1", + "klona": "^2.0.6", + "pify": "^5.0.0", + "safe-stable-stringify": "^2.4.3" }, "engines": { - "node": "^12.20 || >=14.13" + "node": "^18.16 || ^20 || >=22" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@metamask/eth-json-rpc-middleware/node_modules/@metamask/abi-utils": { + "version": "3.0.0", + "license": "(Apache-2.0 AND MIT)", + "peer": true, + "dependencies": { + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1" }, - "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==", "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@metamask/eth-json-rpc-middleware/node_modules/@metamask/eth-sig-util": { + "version": "8.2.0", + "license": "ISC", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^3.0.0", + "@metamask/utils": "^11.0.1", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" }, - "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==", "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@metamask/eth-json-rpc-middleware/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@metamask/eth-json-rpc-middleware/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, + "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" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@metamask/eth-json-rpc-middleware/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "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==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@metamask/eth-json-rpc-provider": { + "version": "4.1.8", + "license": "ISC", + "peer": true, + "dependencies": { + "@metamask/json-rpc-engine": "^10.0.3", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^11.1.0", + "uuid": "^8.3.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^18.18 || >=20" } }, - "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==", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, "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" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^18.20 || ^20.17 || >=22" } }, - "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==", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "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" + "@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": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", + "node_modules/@metamask/eth-json-rpc-provider/node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/eth-query": { + "version": "4.0.0", + "license": "ISC", "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=16.0.0" } }, - "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==", + "node_modules/@metamask/eth-sig-util": { + "version": "7.0.3", + "license": "ISC", "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" + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^2.0.4", + "@metamask/utils": "^9.0.0", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "node": "^16.20 || ^18.16 || >=20" } }, - "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==", + "node_modules/@metamask/eth-simple-keyring": { + "version": "10.0.0", + "peer": true, "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" + "@ethereumjs/util": "^9.1.0", + "@metamask/eth-sig-util": "^8.2.0", + "@metamask/utils": "^11.1.0", + "ethereum-cryptography": "^2.1.2", + "randombytes": "^2.1.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" + "node": "^18.18 || >=20" } }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", + "node_modules/@metamask/eth-simple-keyring/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "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" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/@metamask/eth-simple-keyring/node_modules/@ethereumjs/util/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "engines": { + "node": ">=18" } }, - "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==", + "node_modules/@metamask/eth-simple-keyring/node_modules/@metamask/abi-utils": { + "version": "3.0.0", + "license": "(Apache-2.0 AND MIT)", + "peer": true, "dependencies": { - "defer-to-connect": "^2.0.1" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1" }, "engines": { - "node": ">=14.16" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", + "node_modules/@metamask/eth-simple-keyring/node_modules/@metamask/eth-sig-util": { + "version": "8.2.0", + "license": "ISC", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^3.0.0", + "@metamask/utils": "^11.0.1", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" + }, "engines": { - "node": ">=10.13.0" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", - "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", - "dev": true - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "node_modules/@metamask/eth-simple-keyring/node_modules/@metamask/eth-sig-util/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/estree": "*" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "node_modules/@metamask/eth-simple-keyring/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/node": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "node_modules/@metamask/eth-simple-keyring/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "node_modules/@metamask/eth-snap-keyring": { + "version": "13.0.0", + "peer": true, "dependencies": { - "@types/node": "*" + "@ethereumjs/tx": "^5.4.0", + "@metamask/base-controller": "^7.1.1", + "@metamask/eth-sig-util": "^8.2.0", + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-internal-api": "^6.2.0", + "@metamask/keyring-internal-snap-client": "^4.1.0", + "@metamask/keyring-utils": "^3.0.0", + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.1.0", + "@types/uuid": "^9.0.8", + "uuid": "^9.0.1" + }, + "engines": { + "node": "^18.18 || >=20" + }, + "peerDependencies": { + "@metamask/keyring-api": "^18.0.0" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@ethereumjs/common": { + "version": "4.4.0", + "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" + "@ethereumjs/util": "^9.1.0" } }, - "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==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "node_modules/@metamask/eth-snap-keyring/node_modules/@ethereumjs/common/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@ethereumjs/common/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/d3-time": "*" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", - "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==" - }, - "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" - }, - "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/@metamask/eth-snap-keyring/node_modules/@ethereumjs/tx": { + "version": "5.4.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/ms": "*" + "@ethereumjs/common": "^4.4.0", + "@ethereumjs/rlp": "^5.0.2", + "@ethereumjs/util": "^9.1.0", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/deep-freeze-strict": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/deep-freeze-strict/-/deep-freeze-strict-1.1.2.tgz", - "integrity": "sha512-VvMETBojHvhX4f+ocYTySQlXMZfxKV3Jyb7iCWlWaC+exbedkv6Iv2bZZqI736qXjVguH6IH7bzwMBMfTT+zuQ==" - }, - "node_modules/@types/dom-screen-wake-lock": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.3.tgz", - "integrity": "sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw==" - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "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==", - "dependencies": { - "@types/estree": "*" + "node_modules/@metamask/eth-snap-keyring/node_modules/@ethereumjs/tx/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" } }, - "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/@metamask/eth-snap-keyring/node_modules/@ethereumjs/tx/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", - "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/abi-utils": { + "version": "3.0.0", + "license": "(Apache-2.0 AND MIT)", + "peer": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1" + }, + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/express/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==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/base-controller": { + "version": "7.1.1", + "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@metamask/utils": "^11.0.1", + "immer": "^9.0.6" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "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==" - }, - "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==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/eth-sig-util": { + "version": "8.2.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/unist": "*" + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^3.0.0", + "@metamask/utils": "^11.0.1", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/node": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "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==" - }, - "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==", + "node_modules/@metamask/eth-snap-keyring/node_modules/@metamask/utils/node_modules/@ethereumjs/common": { + "version": "3.2.0", + "license": "MIT", + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" } }, - "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/@metamask/eth-snap-keyring/node_modules/@metamask/utils/node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "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==" + "node_modules/@metamask/eth-snap-keyring/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "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==", + "node_modules/@metamask/ethjs-unit": { + "version": "0.3.0", + "license": "MIT", "dependencies": { - "@types/unist": "*" + "@metamask/number-to-bn": "^1.7.1", + "bn.js": "^5.2.1" + }, + "engines": { + "node": ">=8.17.0", + "npm": ">=6" + }, + "peerDependencies": { + "@babel/runtime": "^7.0.0" } }, - "node_modules/@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" - }, - "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==" - }, - "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==" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "22.7.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz", - "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==", + "node_modules/@metamask/json-rpc-engine": { + "version": "10.0.3", + "license": "ISC", "dependencies": { - "undici-types": "~6.19.2" + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^11.1.0" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "node_modules/@metamask/json-rpc-engine/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "dependencies": { - "@types/node": "*" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "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==" - }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" - }, - "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==", - "peer": true, + "node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@types/node": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" - }, - "node_modules/@types/punycode": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/punycode/-/punycode-2.1.4.tgz", - "integrity": "sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==", - "peer": true - }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==" - }, - "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==" + "node_modules/@metamask/json-rpc-engine/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@types/react": { - "version": "18.3.9", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.9.tgz", - "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==", + "node_modules/@metamask/json-rpc-middleware-stream": { + "version": "8.0.7", + "license": "ISC", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@metamask/json-rpc-engine": "^10.0.3", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^11.1.0", + "readable-stream": "^3.6.2" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@types/react-alert": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/react-alert/-/react-alert-7.0.6.tgz", - "integrity": "sha512-e6jjMurpoTVa8MXUbb1r/M1Rnn+eNxa1Ayhf77yeHtPbfu30x55Y6KMYVWSLUg/SQOgN3TguhDNQ6Qqu1gnkLw==", - "dev": true, + "node_modules/@metamask/json-rpc-middleware-stream/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@types/react": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/react-dom": { - "version": "17.0.25", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.25.tgz", - "integrity": "sha512-urx7A7UxkZQmThYA4So0NelOVjx3V4rNFVJwp0WZlbIK5eM4rNJDiN3R/E9ix0MBh6kAEojk/9YL+Te6D9zHNA==", - "dependencies": { - "@types/react": "^17" + "node_modules/@metamask/json-rpc-middleware-stream/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@types/react-dom/node_modules/@types/react": { - "version": "17.0.82", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.82.tgz", - "integrity": "sha512-wTW8Lu/PARGPFE8tOZqCvprOKg5sen/2uS03yKn2xbCDFP9oLncm7vMDQ2+dEQXHVIXrOpW6u72xUXEXO0ypSw==", + "node_modules/@metamask/key-tree": { + "version": "10.1.1", + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" + "@metamask/scure-bip39": "^2.1.1", + "@metamask/utils": "^11.0.1", + "@noble/curves": "^1.8.1", + "@noble/hashes": "^1.3.2", + "@scure/base": "^1.0.0" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@types/react-modal": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.16.3.tgz", - "integrity": "sha512-xXuGavyEGaFQDgBv4UVm8/ZsG+qxeQ7f77yNrW3n+1J6XAstUy5rYHeIHPh1KzsGc6IkCIdu6lQ2xWzu1jBTLg==", - "dev": true, + "node_modules/@metamask/key-tree/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@types/react": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "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==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" + "node_modules/@metamask/key-tree/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "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==", + "node_modules/@metamask/keyring-api": { + "version": "18.0.0", "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" + "@metamask/keyring-utils": "^3.0.0", + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.1.0", + "bitcoin-address-validation": "^2.2.3" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "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==", + "node_modules/@metamask/keyring-api/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "node_modules/@metamask/keyring-api/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "node_modules/@metamask/keyring-controller": { + "version": "22.0.1", + "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" + "@ethereumjs/util": "^9.1.0", + "@keystonehq/metamask-airgapped-keyring": "^0.14.1", + "@metamask/base-controller": "^8.0.1", + "@metamask/browser-passworder": "^4.3.0", + "@metamask/eth-hd-keyring": "^12.0.0", + "@metamask/eth-sig-util": "^8.2.0", + "@metamask/eth-simple-keyring": "^10.0.0", + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-internal-api": "^6.2.0", + "@metamask/utils": "^11.2.0", + "async-mutex": "^0.5.0", + "ethereumjs-wallet": "^1.0.1", + "immer": "^9.0.6", + "lodash": "^4.17.21", + "ulid": "^2.3.0" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "node_modules/@metamask/keyring-controller/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/node": "*" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "node_modules/@metamask/keyring-controller/node_modules/@ethereumjs/util/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "peer": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/@metamask/keyring-controller/node_modules/@metamask/abi-utils": { + "version": "3.0.0", + "license": "(Apache-2.0 AND MIT)", + "peer": true, "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1" + }, + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", + "node_modules/@metamask/keyring-controller/node_modules/@metamask/eth-sig-util": { + "version": "8.2.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/express": "*" + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "@metamask/abi-utils": "^3.0.0", + "@metamask/utils": "^11.0.1", + "@scure/base": "~1.1.3", + "ethereum-cryptography": "^2.1.2", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "node_modules/@metamask/keyring-controller/node_modules/@metamask/eth-sig-util/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "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==", + "node_modules/@metamask/keyring-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@types/node": "*" + "@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": "^18.18 || ^20.14 || >=22" } }, - "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==", - "peer": true - }, - "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==" - }, - "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==", - "peer": true + "node_modules/@metamask/keyring-controller/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "node_modules/@metamask/keyring-internal-api": { + "version": "6.2.0", + "peer": true, "dependencies": { - "@types/node": "*" + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-utils": "^3.0.0", + "@metamask/superstruct": "^3.1.0" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "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==", + "node_modules/@metamask/keyring-internal-snap-client": { + "version": "4.1.0", + "peer": true, "dependencies": { - "@types/yargs-parser": "*" + "@metamask/base-controller": "^7.1.1", + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-internal-api": "^6.2.0", + "@metamask/keyring-snap-client": "^5.0.0", + "@metamask/keyring-utils": "^3.0.0" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "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==" - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", - "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", - "dev": true, + "node_modules/@metamask/keyring-internal-snap-client/node_modules/@metamask/base-controller": { + "version": "7.1.1", + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.7.0", - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/typescript-estree": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0", - "debug": "^4.3.4" + "@metamask/utils": "^11.0.1", + "immer": "^9.0.6" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18 || >=20" + } + }, + "node_modules/@metamask/keyring-internal-snap-client/node_modules/@metamask/keyring-snap-client": { + "version": "5.0.0", + "peer": true, + "dependencies": { + "@metamask/keyring-api": "^18.0.0", + "@metamask/keyring-utils": "^3.0.0", + "@metamask/superstruct": "^3.1.0", + "@types/uuid": "^9.0.8", + "uuid": "^9.0.1", + "webextension-polyfill": "^0.12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": "^18.18 || >=20" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@metamask/providers": "^19.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", - "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", - "dev": true, + "node_modules/@metamask/keyring-internal-snap-client/node_modules/@metamask/providers": { + "version": "19.0.0", + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0" + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/json-rpc-middleware-stream": "^8.0.6", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^11.0.1", + "detect-browser": "^5.2.0", + "extension-port-stream": "^4.1.0", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "readable-stream": "^3.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18 || >=20" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", - "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node_modules/@metamask/keyring-internal-snap-client/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", - "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", - "dev": true, + "node_modules/@metamask/keyring-internal-snap-client/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@typescript-eslint/types": "8.7.0", - "@typescript-eslint/visitor-keys": "8.7.0", + "@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", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" }, "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": "^18.18 || ^20.14 || >=22" } }, - "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, + "node_modules/@metamask/keyring-internal-snap-client/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/keyring-utils": { + "version": "3.0.0", "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" + "@ethereumjs/tx": "^5.4.0", + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.1.0", + "bitcoin-address-validation": "^2.2.3" }, "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": "^18.18 || >=20" } }, - "node_modules/@typescript-eslint/utils/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, + "node_modules/@metamask/keyring-utils/node_modules/@ethereumjs/common": { + "version": "4.4.0", + "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@ethereumjs/util": "^9.1.0" } }, - "node_modules/@typescript-eslint/utils/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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@metamask/keyring-utils/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=18" } }, - "node_modules/@typescript-eslint/utils/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, + "node_modules/@metamask/keyring-utils/node_modules/@ethereumjs/tx": { + "version": "5.4.0", + "license": "MPL-2.0", "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" + "@ethereumjs/common": "^4.4.0", + "@ethereumjs/rlp": "^5.0.2", + "@ethereumjs/util": "^9.1.0", + "ethereum-cryptography": "^2.2.1" }, "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": ">=18" } }, - "node_modules/@typescript-eslint/utils/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, + "node_modules/@metamask/keyring-utils/node_modules/@ethereumjs/util": { + "version": "9.1.0", + "license": "MPL-2.0", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", - "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", - "dev": true, + "node_modules/@metamask/keyring-utils/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@typescript-eslint/types": "8.7.0", - "eslint-visitor-keys": "^3.4.3" + "@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": "^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.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@metamask/keyring-utils/node_modules/@metamask/utils/node_modules/@ethereumjs/common": { + "version": "3.2.0", + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "node_modules/@metamask/keyring-utils/node_modules/@metamask/utils/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@metamask/keyring-utils/node_modules/@metamask/utils/node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "license": "MPL-2.0", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/@metamask/keyring-utils/node_modules/@metamask/utils/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", "dependencies": { - "@xtuc/long": "4.2.2" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "node_modules/@metamask/keyring-utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "node_modules/@metamask/network-controller": { + "version": "23.5.1", + "license": "MIT", + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@metamask/base-controller": "^8.0.1", + "@metamask/controller-utils": "^11.9.0", + "@metamask/error-reporting-service": "^1.0.0", + "@metamask/eth-block-tracker": "^12.0.1", + "@metamask/eth-json-rpc-infura": "^10.2.0", + "@metamask/eth-json-rpc-middleware": "^17.0.1", + "@metamask/eth-json-rpc-provider": "^4.1.8", + "@metamask/eth-query": "^4.0.0", + "@metamask/json-rpc-engine": "^10.0.3", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/swappable-obj-proxy": "^2.3.0", + "@metamask/utils": "^11.2.0", + "async-mutex": "^0.5.0", + "fast-deep-equal": "^3.1.3", + "immer": "^9.0.6", + "loglevel": "^1.8.1", + "reselect": "^5.1.1", + "uri-js": "^4.4.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": "^18.18 || >=20" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "node_modules/@metamask/network-controller/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "node_modules/@metamask/network-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" + "node_modules/@metamask/network-controller/node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@xobotyi/scrollbar-width": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" - }, - "node_modules/@xstate/fsm": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-2.1.0.tgz", - "integrity": "sha512-oJlc0iD0qZvAM7If/KlyJyqUt7wVI8ocpsnlWzAPl97evguPbd+oJbRM9R4A1vYJffYH96+Bx44nLDE6qS8jQg==", - "peer": true - }, - "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==" - }, - "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==" - }, - "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==", + "node_modules/@metamask/number-to-bn": { + "version": "1.7.1", + "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "bn.js": "5.2.1", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=6.5" + "node": ">=8.17.0", + "npm": ">=6" } }, - "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/@metamask/object-multiplex": { + "version": "2.1.0", + "license": "ISC", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "once": "^1.4.0", + "readable-stream": "^3.6.2" }, "engines": { - "node": ">= 0.6" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "bin": { - "acorn": "bin/acorn" + "node_modules/@metamask/obs-store": { + "version": "9.1.0", + "license": "ISC", + "peer": true, + "dependencies": { + "@metamask/safe-event-emitter": "^3.0.0", + "readable-stream": "^3.6.2" }, "engines": { - "node": ">=0.4.0" + "node": "^14.21 || ^16.20 || ^18.16 || >=20", + "yarn": "^1.22.22" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" + "node_modules/@metamask/onboarding": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "bowser": "^2.9.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==", + "node_modules/@metamask/permission-controller": { + "version": "11.0.6", + "license": "MIT", + "dependencies": { + "@metamask/base-controller": "^8.0.0", + "@metamask/controller-utils": "^11.5.0", + "@metamask/json-rpc-engine": "^10.0.3", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/utils": "^11.1.0", + "@types/deep-freeze-strict": "^1.1.0", + "deep-freeze-strict": "^1.1.1", + "immer": "^9.0.6", + "nanoid": "^3.3.8" + }, + "engines": { + "node": "^18.18 || >=20" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@metamask/approval-controller": "^7.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==", + "node_modules/@metamask/permission-controller/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, "engines": { - "node": ">=0.4.0" + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "node_modules/@metamask/permission-controller/node_modules/@metamask/utils": { + "version": "11.4.0", + "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": ">= 10.0.0" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", - "peer": true + "node_modules/@metamask/permission-controller/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "node_modules/@metamask/phishing-controller": { + "version": "12.5.0", + "license": "MIT", + "peer": true, "dependencies": { - "es6-promisify": "^5.0.0" + "@metamask/base-controller": "^8.0.0", + "@metamask/controller-utils": "^11.7.0", + "@noble/hashes": "^1.4.0", + "@types/punycode": "^2.1.0", + "ethereum-cryptography": "^2.1.2", + "fastest-levenshtein": "^1.0.16", + "punycode": "^2.1.1" }, "engines": { - "node": ">= 4.0.0" + "node": "^18.18 || >=20" } }, - "node_modules/agentkeepalive": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.3.tgz", - "integrity": "sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw==", + "node_modules/@metamask/post-message-stream": { + "version": "10.0.0", + "license": "ISC", + "peer": true, "dependencies": { - "humanize-ms": "^1.2.1" + "@metamask/utils": "^11.4.0", + "readable-stream": "3.6.2" }, "engines": { - "node": ">= 4.0.0" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", + "node_modules/@metamask/post-message-stream/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@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": ">=8" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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/@metamask/post-message-stream/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "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/@metamask/profile-sync-controller": { + "version": "16.0.0", + "license": "MIT", "dependencies": { - "ajv": "^8.0.0" + "@metamask/base-controller": "^8.0.1", + "@metamask/keyring-api": "^18.0.0", + "@metamask/snaps-sdk": "^7.1.0", + "@metamask/snaps-utils": "^9.4.0", + "@noble/ciphers": "^0.5.2", + "@noble/hashes": "^1.4.0", + "immer": "^9.0.6", + "loglevel": "^1.8.1", + "siwe": "^2.3.2" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": "^18.18 || >=20" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "peerDependencies": { + "@metamask/accounts-controller": "^30.0.0", + "@metamask/keyring-controller": "^22.0.0", + "@metamask/network-controller": "^23.0.0", + "@metamask/providers": "^22.0.0", + "@metamask/snaps-controllers": "^12.0.0", + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.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/@metamask/providers": { + "version": "22.1.0", + "license": "MIT", "dependencies": { + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/json-rpc-middleware-stream": "^8.0.6", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^11.0.1", + "detect-browser": "^5.2.0", + "extension-port-stream": "^4.1.0", "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "is-stream": "^2.0.0", + "readable-stream": "^3.6.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==" - }, - "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==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", - "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-account": "4.24.0", - "@algolia/client-analytics": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-personalization": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/recommend": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", - "dependencies": { - "@algolia/events": "^4.0.1" + "engines": { + "node": "^18.18 || >=20" }, "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" } }, - "node_modules/algoliasearch/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", + "node_modules/@metamask/providers/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", + "node_modules/@metamask/providers/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@algolia/requester-common": "4.24.0" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "dependencies": { - "@algolia/requester-common": "4.24.0" + "node_modules/@metamask/providers/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "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==", + "node_modules/@metamask/rpc-errors": { + "version": "6.3.1", + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "@metamask/utils": "^9.0.0", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": ">=16.0.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==" - }, - "node_modules/ansi-align/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==", + "node_modules/@metamask/safe-event-emitter": { + "version": "3.1.1", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "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==", + "node_modules/@metamask/scure-bip39": { + "version": "2.1.1", + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.3" }, "engines": { - "node": ">=8" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/@metamask/scure-bip39/node_modules/@noble/hashes": { + "version": "1.3.3", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "peer": true, + "node_modules/@metamask/sdk": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.33.1.tgz", + "integrity": "sha512-1mcOQVGr9rSrVcbKPNVzbZ8eCl1K0FATsYH3WJ/MH4WcZDWGECWrXJPNMZoEAkLxWiMe8jOQBumg2pmcDa9zpQ==", + "deprecated": "No longer maintained, superseded by https://docs.metamask.io/metamask-connect", "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" + "@babel/runtime": "^7.26.0", + "@metamask/onboarding": "^1.0.1", + "@metamask/providers": "16.1.0", + "@metamask/sdk-analytics": "0.0.5", + "@metamask/sdk-communication-layer": "0.33.1", + "@metamask/sdk-install-modal-web": "0.32.1", + "@paulmillr/qr": "^0.2.1", + "bowser": "^2.9.0", + "cross-fetch": "^4.0.0", + "debug": "4.3.4", + "eciesjs": "^0.4.11", + "eth-rpc-errors": "^4.0.3", + "eventemitter2": "^6.4.9", + "obj-multiplex": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.2", + "socket.io-client": "^4.5.1", + "tslib": "^2.6.0", + "util": "^0.12.4", + "uuid": "^8.3.2" } }, - "node_modules/ansi-fragments/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==", - "peer": true, - "engines": { - "node": ">=6" + "node_modules/@metamask/sdk-analytics": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@metamask/sdk-analytics/-/sdk-analytics-0.0.5.tgz", + "integrity": "sha512-fDah+keS1RjSUlC8GmYXvx6Y26s3Ax1U9hGpWb6GSY5SAdmTSIqp2CvYy6yW0WgLhnYhW+6xERuD0eVqV63QIQ==", + "license": "MIT", + "dependencies": { + "openapi-fetch": "^0.13.5" } }, - "node_modules/ansi-fragments/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==", - "peer": true, + "node_modules/@metamask/sdk-communication-layer": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.33.1.tgz", + "integrity": "sha512-0bI9hkysxcfbZ/lk0T2+aKVo1j0ynQVTuB3sJ5ssPWlz+Z3VwveCkP1O7EVu1tsVVCb0YV5WxK9zmURu2FIiaA==", "dependencies": { - "ansi-regex": "^4.1.0" + "@metamask/sdk-analytics": "0.0.5", + "bufferutil": "^4.0.8", + "date-fns": "^2.29.3", + "debug": "4.3.4", + "utf-8-validate": "^5.0.2", + "uuid": "^8.3.2" }, - "engines": { - "node": ">=6" - } - }, - "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" - ], - "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==", - "engines": { - "node": ">=8" + "peerDependencies": { + "cross-fetch": "^4.0.0", + "eciesjs": "*", + "eventemitter2": "^6.4.9", + "readable-stream": "^3.6.2", + "socket.io-client": "^4.5.1" } }, - "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/@metamask/sdk-communication-layer/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "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==", + "node_modules/@metamask/sdk-communication-layer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@metamask/sdk-install-modal-web": { + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.32.1.tgz", + "integrity": "sha512-MGmAo6qSjf1tuYXhCu2EZLftq+DSt5Z7fsIKr2P+lDgdTPWgLfZB1tJKzNcwKKOdf6q9Qmmxn7lJuI/gq5LrKw==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@paulmillr/qr": "^0.2.1" + } + }, + "node_modules/@metamask/sdk/node_modules/@metamask/json-rpc-engine": { + "version": "8.0.2", + "license": "ISC", + "dependencies": { + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" }, "engines": { - "node": ">= 8" + "node": ">=16.0.0" } }, - "node_modules/apg-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/apg-js/-/apg-js-4.4.0.tgz", - "integrity": "sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==" - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "peer": true - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "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==" - }, - "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==" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, + "node_modules/@metamask/sdk/node_modules/@metamask/json-rpc-middleware-stream": { + "version": "7.0.2", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "@metamask/json-rpc-engine": "^8.0.2", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0", + "readable-stream": "^3.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.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==" - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, + "node_modules/@metamask/sdk/node_modules/@metamask/providers": { + "version": "16.1.0", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "@metamask/json-rpc-engine": "^8.0.1", + "@metamask/json-rpc-middleware-stream": "^7.0.1", + "@metamask/object-multiplex": "^2.0.0", + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.1.1", + "@metamask/utils": "^8.3.0", + "detect-browser": "^5.2.0", + "extension-port-stream": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "is-stream": "^2.0.0", + "readable-stream": "^3.6.2", + "webextension-polyfill": "^0.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", "engines": { - "node": ">=8" + "node": "^18.18 || >=20" } }, - "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/@metamask/sdk/node_modules/@metamask/utils": { + "version": "8.5.0", + "license": "ISC", "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" + "@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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, + "node_modules/@metamask/sdk/node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/sdk/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, + "node_modules/@metamask/sdk/node_modules/extension-port-stream": { + "version": "3.0.0", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "readable-stream": "^3.6.2 || ^4.4.2", + "webextension-polyfill": ">=0.10.0 <1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.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, - "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" - }, + "node_modules/@metamask/sdk/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@metamask/sdk/node_modules/webextension-polyfill": { + "version": "0.10.0", + "license": "MPL-2.0" + }, + "node_modules/@metamask/slip44": { + "version": "4.2.0", + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": "^18.16 || >=20" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, + "node_modules/@metamask/snaps-controllers": { + "version": "12.3.1", + "license": "SEE LICENSE IN LICENSE", + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "@metamask/approval-controller": "^7.1.3", + "@metamask/base-controller": "^8.0.1", + "@metamask/json-rpc-engine": "^10.0.2", + "@metamask/json-rpc-middleware-stream": "^8.0.7", + "@metamask/key-tree": "^10.1.1", + "@metamask/object-multiplex": "^2.1.0", + "@metamask/permission-controller": "^11.0.6", + "@metamask/phishing-controller": "^12.5.0", + "@metamask/post-message-stream": "^10.0.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/snaps-registry": "^3.2.3", + "@metamask/snaps-rpc-methods": "^12.4.0", + "@metamask/snaps-sdk": "^7.1.0", + "@metamask/snaps-utils": "^9.4.0", + "@metamask/utils": "^11.4.0", + "@xstate/fsm": "^2.0.0", + "async-mutex": "^0.5.0", + "browserify-zlib": "^0.2.0", + "concat-stream": "^2.0.0", + "fast-deep-equal": "^3.1.3", + "get-npm-tarball-url": "^2.0.3", + "immer": "^9.0.6", + "luxon": "^3.5.0", + "nanoid": "^3.3.10", + "readable-stream": "^3.6.2", + "readable-web-to-node-stream": "^3.0.2", + "semver": "^7.5.4", + "tar-stream": "^3.1.7" }, "engines": { - "node": ">= 0.4" + "node": "^18.16 || >=20" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@metamask/snaps-execution-environments": "^8.1.0" + }, + "peerDependenciesMeta": { + "@metamask/snaps-execution-environments": { + "optional": true + } } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, + "node_modules/@metamask/snaps-controllers/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "peer": true - }, - "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/@metamask/snaps-controllers/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/@metamask/snaps-controllers/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, - "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/@metamask/snaps-registry": { + "version": "3.2.3", + "license": "(Apache-2.0 OR 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" + "@metamask/superstruct": "^3.1.0", + "@metamask/utils": "^11.0.1", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2" + }, + "engines": { + "node": "^18.16 || >=20" } }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "peer": true, + "node_modules/@metamask/snaps-registry/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "tslib": "^2.0.1" + "@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": ">=4" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/astring": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "node_modules/@metamask/snaps-registry/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "astring": "bin/astring" + "uuid": "dist/bin/uuid" } }, - "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==", - "peer": true + "node_modules/@metamask/snaps-rpc-methods": { + "version": "12.4.0", + "license": "SEE LICENSE IN LICENSE", + "peer": true, + "dependencies": { + "@metamask/key-tree": "^10.1.1", + "@metamask/permission-controller": "^11.0.6", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/snaps-sdk": "^7.1.0", + "@metamask/snaps-utils": "^9.4.0", + "@metamask/superstruct": "^3.2.1", + "@metamask/utils": "^11.4.0", + "@noble/hashes": "^1.7.1", + "luxon": "^3.5.0" + }, + "engines": { + "node": "^18.16 || >=20" + } }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "node_modules/@metamask/snaps-rpc-methods/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "peer": true, "dependencies": { - "tslib": "^2.4.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "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/@metamask/snaps-rpc-methods/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", + "peer": true, + "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": ">= 4.0.0" + "node": "^18.18 || ^20.14 || >=22" } }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "node_modules/@metamask/snaps-rpc-methods/node_modules/uuid": { + "version": "9.0.1", "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" - } + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" ], - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", + "peer": true, "bin": { - "autoprefixer": "bin/autoprefixer" + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/snaps-sdk": { + "version": "7.1.0", + "license": "ISC", + "dependencies": { + "@metamask/key-tree": "^10.1.1", + "@metamask/providers": "^22.1.0", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/superstruct": "^3.2.1", + "@metamask/utils": "^11.4.0" }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": "^18.16 || >=20" } }, - "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/@metamask/snaps-sdk/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.20 || ^20.17 || >=22" } }, - "node_modules/axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "node_modules/@metamask/snaps-sdk/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "@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": "^18.18 || ^20.14 || >=22" } }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "peer": true - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peer": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node_modules/@metamask/snaps-sdk/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "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==", + "node_modules/@metamask/snaps-utils": { + "version": "9.4.0", + "license": "ISC", "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "@babel/core": "^7.23.2", + "@babel/types": "^7.23.0", + "@metamask/base-controller": "^8.0.1", + "@metamask/key-tree": "^10.1.1", + "@metamask/permission-controller": "^11.0.6", + "@metamask/rpc-errors": "^7.0.2", + "@metamask/slip44": "^4.2.0", + "@metamask/snaps-registry": "^3.2.3", + "@metamask/snaps-sdk": "^7.1.0", + "@metamask/superstruct": "^3.2.1", + "@metamask/utils": "^11.4.0", + "@noble/hashes": "^1.7.1", + "@scure/base": "^1.1.1", + "chalk": "^4.1.2", + "cron-parser": "^4.5.0", + "fast-deep-equal": "^3.1.3", + "fast-json-stable-stringify": "^2.1.0", + "fast-xml-parser": "^4.4.1", + "luxon": "^3.5.0", + "marked": "^12.0.1", + "rfdc": "^1.3.0", + "semver": "^7.5.4", + "ses": "^1.12.0", + "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "node": "^18.16 || >=20" } }, - "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==", + "node_modules/@metamask/snaps-utils/node_modules/@metamask/rpc-errors": { + "version": "7.0.2", + "license": "MIT", "dependencies": { - "object.assign": "^4.1.0" + "@metamask/utils": "^11.0.1", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": "^18.20 || ^20.17 || >=22" } }, - "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/@metamask/snaps-utils/node_modules/@metamask/utils": { + "version": "11.4.0", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@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": ">=10", - "npm": ">=6" + "node": "^18.18 || ^20.14 || >=22" } }, - "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==", - "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" - }, + "node_modules/@metamask/snaps-utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@metamask/superstruct": { + "version": "3.2.1", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=16.0.0" } }, - "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==", + "node_modules/@metamask/swappable-obj-proxy": { + "version": "2.3.0", + "license": "ISC", + "peer": true, "engines": { - "node": ">= 6" + "node": ">=14.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/@metamask/utils": { + "version": "9.2.1", + "license": "ISC", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" + "@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" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=16.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==", + "node_modules/@metamask/utils/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "semver": "bin/semver.js" + "uuid": "dist/bin/uuid" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "node_modules/@mux/mux-data-google-ima": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@mux/mux-data-google-ima/-/mux-data-google-ima-0.2.8.tgz", + "integrity": "sha512-0ZEkHdcZ6bS8QtcjFcoJeZxJTpX7qRIledf4q1trMWPznugvtajCjCM2kieK/pzkZj1JM6liDRFs1PJSfVUs2A==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "mux-embed": "5.9.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/@mux/mux-player": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.5.1.tgz", + "integrity": "sha512-PSi3mPb4LrEh4i3xUdodaEvMrbbpKbL2yaewRjsqBr3PFb+hd/Dp1KtyaAnXaBCHl09hDURUSrqYpg1cZvwDiQ==", + "license": "MIT", + "dependencies": { + "@mux/mux-video": "0.26.1", + "@mux/playback-core": "0.30.1", + "media-chrome": "~4.11.1", + "player.style": "^0.1.9" + } + }, + "node_modules/@mux/mux-player-react": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.5.1.tgz", + "integrity": "sha512-tm32fSo9IBA/J8AD99bp64CyBkmv8jtsn4RhSHgNufvfWJUMBFJ7cfXgLsxiG/VdegpfBLRatMC5YiuZjoZ6yg==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@mux/mux-player": "3.5.1", + "@mux/playback-core": "0.30.1", + "prop-types": "^15.8.1" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "@types/react": "^17.0.0 || ^17.0.0-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0", + "react": "^17.0.2 || ^17.0.0-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0", + "react-dom": "^17.0.2 || ^17.0.2-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "peer": true, + "node_modules/@mux/mux-video": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.26.1.tgz", + "integrity": "sha512-gkMdBAgNlB4+krANZHkQFzYWjWeNsJz69y1/hnPtmNQnpvW+O7oc71OffcZrbblyibSxWMQ6MQpYmBVjXlp6sA==", + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "@mux/mux-data-google-ima": "0.2.8", + "@mux/playback-core": "0.30.1", + "castable-video": "~1.1.10", + "custom-media-element": "~1.4.5", + "media-tracks": "~0.3.3" } }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@mux/playback-core": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.30.1.tgz", + "integrity": "sha512-rnO1NE9xHDyzbAkmE6ygJYcD7cyyMt7xXqWTykxlceaoSXLjUqgp42HDio7Lcidto4x/O4FIa7ztjV2aCBCXgQ==", + "license": "MIT", + "dependencies": { + "hls.js": "~1.6.6", + "mux-embed": "^5.8.3" } }, - "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/bare-events": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", - "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", - "optional": true, - "peer": true - }, - "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", - "peer": true, + "node_modules/@ngraveio/bc-ur": { + "version": "1.1.13", + "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "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" - } - ] - }, - "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==" - }, - "node_modules/bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", - "peer": true - }, - "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==", - "engines": { - "node": "*" + "@keystonehq/alias-sampling": "^0.1.1", + "assert": "^2.0.0", + "bignumber.js": "^9.0.1", + "cbor-sync": "^1.0.4", + "crc": "^3.8.0", + "jsbi": "^3.1.5", + "sha.js": "^2.4.11" } }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "peer": true, - "engines": { - "node": "*" + "node_modules/@noble/ciphers": { + "version": "0.5.3", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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/@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": ">=8" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/binaryextensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", - "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", + "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": ">=0.8" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "url": "https://paulmillr.com/funding/" } }, - "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==", - "peer": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "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==" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "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.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 8" } }, - "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==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "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==", - "dependencies": { - "ms": "2.0.0" + "node": ">= 8" } }, - "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/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 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==" - }, - "node_modules/body-parser/node_modules/on-finished": { + "node_modules/@parcel/watcher": { "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", + "optional": true, "dependencies": { - "ee-first": "1.1.1" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==" - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "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" + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", - "dependencies": { - "fill-range": "^7.1.1" + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "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==", - "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/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "license": "MIT", + "optional": true + }, + "node_modules/@paulmillr/qr": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@paulmillr/qr/-/qr-0.2.1.tgz", + "integrity": "sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==", + "deprecated": "The package is now available as \"qr\": npm install qr", + "license": "(MIT OR Apache-2.0)", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "license": "MIT", "engines": { - "node": ">= 0.12" + "node": ">=12.22.0" } }, - "node_modules/browserify-sign/node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">=4" + "node": ">=12.22.0" } }, - "node_modules/browserify-sign/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/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" }, - "node_modules/browserify-sign/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/@pnpm/npm-conf": { + "version": "2.3.1", + "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" + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" } }, - "node_modules/browserify-sign/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/@polka/url": { + "version": "1.0.0-next.28", + "license": "MIT" }, - "node_modules/browserify-sign/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==", - "dependencies": { - "safe-buffer": "~5.1.0" + "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_modules/browserify-sign/node_modules/string_decoder/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/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==", + "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", + "peer": true, "dependencies": { - "pako": "~1.0.5" + "@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/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", - "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/@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": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" + "@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": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "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/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "base-x": "^3.0.2" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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/@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, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "engines": { + "node": ">= 20.19.4" } }, - "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==", + "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, "dependencies": { - "node-int64": "^0.4.0" + "@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/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/@react-native/dev-middleware/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "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==", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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==" - }, - "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==" - }, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, + "node_modules/@react-native/dev-middleware/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", + "peer": true, "dependencies": { - "node-gyp-build": "^4.3.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { - "node": ">=6.14.2" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" + "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", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } }, - "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/@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", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "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", + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">= 20.19.4" } }, - "node_modules/cacache": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.3.0.tgz", - "integrity": "sha512-Vbi8J1XfC8v+FbQ6QkOtKXsHpPnB0i9uMeYFJoj40EbdOsEqWB3DPpNjfsnYBkqOPYA8UvrqH6FZPpBP0zdN7g==", + "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", + "peer": true + }, + "node_modules/@react-spring/animated": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz", + "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==", + "license": "MIT", "dependencies": { - "bluebird": "^3.5.0", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^1.3.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.1", - "ssri": "^4.1.6", - "unique-filename": "^1.1.0", - "y18n": "^3.2.1" + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/@react-spring/core": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz", + "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==", + "license": "MIT", "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "@react-spring/animated": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/cacache/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/@react-spring/konva": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-10.0.3.tgz", + "integrity": "sha512-nA1VoC94RnGY4jhhuOln+ZSXOjfBdvwnyBcVt4ojq2JRcqNTmYv+ftfo1V3qAJlDccucdjAWlJbkQEQ9bVVcQg==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" }, - "bin": { - "rimraf": "bin.js" + "peerDependencies": { + "konva": ">=2.6", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-konva": "^19" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "node_modules/@react-spring/rafz": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz", + "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==", + "license": "MIT" }, - "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==", - "engines": { - "node": ">=14.16" + "node_modules/@react-spring/shared": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz", + "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "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==", + "node_modules/@react-spring/types": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz", + "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==", + "license": "MIT" + }, + "node_modules/@react-spring/web": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz", + "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==", + "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" + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" }, - "engines": { - "node": ">=14.16" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/cacheable-request/node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "node_modules/@react-spring/zdog": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-10.0.3.tgz", + "integrity": "sha512-YCJPhPGdLLiUnM++u/1qd/7b5p70zZWdPhDOBC8TAr/zlQABZR4ivYlv5JAiS/oPLSFAwlTGFkTxD4M1sDVd0g==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-zdog": ">=1.0", + "zdog": ">=1.0" + } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/@rjsf/core": { + "version": "5.24.12", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-5.24.12.tgz", + "integrity": "sha512-OWVdC501n3Io0hplgpnkzArpcUSiImMgLQhk6/EI8wu2xbvk5fTiM7YAVlAObpAD3z3LRrAwhjnmh9L4k/FWmQ==", + "license": "Apache-2.0", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "markdown-to-jsx": "^7.4.1", + "nanoid": "^3.3.7", + "prop-types": "^15.8.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@rjsf/utils": "^5.24.x", + "react": "^16.14.0 || >=17" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "peer": true, + "node_modules/@rjsf/utils": { + "version": "5.24.13", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.24.13.tgz", + "integrity": "sha512-rNF8tDxIwTtXzz5O/U23QU73nlhgQNYJ+Sv5BAwQOIyhIE2Z3S5tUiSVMwZHt0julkv/Ryfwi+qsD4FiE5rOuw==", + "license": "Apache-2.0", "dependencies": { - "callsites": "^2.0.0" + "json-schema-merge-allof": "^0.8.1", + "jsonpointer": "^5.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-is": "^18.2.0" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.14.0 || >=17" } }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "peer": true, + "node_modules/@rjsf/validator-ajv8": { + "version": "5.24.12", + "resolved": "https://registry.npmjs.org/@rjsf/validator-ajv8/-/validator-ajv8-5.24.12.tgz", + "integrity": "sha512-IMXdCjvDNdvb+mDgZC3AlAtr0pjYKq5s0GcLECjG5PuiX7Ib4JaDQHZY5ZJdKblMfgzhsn8AAOi573jXAt7BHQ==", + "dependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "peerDependencies": { + "@rjsf/utils": "^5.24.x" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "peer": true, + "node_modules/@rjsf/validator-ajv8/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", "dependencies": { - "caller-callsite": "^2.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" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } + "node_modules/@rjsf/validator-ajv8/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" }, - "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==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "node_modules/@scure/base": { + "version": "1.1.9", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" + "node_modules/@scure/bip32": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" + "@noble/hashes": "1.4.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/camelcase-keys/node_modules/type-fest": { + "node_modules/@scure/bip32/node_modules/@noble/hashes": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@scure/bip39": { + "version": "1.3.0", + "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.30001664", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", - "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", - "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" - } - ] - }, - "node_modules/capture-stack-trace": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", - "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", - "engines": { - "node": ">=0.10.0" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cbor-sync": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cbor-sync/-/cbor-sync-1.0.4.tgz", - "integrity": "sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA==", - "peer": true - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@sentry-internal/browser-utils": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.22.0.tgz", + "integrity": "sha512-BpJoLZEyJr7ORzkCrIjxRTnFWwO1mJNICVh3B9g5d9245niGT4OJvRozmLz89WgJkZFHWu84ls6Xfq5b/3tGFQ==", + "license": "MIT", + "dependencies": { + "@sentry/core": "10.22.0" + }, "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==", - "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==", - "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==", - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=18" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "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==", + "node_modules/@sentry-internal/feedback": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.22.0.tgz", + "integrity": "sha512-zXySOin/gGHPV+yKaHqjN9YZ7psEJwzLn8PzCLeo+4REzF1eQwbYZIgOxJFD32z8s3nZiABSWFM/n1CvVfMEsQ==", + "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" + "@sentry/core": "10.22.0" }, "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "node": ">=18" } }, - "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==", + "node_modules/@sentry-internal/replay": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.22.0.tgz", + "integrity": "sha512-JNE4kHAQSG4/V+J+Zog3vKBWgOe9H33ol/MEU1RuLM/4I+uLf4mTetwnS9ilpnnW/Z/gQYfA+R3CiMrZtqTivw==", + "license": "MIT", "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" + "@sentry-internal/browser-utils": "10.22.0", + "@sentry/core": "10.22.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=18" } }, - "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/@sentry-internal/replay-canvas": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.22.0.tgz", + "integrity": "sha512-DE4JNUskJg+O+wFq42W5gAa/99aD5k7TfGOwABxvnzFv8vkKA7pqXwPbFFPzypdKIkln+df7RmbnDwQRNg6/lA==", + "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" + "@sentry-internal/replay": "10.22.0", + "@sentry/core": "10.22.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=18" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "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==", - "peer": true, + "node_modules/@sentry/browser": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.22.0.tgz", + "integrity": "sha512-wD2XqN+yeBpQFfdPo6+wlKDMyyuDctVGzZWE4qTPntICKQuwMdAfeq5Ma89ad0Dw+bzG9UijGeyuJQlswF87Mw==", + "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" + "@sentry-internal/browser-utils": "10.22.0", + "@sentry-internal/feedback": "10.22.0", + "@sentry-internal/replay": "10.22.0", + "@sentry-internal/replay-canvas": "10.22.0", + "@sentry/core": "10.22.0" }, "engines": { - "node": ">=12.13.0" + "node": ">=18" } }, - "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/@sentry/core": { + "version": "10.22.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.22.0.tgz", + "integrity": "sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw==", + "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">=18" } }, - "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==", - "peer": true, + "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": { - "@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" + "@hapi/hoek": "^9.0.0" } }, - "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==", - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "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", + "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/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" - } - ], - "engines": { - "node": ">=8" + "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", + "peer": true, + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "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", + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "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==", + "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": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" } }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@spruceid/siwe-parser": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "@noble/hashes": "^1.1.2", + "apg-js": "^4.1.1", + "uri-js": "^4.4.1", + "valid-url": "^1.0.9" } }, - "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==", - "engines": { - "node": ">=6" + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" } }, - "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==", + "node_modules/@stablelib/int": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "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": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.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": ">=8" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "peer": true, + "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": ">=6" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "dependencies": { - "string-width": "^4.2.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": "10.* || >= 12.*" + "node": ">=14" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cli-table3/node_modules/emoji-regex": { + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/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==", + "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": ">=8" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "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": ">=8" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "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==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.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": ">=12" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cliui/node_modules/emoji-regex": { + "node_modules/@svgr/babel-plugin-transform-svg-component": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/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==", + "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": ">=8" + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cliui/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==", + "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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@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": ">=8" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cliui/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==", + "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": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@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": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "peer": true, - "engines": { - "node": ">=0.8" + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "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==", + "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": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "@babel/types": "^7.21.3", + "entities": "^4.4.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/codesandbox": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/codesandbox/-/codesandbox-2.2.3.tgz", - "integrity": "sha512-IAkWFk6UUglOhSemI7UFgNNL/jgg+1YjVEIllFULLgsaHhFnY51pCqAifMNuAd5d9Zp4Nk/xMgrEaGNV0L4Xlg==", - "dependencies": { - "axios": "^0.18.1", - "chalk": "^2.4.1", - "codesandbox-import-util-types": "^2.2.3", - "codesandbox-import-utils": "^2.2.3", - "commander": "^2.9.0", - "datauri": "^3.0.0", - "filesize": "^3.6.1", - "fs-extra": "^3.0.1", - "git-branch": "^1.0.0", - "git-repo-name": "^0.6.0", - "git-username": "^0.5.0", - "humps": "^2.0.1", - "inquirer": "^6.2.2", - "lodash": "^4.17.5", - "lz-string": "^1.4.4", - "ms": "^2.0.0", - "open": "^6.3.0", - "ora": "^1.3.0", - "pacote": "^2.7.36", - "shortid": "^2.2.8", - "update-notifier": "^2.2.0" + "node": ">=14" }, - "bin": { - "codesandbox": "lib/index.js" - } - }, - "node_modules/codesandbox-import-util-types": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/codesandbox-import-util-types/-/codesandbox-import-util-types-2.2.3.tgz", - "integrity": "sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==" - }, - "node_modules/codesandbox-import-utils": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/codesandbox-import-utils/-/codesandbox-import-utils-2.1.11.tgz", - "integrity": "sha512-vkA0drdzO2ArMUzl8/AhEuzaW6qX3ic1SXPmruVS7bo/3K1P8H+S9CbuUNPo67X54/LzHwMnAZgZMXwN8vrw7Q==", - "dependencies": { - "codesandbox-import-util-types": "^2.1.9", - "istextorbinary": "^2.2.1", - "lz-string": "^1.4.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/codesandbox/node_modules/ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", + "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": { - "string-width": "^2.0.0" - } - }, - "node_modules/codesandbox/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==", + "@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": ">=4" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, - "node_modules/codesandbox/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/@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": { - "color-convert": "^1.9.0" + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" } }, - "node_modules/codesandbox/node_modules/boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "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": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "@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": ">=4" + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/codesandbox/node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "engines": { - "node": ">=4" - } + "node_modules/@svta/common-media-library": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@svta/common-media-library/-/common-media-library-0.12.4.tgz", + "integrity": "sha512-9EuOoaNmz7JrfGwjsrD9SxF9otU5TNMnbLu1yU4BeLK0W5cDxVXXR58Z89q9u2AnHjIctscjMTYdlqQ1gojTuw==", + "license": "Apache-2.0" }, - "node_modules/codesandbox/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/@szmarczak/http-timer": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=14.16" } }, - "node_modules/codesandbox/node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "node_modules/@tsconfig/docusaurus": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-2.0.7.tgz", + "integrity": "sha512-sDDxcltg2pcV0U3sQf5EMaX4/ER+x3IXmUc5EXuz4JnFDyxfGhTG7zGKJ8cLLZzjZALgdTK2LSKQbFLSKuGvQQ==", + "dev": true, + "license": "MIT" }, - "node_modules/codesandbox/node_modules/cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", - "engines": { - "node": ">=0.10.0" + "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", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/codesandbox/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "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", + "peer": true, "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" + "@babel/types": "^7.0.0" } }, - "node_modules/codesandbox/node_modules/cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "engines": { - "node": ">=4" + "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", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/codesandbox/node_modules/codesandbox-import-utils": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/codesandbox-import-utils/-/codesandbox-import-utils-2.2.3.tgz", - "integrity": "sha512-ymtmcgZKU27U+nM2qUb21aO8Ut/u2S9s6KorOgG81weP+NA0UZkaHKlaRqbLJ9h4i/4FLvwmEXYAnTjNmp6ogg==", + "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", + "peer": true, "dependencies": { - "codesandbox-import-util-types": "^2.2.3", - "istextorbinary": "^2.2.1", - "lz-string": "^1.4.4" + "@babel/types": "^7.28.2" } }, - "node_modules/codesandbox/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/@types/bn.js": { + "version": "5.1.6", + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@types/node": "*" } }, - "node_modules/codesandbox/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==" - }, - "node_modules/codesandbox/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==" - }, - "node_modules/codesandbox/node_modules/configstore": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", - "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "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": { - "dot-prop": "^4.2.1", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/codesandbox/node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "engines": { - "node": ">=4" + "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/codesandbox/node_modules/dot-prop": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "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": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/codesandbox/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==", - "engines": { - "node": ">=0.8.0" + "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/codesandbox/node_modules/filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "engines": { - "node": ">= 0.4.0" - } + "node_modules/@types/d3": { + "version": "7.4.3", + "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.1", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "@types/d3-selection": "*" } }, - "node_modules/codesandbox/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "engines": { - "node": ">=4" + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/codesandbox/node_modules/global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "license": "MIT", "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" + "@types/d3-array": "*", + "@types/geojson": "*" } }, - "node_modules/codesandbox/node_modules/got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", - "dependencies": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "license": "MIT" }, - "node_modules/codesandbox/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==", - "engines": { - "node": ">=4" - } + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "engines": { - "node": ">=4" + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/codesandbox/node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "license": "MIT", "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" + "@types/d3-dsv": "*" } }, - "node_modules/codesandbox/node_modules/is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", + "node_modules/@types/d3-force": { + "version": "3.0.10", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@types/geojson": "*" } }, - "node_modules/codesandbox/node_modules/is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "license": "MIT", "dependencies": { - "path-is-inside": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@types/d3-color": "*" } }, - "node_modules/codesandbox/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/d3-path": { + "version": "3.1.1", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" } }, - "node_modules/codesandbox/node_modules/latest-version": { + "node_modules/@types/d3-scale-chromatic": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "license": "MIT", "dependencies": { - "package-json": "^4.0.0" - }, - "engines": { - "node": ">=4" + "@types/d3-path": "*" } }, - "node_modules/codesandbox/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/@types/d3-time": { + "version": "3.0.4", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "license": "MIT", "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" + "@types/d3-selection": "*" } }, - "node_modules/codesandbox/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, - "node_modules/codesandbox/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "node_modules/@types/debug": { + "version": "4.1.12", + "license": "MIT", "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@types/ms": "*" } }, - "node_modules/codesandbox/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } + "node_modules/@types/deep-freeze-strict": { + "version": "1.1.2", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "node_modules/@types/estree": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "license": "MIT", "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@types/estree": "*" } }, - "node_modules/codesandbox/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/codesandbox/node_modules/ora": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", - "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", + "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": { - "chalk": "^2.1.0", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.0.1", - "log-symbols": "^2.1.0" - }, - "engines": { - "node": ">=4" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/codesandbox/node_modules/package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", + "node_modules/@types/geojson": { + "version": "7946.0.16", + "license": "MIT" + }, + "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", + "peer": true, "dependencies": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/codesandbox/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } + "node_modules/@types/gtag.js": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.20.tgz", + "integrity": "sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg==", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "node_modules/@types/hast": { + "version": "3.0.4", + "license": "MIT", "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "@types/unist": "*" } }, - "node_modules/codesandbox/node_modules/registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "node_modules/@types/history": { + "version": "4.7.11", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "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.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", "dependencies": { - "rc": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@types/node": "*" } }, - "node_modules/codesandbox/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/codesandbox/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/codesandbox/node_modules/semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", - "dependencies": { - "semver": "^5.0.3" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" }, - "node_modules/codesandbox/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==", + "node_modules/@types/mdast": { + "version": "4.0.4", + "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@types/unist": "*" } }, - "node_modules/codesandbox/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/@types/mdx": { + "version": "2.0.13", + "license": "MIT" }, - "node_modules/codesandbox/node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } + "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/codesandbox/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" }, - "node_modules/codesandbox/node_modules/update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "node_modules/@types/ms": { + "version": "0.7.34", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.7.5", + "license": "MIT", "dependencies": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "engines": { - "node": ">=4" + "undici-types": "~6.19.2" } }, - "node_modules/codesandbox/node_modules/widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "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": { - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/codesandbox/node_modules/xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", - "engines": { - "node": ">=4" - } + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "dev": true, + "license": "MIT" }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/@types/parse-json": { + "version": "4.0.2", + "license": "MIT" }, - "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/@types/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@types/node": "*" } }, - "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/@types/prismjs": { + "version": "1.26.4", + "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==" + "node_modules/@types/prop-types": { + "version": "15.7.13", + "license": "MIT" }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "node_modules/@types/punycode": { + "version": "2.1.4", + "license": "MIT", "peer": true }, - "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==", - "engines": { - "node": ">=10" - } + "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/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "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/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==", - "peer": true + "node_modules/@types/react": { + "version": "18.3.9", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } }, - "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==", - "engines": { - "node": ">= 6" + "node_modules/@types/react-alert": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" } }, - "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==" + "node_modules/@types/react-modal": { + "version": "3.16.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "peer": true + "node_modules/@types/react-reconciler": { + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.32.1.tgz", + "integrity": "sha512-RsqPttsBQ+6af0nATFXJJpemYQH7kL9+xLNm1z+0MjQFDKBZDM2R6SBrjdvRmHu9i9fM6povACj57Ft+pKRNOA==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "*" + } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@types/react-router": { + "version": "5.1.20", + "license": "MIT", "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" + "@types/history": "^4.7.11", + "@types/react": "*" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" } }, - "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==", + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" } }, - "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==" + "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/compression/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/@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/compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", + "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": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" + "@types/node": "*" } }, - "node_modules/compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "license": "MIT", + "peer": true, "dependencies": { - "compute-gcd": "^1.2.1", - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" + "@types/node": "*" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "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==", + "node_modules/@types/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "@types/node": "*" } }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "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": { - "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" + "@types/express": "*" } }, - "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==", + "node_modules/@types/serve-static": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "peer": true, + "node_modules/@types/serve-static/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": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "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==", - "engines": { - "node": ">=0.8" + "@types/mime": "^1", + "@types/node": "*" } }, - "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==", - "peer": true, + "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": { - "ms": "2.0.0" + "@types/node": "*" } }, - "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==", + "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", "peer": true }, - "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==" - }, - "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==" + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT", + "peer": 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/@types/trusted-types": { + "version": "2.0.7", + "license": "MIT", + "optional": true }, - "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==", - "engines": { - "node": ">= 0.6" - } + "node_modules/@types/unist": { + "version": "3.0.3", + "license": "MIT" }, - "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==", - "engines": { - "node": ">= 0.6" - } + "node_modules/@types/uuid": { + "version": "9.0.8", + "license": "MIT", + "peer": 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==" + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT", + "peer": true }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" + "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/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "deprecated": "This package is no longer supported.", + "node_modules/@types/yargs": { + "version": "17.0.33", + "license": "MIT", "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/copy-concurrently/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/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT" + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "toggle-selection": "^1.0.6" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "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==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "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" + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" }, "engines": { - "node": ">= 14.15.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "webpack": "^5.1.0" + "typescript": ">=4.8.4 <6.0.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==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" }, "engines": { - "node": ">=10.13.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "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==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "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==", + "node_modules/@typescript-eslint/types": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", - "hasInstallScript": true, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", - "hasInstallScript": true, + "node_modules/@typescript-eslint/visitor-keys/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": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/eslint" } }, - "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==" + "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/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/@vercel/edge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vercel/edge/-/edge-1.3.1.tgz", + "integrity": "sha512-k0tKWeYEWOv6qU6+Z8+hv2Nt/u3vFHRZdB0uvwE0DxoddU/5kWX/Chu8F6ojvqmRlnZwuX/7kyZFVeCP6DxqBg==", + "license": "Apache-2.0" + }, + "node_modules/@vimeo/player": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/@vimeo/player/-/player-2.29.0.tgz", + "integrity": "sha512-9JjvjeqUndb9otCCFd0/+2ESsLk7VkDE6sxOBy9iy2ukezuQbplVRi+g9g59yAurKofbmTi/KcKxBGO/22zWRw==", + "license": "MIT", "dependencies": { - "layout-base": "^1.0.0" + "native-promise-only": "0.8.1", + "weakmap-polyfill": "2.0.4" } }, - "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/@webassemblyjs/ast": { + "version": "1.12.1", + "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 - } + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "peer": true, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "license": "MIT", "dependencies": { - "buffer": "^5.1.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "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==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, - "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==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } }, - "node_modules/create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "license": "MIT", "dependencies": { - "capture-stack-trace": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "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==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "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" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "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/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "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" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "license": "MIT", "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "license": "MIT", "dependencies": { - "node-fetch": "^2.6.12" + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@xstate/fsm": { + "version": "2.1.0", + "license": "MIT", + "peer": true + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "license": "Apache-2.0" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.5" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": "*" + "node": ">= 0.6" } }, - "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==", - "dependencies": { - "type-fest": "^1.0.1" + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "engines": { - "node": "^14 || ^16 || >=18" - }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", "peerDependencies": { - "postcss": "^8.0.9" + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/css-functions-list": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", - "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", - "dev": true, + "node_modules/acorn-walk": { + "version": "8.3.4", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { - "node": ">=12 || >=16" + "node": ">=0.4.0" } }, - "node_modules/css-in-js-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", - "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", - "dependencies": { - "hyphenate-style-name": "^1.0.3" + "node_modules/address": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "node": ">= 10.0.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==", + "node_modules/aes-js": { + "version": "3.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/agent-base": { + "version": "4.3.0", + "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" + "es6-promisify": "^5.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "node": ">= 4.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "3.5.3", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "engines": { + "node": ">= 4.0.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==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "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" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "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": "opencollective", - "url": "https://opencollective.com/webpack" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" }, "peerDependencies": { - "webpack": "^5.0.0" + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { + "ajv": { "optional": true } } }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "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/fb55" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/css-selector-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==" + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.41.0.tgz", + "integrity": "sha512-9E4b3rJmYbBkn7e3aAPt1as+VVnRhsR4qwRRgOzpeyz4PAOuwKh0HI4AN6mTrqK0S0M9fCCSTOUnuJ8gPY/tvA==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.7.0", + "@algolia/client-abtesting": "5.41.0", + "@algolia/client-analytics": "5.41.0", + "@algolia/client-common": "5.41.0", + "@algolia/client-insights": "5.41.0", + "@algolia/client-personalization": "5.41.0", + "@algolia/client-query-suggestions": "5.41.0", + "@algolia/client-search": "5.41.0", + "@algolia/ingestion": "1.41.0", + "@algolia/monitoring": "1.41.0", + "@algolia/recommend": "5.41.0", + "@algolia/requester-browser-xhr": "5.41.0", + "@algolia/requester-fetch": "5.41.0", + "@algolia/requester-node-http": "5.41.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.1.tgz", + "integrity": "sha512-6ck2YFudF2Pje7szQoPBiRFTGfd+1I+0I/WfLPGn0bj1kvrFoOQmNyedNiDxTk3/r4IfSLDYk+RA4G7u8H6+yA==", + "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "@algolia/events": "^4.0.1" }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT", + "peer": true + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/css-tree/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==", + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/ansi-escapes": { + "version": "3.2.0", + "license": "MIT", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=4" } }, - "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==", + "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": { - "cssesc": "bin/cssesc" - }, + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" + "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/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">= 8" } }, - "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==", + "node_modules/apg-js": { + "version": "4.4.0", + "license": "BSD-2-Clause" + }, + "node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "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", + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "dev": true, + "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" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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-includes": { + "version": "3.1.8", + "dev": true, + "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" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "dev": true, + "license": "MIT", "dependencies": { - "css-tree": "~2.2.0" + "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": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "dev": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "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/cwd": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.9.1.tgz", - "integrity": "sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "dev": true, + "license": "MIT", "dependencies": { - "find-pkg": "^0.1.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">=0.8" - } - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==" - }, - "node_modules/cytoscape": { - "version": "3.30.2", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.2.tgz", - "integrity": "sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==", - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dependencies": { - "cose-base": "^1.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "cytoscape": "^3.2.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "dev": true, + "license": "MIT", "dependencies": { - "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" + "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": ">=12" + "node": ">= 0.4" } }, - "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==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "internmap": "1 - 2" + "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": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "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==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT", + "peer": true + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "license": "MIT", "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "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==", + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/assert": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" + "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/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==", + "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-function": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "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==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } + "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/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "node_modules/async-mutex": { + "version": "0.5.0", + "license": "MIT", + "peer": true, "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" + "tslib": "^2.4.0" } }, - "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==", - "engines": { - "node": ">=12" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "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==", + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "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": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=12" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "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==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "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" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "engines": { - "node": ">= 10" + "node_modules/axios": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.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==", - "engines": { - "node": ">=12" - } + "node_modules/b4a": { + "version": "1.6.7", + "license": "Apache-2.0", + "peer": true }, - "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==", + "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": { - "d3-dsv": "1 - 3" + "@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": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.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==", + "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": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "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==", - "engines": { - "node": ">=12" + "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/d3-geo": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", - "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "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", + "peer": true, "dependencies": { - "d3-array": "2.5.0 - 3" + "@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": ">=12" + "node": ">=8" } }, - "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==", + "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", + "peer": true, + "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": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "d3-color": "1 - 3" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">=12" + "node": ">=10", + "npm": ">=6" } }, - "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==", + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "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": ">=12" + "node": ">=10" } }, - "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==", + "node_modules/babel-plugin-macros/node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", "engines": { - "node": ">=12" + "node": ">= 6" } }, - "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==", - "engines": { - "node": ">=12" + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "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==", - "engines": { - "node": ">=12" + "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/d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "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": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" + "@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/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==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "license": "MIT", "dependencies": { - "internmap": "^1.0.0" + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.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==" - }, - "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==", + "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", + "peer": true, "dependencies": { - "d3-path": "1" + "hermes-parser": "0.29.1" } }, - "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==" - }, - "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==", + "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", + "peer": true, "dependencies": { - "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" + "@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" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, - "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==", + "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", + "peer": true, "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "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==", - "engines": { - "node": ">=12" + "node_modules/bail": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" }, - "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==", - "dependencies": { - "d3-array": "2 - 3" + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "peerDependencies": { + "bare-abort-controller": "*" }, - "engines": { - "node": ">=12" + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } } }, - "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==", + "node_modules/base-x": { + "version": "3.0.11", + "license": "MIT", + "peer": true, "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" + "safe-buffer": "^5.0.1" } }, - "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==", + "node_modules/base58-js": { + "version": "1.0.5", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 8" } }, - "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==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } + "node_modules/base64-js": { + "version": "1.5.1", + "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/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" + "node_modules/baseline-browser-mapping": { + "version": "2.10.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", + "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } + "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/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, + "node_modules/bcp-47-normalize": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", + "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "bcp-47": "^2.0.0", + "bcp-47-match": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/datauri": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/datauri/-/datauri-3.0.0.tgz", - "integrity": "sha512-NeDFuUPV1YCpCn8MUIcDk1QnuyenUHs7f4Q5P0n9FFA0neKFrfEH9esR+YMW95BplbYfdmjbs0Pl/ZGAaM2QHQ==", - "dependencies": { - "image-size": "0.8.3", - "mimer": "1.1.0" - }, + "node_modules/bech32": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "license": "MIT", "engines": { - "node": ">= 8" + "node": "*" } }, - "node_modules/datauri/node_modules/image-size": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.8.3.tgz", - "integrity": "sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==", - "dependencies": { - "queue": "6.0.1" - }, - "bin": { - "image-size": "bin/image-size.js" - }, + "node_modules/bignumber.js": { + "version": "9.3.0", + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "*" } }, - "node_modules/datauri/node_modules/queue": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz", - "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==", - "dependencies": { - "inherits": "~2.0.3" + "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/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==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, + "node_modules/binaryextensions": { + "version": "2.3.0", + "license": "MIT", "engines": { - "node": ">=0.11" + "node": ">=0.8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "url": "https://bevry.me/fund" } }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "node_modules/bitcoin-address-validation": { + "version": "2.2.3", + "license": "MIT", + "dependencies": { + "base58-js": "^1.0.0", + "bech32": "^2.0.0", + "sha256-uint8array": "^0.10.3" + } }, - "node_modules/debounce": { + "node_modules/blakejs": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + "license": "MIT", + "peer": true }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, + "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, + "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": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "2.0.0" } }, - "node_modules/decamelize-keys/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, + "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/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "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/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "node_modules/body-parser/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": { - "character-entities": "^2.0.0" + "ee-first": "1.1.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 0.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/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": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "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/boolbase": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/bowser": { + "version": "2.11.0", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "6.2.1", + "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": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "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==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-freeze-strict": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-freeze-strict/-/deep-freeze-strict-1.1.1.tgz", - "integrity": "sha512-QemROZMM2IvhAcCFvahdX2Vbm4S/txeq5rFYU9fh4mQP79WTMW5c/HkQ2ICl1zuzcDZdPZ6zarDxQeQMsVYoNA==" - }, - "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==", - "devOptional": true - }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "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==", - "peer": true, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "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/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==", - "engines": { - "node": ">=10" + "node_modules/browserify-cipher": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "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==", + "node_modules/browserify-des": { + "version": "1.0.2", + "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" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "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==", - "engines": { - "node": ">=8" + "node_modules/browserify-rsa": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "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/browserify-sign": { + "version": "4.2.3", + "license": "ISC", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.12" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "license": "MIT", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/delaunator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", - "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", "dependencies": { - "robust-predicates": "^3.0.2" + "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/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "peer": true + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "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==", - "engines": { - "node": ">= 0.8" + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "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/browserify-zlib": { + "version": "0.2.0", + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "pako": "~1.0.5" } }, - "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==" - }, - "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==" - }, - "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==", + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "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": { - "address": "^1.0.1", - "debug": "4" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "browserslist": "cli.js" }, "engines": { - "node": ">= 4.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "peer": true, "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" + "base-x": "^3.0.2" } }, - "node_modules/detect-port-alt/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/bs58check": { + "version": "2.1.2", + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.0.0" + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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==", + "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", + "peer": true, "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node-int64": "^0.4.0" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "engines": { - "node": ">=0.3.1" + "node_modules/buffer": { + "version": "5.7.1", + "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", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "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/buffer-alloc": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "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==", + "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", + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=8" + "node": ">=6.14.2" } }, - "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==", + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/builtins": { + "version": "1.0.3", + "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": { - "@leichtgewicht/ip-codec": "^2.0.1" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { + "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "devOptional": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 0.8" } }, - "node_modules/docusaurus-plugin-sass": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.5.tgz", - "integrity": "sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==", + "node_modules/cacache": { + "version": "9.3.0", + "license": "CC0-1.0", "dependencies": { - "sass-loader": "^10.1.1" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", - "sass": "^1.30.0" + "bluebird": "^3.5.0", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^1.3.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.1", + "ssri": "^4.1.6", + "unique-filename": "^1.1.0", + "y18n": "^3.2.1" } }, - "node_modules/docusaurus-plugin-segment": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-segment/-/docusaurus-plugin-segment-1.0.4.tgz", - "integrity": "sha512-kJT0wvhlursmjHNrrQDs7Ce6vAB+yjflr8P6T0s6LE87BPA2+KQ8ifyNb4PwSdX91OJ5bBYyb4V0T8EI8MtGWQ==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "4.1.5", + "license": "ISC", "dependencies": { - "@segment/snippet": "^4.13.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "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==", + "node_modules/cacache/node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", "dependencies": { - "utila": "~0.4" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" + "node_modules/cacache/node_modules/yallist": { + "version": "2.1.2", + "license": "ISC" + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=14.16" } }, - "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==", + "node_modules/cacheable-request": { + "version": "10.2.14", + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "@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" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=14.16" } }, - "node_modules/domain-browser": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", - "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "node_modules/cacheable-request/node_modules/http-cache-semantics": { + "version": "4.1.1", + "license": "BSD-2-Clause" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "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": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/sponsors/ljharb" } }, - "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" - } - ] + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "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": { - "domelementtype": "^2.3.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">= 4" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dompurify": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", - "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==" - }, - "node_modules/domutils": { + "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/camel-case": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "no-case": "^3.0.4", + "pascal-case": "^3.1.2", "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==", - "dependencies": { - "is-obj": "^2.0.0" - }, + "node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", "engines": { "node": ">=10" }, @@ -13352,2733 +13695,2687 @@ "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==", + "node_modules/camelcase-keys": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "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": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/duplexify/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/caniuse-lite": { + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", + "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/duplexify/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==", - "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/capture-stack-trace": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duplexify/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/duplexify/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==", + "node_modules/castable-video": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/castable-video/-/castable-video-1.1.10.tgz", + "integrity": "sha512-/T1I0A4VG769wTEZ8gWuy1Crn9saAfRTd1UYTb8xbOPlN78+zOi/1nU2dD5koNkfE5VWvgabkIqrGKmyNXOjSQ==", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "custom-media-element": "~1.4.5" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "node_modules/cbor-sync": { + "version": "1.0.4", + "license": "MIT", + "peer": true }, - "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==", - "dependencies": { - "safe-buffer": "^5.0.1" + "node_modules/ccount": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eciesjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.3.20.tgz", - "integrity": "sha512-Rz5AB8v9+xmMdS/R7RzWPe/R8DP5QfyrkA6ce4umJopoB5su2H2aDy/GcgIfwhmCwxnBkqGf/PbGzmKcGtIgGA==", - "dependencies": { - "@types/secp256k1": "^4.0.6", - "futoin-hkdf": "^1.5.3", - "secp256k1": "^5.0.0" + "node_modules/ce-la-react": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ce-la-react/-/ce-la-react-0.3.0.tgz", + "integrity": "sha512-84SEDLNHaAjykzlkqgKRq95hA3qnxrsTrwh4hTgBq6tfpINqajxz4bkz9q4orhUfpqDPQRgdCzYTF3bHcvTIlQ==", + "license": "BSD-3-Clause", + "peerDependencies": { + "react": ">=17.0.0" } }, - "node_modules/editions": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", - "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "errlop": "^2.0.0", - "semver": "^6.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.8" + "node": ">=10" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/editions/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "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/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==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", - "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==" - }, - "node_modules/elkjs": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", - "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==" - }, - "node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", - "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/character-entities": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "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==" - }, - "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==" + "node_modules/character-entities-html4": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/emojis-list": { + "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "engines": { - "node": ">= 0.8" - } + "node_modules/chardet": { + "version": "0.7.0", + "license": "MIT" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "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": { - "iconv-lite": "^0.6.2" + "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/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "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": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io-client": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", - "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1", - "xmlhttprequest-ssl": "~2.1.1" + "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/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "engines": { - "node": ">=10.0.0" + "node_modules/chevrotain": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.1.2.tgz", + "integrity": "sha512-opLQzEVriiH1uUQ4Kctsd49bRoFDXGGSC4GUqj7pGyxM3RehRhvTlZJc1FL/Flew2p5uwxa1tUDWKzI4wNM8pg==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.1.2", + "@chevrotain/gast": "11.1.2", + "@chevrotain/regexp-to-ast": "11.1.2", + "@chevrotain/types": "11.1.2", + "@chevrotain/utils": "11.1.2", + "lodash-es": "4.17.23" } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "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", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "lodash-es": "^4.17.21" }, - "engines": { - "node": ">=10.13.0" + "peerDependencies": { + "chevrotain": "^11.0.0" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "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": ">=0.12" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "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==", - "peer": true, - "engines": { - "node": ">=6" - } + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "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, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, "bin": { - "envinfo": "dist/cli.js" + "print-chrome-path": "bin/print-chrome-path.js" }, "engines": { - "node": ">=4" + "node": ">=12.13.0" } }, - "node_modules/err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==" - }, - "node_modules/errlop": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", - "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "license": "MIT", "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" + "node": ">=6.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==", + "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, "dependencies": { - "stackframe": "^1.3.4" + "@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/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "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", "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, + "node_modules/ci-info": { + "version": "3.9.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "source-map": "~0.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.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/clean-css/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + "node_modules/cli-boxes": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "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": { - "es-errors": "^1.3.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, + "node_modules/cli-table3": { + "version": "0.6.5", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "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==", + "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" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?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==" - }, - "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/cli-truncate/node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "devOptional": true, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "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" - }, - "bin": { - "eslint": "bin/eslint.js" + "ansi-regex": "^6.2.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", - "dev": true, + "node_modules/cli-width": { + "version": "2.2.1", + "license": "ISC" + }, + "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", + "peer": true, "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "node": ">=12" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/cliui/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", + "peer": true }, - "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, - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/cliui/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", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/cliui/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", + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "*" + "node": ">=8" } }, - "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, + "node_modules/cliui/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", + "peer": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "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/clone-deep": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/cloudflare-video-element": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/cloudflare-video-element/-/cloudflare-video-element-1.3.3.tgz", + "integrity": "sha512-qrHzwLmUhisoIuEoKc7iBbdzBNj2Pi7ThHslU/9U/6PY9DEvo4mh/U+w7OVuzXT9ks7ZXfARvDBfPAaMGF/hIg==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=6" } }, - "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==", - "devOptional": true, + "node_modules/cockatiel": { + "version": "3.2.1", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16" + } + }, + "node_modules/codem-isoboxer": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.10.tgz", + "integrity": "sha512-eNk3TRV+xQMJ1PEj0FQGY8KD4m0GPxT487XJ+Iftm7mVa9WpPFDMWqPt+46buiP5j5Wzqe5oMIhqBcAeKfygSA==", + "license": "MIT" + }, + "node_modules/codesandbox": { + "version": "2.2.3", + "license": "MIT", + "dependencies": { + "axios": "^0.18.1", + "chalk": "^2.4.1", + "codesandbox-import-util-types": "^2.2.3", + "codesandbox-import-utils": "^2.2.3", + "commander": "^2.9.0", + "datauri": "^3.0.0", + "filesize": "^3.6.1", + "fs-extra": "^3.0.1", + "git-branch": "^1.0.0", + "git-repo-name": "^0.6.0", + "git-username": "^0.5.0", + "humps": "^2.0.1", + "inquirer": "^6.2.2", + "lodash": "^4.17.5", + "lz-string": "^1.4.4", + "ms": "^2.0.0", + "open": "^6.3.0", + "ora": "^1.3.0", + "pacote": "^2.7.36", + "shortid": "^2.2.8", + "update-notifier": "^2.2.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "bin": { + "codesandbox": "lib/index.js" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "devOptional": true, + "node_modules/codesandbox-import-util-types": { + "version": "2.2.3" + }, + "node_modules/codesandbox-import-utils": { + "version": "2.1.11", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "codesandbox-import-util-types": "^2.1.9", + "istextorbinary": "^2.2.1", + "lz-string": "^1.4.4" } }, - "node_modules/eslint/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==", - "devOptional": true, + "node_modules/codesandbox/node_modules/ansi-align": { + "version": "2.0.0", + "license": "ISC", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "string-width": "^2.0.0" + } + }, + "node_modules/codesandbox/node_modules/ansi-regex": { + "version": "3.0.1", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=4" } }, - "node_modules/eslint/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==", - "devOptional": true, + "node_modules/codesandbox/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" } }, - "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==", - "devOptional": true, + "node_modules/codesandbox/node_modules/boxen": { + "version": "1.3.0", + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "devOptional": true, + "node_modules/codesandbox/node_modules/camelcase": { + "version": "4.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/codesandbox/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, + "node_modules/codesandbox/node_modules/ci-info": { + "version": "1.6.0", + "license": "MIT" + }, + "node_modules/codesandbox/node_modules/cli-boxes": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "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==", - "devOptional": true, + "node_modules/codesandbox/node_modules/cli-cursor": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "restore-cursor": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=4" } }, - "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==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/codesandbox/node_modules/cli-spinners": { + "version": "1.3.1", + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "devOptional": true, + "node_modules/codesandbox/node_modules/codesandbox-import-utils": { + "version": "2.2.3", "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "codesandbox-import-util-types": "^2.2.3", + "istextorbinary": "^2.2.1", + "lz-string": "^1.4.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==", + "node_modules/codesandbox/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "color-name": "1.1.3" + } + }, + "node_modules/codesandbox/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/codesandbox/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/codesandbox/node_modules/configstore": { + "version": "3.1.5", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/codesandbox/node_modules/crypto-random-string": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "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==", + "node_modules/codesandbox/node_modules/dot-prop": { + "version": "4.2.1", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "is-obj": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/estree-util-build-jsx": { + "node_modules/codesandbox/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/codesandbox/node_modules/filesize": { + "version": "3.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/codesandbox/node_modules/fs-extra": { "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" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, - "node_modules/estree-util-is-identifier-name": { + "node_modules/codesandbox/node_modules/get-stream": { "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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/codesandbox/node_modules/global-dirs": { + "version": "0.1.1", + "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" + "ini": "^1.3.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/estree-util-value-to-estree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz", - "integrity": "sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==", + "node_modules/codesandbox/node_modules/got": { + "version": "6.7.1", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/codesandbox/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/codesandbox/node_modules/import-lazy": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/codesandbox/node_modules/is-ci": { + "version": "1.2.1", + "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" + "ci-info": "^1.5.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "is-ci": "bin.js" } }, - "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/codesandbox/node_modules/is-installed-globally": { + "version": "0.1.0", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/codesandbox/node_modules/is-npm": { + "version": "1.0.0", + "license": "MIT", "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==", - "engines": { - "node": ">=6.0.0" + "node_modules/codesandbox/node_modules/is-path-inside": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.1" }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" + "engines": { + "node": ">=0.10.0" } }, - "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/codesandbox/node_modules/is-stream": { + "version": "1.1.0", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "node_modules/codesandbox/node_modules/is-wsl": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/eth-phishing-detect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eth-phishing-detect/-/eth-phishing-detect-1.2.0.tgz", - "integrity": "sha512-+M7D4dhu5tkSA9b5eiBwDeJCjwy+7Lv49nuTEw8fNZIZUAVZC3d2XHatBq1MOW7J8kxNGbBdgBuIf65opI7Tkg==", - "peer": true, - "dependencies": { - "fast-levenshtein": "^2.0.6" + "node_modules/codesandbox/node_modules/jsonfile": { + "version": "3.0.1", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "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==", + "node_modules/codesandbox/node_modules/latest-version": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "fast-safe-stringify": "^2.0.6" + "package-json": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "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/codesandbox/node_modules/log-symbols": { + "version": "2.2.0", + "license": "MIT", "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "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/codesandbox/node_modules/lowercase-keys": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codesandbox/node_modules/make-dir": { + "version": "1.3.0", + "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "pify": "^3.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=4" } }, - "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/codesandbox/node_modules/mimic-fn": { + "version": "1.2.0", + "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=4" } }, - "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==", - "peer": true, + "node_modules/codesandbox/node_modules/onetime": { + "version": "2.0.1", + "license": "MIT", "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" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "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==", - "peer": true, + "node_modules/codesandbox/node_modules/open": { + "version": "6.4.0", + "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" + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-util/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==", - "peer": true - }, - "node_modules/ethereumjs-util/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "peer": true, + "node_modules/codesandbox/node_modules/ora": { + "version": "1.4.0", + "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "chalk": "^2.1.0", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.0.1", + "log-symbols": "^2.1.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "peer": true, + "node_modules/codesandbox/node_modules/package-json": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ethereumjs-wallet/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==", - "peer": true, - "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" + "node_modules/codesandbox/node_modules/pify": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/ethereumjs-wallet/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==", - "peer": true + "node_modules/codesandbox/node_modules/registry-auth-token": { + "version": "3.4.0", + "license": "MIT", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } }, - "node_modules/ethereumjs-wallet/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "peer": true, + "node_modules/codesandbox/node_modules/registry-url": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "rc": "^1.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=0.10.0" } }, - "node_modules/ethers": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", - "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/codesandbox/node_modules/restore-cursor": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.17.1" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "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/codesandbox/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/codesandbox/node_modules/semver-diff": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" + "semver": "^5.0.3" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=0.10.0" } }, - "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==", - "engines": { - "node": ">= 16" + "node_modules/codesandbox/node_modules/string-width": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=4" } }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" - }, - "node_modules/ethers/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/ethers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "node_modules/codesandbox/node_modules/strip-ansi": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "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==", + "node_modules/codesandbox/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "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==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/codesandbox/node_modules/unique-string": { + "version": "1.0.0", + "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" + "crypto-random-string": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=4" } }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" - }, - "node_modules/expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", - "dependencies": { - "os-homedir": "^1.0.1" - }, + "node_modules/codesandbox/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "peer": true - }, - "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "node_modules/codesandbox/node_modules/update-notifier": { + "version": "2.5.0", + "license": "BSD-2-Clause", "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.6.0", - "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.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.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" + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=4" } }, - "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==", + "node_modules/codesandbox/node_modules/widest-line": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "string-width": "^2.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "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==", - "dependencies": { - "ms": "2.0.0" + "node_modules/codesandbox/node_modules/xdg-basedir": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" + "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/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/color-convert": { + "version": "2.0.1", + "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.1", - "unpipe": "~1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8" + "node": ">=7.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==" + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/express/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/colord": { + "version": "2.9.3", + "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", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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==", "dependencies": { - "ee-first": "1.1.1" + "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" - }, - "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==", - "engines": { - "node": ">= 0.6" + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/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/commander": { + "version": "5.1.0", + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 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==" + "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/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/extension-port-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-4.2.0.tgz", - "integrity": "sha512-i5IgiPVMVrHN+Zx8PRjvFsOw8L1A3sboVwPZghDjW9Yp1BMmBDE6mCcTNu4xMXPYduBOwI3CBK7wd72LcOyD6g==", + "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": { - "readable-stream": "^3.6.2 || ^4.4.2" + "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": ">=12.0.0" - }, - "peerDependencies": { - "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" + "node": ">= 0.8.0" } }, - "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==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, + "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": ">=4" + "node": ">= 0.8" } }, - "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/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": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "ms": "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/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/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==", - "peer": true + "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", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/compute-gcd": { + "version": "1.2.1", "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.4" - }, - "engines": { - "node": ">=8.6.0" + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.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==" - }, - "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==" - }, - "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==" - }, - "node_modules/fast-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", - "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" - }, - "node_modules/fast-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", - "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "node_modules/compute-lcm": { + "version": "1.1.2", "dependencies": { - "punycode": "^1.3.2" + "compute-gcd": "^1.2.1", + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" } }, - "node_modules/fast-url-parser/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==" + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" }, - "node_modules/fast-xml-parser": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", - "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } + "node_modules/concat-stream": { + "version": "2.0.0", + "engines": [ + "node >= 6.0" ], + "license": "MIT", + "peer": true, "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "engines": { - "node": ">= 4.9.1" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/fastest-stable-stringify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" + "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/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/config-chain": { + "version": "1.1.13", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "node_modules/configstore": { + "version": "6.0.0", + "license": "BSD-2-Clause", "dependencies": { - "format": "^0.2.0" + "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": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/yeoman/configstore?sponsor=1" } }, - "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==", + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "license": "ISC", "dependencies": { - "websocket-driver": ">=0.5.1" + "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", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.10.0" } }, - "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==", + "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/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": { - "bser": "2.1.1" + "ms": "2.0.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==", - "dependencies": { - "xml-js": "^1.6.11" - }, + "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/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, + "node_modules/console-browserify": { + "version": "1.2.0" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "license": "MIT" + }, + "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": ">=4" + "node": ">= 0.6" } }, - "node_modules/figures/node_modules/escape-string-regexp": { + "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "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==", - "devOptional": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.6" } }, - "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==", + "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/copy-concurrently": { + "version": "1.0.5", + "license": "ISC", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", + "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", + "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "toggle-selection": "^1.0.6" + } + }, + "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": ">= 10.13.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/file-name": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/file-name/-/file-name-0.1.0.tgz", - "integrity": "sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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/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": { - "to-regex-range": "^5.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", - "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", - "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "peer": true, + "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": { - "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" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.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==", - "peer": true, - "dependencies": { - "ms": "2.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "peer": true - }, - "node_modules/find-cache-dir": { + "node_modules/copy-webpack-plugin/node_modules/slash": { "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==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-file-up": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", - "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", - "dependencies": { - "fs-exists-sync": "^0.1.0", - "resolve-dir": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/core-js": { + "version": "3.38.1", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/find-pkg": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", - "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "license": "MIT", "dependencies": { - "find-file-up": "^0.1.2" + "browserslist": "^4.28.1" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "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/core-util-is": { + "version": "1.0.3", + "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==", + "node_modules/cose-base": { + "version": "1.0.3", + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "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": ">=10" + "node": ">=14" }, "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==", - "bin": { - "flat": "cli.js" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": 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==", - "devOptional": true, + "node_modules/crc": { + "version": "3.8.0", + "license": "MIT", + "peer": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "buffer": "^5.1.0" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "devOptional": true - }, - "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==", - "peer": true - }, - "node_modules/flow-parser": { - "version": "0.246.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.246.0.tgz", - "integrity": "sha512-WHRizzSrWFTcKo7cVcbP3wzZVhzsoYxoWqbnH4z+JXGqrjVmnsld6kBZWVlB200PwD5ur8r+HV3KUDxv3cHhOQ==", - "peer": true, + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, "engines": { - "node": ">=0.4.0" + "node": ">=0.8" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/create-ecdh": { + "version": "4.0.4", + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/flush-write-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/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/flush-write-stream/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/create-error-class": { + "version": "3.0.2", + "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" + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/flush-write-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/flush-write-stream/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==", + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.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/fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" + "node_modules/create-hmac": { + "version": "1.1.7", + "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" + } }, - "node_modules/follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "node_modules/cron-parser": { + "version": "4.9.0", + "license": "MIT", "dependencies": { - "debug": "=3.1.0" + "luxon": "^3.2.1" }, "engines": { - "node": ">=4.0" + "node": ">=12.0.0" } }, - "node_modules/follow-redirects/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "node-fetch": "^2.7.0" } }, - "node_modules/follow-redirects/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "node_modules/crypto-browserify": { + "version": "3.12.0", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" }, "engines": { - "node": ">=10", - "yarn": ">=1.0.0" + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "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": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/fork-ts-checker-webpack-plugin/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==", + "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": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "peer": true, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, + "node_modules/css-declaration-sorter": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", + "license": "ISC", "engines": { - "node": ">= 8.9.0" + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/css-functions-list": { + "version": "3.2.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12 || >=16" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "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": ">= 6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">= 14.17" + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "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": ">=0.4.x" + "node": ">=4" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "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": ">= 0.6" + "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/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "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": "*" + "node": ">= 14.15.0" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "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/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "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": ">= 0.6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "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": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "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/from2/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/from2/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/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "peer": true, "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" + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" } }, - "node_modules/from2/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/from2/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==", + "node_modules/css-tree": { + "version": "2.3.1", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "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/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==" - }, - "node_modules/fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "node_modules/css-what": { + "version": "6.1.0", + "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "node_modules/cssdb": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", + "integrity": "sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==", + "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", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=14.14" + "node": ">=4" } }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "deprecated": "This package is no longer supported.", + "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": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "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/fs-write-stream-atomic/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/fs-write-stream-atomic/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/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": { - "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" + "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/fs-write-stream-atomic/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/fs-write-stream-atomic/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==", + "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": { - "safe-buffer": "~5.1.0" + "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/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "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, - "optional": true, - "os": [ - "darwin" - ], + "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": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "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": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "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, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "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/futoin-hkdf": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz", - "integrity": "sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==", + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/custom-media-element": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/custom-media-element/-/custom-media-element-1.4.5.tgz", + "integrity": "sha512-cjrsQufETwxjvwZbYbKBCJNvmQ2++G9AvT45zDi7NXL9k2PdVcs2h0jQz96J6G4TMKRCcEsoJ+QTgQD00Igtjw==", + "license": "MIT" + }, + "node_modules/cwd": { + "version": "0.9.1", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/genfun": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz", - "integrity": "sha512-48yv1eDS5Qrz6cbSDBBik0u7jCgC/eA9eZrl9MIN1LfKzFTuGt6EHgr31YM8yT9cjb5BplXb4Iz3VtOYmgt8Jg==" + "node_modules/cyclist": { + "version": "1.0.2", + "license": "MIT" }, - "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/cytoscape": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", + "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=0.10" } }, - "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==", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" + "cose-base": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "cytoscape": "^3.2.0" } }, - "node_modules/get-npm-tarball-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz", - "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==", - "peer": true, - "engines": { - "node": ">=12.17" + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" } }, - "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==" + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "license": "MIT" }, - "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==", - "engines": { - "node": ">=10" + "node_modules/d3": { + "version": "7.9.0", + "license": "ISC", + "dependencies": { + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, + "node_modules/d3-array": { + "version": "3.2.4", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "internmap": "1 - 2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/git-branch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/git-branch/-/git-branch-1.0.0.tgz", - "integrity": "sha512-ZTzuqw5Df8fyLXQWrX6hK+4FpNCdKzMcERlxENEGO5aKcLmG7MAszhrMhluUKNKmOS/JAGijDMQDXDCDw1mE/A==", + "node_modules/d3-axis": { + "version": "3.0.0", + "license": "ISC", "engines": { - "node": ">=0.8" + "node": ">=12" } }, - "node_modules/git-config-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", - "integrity": "sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==", + "node_modules/d3-brush": { + "version": "3.0.0", + "license": "ISC", "dependencies": { - "extend-shallow": "^2.0.1", - "fs-exists-sync": "^0.1.0", - "homedir-polyfill": "^1.0.0" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/git-repo-name": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/git-repo-name/-/git-repo-name-0.6.0.tgz", - "integrity": "sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==", + "node_modules/d3-chord": { + "version": "3.0.1", + "license": "ISC", "dependencies": { - "cwd": "^0.9.1", - "file-name": "^0.1.0", - "lazy-cache": "^1.0.4", - "remote-origin-url": "^0.5.1" + "d3-path": "1 - 3" }, "engines": { - "node": ">=0.8" + "node": ">=12" } }, - "node_modules/git-username": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/git-username/-/git-username-0.5.1.tgz", - "integrity": "sha512-xjUjrj3i4kup2A3a/ZVZB1Nt0PUX7SU7KeVqIbXPdslT7NbNfyO04JMxBv4gar77JePdS+A6f05jG1Viy6+U1w==", - "dependencies": { - "remote-origin-url": "^0.4.0" - }, + "node_modules/d3-color": { + "version": "3.1.0", + "license": "ISC", "engines": { - "node": ">=0.8" + "node": ">=12" } }, - "node_modules/git-username/node_modules/parse-git-config": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-0.2.0.tgz", - "integrity": "sha512-amapZFADOJtHvX2URcRfbzG2OFcW+UAwmdK2kht2N2vsH5Py65VxI5yZTlD2DjmxVhTz6htFoVCxROYUJaYOXQ==", + "node_modules/d3-contour": { + "version": "4.0.2", + "license": "ISC", "dependencies": { - "ini": "^1.3.3" + "d3-array": "^3.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/git-username/node_modules/remote-origin-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.4.0.tgz", - "integrity": "sha512-HYhdsT2pNd0LP4Osb0vtQ1iassxIc3Yk1oze7j8dMJFciMkW8e0rdg9E/mOunqtSVHSzvMfwLDIYzPnEDmpk6Q==", + "node_modules/d3-delaunay": { + "version": "6.0.4", + "license": "ISC", "dependencies": { - "parse-git-config": "^0.2.0" + "delaunator": "5" }, "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "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==" + "node_modules/d3-dispatch": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "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/d3-drag": { + "version": "3.0.0", + "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" + "d3-dispatch": "1 - 3", + "d3-selection": "3" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "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==", + "node_modules/d3-dsv": { + "version": "3.0.1", + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "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" }, "engines": { - "node": ">= 6" + "node": ">=12" } }, - "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==" + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/d3-ease": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/d3-fetch": { + "version": "3.0.1", + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "d3-dsv": "1 - 3" }, "engines": { - "node": "*" + "node": ">=12" } }, - "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==", + "node_modules/d3-force": { + "version": "3.0.0", + "license": "ISC", "dependencies": { - "ini": "2.0.0" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "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==", + "node_modules/d3-format": { + "version": "3.1.0", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "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==", + "node_modules/d3-geo": { + "version": "3.1.1", + "license": "ISC", "dependencies": { - "global-prefix": "^3.0.0" + "d3-array": "2.5.0 - 3" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "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==", + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "license": "ISC", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "d3-color": "1 - 3" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "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==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node_modules/d3-path": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/d3-polygon": { + "version": "3.0.1", + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=12" } }, - "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, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "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" - }, + "node_modules/d3-random": { + "version": "3.0.1", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true + "node_modules/d3-sankey": { + "version": "0.12.3", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } }, - "node_modules/gopd": { + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "license": "ISC", "dependencies": { - "get-intrinsic": "^1.1.3" + "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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "license": "ISC", "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" + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=12" } }, - "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==", + "node_modules/d3-selection": { + "version": "3.0.0", + "license": "ISC", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">=12" } }, - "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==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "devOptional": true - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "node_modules/d3-shape": { + "version": "3.2.0", + "license": "ISC", "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" + "d3-path": "^3.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=12" } }, - "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==", + "node_modules/d3-time": { + "version": "3.1.0", + "license": "ISC", "dependencies": { - "sprintf-js": "~1.0.2" + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/gray-matter/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/d3-time-format": { + "version": "4.1.0", + "license": "ISC", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "d3-time": "1 - 3" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=12" } }, - "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==", + "node_modules/d3-timer": { + "version": "3.0.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "license": "ISC", "dependencies": { - "duplexer": "^0.1.2" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "d3-selection": "2 - 3" } }, - "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==" - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, + "node_modules/d3-zoom": { + "version": "3.0.0", + "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": ">=6" + "node": ">=12" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" } }, - "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==", - "engines": { - "node": ">=8" + "node_modules/dash-video-element": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/dash-video-element/-/dash-video-element-0.1.6.tgz", + "integrity": "sha512-4gHShaQjcFv6diX5EzB6qAdUGKlIUGGZY8J8yp2pQkWqR0jX4c6plYy0cFraN7mr0DZINe8ujDN1fssDYxJjcg==", + "license": "MIT", + "dependencies": { + "custom-media-element": "^1.4.5", + "dashjs": "^5.0.3" } }, - "node_modules/has-property-descriptors": { + "node_modules/dashjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/dashjs/-/dashjs-5.0.3.tgz", + "integrity": "sha512-TXndNnCUjFjF2nYBxDVba+hWRpVkadkQ8flLp7kHkem+5+wZTfRShJCnVkPUosmjS0YPE9fVNLbYPJxHBeQZvA==", + "license": "BSD-3-Clause", + "dependencies": { + "@svta/common-media-library": "^0.12.4", + "bcp-47-match": "^2.0.3", + "bcp-47-normalize": "^2.3.0", + "codem-isoboxer": "0.3.10", + "fast-deep-equal": "3.1.3", + "html-entities": "^2.5.2", + "imsc": "^1.1.5", + "localforage": "^1.10.0", + "path-browserify": "^1.0.1", + "ua-parser-js": "^1.0.37" + } + }, + "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -16086,23 +16383,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "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/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, - "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/data-view-byte-offset": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16111,636 +16415,561 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-yarn": { + "node_modules/datauri": { "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==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "MIT", + "dependencies": { + "image-size": "0.8.3", + "mimer": "1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/datauri/node_modules/image-size": { + "version": "0.8.3", + "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "queue": "6.0.1" + }, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/hash-color-material": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash-color-material/-/hash-color-material-1.1.3.tgz", - "integrity": "sha512-SkyBUHHWqaLI5+wUWvEcvy0i4bvf/lrr7xauh6LB7Z/gkD8dYoQpemNA42Zy3KZ970GuuUYL+txRn1B+Xgaf0g==" - }, - "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/datauri/node_modules/queue": { + "version": "6.0.1", + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "~2.0.3" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "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", "dependencies": { - "function-bind": "^1.1.2" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.3.tgz", - "integrity": "sha512-NuBoUStp4fRwmvlfbidlEiRSTk0gSHm+97q4Xn9CJ10HO+Py7nlTuDi6RhM1qLOureukGrCXLG7AAxaGqqyslQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "web-namespaces": "^2.0.0" + "node": ">=0.11" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/date-fns" } }, - "node_modules/hast-to-hyperscript/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==" + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT" }, - "node_modules/hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/debounce": { + "version": "1.2.1", + "license": "MIT" }, - "node_modules/hast-util-from-parse5/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/debug": { + "version": "4.3.7", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/hast-util-from-parse5/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==" - }, - "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" + "node_modules/decamelize": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "@types/hast": "^2.0.0" + "character-entities": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hast-util-parse-selector/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/decompress-response": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-parse-selector/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==" - }, - "node_modules/hast-util-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.0.0.tgz", - "integrity": "sha512-3UKuYgaqakZrY916JfQzqSk8xZGyxpj9zwfPB3MctXLDorPdyqk1QZGZoCEqU2LMIEzVXBZukAQs7aAH9TJPIw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "@types/unist": "^2.0.3", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-raw/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "dependencies": { - "@types/unist": "^2" + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" } }, - "node_modules/hast-util-raw/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==" + "node_modules/deep-freeze-strict": { + "version": "1.1.1", + "license": "public domain" }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/hast-util-raw/node_modules/unist-util-is": { + "node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-raw/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", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-raw/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/defer-to-connect": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=10" } }, - "node_modules/hast-util-raw/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-raw/node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@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/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/hast-util-raw/node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-sanitize": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz", - "integrity": "sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==", + "node_modules/delaunator": { + "version": "5.0.1", + "license": "ISC", "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "robust-predicates": "^3.0.2" } }, - "node_modules/hast-util-sanitize/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "dependencies": { - "@types/unist": "^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==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/hast-util-sanitize/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==" + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "node_modules/dequal": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "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": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/hast-util-to-estree/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==", - "dependencies": { - "@types/hast": "^3.0.0" + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10" } }, - "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==", + "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", + "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" + "address": "^1.0.1", + "debug": "4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "node_modules/devlop": { + "version": "1.1.0", + "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": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" + "dequal": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/hast-util-to-jsx-runtime/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==", + "node_modules/diffie-hellman": { + "version": "5.0.3", + "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", "dependencies": { - "inline-style-parser": "0.2.4" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "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==", + "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": { - "@types/unist": "^3.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", + "node_modules/docusaurus-plugin-llms": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-llms/-/docusaurus-plugin-llms-0.2.2.tgz", + "integrity": "sha512-DZlZ6cv9p5poFE00Qg78aurBNWhLa4o0VhH4kI33DUT0y4ydlFEJJbf8Bks9BuuGPFbY/Guebn+hRc2QymMImg==", "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "gray-matter": "^4.0.3", + "minimatch": "^9.0.3", + "yaml": "^2.8.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/core": "^3.0.0" } }, - "node_modules/hast-util-to-parse5/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/docusaurus-plugin-sass": { + "version": "0.2.5", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "sass-loader": "^10.1.1" + }, + "peerDependencies": { + "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", + "sass": "^1.30.0" } }, - "node_modules/hast-util-to-parse5/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==" - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/dom-converter": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "utila": "~0.4" } }, - "node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "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": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/hastscript/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "dependencies": { - "@types/unist": "^2" + "node_modules/domain-browser": { + "version": "4.23.0", + "license": "Artistic-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/hastscript/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==" + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/hdkey": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-2.1.0.tgz", - "integrity": "sha512-i9Wzi0Dy49bNS4tXXeGeu0vIcn86xXdPQUpEYg+SO1YiO8HtomjmmRMaRyqL0r59QfcD4PfVbSF3qmsWFwAemA==", - "peer": true, + "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": { - "bs58check": "^2.1.2", - "ripemd160": "^2.0.2", - "safe-buffer": "^5.1.1", - "secp256k1": "^4.0.0" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/hdkey/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==", - "peer": true + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } }, - "node_modules/hdkey/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "peer": true, + "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": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, - "engines": { - "node": ">=10.0.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "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==", - "bin": { - "he": "bin/he" + "node_modules/dot-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/hermes-estree": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.22.0.tgz", - "integrity": "sha512-FLBt5X9OfA8BERUdc6aZS36Xz3rRuB0Y/mfocSADWEJfomc1xfene33GdyAmtTkKTBXTN/EgAy+rjTKkkZJHlw==", - "peer": true - }, - "node_modules/hermes-parser": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.22.0.tgz", - "integrity": "sha512-gn5RfZiEXCsIWsFGsKiykekktUoh0PdFWYocXsUdZIyWSckT6UIyPcyyUIPSR3kpnELWeK3n3ztAse7Mat6PSA==", - "peer": true, + "node_modules/dot-prop": { + "version": "6.0.1", + "license": "MIT", "dependencies": { - "hermes-estree": "0.22.0" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "license": "MIT", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "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/dotenv": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz", + "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/hmac-drbg": { + "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^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==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "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==" - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "license": "MIT", "dependencies": { - "parse-passwd": "^1.0.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "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==" + "node_modules/duplexer": { + "version": "0.1.2", + "license": "MIT" }, - "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==", + "node_modules/duplexer3": { + "version": "0.1.5", + "license": "BSD-3-Clause" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "license": "MIT", "dependencies": { + "end-of-stream": "^1.0.0", "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "node_modules/hpack.js/node_modules/isarray": { + "node_modules/duplexify/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": { + "node_modules/duplexify/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", @@ -16751,2247 +16980,2116 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { + "node_modules/duplexify/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": { + "node_modules/duplexify/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-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" }, - "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==" + "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": { + "safe-buffer": "^5.0.1" + } }, - "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==", + "node_modules/eciesjs": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.15.tgz", + "integrity": "sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==", + "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" + "@ecies/ciphers": "^0.2.3", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.1", + "@noble/hashes": "^1.8.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "bun": ">=1", + "deno": ">=2", + "node": ">=16" } }, - "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==", + "node_modules/eciesjs/node_modules/@ecies/ciphers": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.4.tgz", + "integrity": "sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==", + "license": "MIT", "engines": { - "node": ">=14" + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + }, + "peerDependencies": { + "@noble/ciphers": "^1.0.0" } }, - "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==", + "node_modules/eciesjs/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": ">=8" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "node_modules/editions": { + "version": "2.3.1", + "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" + "errlop": "^2.0.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.8" }, "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==", - "engines": { - "node": ">= 12" + "url": "https://bevry.me/fund" } }, - "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==", - "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" - }, + "node_modules/editions/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" + "semver": "bin/semver.js" } }, - "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" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + "node_modules/electron-to-chromium": { + "version": "1.5.343", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.343.tgz", + "integrity": "sha512-YHnQ3MXI08icvL9ZKnEBy05F2EQ8ob01UaMOuMbM8l+4UcAq6MPPbBTJBbsBUg3H8JeZNt+O4fjsoWth3p6IFg==", + "license": "ISC" }, - "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==" + "node_modules/elkjs": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", + "license": "EPL-2.0" }, - "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==", + "node_modules/elliptic": { + "version": "6.6.1", + "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" + "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/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==", - "engines": { - "node": ">= 0.8" - } + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "node_modules/emoji-regex": { + "version": "9.2.2", + "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==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, + "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", + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 4" } }, - "node_modules/http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dependencies": { - "agent-base": "4", - "debug": "3.1.0" - }, + "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": "1.0.2", + "license": "MIT", "engines": { - "node": ">= 4.5.0" + "node": ">= 0.8" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "iconv-lite": "^0.6.2" } }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "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" - }, + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, - "peerDependencies": { - "@types/express": "^4.17.13" + "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" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "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==", + "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", "engines": { - "node": ">=10" + "node": ">=18" }, "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==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, + "node_modules/err-code": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/errlop": { + "version": "2.2.0", + "license": "MIT", "engines": { - "node": ">=10.19.0" + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "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/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "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, "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "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.3", + "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.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "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-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.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.18" }, "engines": { - "node": ">= 4.5.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "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==", + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">= 0.4" } }, - "node_modules/humanize-ms": { + "node_modules/es-iterator-helpers": { "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" + "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/humps": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", - "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==" - }, - "node_modules/hyphenate-style-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" - }, - "node_modules/i18next": { - "version": "23.11.5", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz", - "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==", - "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" - } - ], - "dependencies": { - "@babel/runtime": "^7.23.2" - } + "node_modules/es-module-lexer": { + "version": "1.5.4", + "license": "MIT" }, - "node_modules/i18next-browser-languagedetector": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz", - "integrity": "sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA==", + "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": { - "@babel/runtime": "^7.19.4" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "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/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "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==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" } }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "punycode": "2.1.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "engines": { - "node": ">=6" + "node_modules/es6-promise": { + "version": "4.2.8", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" } }, - "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" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "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": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", - "url": "https://opencollective.com/immer" + "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==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "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": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/escape-goat": { + "version": "4.0.0", + "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/indent-string": { + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { "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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/infima": { - "version": "0.2.0-alpha.44", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.44.tgz", - "integrity": "sha512-tuRkUSO/lB3rEhLJk25atwAjgLuzq070+pOW8XcvpHky/YbENnRRdPd85IBkyeTgttmOy5ah+yHYsK1HhUd4lQ==", + "node_modules/eslint": { + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", + "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.35.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "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.", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "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/inline-style-prefixer": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", - "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", "dependencies": { - "css-in-js-utils": "^3.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/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==", - "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/inquirer/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/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "color-convert": "^1.9.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/inquirer/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/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", "dependencies": { - "restore-cursor": "^2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/inquirer/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==", - "dependencies": { - "color-name": "1.1.3" + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/inquirer/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==" - }, - "node_modules/inquirer/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==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.8.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/inquirer/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==", + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", + "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/inquirer/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/inquirer/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "mimic-fn": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, + "node_modules/eslint/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": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/inquirer/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/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/inquirer/node_modules/string-width/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/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/inquirer/node_modules/string-width/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==", + "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": { - "ansi-regex": "^3.0.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/inquirer/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==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, + "node_modules/espree/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": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/inquirer/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==", - "dependencies": { - "has-flag": "^3.0.0" + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/esquery": { + "version": "1.6.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10" } }, - "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==", + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.10" + "node": ">=4.0" } }, - "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/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": { - "loose-envify": "^1.0.0" + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "engines": { - "node": ">= 10" + "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/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==", + "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": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "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": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, + "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": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" + "@types/estree": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/remcohaszing" } }, - "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==" - }, - "node_modules/is-async-function": { + "node_modules/estree-util-visit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "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": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/estree": "^1.0.0" } }, - "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==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "node_modules/eta": { + "version": "2.2.0", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "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" - } - ], + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "license": "ISC", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" } }, - "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==", + "node_modules/eth-rpc-errors": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" + "fast-safe-stringify": "^2.0.6" } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "@noble/hashes": "1.4.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.4.0", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "license": "MPL-2.0", + "peer": true, + "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/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "license": "MIT", "peer": true, - "engines": { - "node": ">=0.10.0" + "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" } }, - "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==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/ethereumjs-wallet": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "aes-js": "^3.1.2", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^7.1.2", + "randombytes": "^2.1.0", + "scrypt-js": "^3.0.1", + "utf8": "^3.0.0", + "uuid": "^8.3.2" } }, - "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/ethereumjs-wallet/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "license": "MIT", + "peer": true, + "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" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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": ">=0.10.0" + "node": ">=14.0.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "@noble/hashes": "1.3.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/ethers/node_modules/aes-js": { + "version": "4.0.0-beta.5", + "license": "MIT" + }, + "node_modules/eval": { + "version": "0.1.8", "dependencies": { - "has-tostringtag": "^1.0.0" + "@types/node": "*", + "require-like": ">= 0.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.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==", - "dependencies": { - "is-extglob": "^2.1.1" - }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "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/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "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", + "license": "MIT", "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=0.8.x" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "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==", + "node_modules/execa": { + "version": "5.1.1", + "license": "MIT", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "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/sponsors/sindresorhus" - } - }, - "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==", - "peer": true, - "engines": { - "node": ">=8" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/exenv": { + "version": "1.2.2", + "license": "BSD-3-Clause" }, - "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==", + "node_modules/expand-tilde": { + "version": "1.2.2", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "os-homedir": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "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/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.10.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==", - "engines": { - "node": ">=0.12.0" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "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": { - "has-tostringtag": "^1.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "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==", - "engines": { - "node": ">=0.10.0" + "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/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/express/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": ">=6" + "node": ">= 0.8" } }, - "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==", + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "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.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.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/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==", + "node_modules/express/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": { - "isobject": "^3.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", - "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "node_modules/express/node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "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.10.0" + "node": ">= 0.6" } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "node_modules/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": ">=6" + "node": ">= 0.8" } }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, + "node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "is-extendable": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "node_modules/extension-port-stream": { + "version": "4.2.0", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" + "readable-stream": "^3.6.2 || ^4.4.2" }, "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "node_modules/external-editor": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.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==" + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "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==", - "peer": true, - "engines": { - "node": ">=10" + "node_modules/fast-fifo": { + "version": "1.3.2", + "license": "MIT", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "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.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" }, - "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==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.6.tgz", + "integrity": "sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "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": { - "call-bind": "^1.0.2" + "format": "^0.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, + "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": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.0" } }, - "node_modules/is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", - "engines": { - "node": ">=0.10.0" + "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", + "peer": true, + "dependencies": { + "bser": "2.1.1" } }, - "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/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": { - "is-docker": "^2.0.0" + "xml-js": "^1.6.11" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "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==", + "node_modules/figures": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "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==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/istextorbinary": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz", - "integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==", + "node_modules/file-entry-cache/node_modules/flat-cache": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "binaryextensions": "^2.1.2", - "editions": "^2.2.0", - "textextensions": "^2.5.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=16" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, + "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": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "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/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==", - "peer": true, + "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": { - "@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" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "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==", - "peer": true, + "node_modules/file-name": { + "version": "0.1.0", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "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==", - "peer": true, + "node_modules/fill-range": { + "version": "7.1.1", + "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" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-message-util/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==", - "peer": true, + "node_modules/filter-obj": { + "version": "2.0.2", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-message-util/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/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "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/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", "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "2.0.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==", - "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/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", + "peer": 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==", - "peer": true, + "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": { - "@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" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/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==", - "peer": true, - "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/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==", - "peer": true, + "node_modules/find-file-up": { + "version": "0.1.3", + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.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==", + "node_modules/find-pkg": { + "version": "0.1.2", + "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "find-file-up": "^0.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.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==", + "node_modules/find-root": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "node_modules/flat": { + "version": "5.0.2", + "license": "BSD-3-Clause", "bin": { - "jiti": "bin/jiti.js" + "flat": "cli.js" } }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", "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/jotai": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", - "integrity": "sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@babel/core": "*", - "@babel/template": "*", - "jotai-devtools": "*", - "jotai-immer": "*", - "jotai-optics": "*", - "jotai-redux": "*", - "jotai-tanstack-query": "*", - "jotai-urql": "*", - "jotai-valtio": "*", - "jotai-xstate": "*", - "jotai-zustand": "*", - "react": ">=16.8" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@babel/template": { - "optional": true - }, - "jotai-devtools": { - "optional": true - }, - "jotai-immer": { - "optional": true - }, - "jotai-optics": { - "optional": true - }, - "jotai-redux": { - "optional": true - }, - "jotai-tanstack-query": { - "optional": true - }, - "jotai-urql": { - "optional": true - }, - "jotai-valtio": { - "optional": true - }, - "jotai-xstate": { - "optional": true - }, - "jotai-zustand": { - "optional": true - } - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "engines": { - "node": ">=14" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" }, - "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==" + "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/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/flush-write-stream": { + "version": "1.1.1", + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "node_modules/jsbi": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz", - "integrity": "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==", - "peer": true + "node_modules/flush-write-stream/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/jsc-android": { - "version": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", - "peer": true + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "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/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==", - "peer": true + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "peer": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - }, - "node_modules/json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", "dependencies": { - "lodash": "^4.17.4" + "is-callable": "^1.1.3" } }, - "node_modules/json-schema-merge-allof": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dependencies": { - "compute-lcm": "^1.1.2", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.20" + "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": ">=12.0.0" + "node": ">= 6" } }, - "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/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==", - "devOptional": 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==", - "bin": { - "json5": "lib/cli.js" - }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 14.17" } }, - "node_modules/jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "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/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "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.10.0" + "node": ">= 0.6" } }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "peer": true, + "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": "*" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" }, - "engines": { - "node": ">=12", - "npm": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" } }, - "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, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.6" } }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "node_modules/from2": { + "version": "2.3.0", + "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "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/from2/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "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/katex": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", - "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" + "safe-buffer": "~5.1.0" } }, - "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==", + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=0.10.0" } }, - "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, - "peer": true, + "node_modules/fs-extra": { + "version": "11.2.0", + "license": "MIT", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.14" } }, - "node_modules/keccak/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==", - "peer": 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==", + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "license": "ISC", "dependencies": { - "json-buffer": "3.0.1" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "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/fs-write-stream-atomic/node_modules/isarray": { + "version": "1.0.0", + "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==", - "engines": { - "node": ">=0.10.0" + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.8", + "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/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" + "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.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/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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/function.prototype.name": { + "version": "1.1.8", + "dev": true, + "license": "MIT", "dependencies": { - "package-json": "^8.1.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": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/launchdarkly-js-client-sdk": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-3.4.0.tgz", - "integrity": "sha512-3v1jKy1RECT0SG/3SGlyRO32vweoNxvWiJuIChRh/Zhk98cHpANuwameXVhwJ4WEDNZJTur73baaKAyatSP46A==", - "dependencies": { - "escape-string-regexp": "^4.0.0", - "launchdarkly-js-sdk-common": "5.3.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/launchdarkly-js-sdk-common": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-5.3.0.tgz", - "integrity": "sha512-NI5wFF8qhjtpRb4KelGdnwNIOf/boLlbLiseV7uf1jxSeoM/L30DAz87RT8VhYCSGCo4LedGILQFednI/MKFkA==", - "dependencies": { - "base64-js": "^1.3.0", - "fast-deep-equal": "^2.0.1", - "uuid": "^8.0.0" + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/launchdarkly-js-sdk-common/node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" - }, - "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==" + "node_modules/genfun": { + "version": "4.0.1", + "license": "CC0-1.0" }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "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/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", + "peer": true, "engines": { - "node": ">=6" + "node": "6.* || 8.* || >= 10.*" } }, - "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==", - "devOptional": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "peer": true, - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "peer": 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": { - "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==", - "peer": true - }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "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": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "url": "https://github.com/sponsors/ljharb" } }, - "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/get-npm-tarball-url": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.17" + } }, - "node_modules/load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" + "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/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/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", + "peer": true, "engines": { - "node": ">=6.11.5" + "node": ">=8.0.0" } }, - "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==", + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" } }, - "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==", - "dependencies": { - "p-locate": "^5.0.0" - }, + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", "engines": { "node": ">=10" }, @@ -18999,1805 +19097,4281 @@ "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==" - }, - "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==" - }, - "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.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "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==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "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==" - }, - "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==", - "devOptional": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "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==", - "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 - }, - "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==" - }, - "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==", - "peer": true, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "peer": true, - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/logkitty/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "peer": true, + "node_modules/git-branch": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.8" } }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "peer": true, + "node_modules/git-config-path": { + "version": "1.0.1", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/logkitty/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==", - "peer": true, + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/logkitty/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==", - "peer": true - }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/git-repo-name": { + "version": "0.6.0", + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "cwd": "^0.9.1", + "file-name": "^0.1.0", + "lazy-cache": "^1.0.4", + "remote-origin-url": "^0.5.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/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==", - "peer": true, - "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/git-username": { + "version": "0.5.1", + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "remote-origin-url": "^0.4.0" }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/git-username/node_modules/parse-git-config": { + "version": "0.2.0", + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "ini": "^1.3.3" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/git-username/node_modules/remote-origin-url": { + "version": "0.4.0", + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "parse-git-config": "^0.2.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/logkitty/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==", - "peer": true, + "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": "7.2.3", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "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": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/logkitty/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==", - "peer": true + "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/logkitty/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==", - "peer": true, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "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" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/logkitty/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==", - "peer": true, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "node_modules/global-dirs": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=10" }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=10" } }, - "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/global-modules": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "global-prefix": "^3.0.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=6" } }, - "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==", + "node_modules/global-prefix": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" } }, - "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==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "which": "bin/which" } }, - "node_modules/lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "node_modules/globalthis": { + "version": "1.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/globby": { + "version": "11.1.0", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "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": ">=12" + "node": ">=10" + }, + "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==", - "bin": { - "lz-string": "bin/bin.js" - } + "node_modules/globjoin": { + "version": "0.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/magic-error": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/magic-error/-/magic-error-0.0.1.tgz", - "integrity": "sha512-1+N1ET8cbC5bfLQZcRojClzgK2gbUt9keTMr9OJeuXnQKWsfwRRRICuMA3HKaCIXFEgKzxivuMGCNKD7cdU5pg==", + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "peer": true, + "node_modules/got": { + "version": "12.6.1", + "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.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": ">=6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "peer": true, - "bin": { - "semver": "bin/semver" + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/make-fetch-happen": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-2.6.0.tgz", - "integrity": "sha512-FFq0lNI0ax+n9IWzWpH8A4JdgYiAp2DDYIZ3rsaav8JDe8I+72CzK6PQW/oom15YDZpV5bYW/9INd6nIJ2ZfZw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "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": { - "agentkeepalive": "^3.3.0", - "cacache": "^10.0.0", - "http-cache-semantics": "^3.8.0", - "http-proxy-agent": "^2.0.0", - "https-proxy-agent": "^2.1.0", - "lru-cache": "^4.1.1", - "mississippi": "^1.2.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^3.0.1", - "ssri": "^5.0.0" + "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/make-fetch-happen/node_modules/cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "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": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/make-fetch-happen/node_modules/cacache/node_modules/mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "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": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/make-fetch-happen/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/gzip-size": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } + "node_modules/hachure-fill": { + "version": "0.5.2", + "license": "MIT" }, - "node_modules/make-fetch-happen/node_modules/pump": { + "node_modules/handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" }, - "node_modules/make-fetch-happen/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==", - "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/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/make-fetch-happen/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", - "dependencies": { - "glob": "^7.1.3" + "node_modules/has-bigints": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dependencies": { - "safe-buffer": "^5.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-fetch-happen/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==", - "dependencies": { - "safe-buffer": "~5.1.0" + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/make-fetch-happen/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==" - }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "peer": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "tmpl": "1.0.5" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/has-proto": { + "version": "1.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/markdown-to-jsx": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz", - "integrity": "sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==", + "node_modules/has-yarn": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">= 10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "react": ">= 0.14.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", - "bin": { - "marked": "bin/marked.js" + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "engines": { - "node": ">= 18" - } - }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "peer": true - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=4" } }, - "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/hash.js": { + "version": "1.1.7", + "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" + "function-bind": "^1.1.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/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==", - "dependencies": { - "@types/unist": "^2" + "engines": { + "node": ">= 0.4" } }, - "node_modules/mdast-util-definitions/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==" - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/hast-util-from-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "license": "ISC", "dependencies": { - "@types/unist": "^2.0.0" + "@types/hast": "^3.0.0", + "hastscript": "^9.0.0", + "web-namespaces": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", + "@types/hast": "^3.0.0", "@types/unist": "^3.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" + "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/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "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" + "@types/hast": "^3.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==", - "engines": { - "node": ">=12" + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "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/mdast": "^4.0.0", + "@types/hast": "^3.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" + "@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/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "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==", + "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/mdast": "^4.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", - "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" + "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/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "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": { - "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" + "@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/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==", + "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/mdast": "^4.0.0", - "ccount": "^2.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.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/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "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" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.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==", + "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/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@types/hast": "^3.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==", + "node_modules/hastscript": { + "version": "9.0.1", + "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" + "@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/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==", + "node_modules/hdkey": { + "version": "2.1.0", + "license": "MIT", + "peer": true, "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" + "bs58check": "^2.1.2", + "ripemd160": "^2.0.2", + "safe-buffer": "^5.1.1", + "secp256k1": "^4.0.0" } }, - "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==", + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "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", + "peer": true + }, + "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", + "peer": true, "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" + "hermes-estree": "0.29.1" } }, - "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==", + "node_modules/history": { + "version": "4.10.1", + "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" + "@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/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "node_modules/hls-video-element": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/hls-video-element/-/hls-video-element-1.5.6.tgz", + "integrity": "sha512-KPdvSR+oBJPiCVb+m6pd2mn3rJEjNbaK8pGhSkxFI2pmyvZIeTVQrPbEO9PT/juwXHwhvCoKJnNxAuFwJG9H5A==", + "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" + "custom-media-element": "^1.4.5", + "hls.js": "^1.6.5", + "media-tracks": "^0.3.3" } }, - "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==", + "node_modules/hls.js": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.7.tgz", + "integrity": "sha512-QW2fnwDGKGc9DwQUGLbmMOz8G48UZK7PVNJPcOUql1b8jubKx4/eMHNP5mGqr6tYlJNDG1g10Lx2U/qPzL6zwQ==", + "license": "Apache-2.0" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "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" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "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==", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "react-is": "^16.7.0" } }, - "node_modules/mdast-util-to-hast": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.3.0.tgz", - "integrity": "sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw==", + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "license": "MIT", "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "parse-passwd": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mdast-util-to-hast/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/hosted-git-info": { + "version": "2.8.9", + "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": { - "@types/unist": "^2" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/mdast-util-to-hast/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/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": { - "@types/unist": "^2" + "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/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==" + "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/mdast-util-to-hast/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "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": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "safe-buffer": "~5.1.0" } }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/html-entities": { + "version": "2.5.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "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": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "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-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" + "node_modules/html-tags": { + "version": "3.3.1", + "license": "MIT", + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" + "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/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/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" + "@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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "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/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 12" } }, - "node_modules/meow/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==", - "dev": true, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "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": ">=10" + "node": ">=12" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" + "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/meow/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==", - "dev": true, + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "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.0", + "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": ">=10" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/meow/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/http-proxy-agent": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } }, - "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==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/merge-stream": { + "node_modules/http-proxy-agent/node_modules/ms": { "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/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": ">= 8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/mermaid": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.9.1.tgz", - "integrity": "sha512-Mx45Obds5W1UkW1nv/7dHRsbfMM1aOKA2+Pxs/IGHNonygDHwmng8xTHyS9z4KWVi0rbko8gjiBmuwwXQ7tiNA==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.1", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.28.1", - "cytoscape-cose-bilkent": "^4.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "^3.0.5", - "elkjs": "^0.9.0", - "katex": "^0.16.9", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" + "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/mermaid/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/http2-wrapper": { + "version": "2.2.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/mermaid/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==" + "node_modules/https-browserify": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/mermaid/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/https-proxy-agent": { + "version": "2.2.4", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "agent-base": "^4.3.0", + "debug": "^3.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 4.5.0" } }, - "node_modules/mermaid/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "ms": "^2.0.0" + } + }, + "node_modules/humps": { + "version": "2.0.1", + "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==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/mermaid/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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.6.3", + "license": "MIT", "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mermaid/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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/idna-uts46-hx": { + "version": "2.3.1", + "license": "MIT", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/mermaid/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "license": "BSD-3-Clause" + }, + "node_modules/iferr": { + "version": "0.1.5", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.2", + "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/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immer": { + "version": "9.0.21", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "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", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imsc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/imsc/-/imsc-1.1.5.tgz", + "integrity": "sha512-V8je+CGkcvGhgl2C1GlhqFFiUOIEdwXbXLiu1Fcubvvbo+g9inauqT3l0pNYXGoLPBj3jxtZz9t+wCopMkwadQ==", + "license": "BSD-2-Clause", + "dependencies": { + "sax": "1.2.1" + } + }, + "node_modules/imsc/node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "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/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/inquirer": { + "version": "6.5.2", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/inquirer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/mimic-fn": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/onetime": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.9", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "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-arguments": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "dev": true, + "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" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "dev": true, + "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" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-boolean-object": { + "version": "1.2.2", + "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/is-buffer": { + "version": "2.0.5", + "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/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "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-data-view": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "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", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "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", + "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-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.0.0", + "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", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "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/is-obj": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "dev": true, + "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" + } + }, + "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-retry-allowed": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "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/is-symbol": { + "version": "1.1.1", + "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/is-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.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", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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", + "peer": true, + "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/istanbul-lib-instrument/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", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istextorbinary": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "binaryextensions": "^2.1.2", + "editions": "^2.2.0", + "textextensions": "^2.5.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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", + "peer": true, + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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", + "peer": true, + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "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", + "peer": true, + "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_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", + "peer": true, + "dependencies": { + "@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/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", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "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-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", + "peer": 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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "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", + "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", + "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-cookie": { + "version": "3.0.5", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-sha3": { + "version": "0.5.7", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "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/jsbi": { + "version": "3.2.5", + "license": "Apache-2.0", + "peer": true + }, + "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/jsesc": { + "version": "3.1.0", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/json-schema-compare": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.4" + } + }, + "node_modules/json-schema-merge-allof": { + "version": "0.8.1", + "license": "MIT", + "dependencies": { + "compute-lcm": "^1.1.2", + "json-schema-compare": "^0.2.2", + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "dev": true, + "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_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", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + }, + "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" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keccak/node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/khroma": { + "version": "2.1.0" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "dev": true, + "license": "MIT" + }, + "node_modules/konva": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/konva/-/konva-10.0.2.tgz", + "integrity": "sha512-NrZED6YG5BX5h3Xu8EZgLqhQ/+ZhxANYXmlIhMOfpBf+0ToExcdwE+Y46LyJOO/JR7FVeR3YTqon3eirnuo44A==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/langium": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.1.tgz", + "integrity": "sha512-zu9QWmjpzJcomzdJQAHgDVhLGq5bLosVak1KVa40NzQHXfqr4eAHupvnPOVXEoLkg6Ocefvf/93d//SB7du4YQ==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.1.1", + "chevrotain-allstar": "~0.3.1", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.1.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "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.11.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", + "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/launchdarkly-js-client-sdk": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-3.9.0.tgz", + "integrity": "sha512-uPL9il6dOZrVQqEcpjDYc2c7HtBTlKpLJb1Q0187i4UokBVZwBXWKjTnNk9hkwaDD5PGD4puoe7POikrR8ACwQ==", + "license": "Apache-2.0", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "launchdarkly-js-sdk-common": "5.8.0" + } + }, + "node_modules/launchdarkly-js-sdk-common": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-5.8.0.tgz", + "integrity": "sha512-9X70K3kN1fuR6ZnRudkH7etMgFhi3sEU0mnJ+y2nhID+DpfkNDVnYUGnUs8/s4tsSDs7Q7Gpm4qnr3oqOqT9+A==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "fast-deep-equal": "^2.0.1", + "uuid": "^8.0.0" + } + }, + "node_modules/launchdarkly-js-sdk-common/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "license": "MIT" + }, + "node_modules/layout-base": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "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, + "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", + "peer": true, + "dependencies": { + "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", + "peer": true + }, + "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", + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.3", + "listr2": "^9.0.5", + "picomatch": "^4.0.3", + "string-argv": "^0.3.2", + "tinyexec": "^1.0.4", + "yaml": "^2.8.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/lint-staged/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.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": ">=20.0.0" + } + }, + "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", + "engines": { + "node": ">=12" + }, + "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" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "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": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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": { + "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" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "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", + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "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/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": { + "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": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "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, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "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": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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": "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" + } + }, + "node_modules/loglevel": { + "version": "1.9.2", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lottie-web": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz", + "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "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", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.6.1", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "2.6.0", + "license": "CC0-1.0", + "dependencies": { + "agentkeepalive": "^3.3.0", + "cacache": "^10.0.0", + "http-cache-semantics": "^3.8.0", + "http-proxy-agent": "^2.0.0", + "https-proxy-agent": "^2.1.0", + "lru-cache": "^4.1.1", + "mississippi": "^1.2.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "10.0.4", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache/node_modules/mississippi": { + "version": "2.0.0", + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/concat-stream": { + "version": "1.6.2", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/make-fetch-happen/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "4.1.5", + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/make-fetch-happen/node_modules/pump": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/make-fetch-happen/node_modules/readable-stream": { + "version": "2.3.8", + "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/make-fetch-happen/node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/make-fetch-happen/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "5.3.0", + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/make-fetch-happen/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/make-fetch-happen/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "2.1.2", + "license": "ISC" + }, + "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", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/markdown-to-jsx": { + "version": "7.5.0", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/marked": { + "version": "12.0.2", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "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/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "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", + "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", + "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-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "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", + "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/mermaid/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@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/mermaid/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mermaid/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mermaid/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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": { - "micromark-util-symbol": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@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/mermaid/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mermaid/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdn-data": { + "version": "2.0.30", + "license": "CC0-1.0" + }, + "node_modules/media-chrome": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.11.1.tgz", + "integrity": "sha512-+2niDc4qOwlpFAjwxg1OaizK/zKV6y7QqGm4nBFEVlSaG0ZBgOmfc4IXAPiirZqAlZGaFFUaMqCl1SpGU0/naA==", + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@vercel/edge": "^1.2.1", + "ce-la-react": "^0.3.0" } }, - "node_modules/mermaid/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "node_modules/media-tracks": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/media-tracks/-/media-tracks-0.3.3.tgz", + "integrity": "sha512-9P2FuUHnZZ3iji+2RQk7Zkh5AmZTnOG5fODACnjhCVveX1McY3jmCRHofIEI+yTBqplz7LXy48c7fQ3Uigp88w==", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/mermaid/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/memfs": { + "version": "4.49.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.49.0.tgz", + "integrity": "sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ==", + "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/mermaid/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "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/mermaid/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/meow": { + "version": "10.1.5", + "dev": true, + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mermaid/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "micromark-util-types": "^1.0.0" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/mermaid/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/mermaid/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/mermaid/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" - } - ] - }, - "node_modules/mermaid/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "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", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.13.0.tgz", + "integrity": "sha512-fEnci+Immw6lKMFI8sqzjlATTyjLkRa6axrEgLV2yHTfv8r+h1wjFbV6xeRtd4rUV1cS4EpR9rwp3Rci7TRWDw==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.1", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.0.1", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.1", + "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.14", + "dayjs": "^1.11.19", + "dompurify": "^3.3.1", + "katex": "^0.16.25", + "khroma": "^2.1.0", + "lodash-es": "^4.17.23", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0" + } + }, + "node_modules/mermaid/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/mermaid/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "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": ">= 0.6" } }, "node_modules/metro": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.12.tgz", - "integrity": "sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.2.tgz", + "integrity": "sha512-HQgs9H1FyVbRptNSMy/ImchTTE5vS2MSqLoOo7hbDoBq6hPPZokwJvBMwrYSxdjQZmLXz2JFZtdvS+ZfgTc9yw==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.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": "^2.2.0", - "denodeify": "^1.2.1", + "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.23.1", + "hermes-parser": "0.32.0", "image-size": "^1.0.2", "invariant": "^2.2.4", - "jest-worker": "^29.6.3", + "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.12", - "metro-cache": "0.80.12", - "metro-cache-key": "0.80.12", - "metro-config": "0.80.12", - "metro-core": "0.80.12", - "metro-file-map": "0.80.12", - "metro-resolver": "0.80.12", - "metro-runtime": "0.80.12", - "metro-source-map": "0.80.12", - "metro-symbolicate": "0.80.12", - "metro-transform-plugins": "0.80.12", - "metro-transform-worker": "0.80.12", + "metro-babel-transformer": "0.83.2", + "metro-cache": "0.83.2", + "metro-cache-key": "0.83.2", + "metro-config": "0.83.2", + "metro-core": "0.83.2", + "metro-file-map": "0.83.2", + "metro-resolver": "0.83.2", + "metro-runtime": "0.83.2", + "metro-source-map": "0.83.2", + "metro-symbolicate": "0.83.2", + "metro-transform-plugins": "0.83.2", + "metro-transform-worker": "0.83.2", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", "throat": "^5.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" @@ -20806,388 +23380,379 @@ "metro": "src/cli.js" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-babel-transformer": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.12.tgz", - "integrity": "sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.2.tgz", + "integrity": "sha512-rirY1QMFlA1uxH3ZiNauBninwTioOgwChnRdDcbB4tgRZ+bGX9DiXoh9QdpppiaVKXdJsII932OwWXGGV4+Nlw==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/core": "^7.20.0", + "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.23.1", + "hermes-parser": "0.32.0", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", - "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==", + "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/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", - "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "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.23.1" + "hermes-estree": "0.32.0" } }, "node_modules/metro-cache": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.12.tgz", - "integrity": "sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.2.tgz", + "integrity": "sha512-Z43IodutUZeIS7OTH+yQFjc59QlFJ6s5OvM8p2AP9alr0+F8UKr8ADzFzoGKoHefZSKGa4bJx7MZJLF6GwPDHQ==", + "license": "MIT", "peer": true, "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", - "metro-core": "0.80.12" + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.2" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-cache-key": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.12.tgz", - "integrity": "sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.2.tgz", + "integrity": "sha512-3EMG/GkGKYoTaf5RqguGLSWRqGTwO7NQ0qXKmNBjr0y6qD9s3VBXYlwB+MszGtmOKsqE9q3FPrE5Nd9Ipv7rZw==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.12.tgz", - "integrity": "sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==", - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.6.3", - "metro": "0.80.12", - "metro-cache": "0.80.12", - "metro-core": "0.80.12", - "metro-runtime": "0.80.12" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">=20.19.4" } }, - "node_modules/metro-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "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", "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/metro-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "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": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=4" - } - }, - "node_modules/metro-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==", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node": ">= 14" } }, - "node_modules/metro-config/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==", + "node_modules/metro-config": { + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.2.tgz", + "integrity": "sha512-1FjCcdBe3e3D08gSSiU9u3Vtxd7alGH3x/DNFqWDFf5NouX4kLgbVloDDClr1UrLz62c0fHh2Vfr9ecmrOZp+g==", + "license": "MIT", "peer": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.2", + "metro-cache": "0.83.2", + "metro-core": "0.83.2", + "metro-runtime": "0.83.2", + "yaml": "^2.6.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "peer": true, - "engines": { - "node": ">=4" + "node": ">=20.19.4" } }, "node_modules/metro-core": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.12.tgz", - "integrity": "sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.2.tgz", + "integrity": "sha512-8DRb0O82Br0IW77cNgKMLYWUkx48lWxUkvNUxVISyMkcNwE/9ywf1MYQUE88HaKwSrqne6kFgCSA/UWZoUT0Iw==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.12" + "metro-resolver": "0.83.2" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-file-map": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.12.tgz", - "integrity": "sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.2.tgz", + "integrity": "sha512-cMSWnEqZrp/dzZIEd7DEDdk72PXz6w5NOKriJoDN9p1TDQ5nAYrY2lHi8d6mwbcGLoSlWmpPyny9HZYFfPWcGQ==", + "license": "MIT", "peer": true, "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", + "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.6.3", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", "nullthrows": "^1.1.1", "walker": "^1.0.7" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=20.19.4" } }, "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, "node_modules/metro-minify-terser": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.12.tgz", - "integrity": "sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.2.tgz", + "integrity": "sha512-zvIxnh7U0JQ7vT4quasKsijId3dOAWgq+ip2jF/8TMrPUqQabGrs04L2dd0haQJ+PA+d4VvK/bPOY8X/vL2PWw==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-resolver": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.12.tgz", - "integrity": "sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.2.tgz", + "integrity": "sha512-Yf5mjyuiRE/Y+KvqfsZxrbHDA15NZxyfg8pIk0qg47LfAJhpMVEX+36e6ZRBq7KVBqy6VDX5Sq55iHGM4xSm7Q==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-runtime": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.12.tgz", - "integrity": "sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.2.tgz", + "integrity": "sha512-nnsPtgRvFbNKwemqs0FuyFDzXLl+ezuFsUXDbX8o0SXOfsOPijqiQrf3kuafO1Zx1aUWf4NOrKJMAQP5EEHg9A==", + "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-source-map": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.12.tgz", - "integrity": "sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.2.tgz", + "integrity": "sha512-5FL/6BSQvshIKjXOennt9upFngq2lFvDakZn5LfauIVq8+L4sxXewIlSTcxAtzbtjAIaXeOSVMtCJ5DdfCt9AA==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", + "@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.80.12", + "metro-symbolicate": "0.83.2", "nullthrows": "^1.1.1", - "ob1": "0.80.12", + "ob1": "0.83.2", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-source-map/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/metro-symbolicate": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.12.tgz", - "integrity": "sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.2.tgz", + "integrity": "sha512-KoU9BLwxxED6n33KYuQQuc5bXkIxF3fSwlc3ouxrrdLWwhu64muYZNQrukkWzhVKRNFIXW7X2iM8JXpi2heIPw==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.80.12", + "metro-source-map": "0.83.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", - "through2": "^2.0.1", "vlq": "^1.0.0" }, "bin": { "metro-symbolicate": "src/index.js" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/metro-symbolicate/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/metro-transform-plugins": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.12.tgz", - "integrity": "sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.2.tgz", + "integrity": "sha512-5WlW25WKPkiJk2yA9d8bMuZrgW7vfA4f4MBb9ZeHbTB3eIAoNN8vS8NENgG/X/90vpTB06X66OBvxhT3nHwP6A==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", + "@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/metro-transform-worker": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.12.tgz", - "integrity": "sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.2.tgz", + "integrity": "sha512-G5DsIg+cMZ2KNfrdLnWMvtppb3+Rp1GMyj7Bvd9GgYc/8gRmvq1XVEF9XuO87Shhb03kFhGqMTgZerz3hZ1v4Q==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.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.80.12", - "metro-babel-transformer": "0.80.12", - "metro-cache": "0.80.12", - "metro-cache-key": "0.80.12", - "metro-minify-terser": "0.80.12", - "metro-source-map": "0.80.12", - "metro-transform-plugins": "0.80.12", + "metro": "0.83.2", + "metro-babel-transformer": "0.83.2", + "metro-cache": "0.83.2", + "metro-cache-key": "0.83.2", + "metro-minify-terser": "0.83.2", + "metro-source-map": "0.83.2", + "metro-transform-plugins": "0.83.2", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "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==", + "license": "MIT", "peer": true }, "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/metro/node_modules/hermes-estree": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", - "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==", + "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/metro/node_modules/hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", - "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "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.23.1" + "hermes-estree": "0.32.0" } }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true + "node_modules/metro/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", + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } }, "node_modules/metro/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -21197,6 +23762,7 @@ "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" @@ -21216,13 +23782,10 @@ }, "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/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "version": "4.0.2", "funding": [ { "type": "GitHub Sponsors", @@ -21233,6 +23796,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -21254,9 +23818,7 @@ } }, "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "version": "2.0.3", "funding": [ { "type": "GitHub Sponsors", @@ -21267,6 +23829,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -21287,9 +23850,7 @@ } }, "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -21300,15 +23861,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -21319,15 +23879,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -21337,12 +23896,14 @@ "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", @@ -21358,9 +23919,9 @@ } }, "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21371,15 +23932,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21390,15 +23952,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21408,12 +23971,14 @@ "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", @@ -21425,22 +23990,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-extension-frontmatter/node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21451,15 +24004,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21469,12 +24023,14 @@ "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", @@ -21494,6 +24050,7 @@ "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", @@ -21506,9 +24063,9 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21519,15 +24076,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21537,12 +24095,14 @@ "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", @@ -21559,9 +24119,9 @@ } }, "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21572,15 +24132,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21591,15 +24152,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21609,12 +24171,14 @@ "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", @@ -21629,9 +24193,9 @@ } }, "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21641,12 +24205,14 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "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", @@ -21660,9 +24226,9 @@ } }, "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21673,15 +24239,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21692,15 +24259,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21710,12 +24278,14 @@ "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" }, @@ -21728,6 +24298,7 @@ "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", @@ -21741,9 +24312,9 @@ } }, "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21754,15 +24325,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21773,15 +24345,91 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.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-math/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-math/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-math/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", @@ -21791,12 +24439,13 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "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", @@ -21807,6 +24456,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -21819,9 +24469,9 @@ } }, "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21832,15 +24482,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21851,15 +24502,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21869,14 +24521,15 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", - "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "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/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -21894,9 +24547,9 @@ } }, "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -21907,15 +24560,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -21926,15 +24580,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -21944,12 +24599,14 @@ "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" }, @@ -21962,6 +24619,7 @@ "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", @@ -21981,6 +24639,7 @@ "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", @@ -21998,9 +24657,9 @@ } }, "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -22011,15 +24670,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -22029,12 +24689,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22045,6 +24704,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -22052,9 +24712,7 @@ } }, "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22065,15 +24723,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22083,12 +24740,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22099,6 +24755,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -22107,9 +24764,7 @@ } }, "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22120,15 +24775,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22138,12 +24792,13 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", - "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "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", @@ -22154,6 +24809,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", @@ -22167,9 +24823,9 @@ } }, "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "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", @@ -22180,15 +24836,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "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", @@ -22199,15 +24856,16 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -22217,7 +24875,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-space": { "version": "1.1.0", @@ -22233,6 +24892,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -22251,12 +24911,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22267,6 +24926,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -22275,9 +24935,7 @@ } }, "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22288,15 +24946,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22307,15 +24964,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22325,12 +24981,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22341,6 +24996,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -22349,9 +25005,7 @@ } }, "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22362,15 +25016,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22381,15 +25034,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22399,7 +25051,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-character": { "version": "1.2.0", @@ -22415,6 +25068,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -22433,12 +25087,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22449,14 +25102,13 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22466,12 +25118,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22482,6 +25133,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -22489,9 +25141,7 @@ } }, "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22502,15 +25152,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22520,12 +25169,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22536,15 +25184,14 @@ "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.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "version": "2.0.2", "funding": [ { "type": "GitHub Sponsors", @@ -22555,14 +25202,13 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22572,12 +25218,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22588,6 +25233,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -22596,9 +25242,7 @@ } }, "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22609,15 +25253,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22627,12 +25270,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22642,12 +25284,13 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "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", @@ -22658,8 +25301,8 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", @@ -22670,9 +25313,9 @@ } }, "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "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", @@ -22682,12 +25325,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22697,12 +25339,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22713,14 +25354,13 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22730,12 +25370,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22746,14 +25385,13 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" } }, "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22764,6 +25402,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -22771,9 +25410,7 @@ } }, "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22784,15 +25421,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22802,12 +25438,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "version": "2.1.0", "funding": [ { "type": "GitHub Sponsors", @@ -22818,6 +25453,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -22826,9 +25462,7 @@ } }, "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22838,7 +25472,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-symbol": { "version": "1.1.0", @@ -22853,12 +25488,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "version": "2.0.2", "funding": [ { "type": "GitHub Sponsors", @@ -22868,12 +25502,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22884,15 +25517,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -22903,15 +25535,14 @@ "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -22921,12 +25552,12 @@ "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" @@ -22937,8 +25568,7 @@ }, "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==", + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -22949,33 +25579,20 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } + "license": "MIT" }, "node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "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/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" }, @@ -22985,16 +25602,14 @@ }, "node_modules/mime-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": ">= 0.6" } }, "node_modules/mimer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.0.tgz", - "integrity": "sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ==", + "license": "MIT", "bin": { "mimer": "bin/mimer" }, @@ -23004,16 +25619,27 @@ }, "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-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": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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" }, @@ -23023,17 +25649,17 @@ }, "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", "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", - "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz", + "integrity": "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==", + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -23051,19 +25677,17 @@ }, "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/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": "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" }, @@ -23076,17 +25700,15 @@ }, "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/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -23098,8 +25720,7 @@ }, "node_modules/mississippi": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.1.tgz", - "integrity": "sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==", + "license": "BSD-2-Clause", "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -23115,11 +25736,10 @@ }, "node_modules/mississippi/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" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -23129,13 +25749,11 @@ }, "node_modules/mississippi/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/mississippi/node_modules/pump": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -23143,8 +25761,7 @@ }, "node_modules/mississippi/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", @@ -23157,21 +25774,18 @@ }, "node_modules/mississippi/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/mississippi/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/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": { "minimist": "^1.2.6" }, @@ -23179,11 +25793,21 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, "node_modules/move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -23195,9 +25819,7 @@ }, "node_modules/move-concurrently/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", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -23205,31 +25827,22 @@ "rimraf": "bin.js" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, "node_modules/mrmime": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "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" @@ -23240,43 +25853,23 @@ }, "node_modules/mute-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" - }, - "node_modules/nano-css": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", - "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "css-tree": "^1.1.2", - "csstype": "^3.1.2", - "fastest-stable-stringify": "^2.0.2", - "inline-style-prefixer": "^7.0.1", - "rtl-css-js": "^1.16.1", - "stacktrace-js": "^2.0.2", - "stylis": "^4.3.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } + "license": "ISC" }, - "node_modules/nano-memoize": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/nano-memoize/-/nano-memoize-1.3.1.tgz", - "integrity": "sha512-wQiW3xHptgGlec/Zbo7oq6Zz4kKoK8TaIIs1irTO9iJOGTIG3lnQRUJfH73bJ/rn7MOE4sTdSU+ALPGEidaijQ==" + "node_modules/mux-embed": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/mux-embed/-/mux-embed-5.9.0.tgz", + "integrity": "sha512-wmunL3uoPhma/tWy8PrDPZkvJpXvSFBwbD3KkC4PG8Ztjfb1X3hRJwGUAQyRz7z99b/ovLm2UTTitrkvStjH4w==", + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -23284,92 +25877,46 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "license": "MIT" + }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true + "dev": true, + "license": "MIT" }, "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/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/nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, - "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==", - "peer": true - }, "node_modules/node-addon-api": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "peer": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-dir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-dir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "license": "MIT", + "peer": true }, "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "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", @@ -23384,6 +25931,7 @@ "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": { "whatwg-url": "^5.0.0" }, @@ -23401,9 +25949,7 @@ }, "node_modules/node-fetch-npm": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", - "deprecated": "This module is not used anymore, npm uses minipass-fetch for its fetch implementation now", + "license": "MIT", "dependencies": { "encoding": "^0.1.11", "json-parse-better-errors": "^1.0.0", @@ -23414,33 +25960,55 @@ } }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp-build": { "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-html-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-html-markdown/-/node-html-markdown-2.0.0.tgz", + "integrity": "sha512-DqUC3GGP7pwSYxS93SwHoP+qCw78xcMP6C6H2DuC8rPD2AweJRjBzQb5SdXpKtDlqAQ7hVotJcfhgU7hU5Gthw==", + "license": "MIT", + "dependencies": { + "node-html-parser": "^6.1.13" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, "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", "peer": true }, "node_modules/node-polyfill-webpack-plugin": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==", + "license": "MIT", "dependencies": { "assert": "^2.0.0", "browserify-zlib": "^0.2.0", @@ -23477,8 +26045,6 @@ }, "node_modules/node-polyfill-webpack-plugin/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", @@ -23493,6 +26059,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -23500,8 +26067,7 @@ }, "node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -23514,32 +26080,14 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "peer": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "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==", + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -23549,32 +26097,21 @@ }, "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==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -23584,8 +26121,7 @@ }, "node_modules/npm-package-arg": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz", - "integrity": "sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA==", + "license": "ISC", "dependencies": { "hosted-git-info": "^2.4.2", "osenv": "^0.1.4", @@ -23595,24 +26131,21 @@ }, "node_modules/npm-package-arg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "license": "ISC", "dependencies": { "builtins": "^1.0.3" } }, "node_modules/npm-pick-manifest": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz", - "integrity": "sha512-MKxNdeyOZysPRTTbHtW0M5Fw38Jo/3ARsoGw5qjCfS+XGjvNB/Gb4qtAZUFmKPM2mVum+eX559eHvKywU856BQ==", + "license": "CC0-1.0", "dependencies": { "npm-package-arg": "^5.1.2", "semver": "^5.3.0" @@ -23620,16 +26153,14 @@ }, "node_modules/npm-pick-manifest/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "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" }, @@ -23637,15 +26168,27 @@ "node": ">=8" } }, + "node_modules/npm-to-yarn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-to-yarn/-/npm-to-yarn-3.0.1.tgz", + "integrity": "sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/nebrelbug/npm-to-yarn?sponsor=1" + } + }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + "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" }, @@ -23653,28 +26196,67 @@ "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/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/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", "peer": true }, "node_modules/ob1": { - "version": "0.80.12", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.12.tgz", - "integrity": "sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.2.tgz", + "integrity": "sha512-XlK3w4M+dwd1g1gvHzVbxiXEbUllRONEgcF2uEO0zm4nxa0eKlh41c6N65q1xbiDOeKKda1tvNOAD33fNjyvCg==", + "license": "MIT", "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=18" + "node": ">=20.19.4" } }, "node_modules/obj-multiplex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/obj-multiplex/-/obj-multiplex-1.0.0.tgz", - "integrity": "sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==", + "license": "ISC", "dependencies": { "end-of-stream": "^1.4.0", "once": "^1.4.0", @@ -23683,13 +26265,11 @@ }, "node_modules/obj-multiplex/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/obj-multiplex/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", @@ -23702,29 +26282,25 @@ }, "node_modules/obj-multiplex/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/obj-multiplex/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/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.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -23734,8 +26310,7 @@ }, "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==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -23749,20 +26324,20 @@ }, "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.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -23773,14 +26348,16 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "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": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -23788,9 +26365,8 @@ }, "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": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -23805,12 +26381,12 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -23824,12 +26400,14 @@ "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" }, "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", "peer": true, "dependencies": { "ee-first": "1.1.1" @@ -23839,25 +26417,24 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "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/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/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" }, @@ -23872,6 +26449,7 @@ "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", @@ -23884,19 +26462,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openapi-fetch": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.13.8.tgz", + "integrity": "sha512-yJ4QKRyNxE44baQ9mY5+r/kAzZ8yXMemtNAOFwOzRXJscdjSxxzWSNlyBAr+o5JjkUw9Lc3W7OIoca0cY3PYnQ==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + } + }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", + "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", + "license": "MIT" + }, "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==", - "devOptional": true, + "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -23909,80 +26500,66 @@ "node": ">= 0.8.0" } }, - "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==", - "peer": true, - "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/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==" + "license": "MIT" }, "node_modules/os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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.10.0" } }, "node_modules/osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "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_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": "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" }, @@ -23995,8 +26572,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, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -24009,8 +26586,7 @@ }, "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" }, @@ -24021,38 +26597,73 @@ "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": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "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.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry/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/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/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-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", @@ -24066,10 +26677,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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/pacote": { "version": "2.7.38", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-2.7.38.tgz", - "integrity": "sha512-XxHUyHQB7QCVBxoXeVu0yKxT+2PvJucsc0+1E+6f95lMUxEAYERgSAc71ckYXrYr35Ew3xFU/LrhdIK21GQFFA==", + "license": "CC0-1.0", "dependencies": { "bluebird": "^3.5.0", "cacache": "^9.2.9", @@ -24096,17 +26712,17 @@ }, "node_modules/pacote/node_modules/bl": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "node_modules/pacote/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -24114,13 +26730,11 @@ }, "node_modules/pacote/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/pacote/node_modules/lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -24128,8 +26742,7 @@ }, "node_modules/pacote/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" }, @@ -24139,8 +26752,7 @@ }, "node_modules/pacote/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", @@ -24153,29 +26765,25 @@ }, "node_modules/pacote/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/pacote/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/pacote/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/pacote/node_modules/tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -24191,8 +26799,7 @@ }, "node_modules/pacote/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -24202,18 +26809,15 @@ }, "node_modules/pacote/node_modules/yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "license": "ISC" }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "license": "(MIT AND Zlib)" }, "node_modules/parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "license": "MIT", "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -24222,13 +26826,11 @@ }, "node_modules/parallel-transform/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/parallel-transform/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", @@ -24241,21 +26843,18 @@ }, "node_modules/parallel-transform/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/parallel-transform/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/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" @@ -24263,8 +26862,7 @@ }, "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" }, @@ -24274,8 +26872,7 @@ }, "node_modules/parse-asn1": { "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", @@ -24290,8 +26887,7 @@ }, "node_modules/parse-asn1/node_modules/hash-base": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -24301,12 +26897,10 @@ } }, "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "version": "4.0.2", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", @@ -24321,13 +26915,11 @@ }, "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-git-config": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-1.1.1.tgz", - "integrity": "sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "fs-exists-sync": "^0.1.0", @@ -24340,8 +26932,7 @@ }, "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", @@ -24357,52 +26948,58 @@ }, "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/parse-passwd": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.3.0", + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "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.2", + "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", + "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" @@ -24410,93 +27007,118 @@ }, "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==" + "license": "MIT" + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "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": ">=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==", + "license": "MIT", "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-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/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/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" }, "engines": { "node": ">=0.12" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -24505,18 +27127,21 @@ } }, "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "5.0.0", + "license": "MIT", "peer": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "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": ">= 6" @@ -24526,6 +27151,7 @@ "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" }, @@ -24540,358 +27166,808 @@ "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" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-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": { + "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/pkg-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": { + "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/pkg-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": { + "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/pkg-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/pkg-dir/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/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", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "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/player.style": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.1.9.tgz", + "integrity": "sha512-aFmIhHMrnAP8YliFYFMnRw+5AlHqBvnqWy4vHGo2kFxlC+XjmTXqgg62qSxlE8ubAY83c0ViEZGYglSJi6mGCA==", + "license": "MIT", + "workspaces": [ + ".", + "site", + "examples/*", + "scripts/*", + "themes/*" + ], + "dependencies": { + "media-chrome": "~4.11.0" + } + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/pony-cause": { + "version": "2.1.11", + "license": "0BSD", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.6" } }, - "node_modules/pkg-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==", + "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": { - "p-locate": "^6.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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/pkg-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==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, + "node_modules/postcss-color-functional-notation/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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/pkg-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==", + "node_modules/postcss-color-functional-notation/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": { - "p-limit": "^4.0.0" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/pkg-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==", + "node_modules/postcss-color-functional-notation/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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "node_modules/postcss-color-functional-notation/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": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "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": { - "find-up": "^3.0.0" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/pkg-up/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/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": { - "locate-path": "^3.0.0" + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/pkg-up/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/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": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pkg-up/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/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": { - "p-try": "^2.0.0" + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pkg-up/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/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": { - "p-limit": "^2.0.0" + "@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": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/pkg-up/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==", + "node_modules/postcss-custom-media/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": ">=4" - } - }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", - "dependencies": { - "@babel/runtime": "^7.17.8" + "node": ">=18" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", + "node_modules/postcss-custom-media/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": ">=12.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "node_modules/postcss-custom-media/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/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "node_modules/postcss-custom-media/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": ">= 0.4" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "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": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "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==", - "dependencies": { - "postcss-selector-parser": "^6.0.11", + "@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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.2.2" + "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==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-custom-properties/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-custom-properties/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-tokenizer": "^3.0.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==", + "node_modules/postcss-custom-properties/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": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=18" } }, - "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==", + "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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "node_modules/postcss-custom-selectors/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", + "node_modules/postcss-custom-selectors/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, + "node_modules/postcss-custom-selectors/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": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=18" } }, - "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==", + "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": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "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": ">=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==", + "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": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "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": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "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" }, @@ -24899,16 +27975,11 @@ "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==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, + "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" }, @@ -24916,13 +27987,11 @@ "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==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "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" }, @@ -24930,15 +27999,11 @@ "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==", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, + "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" }, @@ -24946,14 +28011,13 @@ "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==", + "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": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.16" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -24962,203 +28026,338 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-minify-selectors": { + "node_modules/postcss-double-position-gradients": { "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==", + "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": { - "postcss-selector-parser": "^6.0.16" + "@csstools/postcss-progressive-custom-properties": "^4.2.1", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "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": "^10 || ^12 || >= 14" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.4" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "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": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=4" } }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "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": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.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==", + "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": { - "icss-utils": "^5.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, + "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-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==", + "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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", + "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": { - "postcss-value-parser": "^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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "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==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-lab-function/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", + "node_modules/postcss-lab-function/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": { - "postcss-value-parser": "^4.2.0" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-lab-function/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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "@csstools/css-tokenizer": "^3.0.4" } }, - "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==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-lab-function/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": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=18" } }, - "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==", + "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": { - "postcss-value-parser": "^4.2.0" + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "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==", + "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": "^14 || ^16 || >=18.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.4.31" + "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==", + "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" @@ -25170,12 +28369,14 @@ "postcss": "^8.4.31" } }, - "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==", + "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" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.1.1" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -25184,13 +28385,16 @@ "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==", + "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" + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -25199,10 +28403,11 @@ "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==", + "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" }, @@ -25213,73 +28418,45 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "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==", - "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==", + "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": { - "sort-css-media-queries": "2.2.0" + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=14.0.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.4.23" + "postcss": "^8.4.31" } }, - "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==", + "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": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-unique-selectors": { + "node_modules/postcss-minify-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==", + "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" }, @@ -25290,1466 +28467,1455 @@ "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==" - }, - "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==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "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==", - "devOptional": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "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==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "peer": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/pretty-format/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/pretty-format/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==", - "peer": true - }, - "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==", + "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": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz", - "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prism-react-renderer/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "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==", - "engines": { - "node": ">= 0.6.0" - } - }, - "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==" - }, - "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==", - "peer": true, - "dependencies": { - "asap": "~2.0.6" + "postcss": "^8.1.0" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "node_modules/promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw==", + "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": { - "err-code": "^1.0.0", - "retry": "^0.10.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=0.12" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.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==", + "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": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "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/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": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "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==" - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "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/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==" - }, - "node_modules/protoduck": { + "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-4.0.0.tgz", - "integrity": "sha512-9sxuz0YTU/68O98xuDn8NBxTVH9EuMhrBTxZdiBL0/qxRmWhB/5a8MagAebDa+98vluAZTs8kMZibCdezbRCeQ==", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", "dependencies": { - "genfun": "^4.0.1" + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.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/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": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "@csstools/selector-resolve-nested": "^3.1.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">= 0.10" + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "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/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "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": { - "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" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "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/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "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": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "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": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "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": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "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/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": ">=6" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "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": { - "escape-goat": "^4.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12.20" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/qr-code-styling": { - "version": "1.6.0-rc.1", - "resolved": "https://registry.npmjs.org/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz", - "integrity": "sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==", + "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": { - "qrcode-generator": "^1.4.3" + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/qrcode-generator": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - }, - "node_modules/qrcode-terminal-nooctal": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/qrcode-terminal-nooctal/-/qrcode-terminal-nooctal-0.12.1.tgz", - "integrity": "sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg==", - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "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/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "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": { - "side-channel": "^1.0.6" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.6" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "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/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": ">=0.4.x" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/queue": { + "node_modules/postcss-ordered-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "license": "MIT", "dependencies": { - "inherits": "~2.0.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/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/csstools" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } - ] - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "peer": true - }, - "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-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" + "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/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "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": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/postcss-preset-env": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz", + "integrity": "sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==", + "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.1", + "@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-property-rule-prelude-list": "^1.0.0", + "@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-syntax-descriptor-syntax-production": "^1.0.1", + "@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.23", + "browserslist": "^4.28.1", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.3", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.6.0", + "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.6" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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/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": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "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": ">= 0.8" + "node": ">=4" } }, - "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/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": { - "safer-buffer": ">= 2.1.2 < 3" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "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": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" }, - "bin": { - "rc": "cli.js" - } - }, - "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==", "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "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/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": { - "loose-envify": "^1.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/react-alert": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/react-alert/-/react-alert-7.0.3.tgz", - "integrity": "sha512-cZ2ZhxytECTxljDfBKpQmwWbfJQFzFf2Qf03L/IB5shbEXtWhDD2JjiW60rwmKT1oZoU+GEnUQw5MFM5+f0B6A==", - "dependencies": { - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.1" + "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-resolve-nested-selector": { + "version": "0.1.6", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, "peerDependencies": { - "react": "^16.8.1 || ^17", - "react-dom": "^16.8.1 || ^17" + "postcss": "^8.3.3" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "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": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "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": ">= 12.13.0" + "node": ">=4" } }, - "node_modules/react-devtools-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.1.tgz", - "integrity": "sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw==", - "peer": true, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "license": "MIT", "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "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==", - "peer": 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": { + "sort-css-media-queries": "2.2.0" + }, "engines": { - "node": ">=8.3.0" + "node": ">=14.0.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "postcss": "^8.4.23" } }, - "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/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": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, + "engines": { + "node": "^14 || ^16 || >= 18" }, "peerDependencies": { - "react": "^18.3.1" + "postcss": "^8.4.31" } }, - "node_modules/react-dropdown-select": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/react-dropdown-select/-/react-dropdown-select-4.11.3.tgz", - "integrity": "sha512-/mOGSqqhmKsxxrmotLM+qn1Ss3nxGN6QnYusyQ7f0wizsWrc7ZmbcZhGRtwkJwpL6JYDQVTn19EYxJU1XfXrDA==", + "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": { - "@emotion/react": "11.11.0", - "@emotion/styled": "11.11.0" + "postcss-selector-parser": "^6.0.16" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "prop-types": ">=15.7.2", - "react": ">=16.x", - "react-dom": ">=16.x" + "postcss": "^8.4.31" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "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==" + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "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" + "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": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + "postcss": "^8.4.31" } }, - "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==" + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "node_modules/prepend-http": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { "node": ">=14" }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "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==", + "node_modules/pretty-error": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "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==", + "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", + "peer": true, "dependencies": { - "@babel/runtime": "^7.10.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-markdown": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", - "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" + "node_modules/pretty-format/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", + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", - "dependencies": { - "@types/unist": "^2" + "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/react-markdown/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/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/unist": "^2" + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" } }, - "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==" + "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/react-markdown/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==", + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6.0" } }, - "node_modules/react-markdown/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "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==", + "license": "MIT", + "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "asap": "~2.0.6" } }, - "node_modules/react-markdown/node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", - "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "1.1.1", + "license": "MIT", "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "err-code": "^1.0.0", + "retry": "^0.10.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.12" } }, - "node_modules/react-markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/prompts": { + "version": "2.4.2", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/react-markdown/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/property-information": { + "version": "7.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-markdown/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/proto-list": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/protoduck": { + "version": "4.0.0", + "license": "CC0-1.0", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "genfun": "^4.0.1" } }, - "node_modules/react-markdown/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/react-markdown/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "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/react-markdown/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" } }, - "node_modules/react-markdown/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pseudomap": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "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/react-markdown/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/react-markdown/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pumpify": { + "version": "1.5.1", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/react-markdown/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/react-markdown/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/react-markdown/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/pupa": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-markdown/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/qs": { + "version": "6.13.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/react-markdown/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/querystring-es3": { + "version": "0.2.1", + "engines": { + "node": ">=0.4.x" + } }, - "node_modules/react-markdown/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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", + "peer": true, "dependencies": { - "micromark-util-symbol": "^1.0.0" + "inherits": "~2.0.3" } }, - "node_modules/react-markdown/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "node_modules/queue-microtask": { + "version": "1.2.3", "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "consulting", + "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/react-markdown/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/randomfill": { + "version": "1.0.4", + "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/react-markdown/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" - } - ] + "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/react-markdown/node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "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": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/react-markdown/node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "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/react-markdown/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "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": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-markdown/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "@types/unist": "^2.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "rc": "cli.js" } }, - "node_modules/react-markdown/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "loose-envify": "^1.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/react-alert": { + "version": "7.0.3", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "^16.8.1 || ^17", + "react-dom": "^16.8.1 || ^17" } }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/react-bookmark": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/react-bookmark/-/react-bookmark-0.8.2.tgz", + "integrity": "sha512-79iXtvwrPBjdvpJGfIYHY2f8/+eA9Gn2bhTbuc0vx8fyElM1QaQoL9VVWsKSfOcMH9Fxfz8BZbXc9RaMRGJjAA==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "platform": "^1.3.4", + "prop-types": "^15.5.10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "react": ">=15.0.0", + "react-dom": ">=15.0.0", + "styled-components": ">=1.0.0" } }, - "node_modules/react-markdown/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "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", + "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "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", + "peer": true, + "engines": { + "node": ">=8.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/react-markdown/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "node_modules/react-dom": { + "version": "18.3.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "^18.3.1" } }, - "node_modules/react-modal": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", - "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", + "node_modules/react-dropdown-select": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/react-dropdown-select/-/react-dropdown-select-4.12.2.tgz", + "integrity": "sha512-p3TQ6iUolC1fFnnScMy599BUdrMdE8MOI5GatGp9Bwa8c+qbhiVF4V2rIaAm2IeDscgVZXAqVkQOmEk7ORxeqQ==", + "license": "MIT", "dependencies": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - }, - "engines": { - "node": ">=8" + "@emotion/react": "11.11.0", + "@emotion/styled": "11.11.0" }, "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" + "prop-types": ">=15.7.2", + "react": ">=16.x", + "react-dom": ">=16.x" } }, - "node_modules/react-native": { - "version": "0.75.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.75.3.tgz", - "integrity": "sha512-+Ne6u5H+tPo36sme19SCd1u2UID2uo0J/XzAJarxmrDj4Nsdi44eyUDKtQHmhgxjRGsuVJqAYrMK0abLSq8AHw==", - "peer": true, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", + "version": "1.3.0", + "license": "Apache-2.0", "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native-community/cli": "14.1.0", - "@react-native-community/cli-platform-android": "14.1.0", - "@react-native-community/cli-platform-ios": "14.1.0", - "@react-native/assets-registry": "0.75.3", - "@react-native/codegen": "0.75.3", - "@react-native/community-cli-plugin": "0.75.3", - "@react-native/gradle-plugin": "0.75.3", - "@react-native/js-polyfills": "0.75.3", - "@react-native/normalize-colors": "0.75.3", - "@react-native/virtualized-lists": "0.75.3", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "commander": "^9.4.1", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", + "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.80.3", - "metro-source-map": "^0.80.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "^5.3.1", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.2", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" + "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-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "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": { - "@types/react": "^18.2.6", - "react": "^18.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^18.0.0 || ^19.0.0" } }, - "node_modules/react-native-webview": { - "version": "11.26.1", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.26.1.tgz", - "integrity": "sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw==", + "node_modules/react-konva": { + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-19.0.10.tgz", + "integrity": "sha512-tJID7bungYs8ri5McjjlHWCniQMAasiNkTgATd8OJEnLrz3B7S5JN7nFkNfWETIHPx9rEN3gc+kQg32RhdZJcw==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "escape-string-regexp": "2.0.0", - "invariant": "2.2.4" + "@types/react-reconciler": "^0.32.1", + "its-fine": "^2.0.0", + "react-reconciler": "0.32.0", + "scheduler": "0.26.0" }, "peerDependencies": { - "react": "*", - "react-native": "*" + "konva": "^8.0.1 || ^7.2.5 || ^9.0.0 || ^10.0.0", + "react": "^18.3.1 || ^19.0.0", + "react-dom": "^18.3.1 || ^19.0.0" } }, - "node_modules/react-native-webview/node_modules/escape-string-regexp": { + "node_modules/react-konva/node_modules/its-fine": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", + "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/react-reconciler": "^0.28.9" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-konva/node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "*" } }, - "node_modules/react-native/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/react-konva/node_modules/react-reconciler": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.32.0.tgz", + "integrity": "sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==", + "license": "MIT", "peer": true, + "dependencies": { + "scheduler": "^0.26.0" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.1.0" } }, - "node_modules/react-native/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/react-konva/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 }, - "node_modules/react-native/node_modules/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", - "peer": true, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "license": "MIT" + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "6.0.0", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@types/react": "*" + }, + "peerDependencies": { + "react": "*" } }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "peer": true, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz", + "integrity": "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==", + "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0" + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "node_modules/react-overflow-list": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-overflow-list/-/react-overflow-list-0.5.0.tgz", - "integrity": "sha512-+UegukgQ10E4ll3txz4DJyrnCgZ3eDVuv5dvR8ziyG5FfgCDZcUKeKhIgbU90oyqQa21aH4oLOoGKt0TiYJRmg==", + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", "dependencies": { - "react-use": "^17.3.1" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" }, "peerDependencies": { - "react": ">=16" + "@types/react": ">=18", + "react": ">=18" } }, - "node_modules/react-player": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz", - "integrity": "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==", + "node_modules/react-modal": { + "version": "3.16.3", + "license": "MIT", "dependencies": { - "deepmerge": "^4.0.0", - "load-script": "^1.0.0", - "memoize-one": "^5.1.1", + "exenv": "^1.2.0", "prop-types": "^15.7.2", - "react-fast-compare": "^3.0.1" + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-player": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-3.3.1.tgz", + "integrity": "sha512-wE/xLloneXZ1keelFCaNeIFVNUp4/7YoUjfHjwF945aQzsbDKiIB0LQuCchGL+la0Y1IybxnR0R6Cm3AiqInMw==", + "license": "MIT", + "dependencies": { + "@mux/mux-player-react": "^3.5.1", + "cloudflare-video-element": "^1.3.3", + "dash-video-element": "^0.1.6", + "hls-video-element": "^1.5.6", + "spotify-audio-element": "^1.0.2", + "tiktok-video-element": "^0.1.0", + "twitch-video-element": "^0.1.2", + "vimeo-video-element": "^1.5.3", + "wistia-video-element": "^1.3.3", + "youtube-video-element": "^1.6.1" }, "peerDependencies": { - "react": ">=16.6.0" + "@types/react": "^17.0.0 || ^18 || ^19", + "react": "^17.0.2 || ^18 || ^19", + "react-dom": "^17.0.2 || ^18 || ^19" } }, "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" @@ -26757,8 +29923,7 @@ }, "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", @@ -26776,8 +29941,7 @@ }, "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" }, @@ -26788,8 +29952,7 @@ }, "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", @@ -26800,41 +29963,360 @@ "tiny-warning": "^1.0.0" }, "peerDependencies": { - "react": ">=15" + "react": ">=15" + } + }, + "node_modules/react-router/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-select": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz", + "integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==", + "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.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-spinners": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.17.0.tgz", + "integrity": "sha512-L/8HTylaBmIWwQzIjMq+0vyaRXuoAevzWoD35wKpNTxxtYXWZp+xtgkfD7Y4WItuX0YvdxMPU79+7VhhmbmuTQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-spring": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-10.0.3.tgz", + "integrity": "sha512-opangIUqCLmkf7+AJZAlM4fLlvzdzWOG/yqAzylKjUoe97Tsjgouz1PsDLu6C9uckvcaMfb4wS/VXiU6dULz5A==", + "license": "MIT", + "dependencies": { + "@react-spring/core": "~10.0.3", + "@react-spring/konva": "~10.0.3", + "@react-spring/native": "~10.0.3", + "@react-spring/three": "~10.0.3", + "@react-spring/web": "~10.0.3", + "@react-spring/zdog": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-spring/node_modules/@react-spring/native": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-10.0.3.tgz", + "integrity": "sha512-ypfKsfqn+Ll3LeZCp+noFBJdJOVomIfnGjpQzpXibrfqWlPgl0Ckj9sy+U3fLGPyrbbCSw9KLvsgSwZwDCScKA==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-native": ">=0.78" + } + }, + "node_modules/react-spring/node_modules/@react-spring/three": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-10.0.3.tgz", + "integrity": "sha512-hZP7ChF/EwnWn+H2xuzAsRRfQdhquoBTI1HKgO6X9V8tcVCuR69qJmsA9N00CA4Nzx0bo/zwBtqONmi55Ffm5w==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~10.0.3", + "@react-spring/core": "~10.0.3", + "@react-spring/shared": "~10.0.3", + "@react-spring/types": "~10.0.3" + }, + "peerDependencies": { + "@react-three/fiber": ">=6.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "three": ">=0.126" + } + }, + "node_modules/react-spring/node_modules/@react-three/fiber": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.3.0.tgz", + "integrity": "sha512-myPe3YL/C8+Eq939/4qIVEPBW/uxV0iiUbmjfwrs9sGKYDG8ib8Dz3Okq7BQt8P+0k4igedONbjXMQy84aDFmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/react-reconciler": "^0.32.0", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^2.0.0", + "react-reconciler": "^0.31.0", + "react-use-measure": "^2.1.7", + "scheduler": "^0.25.0", + "suspend-react": "^0.1.3", + "use-sync-external-store": "^1.4.0", + "zustand": "^5.0.3" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-native": ">=0.78", + "three": ">=0.156" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", + "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/react-reconciler": "^0.28.9" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/react-spring/node_modules/@react-three/fiber/node_modules/react-reconciler": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.31.0.tgz", + "integrity": "sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.25.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-spring/node_modules/@types/react": { + "version": "19.1.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.15.tgz", + "integrity": "sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/react-spring/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", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/react-spring/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/react-spring/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/react-spring/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/react-spring/node_modules/react-native/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 + } } }, - "node_modules/react-router/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==" + "node_modules/react-spring/node_modules/react-native/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 + }, + "node_modules/react-spring/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", + "peer": true + }, + "node_modules/react-spring/node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT", + "peer": true }, - "node_modules/react-syntax-highlighter": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", - "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==", + "node_modules/react-spring/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": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.4.1", - "lowlight": "^1.17.0", - "prismjs": "^1.27.0", - "refractor": "^3.6.0" - }, - "peerDependencies": { - "react": ">= 0.14.0" + "async-limiter": "~1.0.0" } }, "node_modules/react-tippy": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/react-tippy/-/react-tippy-1.4.0.tgz", - "integrity": "sha512-r/hM5XK9Ztr2ZY7IWKuRmISTlUPS/R6ddz6PO2EuxCgW+4JBcGZRPU06XcVPRDCOIiio8ryBQFrXMhFMhsuaHA==", + "license": "MIT", "dependencies": { "popper.js": "^1.11.1" } }, "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", @@ -26848,57 +30330,44 @@ }, "node_modules/react-transition-group/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" } }, - "node_modules/react-universal-interface": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", - "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", + "node_modules/react-use-measure": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz", + "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", + "license": "MIT", + "peer": true, "peerDependencies": { - "react": "*", - "tslib": "*" + "react": ">=16.13", + "react-dom": ">=16.13" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, - "node_modules/react-use": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.5.1.tgz", - "integrity": "sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==", + "node_modules/react-zdog": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.2.2.tgz", + "integrity": "sha512-Ix7ALha91aOEwiHuxumCeYbARS5XNpc/w0v145oGkM6poF/CvhKJwzLhM5sEZbtrghMA+psAhOJkCTzJoseicA==", + "license": "MIT", + "peer": true, "dependencies": { - "@types/js-cookie": "^2.2.6", - "@xobotyi/scrollbar-width": "^1.9.5", - "copy-to-clipboard": "^3.3.1", - "fast-deep-equal": "^3.1.3", - "fast-shallow-equal": "^1.0.0", - "js-cookie": "^2.2.1", - "nano-css": "^5.6.2", - "react-universal-interface": "^0.6.2", - "resize-observer-polyfill": "^1.5.1", - "screenfull": "^5.1.0", - "set-harmonic-interval": "^1.0.1", - "throttle-debounce": "^3.0.1", - "ts-easing": "^0.2.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" + "react": "^18.2.0", + "react-dom": "^18.2.0", + "resize-observer-polyfill": "^1.5.1" } }, - "node_modules/react-use/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/read-pkg": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -26914,9 +30383,8 @@ }, "node_modules/read-pkg-up": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -26931,9 +30399,8 @@ }, "node_modules/read-pkg-up/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==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -26943,9 +30410,8 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -26955,9 +30421,8 @@ }, "node_modules/read-pkg/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==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -26967,9 +30432,8 @@ }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -26982,9 +30446,8 @@ }, "node_modules/read-pkg/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==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -26994,14 +30457,12 @@ }, "node_modules/read-pkg/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "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", @@ -27012,12 +30473,11 @@ } }, "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "version": "3.0.4", + "license": "MIT", "peer": true, "dependencies": { - "readable-stream": "^3.6.0" + "readable-stream": "^4.7.0" }, "engines": { "node": ">=8" @@ -27027,10 +30487,49 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/readable-web-to-node-stream/node_modules/buffer": { + "version": "6.0.3", + "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", + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "4.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "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" }, @@ -27038,56 +30537,76 @@ "node": ">=8.10.0" } }, - "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==" - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "peer": true + "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/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "peer": 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", "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" + "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": ">= 4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/recast/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==", - "peer": true, - "engines": { - "node": ">=0.10.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/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/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": { - "resolve": "^1.1.6" + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.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==", + "license": "MIT", "dependencies": { "minimatch": "^3.0.5" }, @@ -27096,9 +30615,10 @@ } }, "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -27106,8 +30626,7 @@ }, "node_modules/recursive-readdir/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" }, @@ -27117,9 +30636,8 @@ }, "node_modules/redent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" @@ -27133,9 +30651,8 @@ }, "node_modules/redent/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -27144,18 +30661,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "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" @@ -27164,189 +30681,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/refractor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "dependencies": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.27.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/refractor/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==" - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/refractor/node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/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==", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/refractor/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==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "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==" + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "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" }, @@ -27355,28 +30700,20 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } + "version": "0.14.1", + "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -27386,16 +30723,17 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "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": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "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.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -27403,8 +30741,7 @@ }, "node_modules/registry-auth-token": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" }, @@ -27414,8 +30751,7 @@ }, "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" }, @@ -27426,32 +30762,36 @@ "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.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "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==", + "node_modules/rehype-katex": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", "vfile": "^6.0.0" }, "funding": { @@ -27459,117 +30799,14 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-raw/node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.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/rehype-raw/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==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", - "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/rehype-raw/node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.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/rehype-raw/node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-raw/node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "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", - "@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", + "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" }, "funding": { @@ -27577,25 +30814,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-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==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/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==", + "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/unist": "^3.0.0", - "vfile": "^6.0.0" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" }, "funding": { "type": "opencollective", @@ -27604,16 +30831,14 @@ }, "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-codesandbox": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/remark-codesandbox/-/remark-codesandbox-0.10.1.tgz", - "integrity": "sha512-eY/Vn5K7cVji0wm4q8ioFKFo+u7KEFk3SYpClGrSFgTL6ia/Mecq+lP3v1FdHtvPE7JCHgFuyxhPJtgCYErxeg==", + "license": "MIT", "dependencies": { "codesandbox": "^2.1.11", "codesandbox-import-utils": "2.1.11", @@ -27628,21 +30853,18 @@ }, "node_modules/remark-codesandbox/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/remark-codesandbox/node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/remark-codesandbox/node_modules/isomorphic-fetch": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "license": "MIT", "dependencies": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" @@ -27650,8 +30872,7 @@ }, "node_modules/remark-codesandbox/node_modules/mdast-util-to-string": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -27659,8 +30880,7 @@ }, "node_modules/remark-codesandbox/node_modules/node-fetch": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "license": "MIT", "dependencies": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -27668,8 +30888,7 @@ }, "node_modules/remark-codesandbox/node_modules/unist-builder": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -27677,8 +30896,7 @@ }, "node_modules/remark-codesandbox/node_modules/unist-util-is": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -27686,8 +30904,7 @@ }, "node_modules/remark-codesandbox/node_modules/unist-util-visit": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", @@ -27700,8 +30917,7 @@ }, "node_modules/remark-codesandbox/node_modules/unist-util-visit-parents": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" @@ -27712,9 +30928,10 @@ } }, "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "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", @@ -27728,8 +30945,7 @@ }, "node_modules/remark-docusaurus-tabs": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/remark-docusaurus-tabs/-/remark-docusaurus-tabs-0.2.0.tgz", - "integrity": "sha512-Xl8FkeQAdDqlhf7EurBxCkT7cfA5QK2PN8eoFr94g1OOuc7XsgVk897zf8yhNNnpQYR8nd/XC6JaXTZxHxX4mA==", + "license": "MIT", "dependencies": { "mdast-util-to-string": "^2.0.0", "unist-util-visit": "^2.0.3" @@ -27737,13 +30953,11 @@ }, "node_modules/remark-docusaurus-tabs/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/remark-docusaurus-tabs/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" @@ -27751,8 +30965,7 @@ }, "node_modules/remark-docusaurus-tabs/node_modules/unist-util-is": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -27760,8 +30973,7 @@ }, "node_modules/remark-docusaurus-tabs/node_modules/unist-util-visit": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", @@ -27774,8 +30986,7 @@ }, "node_modules/remark-docusaurus-tabs/node_modules/unist-util-visit-parents": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" @@ -27789,6 +31000,7 @@ "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", @@ -27804,6 +31016,7 @@ "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", @@ -27816,9 +31029,10 @@ } }, "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "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", @@ -27832,13 +31046,15 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm/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==", + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", "unified": "^11.0.0" }, "funding": { @@ -27847,9 +31063,10 @@ } }, "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "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" @@ -27863,6 +31080,7 @@ "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", @@ -27875,9 +31093,10 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "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", @@ -27890,187 +31109,24 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "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/remark-rehype/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==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/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==" - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/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==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/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==", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-stringify/node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "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": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remote-origin-url": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.5.3.tgz", - "integrity": "sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==", + "license": "MIT", "dependencies": { "parse-git-config": "^1.1.1" }, @@ -28080,8 +31136,7 @@ }, "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", @@ -28092,8 +31147,7 @@ }, "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", @@ -28107,8 +31161,7 @@ }, "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", @@ -28120,8 +31173,7 @@ }, "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" }, @@ -28134,8 +31186,7 @@ }, "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", @@ -28147,16 +31198,13 @@ }, "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", { @@ -28164,6 +31212,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -28171,79 +31220,74 @@ "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==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, "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/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "peer": true - }, "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==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/reselect": { + "version": "5.1.1", + "license": "MIT", + "peer": true }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT", + "peer": true }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "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.13.0", + "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-dir": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", + "license": "MIT", "dependencies": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" @@ -28254,8 +31298,7 @@ }, "node_modules/resolve-dir/node_modules/global-modules": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "license": "MIT", "dependencies": { "global-prefix": "^0.1.4", "is-windows": "^0.2.0" @@ -28266,8 +31309,7 @@ }, "node_modules/resolve-dir/node_modules/global-prefix": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.0", "ini": "^1.3.4", @@ -28280,8 +31322,7 @@ }, "node_modules/resolve-dir/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -28291,21 +31332,18 @@ }, "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" }, @@ -28317,30 +31355,61 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "peer": true, + "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": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/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": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/retry": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -28348,14 +31417,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "license": "MIT" }, "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": { "glob": "^7.1.3" }, @@ -28368,8 +31434,7 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -28377,8 +31442,7 @@ }, "node_modules/rlp": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "license": "MPL-2.0", "peer": true, "dependencies": { "bn.js": "^5.2.0" @@ -28389,51 +31453,23 @@ }, "node_modules/robust-predicates": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz", - "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==", - "dependencies": { - "open": "^8.4.0", - "picomatch": "^2.3.1", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "rollup": "2.x || 3.x || 4.x" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } + "license": "Unlicense" }, - "node_modules/rtl-css-js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "node_modules/roughjs": { + "version": "4.6.6", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.1.2" + "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/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==" - }, "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", @@ -28447,18 +31483,27 @@ "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", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "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", @@ -28473,27 +31518,25 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "license": "ISC", "dependencies": { "aproba": "^1.1.1" } }, "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": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -28503,29 +31546,17 @@ }, "node_modules/rxjs/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/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } + "license": "0BSD" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -28537,14 +31568,11 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "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", @@ -28558,17 +31586,37 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -28578,22 +31626,25 @@ } }, "node_modules/safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + "version": "2.5.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } }, "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/sass": { - "version": "1.79.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", - "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", + "version": "1.93.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.0.tgz", + "integrity": "sha512-CQi5/AzCwiubU3dSqRDJ93RfOfg/hhpW1l6wCIvolmehfwgCI35R/0QDs1+R+Ygrl8jFawwwIojE2w47/mf94A==", + "license": "MIT", "dependencies": { "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -28601,12 +31652,14 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { "version": "10.5.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.5.2.tgz", - "integrity": "sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==", + "license": "MIT", "dependencies": { "klona": "^2.0.4", "loader-utils": "^2.0.0", @@ -28641,8 +31694,7 @@ }, "node_modules/sass-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", @@ -28658,8 +31710,7 @@ }, "node_modules/sass/node_modules/chokidar": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -28672,8 +31723,7 @@ }, "node_modules/sass/node_modules/readdirp": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "license": "MIT", "engines": { "node": ">= 14.16.0" }, @@ -28683,22 +31733,30 @@ } }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/scheduler": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, + "node_modules/schema-dts": { + "version": "1.1.5", + "license": "Apache-2.0" + }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "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", @@ -28706,7 +31764,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -28714,9 +31772,10 @@ } }, "node_modules/schema-utils/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==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -28732,6 +31791,7 @@ "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" }, @@ -28742,49 +31802,40 @@ "node_modules/schema-utils/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==" - }, - "node_modules/screenfull": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/scrypt-js": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT", "peer": true }, "node_modules/search-insights": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz", - "integrity": "sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==", + "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": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "version": "4.0.4", "hasInstallScript": true, + "license": "MIT", + "peer": true, "dependencies": { - "elliptic": "^6.5.4", + "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "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" @@ -28796,12 +31847,14 @@ "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==" + "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" @@ -28812,8 +31865,7 @@ }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -28823,8 +31875,7 @@ }, "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" }, @@ -28837,8 +31888,7 @@ }, "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", @@ -28860,21 +31910,18 @@ }, "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/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" }, @@ -28884,8 +31931,7 @@ }, "node_modules/send/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" }, @@ -28895,16 +31941,14 @@ }, "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/send/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" } @@ -28913,6 +31957,7 @@ "version": "2.1.0", "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" @@ -28920,31 +31965,31 @@ }, "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.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", + "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", + "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "node_modules/serve-handler/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -28954,6 +31999,7 @@ "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" } @@ -28962,6 +32008,7 @@ "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" }, @@ -28970,9 +32017,10 @@ } }, "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -28981,14 +32029,16 @@ } }, "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "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", @@ -29006,6 +32056,7 @@ "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" } @@ -29014,6 +32065,7 @@ "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" } @@ -29022,6 +32074,7 @@ "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", @@ -29035,22 +32088,24 @@ "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==" + "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==" + "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==" + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" }, "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", @@ -29063,30 +32118,21 @@ }, "node_modules/serve-static/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/ses": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ses/-/ses-1.8.0.tgz", - "integrity": "sha512-pis9agyAy7s9lDApaYY9OSktkzc10gkBggSbhHXwTf3cWL9H8xA7oKiXIfT/uVNf8dzZN3o2TtPYjer9/axIhw==", + "version": "1.12.0", + "license": "Apache-2.0", "dependencies": { - "@endo/env-options": "^1.1.6" + "@endo/env-options": "^1.1.8" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "peer": true - }, "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", @@ -29101,9 +32147,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -29114,40 +32159,54 @@ "node": ">= 0.4" } }, - "node_modules/set-harmonic-interval": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", - "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", + "node_modules/set-proto": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=6.9" + "node": ">= 0.4" } }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "license": "MIT" }, "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/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sha256-uint8array": { + "version": "0.10.7", + "license": "MIT" + }, "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" }, @@ -29157,13 +32216,11 @@ }, "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" }, @@ -29173,59 +32230,86 @@ }, "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.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "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/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/shortid": { + "version": "2.2.17", + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "nanoid": "^3.3.8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "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": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "nanoid": "^2.1.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shortid/node_modules/nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + "node_modules/side-channel-map": { + "version": "1.0.1", + "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": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -29236,13 +32320,11 @@ }, "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", @@ -29254,13 +32336,13 @@ }, "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==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.3.tgz", + "integrity": "sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==", + "license": "MIT", "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", @@ -29278,12 +32360,12 @@ "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==" + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" }, "node_modules/siwe": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/siwe/-/siwe-2.3.2.tgz", - "integrity": "sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==", + "license": "Apache-2.0", "dependencies": { "@spruceid/siwe-parser": "^2.1.2", "@stablelib/random": "^1.0.1", @@ -29296,8 +32378,7 @@ }, "node_modules/siwe/node_modules/@spruceid/siwe-parser": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz", - "integrity": "sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==", + "license": "Apache-2.0", "dependencies": { "@noble/hashes": "^1.1.2", "apg-js": "^4.3.0", @@ -29309,6 +32390,7 @@ "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" }, @@ -29318,57 +32400,60 @@ }, "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/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "peer": true, + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">=6" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/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==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "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": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/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==", - "peer": true, + "node_modules/slice-ansi/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", "dependencies": { - "color-name": "1.1.3" + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi/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==", - "peer": true - }, "node_modules/smart-buffer": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha512-1+8bxygjTsNfvQe0/0pNBesTOlSHtOeG6b6LYbvsZCCHDKYZ40zcQo6YTnZBWrBSLWOCbrHljLdEmGMYebu7aQ==", + "license": "MIT", "engines": { "node": ">= 0.10.15", "npm": ">= 1.3.5" @@ -29378,15 +32463,17 @@ "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/socket.io-client": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", - "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -29398,21 +32485,40 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/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/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", @@ -29421,9 +32527,7 @@ }, "node_modules/socks": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", - "integrity": "sha512-ArX4vGPULWjKDKgUnW8YzfI2uXW7kzgkJuB0GnFBA/PfT3exrrOk+7Wk2oeb894Qf20u1PWv9LEgrO0Z82qAzA==", - "deprecated": "If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0", + "license": "MIT", "dependencies": { "ip": "^1.1.4", "smart-buffer": "^1.0.13" @@ -29435,8 +32539,7 @@ }, "node_modules/socks-proxy-agent": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", - "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", + "license": "MIT", "dependencies": { "agent-base": "^4.1.0", "socks": "^1.1.10" @@ -29446,30 +32549,30 @@ "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.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "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": ">= 8" + "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" @@ -29477,16 +32580,14 @@ }, "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" @@ -29494,8 +32595,7 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -29503,13 +32603,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -29517,13 +32615,13 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==" + "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", @@ -29539,6 +32637,7 @@ "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", @@ -29548,15 +32647,21 @@ "wbuf": "^1.7.3" } }, + "node_modules/spotify-audio-element": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spotify-audio-element/-/spotify-audio-element-1.0.2.tgz", + "integrity": "sha512-YEovyyeJTJMzdSVqFw/Fx19e1gdcD4bmZZ/fWS0Ji58KTpvAT2rophgK87ocqpy6eJNSmIHikhgbRjGWumgZew==", + "license": "MIT" + }, "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" }, @@ -29566,24 +32671,16 @@ }, "node_modules/ssri": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz", - "integrity": "sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==", + "license": "CC0-1.0", "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/stack-generator": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", "peer": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -29596,6 +32693,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -29604,39 +32702,15 @@ "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/stacktrace-gps": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", - "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", - "dependencies": { - "source-map": "0.5.6", - "stackframe": "^1.3.4" - } - }, - "node_modules/stacktrace-gps/node_modules/source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "dependencies": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT", + "peer": true }, "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "license": "MIT", "peer": true, "dependencies": { "type-fest": "^0.7.1" @@ -29649,6 +32723,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=8" @@ -29656,21 +32731,20 @@ }, "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/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -29678,8 +32752,7 @@ }, "node_modules/stream-each": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -29687,8 +32760,7 @@ }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -29698,17 +32770,14 @@ }, "node_modules/stream-shift": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + "license": "MIT" }, "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "version": "2.22.0", + "license": "MIT", "peer": true, "dependencies": { "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" }, "optionalDependencies": { @@ -29717,16 +32786,24 @@ }, "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-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, "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", @@ -29741,8 +32818,7 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -29752,8 +32828,7 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -29765,23 +32840,23 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -29792,24 +32867,25 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -29819,24 +32895,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -29851,8 +32929,7 @@ }, "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" @@ -29866,6 +32943,7 @@ "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", @@ -29877,8 +32955,7 @@ }, "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" }, @@ -29890,30 +32967,28 @@ "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-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "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-hex-prefix": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -29924,9 +32999,8 @@ }, "node_modules/strip-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.1" }, @@ -29939,8 +33013,7 @@ }, "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" }, @@ -29949,28 +33022,139 @@ } }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "version": "1.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/style-search": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/style-to-js": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.18.tgz", + "integrity": "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.11" + } }, "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.11.tgz", + "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/styled-components": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", + "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.49", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/styled-components/node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT", + "peer": true + }, + "node_modules/styled-components/node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT", + "peer": true + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "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", + "peer": true, "dependencies": { - "inline-style-parser": "0.1.1" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT", + "peer": true + }, + "node_modules/styled-components/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", + "peer": true + }, "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" @@ -29984,9 +33168,8 @@ }, "node_modules/stylelint": { "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, + "license": "MIT", "dependencies": { "@csstools/css-parser-algorithms": "^2.3.1", "@csstools/css-tokenizer": "^2.2.0", @@ -30042,9 +33225,8 @@ }, "node_modules/stylelint-config-recommended": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -30054,9 +33236,8 @@ }, "node_modules/stylelint-config-standard": { "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", "dev": true, + "license": "MIT", "dependencies": { "stylelint-config-recommended": "^13.0.0" }, @@ -30069,34 +33250,18 @@ }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint/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==", "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } + "license": "MIT" }, "node_modules/stylelint/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.2.0" }, @@ -30106,42 +33271,32 @@ }, "node_modules/stylelint/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stylelint/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/stylelint/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==", - "dev": true - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stylelint/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -30151,9 +33306,8 @@ }, "node_modules/stylelint/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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -30165,9 +33319,8 @@ }, "node_modules/stylelint/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" @@ -30177,20 +33330,18 @@ } }, "node_modules/stylis": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", - "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==" + "version": "4.3.6", + "license": "MIT" }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "peer": true + "node_modules/super-media-element": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/super-media-element/-/super-media-element-1.4.2.tgz", + "integrity": "sha512-9pP/CVNp4NF2MNlRzLwQkjiTgKKe9WYXrLh9+8QokWmMxz+zt2mf1utkWLco26IuA3AfVcTb//qtlTIjY3VHxA==", + "license": "MIT" }, "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" }, @@ -30200,9 +33351,8 @@ }, "node_modules/supports-hyperlinks": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", - "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -30216,8 +33366,7 @@ }, "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" }, @@ -30225,29 +33374,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "react": ">=17.0" + } + }, "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==" + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" }, "node_modules/svg-tags": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "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==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", + "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "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" + "picocolors": "^1.0.0", + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo" @@ -30264,32 +33423,15 @@ "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/svgo/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==", - "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/svgo/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==" - }, "node_modules/table": { "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -30302,10 +33444,11 @@ } }, "node_modules/table/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==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -30319,39 +33462,34 @@ }, "node_modules/table/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/table/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/table/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/table/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -30366,9 +33504,8 @@ }, "node_modules/table/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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -30380,16 +33517,16 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.6.tgz", + "integrity": "sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==", + "license": "MIT", "dependencies": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", @@ -30399,8 +33536,7 @@ }, "node_modules/tar-fs/node_modules/bl": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -30408,13 +33544,11 @@ }, "node_modules/tar-fs/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/tar-fs/node_modules/pump": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -30422,8 +33556,7 @@ }, "node_modules/tar-fs/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", @@ -30436,21 +33569,18 @@ }, "node_modules/tar-fs/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/tar-fs/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/tar-fs/node_modules/tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -30461,49 +33591,22 @@ "xtend": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "peer": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "peer": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" + "node": ">= 0.8.0" } }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/tar-stream": { + "version": "3.1.7", + "license": "MIT", "peer": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/term-size": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", + "license": "MIT", "dependencies": { "execa": "^0.7.0" }, @@ -30511,20 +33614,9 @@ "node": ">=4" } }, - "node_modules/term-size/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, "node_modules/term-size/node_modules/execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -30540,33 +33632,21 @@ }, "node_modules/term-size/node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/term-size/node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/term-size/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "node_modules/term-size/node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -30576,51 +33656,14 @@ }, "node_modules/term-size/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==", + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/term-size/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==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/term-size/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/term-size/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/term-size/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "node_modules/terser": { "version": "5.34.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.0.tgz", - "integrity": "sha512-y5NUX+U9HhVsK/zihZwoq4r9dICLyV2jXGOriDAVOeKhq3LKVjgJbGO90FisozXLlJfvjHqgckGmJFBb9KYoWQ==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -30636,8 +33679,7 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -30669,8 +33711,7 @@ }, "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", @@ -30682,8 +33723,7 @@ }, "node_modules/terser-webpack-plugin/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", @@ -30699,8 +33739,7 @@ }, "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" }, @@ -30713,27 +33752,58 @@ }, "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/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/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", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "version": "1.2.3", + "license": "Apache-2.0", "peer": true, "dependencies": { "b4a": "^1.6.4" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, "node_modules/textextensions": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", - "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", + "license": "MIT", "engines": { "node": ">=0.8" }, @@ -30741,29 +33811,43 @@ "url": "https://bevry.me/fund" } }, + "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/three": { + "version": "0.180.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.180.0.tgz", + "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", + "license": "MIT", + "peer": true + }, "node_modules/throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT", "peer": true }, - "node_modules/throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "engines": { - "node": ">=10" - } - }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -30771,13 +33855,11 @@ }, "node_modules/through2/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/through2/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", @@ -30790,13 +33872,11 @@ }, "node_modules/through2/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/through2/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" } @@ -30804,20 +33884,25 @@ "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiktok-video-element": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tiktok-video-element/-/tiktok-video-element-0.1.0.tgz", + "integrity": "sha512-PVWUlpDdQ/LPXi7x4/furfD7Xh1L72CgkGCaMsZBIjvxucMGm1DDPJdM9IhWBFfo6tuR4cYVO/v596r6GG/lvQ==", + "license": "MIT" }, "node_modules/timed-out": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -30827,18 +33912,31 @@ }, "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/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -30850,33 +33948,39 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause", "peer": true }, "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, + "node_modules/to-buffer/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/to-gatsby-remark-plugin": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/to-gatsby-remark-plugin/-/to-gatsby-remark-plugin-0.1.0.tgz", - "integrity": "sha512-blmhJ/gIrytWnWLgPSRCkhCPeki6UBK2daa3k9mGahN7GjwHu8KrS7F70MvwlsG7IE794JLgwAdCbi4hU4faFQ==", + "license": "MIT", "dependencies": { "to-vfile": "^6.1.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" }, @@ -30886,8 +33990,7 @@ }, "node_modules/to-vfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-6.1.0.tgz", - "integrity": "sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==", + "license": "MIT", "dependencies": { "is-buffer": "^2.0.0", "vfile": "^4.0.0" @@ -30899,13 +34002,11 @@ }, "node_modules/to-vfile/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/to-vfile/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", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" }, @@ -30916,8 +34017,7 @@ }, "node_modules/to-vfile/node_modules/vfile": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -30931,8 +34031,7 @@ }, "node_modules/to-vfile/node_modules/vfile-message": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -30945,20 +34044,19 @@ "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" }, "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" } @@ -30966,12 +34064,30 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "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" @@ -30979,9 +34095,8 @@ }, "node_modules/trim-newlines": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -30991,48 +34106,36 @@ }, "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/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "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-easing": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" - }, - "node_modules/ts-keycode-enum": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", - "integrity": "sha512-DF8+Cf/FJJnPRxwz8agCoDelQXKZWQOS/gnnwx01nZ106tPJdB3BgJ9QTtLwXgR82D8O+nTjuZzWgf0Rg4vuRA==" - }, "node_modules/tsc-files": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/tsc-files/-/tsc-files-1.1.4.tgz", - "integrity": "sha512-RePsRsOLru3BPpnf237y1Xe1oCGta8rmSYzM76kYo5tLGsv5R2r3s64yapYorGTPuuLyfS9NVbh9ydzmvNie2w==", "dev": true, + "license": "MIT", "bin": { "tsc-files": "cli.js" }, @@ -31042,14 +34145,12 @@ }, "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/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -31062,26 +34163,27 @@ }, "node_modules/tsutils/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 + "dev": true, + "license": "0BSD" }, "node_modules/tty-browserify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" + "license": "MIT" }, "node_modules/tweetnacl": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "peer": true + "license": "Unlicense" + }, + "node_modules/twitch-video-element": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/twitch-video-element/-/twitch-video-element-0.1.2.tgz", + "integrity": "sha512-/up4KiWiTYiav+CUo+/DbV8JhP4COwEKSo8h1H/Zft/5NzZ/ZiIQ48h7erFKvwzalN0GfkEGGIfwIzAO0h7FHQ==", + "license": "MIT" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, + "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -31093,6 +34195,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -31100,8 +34203,7 @@ }, "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" }, @@ -31113,6 +34215,7 @@ "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" @@ -31122,30 +34225,27 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, + "version": "1.0.3", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -31155,17 +34255,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -31175,17 +34275,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -31196,21 +34295,19 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "license": "MIT" }, "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.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.8.3", + "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -31219,16 +34316,58 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ulid": { + "version": "2.4.0", + "license": "MIT", + "peer": true, + "bin": { + "ulid": "bin/cli.js" + } + }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -31236,13 +34375,13 @@ }, "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/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" } @@ -31251,6 +34390,7 @@ "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" } @@ -31259,6 +34399,7 @@ "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" @@ -31268,25 +34409,26 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "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.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "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", @@ -31303,8 +34445,7 @@ }, "node_modules/unified/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" }, @@ -31314,24 +34455,21 @@ }, "node_modules/unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", "dependencies": { "unique-slug": "^2.0.0" } }, "node_modules/unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" } }, "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" }, @@ -31342,36 +34480,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-builder": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", - "integrity": "sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==", + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-builder/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==" - }, - "node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-is": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -31381,11 +34506,12 @@ } }, "node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "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": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", @@ -31396,6 +34522,7 @@ "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" }, @@ -31404,35 +34531,23 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-position/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==" - }, - "node_modules/unist-util-select": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-4.0.3.tgz", - "integrity": "sha512-1074+K9VyR3NyUz3lgNtHKm7ln+jSZXtLJM4E22uVuoFn88a/Go2pX8dusrt/W+KWH1ncn8jcd8uCQuvXb/fXA==", + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "css-selector-parser": "^1.0.0", - "nth-check": "^2.0.0", - "zwitch": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-select/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==" - }, "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" }, @@ -31443,8 +34558,7 @@ }, "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", @@ -31457,8 +34571,7 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -31470,32 +34583,29 @@ }, "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/unzip-response": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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", @@ -31510,9 +34620,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -31523,8 +34634,7 @@ }, "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", @@ -31550,8 +34660,7 @@ }, "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", @@ -31571,8 +34680,7 @@ }, "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" }, @@ -31582,8 +34690,7 @@ }, "node_modules/update-notifier/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -31593,16 +34700,14 @@ }, "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": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.12.3" @@ -31615,6 +34720,7 @@ "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", @@ -31641,6 +34747,7 @@ "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", @@ -31656,8 +34763,7 @@ }, "node_modules/url-parse-lax": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "license": "MIT", "dependencies": { "prepend-http": "^1.0.1" }, @@ -31667,26 +34773,36 @@ }, "node_modules/url/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==" + "license": "MIT" }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", - "dependencies": { - "@juggle/resize-observer": "^3.3.1" + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz", + "integrity": "sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peer": true, "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/utf-8-validate": { "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -31696,14 +34812,12 @@ }, "node_modules/utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT", "peer": true }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -31714,72 +34828,39 @@ }, "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/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + "version": "1.0.9" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -31787,61 +34868,50 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/validate.io-array": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + "license": "MIT" }, "node_modules/validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" + "version": "1.0.2" }, "node_modules/validate.io-integer": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dependencies": { "validate.io-number": "^1.0.3" } }, "node_modules/validate.io-integer-array": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" } }, "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + "version": "1.0.3" }, "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" @@ -31852,57 +34922,11 @@ } }, "node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/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==" - }, - "node_modules/vfile-location/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "version": "5.0.3", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", @@ -31911,8 +34935,7 @@ }, "node_modules/vfile-message": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -31922,21 +34945,80 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vimeo-video-element": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/vimeo-video-element/-/vimeo-video-element-1.5.3.tgz", + "integrity": "sha512-OQWyGS9nTouMqfRJyvmAm/n6IRhZ7x3EfPAef+Q+inGBeHa3SylDbtyeB/rEBd4B/T/lcYBW3rjaD9W2DRYkiQ==", + "license": "MIT", + "dependencies": { + "@vimeo/player": "2.29.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==", + "license": "MIT", "peer": true }, "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==" + "license": "MIT" + }, + "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", + "engines": { + "node": ">=14.0.0" + } + }, + "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", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "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", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" }, "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", "peer": true, "dependencies": { "makeerror": "1.0.12" @@ -31944,16 +35026,14 @@ }, "node_modules/warning": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/watchpack": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -31966,48 +35046,42 @@ "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/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "peer": true, - "dependencies": { - "defaults": "^1.0.3" + "node_modules/weakmap-polyfill": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/weakmap-polyfill/-/weakmap-polyfill-2.0.4.tgz", + "integrity": "sha512-ZzxBf288iALJseijWelmECm/1x7ZwQn3sMYIkDr2VvZp7r6SEKuT8D0O9Wiq6L9Nl5mazrOMcmiZE/2NCenaxw==", + "license": "MIT", + "engines": { + "node": ">=8.10.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/web-worker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", - "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==" - }, "node_modules/webextension-polyfill": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz", - "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==", + "license": "MPL-2.0", "peer": true }, "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==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.95.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", - "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -32051,8 +35125,7 @@ }, "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", @@ -32076,16 +35149,14 @@ }, "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-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", "engines": { "node": ">=8.3.0" }, @@ -32103,88 +35174,114 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "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": "^3.4.3", - "mime-types": "^2.1.31", + "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.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "node_modules/webpack-dev-middleware/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/webpack-dev-middleware/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": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/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/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": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "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.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "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": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -32195,36 +35292,79 @@ } } }, - "node_modules/webpack-dev-server/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/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": "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==", + "version": "6.0.1", + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/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", @@ -32239,26 +35379,37 @@ } }, "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", + "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", + "ansis": "^3.2.0", + "consola": "^3.2.3", "pretty-time": "^1.1.0", - "std-env": "^3.0.1" + "std-env": "^3.7.0" }, "engines": { - "node": ">=12" + "node": ">=14.21.3" }, "peerDependencies": { + "@rspack/core": "*", "webpack": "3 || 4 || 5" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "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", @@ -32272,19 +35423,20 @@ "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-fetch": { "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + "license": "MIT" }, "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": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -32292,8 +35444,7 @@ }, "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" }, @@ -32305,39 +35456,41 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -32348,15 +35501,13 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -32370,21 +35521,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "peer": true - }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -32396,8 +35541,7 @@ }, "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" }, @@ -32410,27 +35554,28 @@ }, "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/wolfy87-eventemitter": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", - "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" + "node_modules/wistia-video-element": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/wistia-video-element/-/wistia-video-element-1.3.3.tgz", + "integrity": "sha512-ZVC8HH8uV3mQGcSz10MACLDalao/0YdVverNN4GNFsOXiumfqSiZnRVc8WZEywgVckBkR7+yerQYESYPDzvTfQ==", + "license": "MIT", + "dependencies": { + "super-media-element": "~1.4.2" + } }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "devOptional": true, + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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", @@ -32445,8 +35590,7 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -32456,8 +35600,7 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -32467,8 +35610,7 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -32481,13 +35623,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -32496,8 +35636,7 @@ }, "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" }, @@ -32514,10 +35653,39 @@ } } }, + "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" }, @@ -32529,6 +35697,7 @@ "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" }, @@ -32537,47 +35706,49 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", - "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + "license": "ISC" }, "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/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "peer": true, + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -32593,9 +35764,8 @@ }, "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", "engines": { "node": ">=10" } @@ -32603,12 +35773,16 @@ "node_modules/yargs/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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "peer": true }, "node_modules/yargs/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", + "peer": true, "engines": { "node": ">=8" } @@ -32617,6 +35791,8 @@ "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", + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -32630,6 +35806,8 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, "engines": { "node": ">=10" } @@ -32638,14 +35816,16 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "peer": true, "engines": { "node": ">=12" } }, "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" }, @@ -32653,26 +35833,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/youtube-video-element": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/youtube-video-element/-/youtube-video-element-1.6.1.tgz", + "integrity": "sha512-FDRgXlPxpe1bh6HlhL6GfJVcvVNaZKCcLEZ90X1G3Iu+z2g2cIhm2OWj9abPZq1Zqit6SY7Gwh13H9g7acoBnQ==", + "license": "MIT" + }, + "node_modules/zdog": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", + "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==", + "license": "MIT", + "peer": true + }, "node_modules/zustand": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz", + "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=12.7.0" + "node": ">=12.20.0" }, "peerDependencies": { - "react": ">=16.8" + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" }, "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, "react": { "optional": true + }, + "use-sync-external-store": { + "optional": true } } }, "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/package.json b/package.json index 0e442237ddb..b4564f91149 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "license": "(MIT OR Apache-2.0)", "scripts": { "docusaurus": "docusaurus", - "start": "docusaurus start -p 3003", - "build": "docusaurus build", + "start": "npm run glossary:generate && docusaurus snaps:generate && docusaurus start -p 3003", + "build": "npm run glossary:generate && docusaurus snaps:generate && docusaurus build", + "glossary:generate": "node ./scripts/generate-smart-accounts-glossary.js", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", @@ -17,77 +18,107 @@ "typecheck-staged": "tsc-files --noEmit", "lint": "npm run lint:js && npm run lint:style", "lint:js": "eslint . --max-warnings=5", - "lint:style": "stylelint 'src/**/*.css' --fix", + "lint:style": "stylelint \"src/**/*.css\" --fix", "lint:fix": "npm run lint:js -- --fix", - "format": "prettier --write '{blog,docs,src}/**/*.{md,mdx,ts,js,tsx,jsx,json}'" + "format": "prettier --write .", + "format:check": "prettier --check .", + "docs:ci": "bash scripts/docs-pre-commit-check.sh", + "prepare": "node ./scripts/husky-prepare.js" }, "lint-staged": { - "src/**/*.{ts,js,jsx,tsx}": "npm run lint:fix", - "**/*.{ts,tsx}": "npm run typecheck-staged", - "**/*.css": "npm run lint:style", - "**/*.{md,mdx,ts,js,tsx,jsx,json}": "npm run format" + "**/*.{js,jsx,ts,tsx}": "eslint --fix --max-warnings=5", + "**/*.{ts,tsx}": "tsc-files --noEmit src/globals.d.ts", + "**/*.css": "stylelint --fix", + "**/*.{md,mdx,ts,js,tsx,jsx,json,css,scss,html,yml,yaml}": "prettier --write" }, "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.6.4", - "@docusaurus/core": "^3.5.2", - "@docusaurus/plugin-content-docs": "^3.5.2", - "@docusaurus/plugin-content-pages": "^3.5.2", - "@docusaurus/theme-common": "^3.5.2", - "@docusaurus/theme-mermaid": "^3.5.2", - "@intercom/messenger-js-sdk": "^0.0.11", - "@mdx-js/react": "^3.0.0", - "@metamask/design-tokens": "^1.11.1", - "@metamask/docusaurus-openrpc": "^0.4.1", - "@metamask/profile-sync-controller": "^0.6.0", - "@metamask/sdk": "^0.29.0", - "@rjsf/core": "^5.18.4", - "@rjsf/utils": "^5.18.4", - "@rjsf/validator-ajv8": "^5.18.4", - "@sentry/browser": "^8.30.0", + "@apidevtools/json-schema-ref-parser": "^14.2.0", + "@docsearch/css": "^4.6.2", + "@docsearch/react": "^4.6.2", + "@docusaurus/core": "^3.10.1", + "@docusaurus/plugin-client-redirects": "^3.10.1", + "@docusaurus/plugin-content-docs": "^3.10.1", + "@docusaurus/plugin-content-pages": "^3.10.1", + "@docusaurus/plugin-google-gtag": "^3.10.1", + "@docusaurus/plugin-google-tag-manager": "^3.10.1", + "@docusaurus/preset-classic": "^3.10.1", + "@docusaurus/remark-plugin-npm2yarn": "^3.10.1", + "@docusaurus/theme-common": "^3.10.1", + "@docusaurus/theme-mermaid": "^3.10.1", + "@lottiefiles/react-lottie-player": "^3.6.0", + "@mdx-js/react": "^3.1.0", + "@mermaid-js/layout-elk": "^0.1.9", + "@metamask/design-tokens": "^7.1.0", + "@metamask/eth-sig-util": "^7.0.3", + "@metamask/profile-sync-controller": "^16.0.0", + "@metamask/sdk": "^0.33.1", + "@rjsf/core": "^5.24.12", + "@rjsf/utils": "^5.24.13", + "@rjsf/validator-ajv8": "^5.24.12", + "@sentry/browser": "^10.22.0", "@types/react": "^18.3.3", - "clsx": "^1.2.1", + "@vercel/edge": "^1.3.1", + "cheerio": "1.0.0-rc.12", + "classnames": "^2.5.1", + "clsx": "^2.1.1", + "copy-to-clipboard": "^3.3.3", + "docusaurus-plugin-llms": "^0.2.2", "docusaurus-plugin-sass": "^0.2.5", - "docusaurus-plugin-segment": "^1.0.4", - "dotenv": "^16.4.5", - "ethers": "^6.13.2", + "dotenv": "^17.2.1", + "ethers": "^6.15.0", "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", - "launchdarkly-js-client-sdk": "^3.3.0", + "katex": "^0.16.25", + "launchdarkly-js-client-sdk": "^3.9.0", + "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", "lodash.isplainobject": "^4.0.6", + "node-html-markdown": "^2.0.0", "node-polyfill-webpack-plugin": "^2.0.1", - "prettier": "^3.3.3", - "prism-react-renderer": "^2.1.0", + "prettier": "^3.6.2", + "prism-react-renderer": "^2.4.1", "react": "^18.0.0", "react-alert": "^7.0.3", + "react-bookmark": "^0.8.2", "react-dom": "^18.0.0", - "react-dropdown-select": "^4.11.2", - "react-modal": "^3.16.1", - "react-player": "^2.13.0", + "react-dropdown-select": "^4.12.2", + "react-icons": "^5.5.0", + "react-markdown": "^10.1.0", + "react-modal": "^3.16.3", + "react-player": "^3.3.1", + "react-select": "^5.10.2", + "react-spinners": "^0.17.0", + "react-spring": "^10.0.3", "react-tippy": "^1.4.0", + "rehype-katex": "^7.0.1", "remark-codesandbox": "^0.10.1", "remark-docusaurus-tabs": "^0.2.0", - "sass": "^1.77.6" + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0", + "sass": "^1.93.0" }, "devDependencies": { - "@docusaurus/eslint-plugin": "^3.5.2", - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/plugin-client-redirects": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@docusaurus/types": "^3.5.2", - "@eslint/js": "^8.57.1", - "@tsconfig/docusaurus": "^1.0.5", + "@docusaurus/eslint-plugin": "^3.10.1", + "@docusaurus/module-type-aliases": "^3.10.1", + "@docusaurus/tsconfig": "^3.10.1", + "@docusaurus/types": "^3.10.1", + "@eslint/js": "^9.39.2", + "@tsconfig/docusaurus": "^2.0.7", "@types/react-alert": "^7.0.6", "@types/react-modal": "^3.16.3", - "@typescript-eslint/parser": "^8.6.0", - "eslint": "^8.57.1", - "eslint-plugin-react": "^7.34.2", + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^9.35.0", + "eslint-plugin-react": "^7.37.5", + "husky": "^9.1.7", + "lint-staged": "^16.4.0", "stylelint": "^15.0.0 ", "stylelint-config-standard": "^34.0.0", "tsc-files": "^1.1.4", - "typescript": "^5.5.4" + "typescript": "^5.8.3" }, "overrides": { + "axios": "^1.7.9", + "cross-spawn": "^7.0.6", "react-alert": { "react": "^18.0.0", "react-dom": "^18.0.0" @@ -106,6 +137,6 @@ ] }, "engines": { - "node": ">=18" + "node": "20.x" } } diff --git a/scripts/generate-smart-accounts-glossary.js b/scripts/generate-smart-accounts-glossary.js new file mode 100644 index 00000000000..e9b38e6c2de --- /dev/null +++ b/scripts/generate-smart-accounts-glossary.js @@ -0,0 +1,60 @@ +const fs = require('fs') +const path = require('path') + +const rootDir = path.resolve(__dirname, '..') +const glossaryJsonPath = path.join(rootDir, 'src/lib/glossary.json') +const glossaryMdxPath = path.join(rootDir, 'smart-accounts-kit/reference/glossary.mdx') + +function loadGlossaryTerms() { + const raw = fs.readFileSync(glossaryJsonPath, 'utf8') + const data = JSON.parse(raw) + + if (!data || !Array.isArray(data.terms)) { + throw new Error('Invalid glossary JSON: expected a top-level "terms" array.') + } + + return [...data.terms] + .filter(term => term && typeof term.term === 'string' && typeof term.definition === 'string') + .sort((a, b) => a.term.localeCompare(b.term)) +} + +function buildGlossaryMdx(terms) { + const lines = [ + '---', + 'description: Glossary of terms used across Smart Accounts Kit documentation.', + 'title: Glossary', + 'keywords: [glossary, smart accounts kit, delegation, advanced permissions, terms]', + '---', + '', + 'This glossary defines common Smart Accounts Kit terms used across the documentation.', + '', + '', + '', + '', + ] + + terms.forEach(({ term, definition }) => { + lines.push(`### ${term}`) + lines.push('') + lines.push(definition.trim()) + lines.push('') + }) + + return `${lines.join('\n')}\n` +} + +function main() { + const terms = loadGlossaryTerms() + const mdx = buildGlossaryMdx(terms) + fs.writeFileSync(glossaryMdxPath, mdx, 'utf8') + console.log( + `Generated ${path.relative(rootDir, glossaryMdxPath)} from ${path.relative(rootDir, glossaryJsonPath)} (${terms.length} terms).` + ) +} + +try { + main() +} catch (err) { + console.error(err) + process.exit(1) +} diff --git a/scripts/husky-prepare.js b/scripts/husky-prepare.js new file mode 100644 index 00000000000..2bdc08a294d --- /dev/null +++ b/scripts/husky-prepare.js @@ -0,0 +1,13 @@ +'use strict' +/** + * Runs Husky after install when the devDependency is present (normal clone + npm install). + * No-ops when devDependencies are omitted (e.g. npm ci with NODE_ENV=production) so prepare does not fail. + */ +const fs = require('fs') +const path = require('path') +const { execFileSync } = require('child_process') + +const bin = path.join(__dirname, '..', 'node_modules', 'husky', 'bin.js') +if (fs.existsSync(bin)) { + execFileSync(process.execPath, [bin], { stdio: 'inherit' }) +} diff --git a/scripts/verify-llms-output.js b/scripts/verify-llms-output.js new file mode 100644 index 00000000000..1ad53f729df --- /dev/null +++ b/scripts/verify-llms-output.js @@ -0,0 +1,164 @@ +#!/usr/bin/env node +/** + * Dev-only sanity check that invokes docusaurus-plugin-llms against the current + * docs source tree. The exact options object used by the production build is + * imported from `src/plugins/llms-html-injector/options.js`, so this script + * cannot silently drift from `docusaurus.config.js`. + * + * After the move to a hand-curated root `static/llms.txt`, the standard + * llms.txt / llms-full.txt generators are disabled in production. This script + * mirrors that: both flags are off, customLLMFiles drives every per-section + * file, and the static root is copied into the verify outDir so the post- + * injector summary reflects what end users actually see at /llms.txt. + * + * Usage: node scripts/verify-llms-output.js [outDir] + */ + +const path = require('path') +const fs = require('fs/promises') + +// Single source of truth shared with `docusaurus.config.js`. Both the +// production build and this sanity check now consume the exact same options +// object (ignoreFiles, customLLMFiles, pathTransformation, etc.), so the +// previous "keep these two arrays in sync by comment" arrangement — and its +// silent-drift risk — is gone. +const llmsPluginOptions = require('../src/plugins/llms-html-injector/options') + +async function main() { + const siteDir = path.resolve(__dirname, '..') + const outDir = path.resolve(siteDir, process.argv[2] || '.llms-verify') + + await fs.rm(outDir, { recursive: true, force: true }) + await fs.mkdir(outDir, { recursive: true }) + + // Mirror the baseUrl resolution from docusaurus.config.js so the script can + // simulate a staging build (e.g. `DEST=/staging/ node scripts/verify-llms-output.js`) + // and the post-injector summary reflects the URLs end users would see there. + const baseUrl = process.env.DEST || '/' + const siteConfig = { url: 'https://docs.metamask.io', baseUrl } + + const generator = require( + path.join(siteDir, 'node_modules', 'docusaurus-plugin-llms', 'lib', 'generator.js') + ) + const { postProcessLlmsOutput, resolveSiteUrl } = require( + path.join(siteDir, 'src/plugins/llms-html-injector') + ) + const siteUrl = resolveSiteUrl(siteConfig) + + const context = { + siteDir, + outDir, + docsDir: llmsPluginOptions.docsDir, + siteUrl, + docTitle: 'MetaMask developer documentation', + docDescription: + 'MetaMask is the leading self-custodial cryptocurrency wallet and Web3 gateway.', + options: llmsPluginOptions, + } + + const allDocFiles = await generator.collectDocFiles(context) + console.log(`Collected ${allDocFiles.length} source markdown files (siteUrl=${siteUrl})`) + + await generator.generateStandardLLMFiles(context, allDocFiles) + await generator.generateCustomLLMFiles(context, allDocFiles) + + console.log('\n--- Pre-injector summary ---') + printSummary(await summarize(outDir)) + + // Invoke only the post-processing stage. The injector module also exports a + // wrapper plugin (used in docusaurus.config.js) that internally instantiates + // docusaurus-plugin-llms; we've already run the generator above, so we skip + // straight to normalize/rewrite/inject. + await postProcessLlmsOutput(outDir, siteUrl) + + // Mirror Docusaurus's static-asset copy step. In a real build, anything in + // `static/` is copied verbatim to `outDir`, so static/llms.txt becomes + // build/llms.txt. Replicating that here lets the post-injector summary show + // the curated root file end users will receive. + await copyStaticLlms(siteDir, outDir) + + console.log('\n--- Post-injector summary ---') + printSummary(await summarize(outDir)) +} + +async function copyStaticLlms(siteDir, outDir) { + const src = path.join(siteDir, 'static', 'llms.txt') + const dest = path.join(outDir, 'llms.txt') + try { + await fs.copyFile(src, dest) + } catch (err) { + console.warn(`[verify-llms-output] Could not copy static/llms.txt: ${err.message}`) + } +} + +function printSummary(summary) { + for (const [key, value] of Object.entries(summary)) { + console.log(`${key}: ${Array.isArray(value) ? value.join(', ') : value}`) + } +} + +async function summarize(outDir) { + const entries = await walk(outDir) + const mdFiles = entries.filter(e => e.endsWith('.md')) + const llmsTxt = path.join(outDir, 'llms.txt') + const llmsFull = path.join(outDir, 'llms-full.txt') + + const summary = { totalMarkdownFiles: mdFiles.length } + // Single read avoids a TOCTOU race; derive byte length from the buffer. + try { + const content = await fs.readFile(llmsTxt) + summary.llmsTxtBytes = content.length + const text = content.toString('utf8') + summary.llmsTxtLinkCount = (text.match(/\]\(http/g) || []).length + summary.llmsTxtUrlWithReadme = (text.match(/\/README\.md/g) || []).length + summary.llmsTxtUrlWithIndexMd = (text.match(/\/index\.md/g) || []).length + summary.llmsTxtUrlsStartingWithDocsSlash = ( + text.match(/https:\/\/docs\.metamask\.io\/docs\//g) || [] + ).length + summary.llmsTxtUrlsStartingWithSrcPages = ( + text.match(/https:\/\/docs\.metamask\.io\/src\/pages\//g) || [] + ).length + } catch { + summary.llmsTxt = 'MISSING' + } + try { + const s = await fs.stat(llmsFull) + summary.llmsFullTxtBytes = s.size + } catch { + summary.llmsFullTxt = 'ABSENT (expected — generation disabled)' + } + // Per-section files + const sectionEntries = await fs.readdir(outDir, { withFileTypes: true }) + const sectionFiles = sectionEntries + .filter(e => e.isFile() && /^llms-[^.]+\.txt$/.test(e.name)) + .map(e => e.name) + .sort() + if (sectionFiles.length > 0) { + const sizes = [] + for (const name of sectionFiles) { + const s = await fs.stat(path.join(outDir, name)) + sizes.push(`${name}=${s.size}`) + } + summary.sectionFiles = sizes + } + summary.sampleMdFiles = mdFiles + .filter(f => /\.md$/.test(f) && !/llms[^/]*\.(md|txt)$/.test(f)) + .slice(0, 8) + .map(f => path.relative(outDir, f)) + return summary +} + +async function walk(dir, acc = []) { + const entries = await fs.readdir(dir, { withFileTypes: true }) + for (const e of entries) { + const full = path.join(dir, e.name) + if (e.isDirectory()) await walk(full, acc) + else acc.push(full) + } + return acc +} + +main().catch(err => { + console.error(err) + process.exit(1) +}) diff --git a/services-sidebar.js b/services-sidebar.js index 852d38976c8..ca3fa7766cc 100644 --- a/services-sidebar.js +++ b/services-sidebar.js @@ -1,42 +1,37 @@ const sidebar = { servicesSidebar: [ - "index", + 'index', { - type: "category", - label: "Get started", - link: { type: "generated-index", slug: "/get-started" }, + type: 'category', + label: 'Get started', collapsed: false, - items: [{ type: "autogenerated", dirName: "get-started" }], + items: [{ type: 'autogenerated', dirName: 'get-started' }], }, { - type: "category", - label: "How to", - link: { type: "generated-index", slug: "/how-to" }, + type: 'category', + label: 'How to', collapsed: true, - items: [{ type: "autogenerated", dirName: "how-to" }], + items: [{ type: 'autogenerated', dirName: 'how-to' }], }, { - type: "category", - label: "Concepts", - link: { type: "generated-index", slug: "/concepts" }, + type: 'category', + label: 'Concepts', collapsed: true, - items: [{ type: "autogenerated", dirName: "concepts" }], + items: [{ type: 'autogenerated', dirName: 'concepts' }], }, { - type: "category", - label: "Tutorials", - link: { type: "generated-index", slug: "/tutorials" }, + type: 'category', + label: 'Tutorials', collapsed: true, - items: [{ type: "autogenerated", dirName: "tutorials" }], + items: [{ type: 'autogenerated', dirName: 'tutorials' }], }, { - type: "category", - label: "Reference", - link: { type: "generated-index", slug: "/reference" }, + type: 'category', + label: 'Reference', collapsed: false, - items: [{ type: "autogenerated", dirName: "reference" }], + items: [{ type: 'autogenerated', dirName: 'reference' }], }, ], -}; +} -module.exports = sidebar; +module.exports = sidebar diff --git a/services/concepts/_category_.json b/services/concepts/_category_.json deleted file mode 100644 index f89ee5a39df..00000000000 --- a/services/concepts/_category_.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "label": "Concepts", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "services/concepts/", - "description": "This section provides background information and context around various key concepts." - } -} diff --git a/services/concepts/archive-data.md b/services/concepts/archive-data.md index b79753ebad0..31780ccaa3d 100644 --- a/services/concepts/archive-data.md +++ b/services/concepts/archive-data.md @@ -16,16 +16,17 @@ archive data currently cost the same as non-archive data, but this might change Access to archive data is automatically enabled on the following supported networks: - |Mainnet |Testnet| - |--------|-------| - |Ethereum|Sepolia| - |Optimism|Sepolia| - |Polygon |Amoy | - |Arbitrum| | - |Celo | | +| Mainnet | Testnet | +| -------- | ------- | +| Ethereum | Sepolia | +| Optimism | Sepolia | +| Polygon | Amoy | +| Arbitrum | | +| Celo | | +| Sei | | Infura provides access to [full nodes](#full-nodes) -and [archive nodes](#archive-nodes). +and [archive nodes](#archive-nodes). ## Full nodes diff --git a/services/concepts/bundler.md b/services/concepts/bundler.md new file mode 100644 index 00000000000..1b5cce9099a --- /dev/null +++ b/services/concepts/bundler.md @@ -0,0 +1,96 @@ +--- +description: Infura supports ERC-4337 bundler methods. +sidebar_label: Bundler methods +--- + +# Bundler methods (ERC-4337) + +Infura supports [ERC-4337](https://docs.erc4337.io/) bundler JSON-RPC methods that enable you to build +account abstraction (AA) experiences like gas sponsorship (paymasters), ERC-20 gas payment, session keys, or +batched actions using smart accounts. + +If your dapp or wallet uses smart accounts, use the bundler JSON-RPC methods. If you use externally +owned accounts (EOAs) only, use standard Ethereum JSON-RPC methods. + +:::info +AA moves validation and fee-payment logic into smart contracts. Instead of sending raw transactions +from an EOA, clients submit [user operations (UserOps)](#user-operations) to a bundler. The +bundler collects and simulates these operations, then executes them through a +[shared coordination contract (EntryPoint)](#entrypoint-contract) on the network. + +Smart accounts are smart contract-based wallets that serve as the foundation of AA. They embed custom +logic for authentication, authorization, network fee payment, nonce management and execution. +::: + +:::info +Refer to the [official Pimlico documentation](https://docs.pimlico.io/references/bundler) +for more about the bundler methods and +[EntryPoint errors](https://docs.pimlico.io/references/bundler/entrypoint-errors#entrypoint-errors). +::: + +## User operations + +A user operation (UserOp) is an is an offchain request that a bundler later includes onchain by +calling the EntryPoint. UserOps go to a dedicated mempool watched by bundlers instead of being broadcast +as raw L1/L2 transactions. + +## EntryPoint contract + +The EntryPoint contract is the shared coordination contract defined by ERC-4337. Bundlers call them to +validate and execute user operations (UserOps) from smart accounts. At a high level, an EntryPoint: + +- Runs the ERC-4337 validation and execution. +- Enforces nonce and signature checks exposed by each smart account. +- Coordinates fee payment (including paymasters). +- Executes the requested calls onchain. + +The bundler supports calling multiple EntryPoint versions (v0.6 and v0.7/v0.8) through the same set +of RPC methods, allowing it to handle both older and modern smart account schemes. + +Use the [`eth_supportedEntryPoints`](../reference/ethereum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx) +method to fetch the EntryPoint addresses supported by the bundler. + +## Supported methods + +The following bundler methods are available on the [supported networks](#supported-networks): + +- [`eth_sendUserOperation`](../reference/ethereum/json-rpc-methods/bundler/eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](../reference/ethereum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](../reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](../reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](../reference/ethereum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](../reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](../reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](../reference/ethereum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. + +## Supported networks + +Bundler methods are active on the following networks: + +- [Arbitrum](../reference/arbitrum/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Avalanche](../reference/avalanche-c-chain/json-rpc-methods/bundler/index.md) (mainnet and Fuji) +- [Base](../reference/base/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Blast](../reference/blast/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [BNB Smart Chain](../reference/bnb-smart-chain/json-rpc-methods/bundler/index.md) (mainnet and testnet) +- [Celo](../reference/celo/json-rpc-methods/bundler/index.md) (mainnet and Alfajores) +- [Ethereum](../reference/ethereum/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Linea](../reference/linea/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Mantle](../reference/mantle/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [opBNB](../reference/opbnb/json-rpc-methods/bundler/index.md) (mainnet) +- [Optimism](../reference/optimism/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Polygon](../reference/polygon-pos/json-rpc-methods/bundler/index.md) (mainnet and Amoy) +- [Scroll](../reference/scroll/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) +- [Sei](../reference/sei/json-rpc-methods/bundler/index.md) (mainnet and testnet) +- [Unichain](../reference/unichain/json-rpc-methods/bundler/index.md) (mainnet and Sepolia) + +:::info +[Contact support](https://support.infura.io/) if you require bundler method activation on a network not listed here that's currently supported by Pimlico. +::: diff --git a/services/concepts/curl.md b/services/concepts/curl.md index 4e42cbb33c1..e09efdfc050 100644 --- a/services/concepts/curl.md +++ b/services/concepts/curl.md @@ -48,11 +48,11 @@ curl https://mainnet.infura.io/v3/ \ :::info -Replace `` with a specific [API key](../../../developer-tools/dashboard/get-started/create-api/). +Replace `` with a specific [API key](/developer-tools/dashboard/get-started/create-api). ::: -#### -X flag +#### `-X` flag The `-X` flag specifies a common [HTTP method](https://www.w3schools.com/tags/ref_httpmethods.asp). @@ -60,7 +60,7 @@ The `-X` flag specifies a common [HTTP method](https://www.w3schools.com/tags/re -X POST \ ``` -#### -H flag +#### `-H` flag The `-H` or `--header` flag specifies [header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) information. @@ -70,11 +70,11 @@ The example specifies the `Content-Type` to be `application/json` which means th -H "Content-Type: application/json" \ ``` -#### -d flag +#### `-d` flag The `-d` or `--data` flag specifies more information sent along with the curl request. -In the example, the data object is a list of key value pairs in JSON format. This follows the [JSON RPC 2.0 specification ](https://www.jsonrpc.org/specification)which requires the four specific keys seen here. +In the example, the data object is a list of key value pairs in JSON format. This follows the [JSON RPC 2.0 specification](https://www.jsonrpc.org/specification) which requires the four specific keys seen here. The `method`, `params`, and `id` values are modifiable. diff --git a/services/concepts/filters-and-subscriptions.md b/services/concepts/filters-and-subscriptions.md index be4b7f79399..b0fb8c0fe90 100644 --- a/services/concepts/filters-and-subscriptions.md +++ b/services/concepts/filters-and-subscriptions.md @@ -13,10 +13,7 @@ Ethereum methods use this underlying implementation to search for and retrieve s :::info -Infura is even faster at this than regular Ethereum nodes as we make use of custom off-chain indexing and data storage strategies. See the following blogs for more information: - -- [Introducing faster Ethereum logs and events](https://blog.infura.io/post/faster-logs-and-events-e43e2fa13773). -- [Filters support over HTTPS](https://blog.infura.io/post/filters-support-over-https). +Infura is even faster at this than regular Ethereum nodes as we make use of custom offchain indexing and data storage strategies. ::: diff --git a/services/concepts/gas.md b/services/concepts/gas.md index bfe907697d7..58a8a607c59 100644 --- a/services/concepts/gas.md +++ b/services/concepts/gas.md @@ -6,11 +6,11 @@ sidebar_position: 6 # Gas Gas is a unit used to measure the computational effort required to perform an action on a blockchain network, such as -executing a smart contract or sending a transaction. To perform an action, users must pay in units of gas, which is +executing a smart contract or sending a transaction. To perform an action, users must pay in units of gas, which are calculated based on the computational resources required for the action, and to compensate the miners who execute the request. -The amount paid is the units of gas consumed multiplied by the gas price. So for a network such as Ethereum, this is the +The amount paid is the units of gas consumed multiplied by the gas price. For Ethereum, this is the amount of Ether a user is willing to pay for each unit of gas. The gas price is set by the user and is a key factor in determining the priority of their transaction relative to other transactions on the network. @@ -19,11 +19,12 @@ smart contract. It acts as a safety mechanism to prevent users from accidentally ## EIP-1559 gas prices -The Ethereum London hard fork update changed the blockchain’s transaction fee model by implementing +The Ethereum London hard fork update changed the blockchain's transaction fee model by implementing [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). This update changed the way users pay gas fees on the Ethereum network and other EVM chains. -Before EIP-1559, users specified a gas price, which was the amount they were willing to pay for a transaction to be mined. The auction-style system meant gas prices often fluctuated wildly. After EIP-1559, this has been replaced by two new values: +Before EIP-1559, users specified a gas price, which was the amount they were willing to pay for a transaction to be mined. +The auction-style system meant gas prices fluctuated often. After EIP-1559, this has been replaced by two new values: - **Base fee**: The minimum transaction fee for every transaction to be included in a block. This is calculated by the network and is affected by the number of transactions included in the previous block. The base fee gets burned, meaning diff --git a/services/concepts/transaction-types.md b/services/concepts/transaction-types.md index f796d8d66d2..acf9c655bf9 100644 --- a/services/concepts/transaction-types.md +++ b/services/concepts/transaction-types.md @@ -5,7 +5,8 @@ sidebar_position: 4 # Ethereum transaction types -You can interact with the [Ethereum JSON-RPC API](../reference/ethereum/json-rpc-methods/index.md) using different transaction types (specified by the `type` parameter). +You can interact with the [Ethereum JSON-RPC API](../reference/ethereum/json-rpc-methods/index.md) using different transaction types (specified by the +[`transactionType`](https://eips.ethereum.org/EIPS/eip-2718) parameter). The following methods use a unique format depending on the transaction type: @@ -18,32 +19,85 @@ The following methods use a unique format depending on the transaction type: ## Legacy transactions -Transactions with type `0x0` are legacy transactions that use the transaction format existing before typed transactions were introduced in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718). They contain the parameters `nonce`, `gasPrice`, `gasLimit`, `to`, `value`, `data`, `v`, `r`, and `s`. Legacy transactions don’t use [access lists](../reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx) or incorporate [EIP-1559 fee market changes](#eip-1559-transactions). +Transactions with type `0x0` are legacy transactions that use the transaction format existing before typed transactions were introduced in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718). They contain the parameters `nonce`, `gasPrice`, `gasLimit`, `to`, `value`, `data`, `v`, `r`, and `s`. Legacy transactions don't use [access lists](../reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx) or incorporate [EIP-1559 fee market changes](#eip-1559-transactions). + +```js title="Legacy transaction object example" +{ + nonce: "0x0", // Number of transactions made by the sender before this one. + gasPrice: "0x09184e72a000", // Gas price, in wei, provided by the sender. + gasLimit: "0x2710", // Maximum gas provided by the sender. + to: "0x0000000000000000000000000000000000000000", // Address of the recipient. Not used in contract creation transactions. + value: "0x0", // Value transferred, in wei. + data: "0x7f7465737432000000000000000000000000000000000000000000000000000000600057", // Used for defining contract creation and interaction. + v: "0x1", // ECDSA recovery ID. + r: "0xa07fd6c16e169f0e54b394235b3a8201101bb9d0eba9c8ae52dbdf556a363388", // ECDSA signature r. + s: "0x36f5da9310b87fefbe9260c3c05ec6cbefc426f1ff3b3a41ea21b5533a787dfc", // ECDSA signature s. +} +``` ## Access list transactions -Transactions with type `0x1` are transactions introduced in [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930). They contain, along with the [legacy parameters](#legacy-transactions), an `accessList` parameter, which specifies an array of addresses and storage keys that the transaction plans to access (an _access list_). Access list transactions must specify an access list, and they don’t incorporate [EIP-1559 fee market changes](#eip-1559-transactions). +Transactions with type `0x1` are transactions introduced in [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930). They contain, along with the [legacy parameters](#legacy-transactions), an `accessList` parameter, which specifies an array of addresses and storage keys that the transaction plans to access (an _access list_). Access list transactions must specify an access list, and they don't incorporate [EIP-1559 fee market changes](#eip-1559-transactions). -Also, access list transactions contain the `yParity` parameter. The returned values for this parameter can either be `0x0` or `0x1`. This is the parity (0 for even, 1 for odd) of the y-value of a [`secp256k1`](https://eips.ethereum.org/EIPS/eip-2098#:~:text=A%20secp256k1%20signature%20is%20made%20up%20of%203%20parameters%2C%20r%2C%20s%20and%20yParity.) signature. +Also, access list transactions contain the `yParity` parameter. The returned values for this parameter can either be `0x0` or `0x1`. This is the parity (0 for even, 1 for odd) of the y-value of a [`secp256k1`](https://eips.ethereum.org/EIPS/eip-2098) signature. Use the [`eth_createAccessList`](../reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx) API to simulate a transaction which returns the addresses and storage keys that may be used to send the real transaction, and the approximate gas cost. -:::info - -View the [Infura article](https://blog.infura.io/post/optimizing-ethereum-transactions-with-eth_createaccesslist) that describes how `eth_createAccessList` can help optimize gas costs, reduce out-of-gas errors, and verify clients for infrastructure access. - -::: +```js title="Access list transaction object example" +{ + nonce: "0x0", // Number of transactions made by the sender before this one. + gasPrice: "0x09184e72a000", // Gas price, in wei, provided by the sender. + gasLimit: "0x2710", // Maximum gas provided by the sender. + to: "0x0000000000000000000000000000000000000000", // Address of the recipient. Not used in contract creation transactions. + value: "0x0", // Value transferred, in wei. + data: "0x7f7465737432000000000000000000000000000000000000000000000000000000600057", // Used for defining contract creation and interaction. + v: "0x1", // ECDSA recovery ID. + r: "0xa07fd6c16e169f0e54b394235b3a8201101bb9d0eba9c8ae52dbdf556a363388", // ECDSA signature r. + s: "0x36f5da9310b87fefbe9260c3c05ec6cbefc426f1ff3b3a41ea21b5533a787dfc", // ECDSA signature s. + chainId: "0x1", // Chain ID of the transaction. + accessList: [ // List of addresses and storage keys the transaction plans to access. + { + "address": "0xa02457e5dfd32bda5fc7e1f1b008aa5979568150", + "storageKeys": ["0x0000000000000000000000000000000000000000000000000000000000000081"] + } + ], + yParity: "0x1" // Parity of the y-value of a secp256k1 signature. +} +``` ## EIP-1559 transactions Transactions with type `0x2` are transactions introduced in [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md), included in Ethereum's [London fork](https://ethereum.org/en/history/#london). EIP-1559 addresses the network congestion and overpricing of transaction fees caused by the historical fee market, in which users send transactions specifying a gas price bid using the `gasPrice` parameter, and miners choose transactions with the highest bids. -EIP-1559 transactions don’t specify `gasPrice`, and instead use an in-protocol, dynamically changing _base fee_ per gas. At each block, the base fee per gas is adjusted to address network congestion as measured by a gas target. +EIP-1559 transactions don't specify `gasPrice`, and instead use an in-protocol, dynamically changing _base fee_ per gas. At each block, the base fee per gas is adjusted to address network congestion as measured by a gas target. EIP-1559 transactions contain the [`accessList` and `yParity` parameters](transaction-types.md#access-list-transactions) and [legacy parameters](transaction-types.md#legacy-transactions) (except for `gasPrice`). -They also contain a `maxPriorityFeePerGas` parameter, which specifies the maximum fee the sender is willing to pay per gas above the base fee (the maximum _priority fee_ per gas), and a `maxFeePerGas` parameter, which specifies the maximum total fee (base fee + priority fee) the sender is willing to pay per gas. +They also contain a `maxPriorityFeePerGas` parameter, which specifies the maximum fee the sender is willing to pay per gas above the base fee, in order to get their transaction prioritized; +and a `maxFeePerGas` parameter, which specifies the maximum total fee (base fee + priority fee) the sender is willing to pay per gas. + +An EIP-1559 transaction always pays the base fee of the block it's included in, and it pays a priority fee as priced by `maxPriorityFeePerGas` or, if the base fee per gas + `maxPriorityFeePerGas` exceeds `maxFeePerGas`, it pays a priority fee as priced by `maxFeePerGas` minus the base fee per gas. The base fee is burned, and the priority fee is paid to the miner that included the transaction. A transaction's priority fee per gas incentivizes miners to include the transaction over other transactions with lower priority fees per gas. + +```js title="EIP-1559 transaction object example" +{ + nonce: "0x0", // Number of transactions made by the sender before this one. + gasLimit: "0x2710", // Maximum gas provided by the sender. + maxPriorityFeePerGas: "0x0", // Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + maxFeePerGas: "0x6f4d3132b", // Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. + to: "0x0000000000000000000000000000000000000000", // Address of the recipient. Not used in contract creation transactions. + value: "0x0", // Value transferred, in wei. + data: "0x7f7465737432000000000000000000000000000000000000000000000000000000600057", // Used for defining contract creation and interaction. + v: "0x1", // ECDSA recovery ID. + r: "0xa07fd6c16e169f0e54b394235b3a8201101bb9d0eba9c8ae52dbdf556a363388", // ECDSA signature r. + s: "0x36f5da9310b87fefbe9260c3c05ec6cbefc426f1ff3b3a41ea21b5533a787dfc", // ECDSA signature s. + chainId: "0x1", // Chain ID of the transaction. + accessList: [], // List of addresses and storage keys the transaction plans to access. + yParity: "0x1" // Parity of the y-value of a secp256k1 signature. +} +``` -An EIP-1559 transaction always pays the base fee of the block it’s included in, and it pays a priority fee as priced by `maxPriorityFeePerGas` or, if the base fee per gas + `maxPriorityFeePerGas` exceeds `maxFeePerGas`, it pays a priority fee as priced by `maxFeePerGas` minus the base fee per gas. The base fee is burned, and the priority fee is paid to the miner that included the transaction. A transaction’s priority fee per gas incentivizes miners to include the transaction over other transactions with lower priority fees per gas. +:::info + +Read the [Consensys EIP-1559 primer](https://consensys.net/blog/quorum/what-is-eip-1559-how-will-it-change-ethereum/) for more information on how EIP-1559 changes Ethereum. -Read the [ConsenSys EIP-1559 primer](https://consensys.net/blog/quorum/what-is-eip-1559-how-will-it-change-ethereum/) for more information on how EIP-1559 changes Ethereum. +::: diff --git a/services/concepts/web3-libraries.md b/services/concepts/web3-libraries.md index 08848a1a854..d281e12900d 100644 --- a/services/concepts/web3-libraries.md +++ b/services/concepts/web3-libraries.md @@ -24,17 +24,18 @@ The following image shows how a Web3 library can connect to your node (in this e -Some popular Ethereum compatible Web3 libraries include (but are not limited to) the following. +Some popular Ethereum-compatible Web3 libraries include (but are not limited to) the following. | Language | Library | | :--------- | :-------------------------------------------------------------------------------------------------- | -| JavaScript | [Web3.js](https://web3js.readthedocs.io/), [Ethers.js](https://docs.ethers.org/) | +| JavaScript | [Web3.js](https://docs.web3js.org/), [Ethers.js](https://docs.ethers.org/) | | Python | [Web3.py](https://web3py.readthedocs.io/en/stable/) | | Rust | [ethers-rs](https://github.com/gakonst/ethers-rs) (recommended), [Rust-web3](https://docs.rs/web3/) | | C++ | [Aleth](https://github.com/ethereum/aleth) | | PHP | [Web3.php](https://github.com/web3p/web3.php) | | Java | [Web3j](https://docs.web3j.io/) | | Ruby | [Ethereum Ruby library](https://github.com/EthWorks/ethereum.rb) | +| Viem | [Viem](https://viem.sh/) | :::info How to access the blockchain @@ -47,6 +48,3 @@ blockchain using some of these libraries. Web3.js and Ethers.js are two popular JavaScript Web3 libraries that enable frontend apps to interact with the Ethereum blockchain. They have similar functionality, with Web3.js currently being the most popular. - -Refer to this [Web3.js vs. Ethers.js article](https://blog.infura.io/post/ethereum-javascript-libraries-web3js-ethersjs-nov2021) -which highlights the differences between the libraries to help you decide which library to use. diff --git a/services/concepts/websockets.md b/services/concepts/websockets.md index 02544af42dc..6443bb0d770 100644 --- a/services/concepts/websockets.md +++ b/services/concepts/websockets.md @@ -45,20 +45,20 @@ JSON-RPC method for the relevant network. You can also see the following tutoria ## Supported networks -Infura support subscriptions over WebSockets for the following networks: +Infura supports subscriptions over WebSockets for the following networks: - [Arbitrum](../reference/arbitrum/index.md) - [Avalanche (C-Chain)](../reference/avalanche-c-chain/index.md) - [Base](../reference/base/index.md) - [Binance Smart Chain](../reference/bnb-smart-chain/index.md) - [Blast](../reference/blast/index.md) -- [Celo](../reference/celo/index.md) - [Ethereum](../reference/ethereum/index.md) - [Linea](../reference/linea/index.md) - [Mantle](../reference/mantle/index.md) - [opBNB](../reference/opbnb/index.md) - [Optimism](../reference/optimism/index.md) - [Polygon](../reference/polygon-pos/index.md) +- [Scroll](../reference/scroll/index.md) - [ZKsync Era](../reference/zksync/index.md) :::info @@ -85,7 +85,7 @@ Credits are consumed for these actions to prevent spamming, even if no valuable :::tip -Refer to the [credit cost table](../get-started/pricing/credit-cost.md) for more information about the +Refer to the [credit cost table](../get-started/pricing/credit-cost.mdx) for more information about the credit costs associated with the relevant method calls. For users on the existing request-based billing system, WebSocket activity is counted toward your daily request @@ -97,8 +97,8 @@ request limits. Additional credit-based charges are applied for the events returned: - `newHeads`: Each new block event consumes 50 credits from your daily quota. This event is triggered - once per announced block. + once per announced block. - `logs`: Depending on the filters applied, this event can consume 300 credits per block from your - daily quota. At most, one event per announced block is charged, and potentially none if filter constraints are not met. + daily quota. At most, one event per announced block is charged, or none if filter constraints are not met. - `newPendingTransaction`: An event is generated every 700-800ms, aggregating the total amount of - pending transactions collected during that period. Each event consumes 200 credits from your daily quota. + pending transactions collected during that period. Each event consumes 200 credits from your daily quota. diff --git a/services/get-started/endpoints.md b/services/get-started/endpoints.md index 5f1b6518867..eab457c283f 100644 --- a/services/get-started/endpoints.md +++ b/services/get-started/endpoints.md @@ -4,34 +4,36 @@ sidebar_position: 2 toc_max_heading_level: 3 --- +import GasApiNetworks from "@site/src/components/GasApiNetworks.tsx"; + # All endpoints The following lists all the network endpoints supported by Infura. -Ensure that you replace `` with an API key from your [Infura dashboard](../../../developer-tools/dashboard/). +Ensure that you replace `` with an API key from your [Infura dashboard](/developer-tools/dashboard). ## Arbitrum -| Network | Description | URL | -| ----------------- | ----------------------- | -------------------------------------------------- | +| Network | Description | URL | +| ----------------- | ----------------------- | ------------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://arbitrum-mainnet.infura.io/v3/` | -| Mainnet | JSON-RPC over Websocket | `wss://arbitrum-mainnet.io/ws/v3/` | +| Mainnet | JSON-RPC over WebSocket | `wss://arbitrum-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://arbitrum-sepolia.infura.io/v3/` | | Testnet (Sepolia) | JSON-RPC over WebSocket | `wss://arbitrum-sepolia.infura.io/ws/v3/` | ## Avalanche (C-Chain) -| Network | Description | URL | -| -------------- | ----------------------- | -------------------------------------------------- | -| Mainnet | JSON-RPC over HTTPS | `https://avalanche-mainnet.infura.io/v3/` | -| Mainnet | JSON-RPC over Websocket | `wss://avalanche-mainnet.io/ws/v3/` | -| Testnet (Fuji) | JSON-RPC over HTTPS | `https://avalanche-fuji.infura.io/v3/` | -| Testnet (Fuji) | JSON-RPC over WebSocket | `wss://avalanche-fuji.infura.io/ws/v3/` | +| Network | Description | URL | +| -------------- | ----------------------- | -------------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://avalanche-mainnet.infura.io/v3/` | +| Mainnet | JSON-RPC over WebSocket | `wss://avalanche-mainnet.infura.io/ws/v3/` | +| Testnet (Fuji) | JSON-RPC over HTTPS | `https://avalanche-fuji.infura.io/v3/` | +| Testnet (Fuji) | JSON-RPC over WebSocket | `wss://avalanche-fuji.infura.io/ws/v3/` | ## Base | Network | Transport type | URL | -|-------------------|-------------------------|-----------------------------------------------------| +| ----------------- | ----------------------- | --------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://base-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://base-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://base-sepolia.infura.io/v3/` | @@ -39,8 +41,8 @@ Ensure that you replace `` with an API key from your [Infura dashb ## Blast -| Network | Description | URL | -|-------------------|-------------------------|----------------------------------------------------| +| Network | Description | URL | +| ----------------- | ----------------------- | ---------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://blast-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://blast-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://blast-sepolia.infura.io/v3/` | @@ -48,36 +50,50 @@ Ensure that you replace `` with an API key from your [Infura dashb ## Binance Smart Chain | Network | Transport type | URL | -|---------|-------------------------|----------------------------------------------------| +| ------- | ----------------------- | -------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://bsc-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://bsc-mainnet.infura.io/ws/v3/` | | Testnet | JSON-RPC over HTTPS | `https://bsc-testnet.infura.io/v3/` | ## Celo -| Network | Description | URL | -|---------------------|-------------------------|--------------------------------------------------| -| Mainnet | JSON-RPC over HTTPS | `https://celo-mainnet.infura.io/v3/` | -| Mainnet | JSON-RPC over WebSocket | `wss://celo-mainnet.infura.io/ws/v3/` | -| Testnet (Alfajores) | JSON-RPC over HTTPS | `https://celo-alfajores.infura.io/v3/` | -| Testnet (Alfajores) | JSON-RPC over WebSocket | `wss://celo-alfajores.infura.io/ws/v3/` | +| Network | Description | URL | +| ----------------- | ------------------- | -------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://celo-mainnet.infura.io/v3/` | +| Testnet (Sepolia) | JSON-RPC over HTTPS | `https://celo-sepolia.infura.io/v3/` | ## Ethereum | Network | Description | URL | -|-------------------| ----------------------- |------------------------------------------------| +| ----------------- | ----------------------- | ---------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://mainnet.infura.io/ws/v3/` | -| Testnet (Holesky) | JSON-RPC over HTTPS | `https://holesky.infura.io/v3/` | -| Testnet (Holesky) | JSON-RPC over WebSocket | `wss://holesky.infura.io/ws/v3/` | +| Testnet (Hoodi) | JSON-RPC over HTTPS | `https://hoodi.infura.io/v3/` | +| Testnet (Hoodi) | JSON-RPC over WebSocket | `wss://hoodi.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://sepolia.infura.io/v3/` | | Testnet (Sepolia) | JSON-RPC over WebSocket | `wss://sepolia.infura.io/ws/v3/` | +## Hemi + +| Network | Description | URL | +| ------- | ------------------- | -------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://hemi-mainnet.infura.io/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://hemi-testnet.infura.io/v3/` | + +## HyperEVM + +| Network | Description | URL | +| ------- | ----------------------- | ------------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://hyperevm-mainnet.infura.io/v3/` | +| Mainnet | JSON-RPC over WebSocket | `wss://hyperevm-mainnet.infura.io/ws/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://hyperevm-testnet.infura.io/v3/` | + ## IPFS -:::caution Limited access +:::caution Restricted access -Infura restricts its IPFS service to a select set of qualified customers. Please [contact the Infura support team](https://support.infura.io/ipfs) for next steps. New IPFS key creation is disabled for all users, but existing IPFS customers can continue to use the IPFS service with their existing keys. +New IPFS key creation is disabled for all users. Only IPFS keys that were active in late 2024 continue +to have access to the IPFS network. ::: @@ -87,39 +103,54 @@ Infura restricts its IPFS service to a select set of qualified customers. Please :::info -Include your authentication details when [making IPFS requests](/reference/ipfs/quickstart.md). +Include your authentication details when [making IPFS requests](../reference/ipfs/quickstart.md). ::: ## Linea -| Network | Description | URL | -|-------------------|-------------------------|-------------------------------------------------| +| Network | Description | URL | +| ----------------- | ----------------------- | ---------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://linea-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://linea-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://linea-sepolia.infura.io/v3/` | | Testnet (Sepolia) | JSON-RPC over WebSocket | `wss://linea-sepolia.infura.io/ws/v3/` | +## MegaETH + +| Network | Description | URL | +| ------- | ----------------------- | ------------------------------------------------------ | +| Mainnet | JSON-RPC over HTTPS | `https://megaeth-mainnet.infura.io/v3/` | +| Mainnet | JSON-RPC over WebSocket | `wss://megaeth-mainnet.infura.io/ws/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://megaeth-testnet.infura.io/v3/` | + ## Mantle -| Network | Description | URL | -|-------------------|-------------------------|--------------------------------------------------| +| Network | Description | URL | +| ----------------- | ----------------------- | ----------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://mantle-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://mantle-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://mantle-sepolia.infura.io/v3/` | +## Monad + +| Network | Description | URL | +| ------- | ------------------- | --------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://monad-mainnet.infura.io/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://monad-testnet.infura.io/v3/` | + ## opBNB -| Network | Transport type | URL | -|-------------------|-------------------------|-------------------------------------------------| -| Mainnet | JSON-RPC over HTTPS | `https://opbnb-mainnet.infura.io/v3/` | -| Mainnet | JSON-RPC over WebSocket | `wss://opbnb-mainnet.infura.io/ws/v3/` | -| Testnet | JSON-RPC over HTTPS | `https://opbnb-testnet.infura.io/v3/` | +| Network | Transport type | URL | +| ------- | ----------------------- | ---------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://opbnb-mainnet.infura.io/v3/` | +| Mainnet | JSON-RPC over WebSocket | `wss://opbnb-mainnet.infura.io/ws/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://opbnb-testnet.infura.io/v3/` | ## Optimism -| Network | Transport type | URL | -| ----------------- | ----------------------- | -------------------------------------------------- | +| Network | Transport type | URL | +| ----------------- | ----------------------- | ------------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://optimism-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://optimism-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://optimism-sepolia.infura.io/v3/` | @@ -127,121 +158,77 @@ Include your authentication details when [making IPFS requests](/reference/ipfs/ ## Palm -| Network | Description | URL | -| ------- | ------------------- | --------------------------------------------- | +| Network | Description | URL | +| ------- | ------------------- | -------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://palm-mainnet.infura.io/v3/` | -| Testnet | JSON-RPC over HTTPS | `https://palm-testnet.infura.io/v3/` | ## Polygon PoS -| Network | Description | URL | -| -------------- | ----------------------- | ------------------------------------------------- | +| Network | Description | URL | +| -------------- | ----------------------- | ------------------------------------------------------ | | Mainnet | JSON-RPC over HTTPS | `https://polygon-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://polygon-mainnet.infura.io/ws/v3/` | | Testnet (Amoy) | JSON-RPC over HTTPS | `https://polygon-amoy.infura.io/v3/` | | Testnet (Amoy) | JSON-RPC over WebSocket | `wss://polygon-amoy.infura.io/ws/v3/` | +## Scroll + +| Network | Description | URL | +| ------- | ------------------- | ---------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://scroll-mainnet.infura.io/v3/` | +| Sepolia | JSON-RPC over HTTPS | `https://scroll-sepolia.infura.io/v3/` | + +## Sei + +| Network | Description | URL | +| ------- | ------------------- | ------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://sei-mainnet.infura.io/v3/` | +| Testnet | JSON-RPC over HTTPS | `https://sei-testnet.infura.io/v3/` | + +## Solana + +:::note limited access +Solana access is currently limited to select customers. [Contact us](https://www.infura.io/contact) +if you're interested in accessing these methods. +::: + +| Network | Description | URL | +| ---------------- | ------------------- | ---------------------------------------------------- | +| Mainnet | JSON-RPC over HTTPS | `https://solana-mainnet.infura.io/v3/` | +| Testnet (Devnet) | JSON-RPC over HTTPS | `https://solana-devnet.infura.io/v3/` | + ## Starknet -| Network | Description | URL | -| ----------------- | ------------------- | ------------------------------------------------- | +| Network | Description | URL | +| ----------------- | ------------------- | ------------------------------------------------------ | | Mainnet | JSON-RPC over HTTPS | `https://starknet-mainnet.infura.io/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://starknet-sepolia.infura.io/v3/` | +## Unichain + +| Network | Description | URL | +| ------- | ------------------- | ------------------------------------------------------ | +| Mainnet | JSON-RPC over HTTPS | `https://unichain-mainnet.infura.io/v3/` | +| Sepolia | JSON-RPC over HTTPS | `https://unichain-sepolia.infura.io/v3/` | + ## ZKsync Era :::info ZKsync Era WebSockets are supported on Mainnet only. - + ::: -| Network | Description | URL | -|-------------------|-------------------------|--------------------------------------------------| +| Network | Description | URL | +| ----------------- | ----------------------- | ----------------------------------------------------- | | Mainnet | JSON-RPC over HTTPS | `https://zksync-mainnet.infura.io/v3/` | | Mainnet | JSON-RPC over WebSocket | `wss://zksync-mainnet.infura.io/ws/v3/` | | Testnet (Sepolia) | JSON-RPC over HTTPS | `https://zksync-sepolia.infura.io/v3/` | ## Gas API -The Gas REST API supports multiple networks. +The [Gas REST API](../reference/gas-api/index.md) supports multiple networks. Specify the chain ID in your request to interact with the relevant network. -#### Arbitrum - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 42161 | -| Nova | 42170 | - -#### Avalanche (C-Chain) - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 43114 | - -#### Base - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 8453 | - -#### BNB Chain - -| Network | Chain ID | -| --------------- | -------- | -| Mainnet | 56 | -| opBNB (layer 2) | 204 | - -#### Cronos - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 25 | - -#### Ethereum - -| Network | Chain ID | -|---------|----------| -| Mainnet | 1 | -| Holeksy | 17000 | -| Sepolia | 11155111 | - -#### Fantom - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 250 | - -#### Filecoin - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 314 | - -#### Linea - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 59144 | -| Sepolia | 59141 | - -#### Optimism - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 10 | - -#### Polygon - -| Network | Network ID | -| ------- | ---------- | -| Mainnet | 137 | -| Amoy | 80002 | - -#### ZKsync Era - -| Network | Chain ID | -| ------- | -------- | -| Mainnet | 324 | + diff --git a/services/get-started/infura.md b/services/get-started/infura.md index c1e336c18d8..891a2dc0440 100644 --- a/services/get-started/infura.md +++ b/services/get-started/infura.md @@ -10,14 +10,15 @@ import TabItem from "@theme/TabItem"; ## 1. Sign up to Infura -Sign up for an account on the [Infura website](https://app.infura.io/register), enter your details, and select -**CREATE A FREE ACCOUNT**. +Infura offers a comprehensive set of services to facilitate dapp and +[Snap development](/snaps/). Sign up for an account on the +[Infura dashboard](https://app.infura.io/register). To activate your account, verify your email address by clicking the link sent to your inbox. :::important API key restrictions -Based on your plan, Infura allows for the following amount of API keys: +Based on your plan, Infura allows for the following number of API keys: - Free plan - Allows one API key. - Developer plan - Allows up to five API keys. @@ -27,13 +28,12 @@ For more information refer to the [Infura pricing information](https://www.infur ::: -## 2. Configure your API key +## 2. View your API key -After verification, you'll be directed to the [Infura dashboard](../../../developer-tools/dashboard) to configure your -auto-generated API key. - -Infura will automatically generate the **My First Key** API key. +After verification, you'll be directed to the [Infura dashboard](/developer-tools/dashboard) +where you can view or configure your API key. Infura automatically generates the **My First Key** API key. +Select **My First Key** or the **Configure** link to view your API key settings.
@@ -43,44 +43,48 @@ Infura will automatically generate the **My First Key** API key.
-In the API key page that displays, select **My First Key** to access your API key settings. In the **All Endpoints** tab, select -the networks that you want to connect to, and select **Save Changes**. - -In the following example, Ethereum mainnet and Linea mainnet networks are selected. - -
-
- -
-
+In the **All Endpoints** tab that displays, all network endpoints are enabled by default, and you can +view your API key. ## 3. Send requests -Use the API key when sending requests. The following examples interact with the Ethereum network by sending requests using HTTP: +Use the API key when sending requests. The following examples interact with the Ethereum network by +sending requests using HTTP. :::info - All requests are `POST` requests. - Replace `` with your own unique API key. +- We recommend using Postman if you're a Windows user. ::: -Use a tool such as the [Client Uniform Resource Locator (curl)](../concepts/curl.md) or [Postman](https://www.postman.com/downloads/) to make requests. +Use a tool such as the [Client Uniform Resource Locator (curl)](../concepts/curl.md) or [Postman](https://www.postman.com/downloads/) to make requests. -:::info +
+Supported API methods +
+ View the supported API methods for each network in the **Reference** section in the left sidebar. + The following methods are not supported on any network by Infura: -We recommend using Postman if you're a Windows user. +- `eth_coinbase` +- `eth_sendTransaction` +- `eth_sign` -::: +Infura doesn't store the user's private key required to sign transactions. +You can use [`web3.eth.sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction), +which signs the transaction locally using the private key of the account, and sends the transaction via [`web3.eth.sendSignedTransaction`](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction), +which is a wrapper for [`eth_sendRawTransaction`](../reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx). + +
+
### 3.1 Get the current block number Retrieve the current block number. - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -122,7 +126,7 @@ Check the balance of an Ethereum smart contract. The example code checks the latest balance of the Ethereum Proof of Stake (PoS) contract. - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -158,15 +162,17 @@ You'll receive a result similar to: {"jsonrpc": "2.0", "id": 1, "result": "0x96c8e932f1e499c855045"} ``` -This result is the hexadecimal value of the contract in Wei (the smallest denomination of Ether). +This result is the hexadecimal value of the contract in wei (the smallest denomination of Ether). -The decimal conversion of the result is `11392978000069000000000069` Wei, which equals `11392978.000069000000000069` Ether. +The decimal conversion of the result is `11392978000069000000000069` wei, which equals `11392978.000069000000000069` Ether. ## 4. Secure your API key -Configure security settings in the **Settings** tab. This is optional. +[Configure security settings](/developer-tools/dashboard/how-to/secure-an-api/api-key) by selecting **Configure**. +This is optional. -Force API requests to include the API key secret and/or [JSON Web Tokens (JWTs)](../how-to/json-web-token-jwt.md). +For example, you can force API requests to include the API key secret and/or +[JSON Web Tokens (JWTs)](../how-to/json-web-token-jwt.md).
@@ -177,20 +183,10 @@ Force API requests to include the API key secret and/or [JSON Web Tokens (JWTs)]
-Use an allowlist to restrict API key access. See to the [allowlist documentation](../../../developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist) for configuration instructions and best practices. - -
-
- -
-
- ## 5. View your project stats -The Infura dashboard displays an overview of your daily request health and daily credit usage. -Select **View Stats** or **stats** to monitor your project request stats. +The dashboard displays an overview of your daily request health and credit usage. +Select **View Stats** or **Stats** (in the left navigation) to monitor your project request stats.
@@ -200,31 +196,15 @@ Select **View Stats** or **stats** to monitor your project request stats.
-From the Stats page of the Infura dashboard, you can view real-time statistics about your API usage. +From the Stats page of the dashboard, view real-time statistics about your API usage. Optimize your app and better understand your users by -[reviewing your API request stats](/developer-tools/dashboard/how-to/dashboard-stats) regularly. - -
-
- -
-
+[reviewing your API request stats](/developer-tools/dashboard/how-to/dashboard-stats). ## 6. View your credit usage -The Infura dashboard provides an overview of your daily credit usage. Select **View Usage** +The dashboard provides an overview of your daily credit usage. Select **View Usage** for a [wider view of your credit usage](/developer-tools/dashboard/how-to/credit-usage). -:::info - -The credit pricing model replaces request-based billing for free-tier (Core) customers. Customers on -Developer and Team plans will be transitioned to the credit model on September 30, 2024. -**Existing customers on Growth and Custom plans will remain on request-based billing**. - -::: -
-
- -
-
diff --git a/services/get-started/pricing/credit-cost.md b/services/get-started/pricing/credit-cost.md deleted file mode 100644 index 8a01bd7ea31..00000000000 --- a/services/get-started/pricing/credit-cost.md +++ /dev/null @@ -1,217 +0,0 @@ ---- -description: API method credit cost. ---- - -# Credit costs - -The following tables outline the credit costs associated with various RPC methods across different -networks. The credit calculation logic is designed to ensure accurate and fair pricing based on the -specific network and method being used. - -:::caution important - -Requests for [archive data](../../concepts/archive-data.md) (older than 128 blocks) -currently cost the same as non-archive data, but this might change in the near future. -::: - -The process used to determine the credit cost for each request is as follows: - -1. **Initial check for a specific credit value** - When you make a request, the system first checks if there is a specific credit value assigned for the network and method used. - This ensures that any unique resource requirements or costs associated with a particular network are accurately reflected. - -1. **Fallback to the Ethereum method's credit value** - If no specific credit value is found for the network, the system applies the Ethereum method's credit value. - Ethereum serves as the baseline for pricing core RPC methods. - -1. **Fallback to the default credit value** - If the method is not found in the Ethereum table either, the system applies a default credit value. - Initially set to 80 credits, this default value ensures all requests are accounted for, even if specific pricing information is not available. - -## Error code costs - -When making requests that return status code errors, some errors count towards your credit usage. - -- **`429` errors**: These are not charged and can occur for the following reasons: - - **Key settings credit limit caps**: These are limits set per API key. - - **Credit quota limit caps**: These are overall credit usage limits. - - **Credit throughput limit caps**: These are limits on the rate or throughput of requests. - -- **`4xx` errors**: These are errors caused by human input, and consume 5 credits. - -- **`5xx` errors**: These are server errors, and do not consume any credit charges. - -## Ethereum - -The Ethereum methods serve as a baseline for pricing RPC methods. If a credit cost is not available for -a specific network, then use the default Ethereum method's credit cost. - -### Standard Ethereum-compliant JSON-RPC methods - -| RPC method | Credit cost | -|-------------------------------------------|-------------| -| `eth_accounts` | 80 | -| `eth_blobBaseFee` | 300 | -| `eth_blockNumber` | 80 | -| `eth_call` | 80 | -| `eth_chainId` | 5 | -| `eth_createAccessList` | 80 | -| `eth_estimateGas` | 300 | -| `eth_feeHistory` | 80 | -| `eth_gasPrice` | 80 | -| `eth_getBalance` | 80 | -| `eth_getBlockByHash` | 80 | -| `eth_getBlockByNumber` | 80 | -| `eth_getBlockReceipts` | 1000 | -| `eth_getBlockTransactionCountByHash` | 150 | -| `eth_getBlockTransactionCountByNumber` | 150 | -| `eth_getCode` | 80 | -| `eth_getLogs` | 255 | -| `eth_getProof` | 150 | -| `eth_getStorageAt` | 80 | -| `eth_getTransactionByBlockHashAndIndex` | 150 | -| `eth_getTransactionByBlockNumberAndIndex` | 150 | -| `eth_getTransactionByHash` | 80 | -| `eth_getTransactionCount` | 80 | -| `eth_getTransactionReceipt` | 80 | -| `eth_getUncleByBlockHashAndIndex` | 150 | -| `eth_getUncleByBlockNumberAndIndex` | 150 | -| `eth_getUncleCountByBlockHash` | 150 | -| `eth_getUncleCountByBlockNumber` | 150 | -| `eth_getWork` | 80 | -| `eth_hashrate` | 5 | -| `eth_maxPriorityFeePerGas` | 80 | -| `eth_mining` | 5 | -| `eth_protocolVersion` | 5 | -| `eth_sendRawTransaction` | 80 | -| `eth_sign` | 80 | -| `eth_submitWork` | 80 | -| `eth_subscribe` | 5 | -| `eth_syncing` | 5 | -| `eth_unsubscribe` | 10 | -| `net_listening` | 5 | -| `net_peerCount` | 80 | -| `net_version` | 5 | -| `web3_clientVersion` | 80 | - -### Trace methods - -| RPC method | Credit cost | -|---------------------|-------------| -| `trace_block` | 300 | -| `trace_call` | 300 | -| `trace_callMany` | 300 | -| `trace_filter` | 300 | -| `trace_transaction` | 300 | - - -### Filter methods - -| RPC method | Credit cost | -|-----------------------------------|-------------| -| `eth_getFilterChanges` | 140 | -| `eth_getFilterLogs` | 255 | -| `eth_newBlockFilter` | 80 | -| `eth_newFilter` | 80 | -| `eth_uninstallFilter` | 80 | - -### Debug methods - -| RPC method | Credit cost | -|----------------------------|-------------| -| `debug_storageRangeAt` | 1000 | -| `debug_traceBlock` | 1000 | -| `debug_traceBlockByHash` | 1000 | -| `debug_traceBlockByNumber` | 1000 | -| `debug_traceCall` | 1000 | -| `debug_traceTransaction` | 1000 | - - -### Subscription events - -You can subscribe and unsubscribe to events using [`eth_subscribe`](../../reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx) and [`eth_unsubscribe`](../../reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx). - -The credit costs for the `logs` and `newHeads` events are charged per block, whereas `newPendingTransaction` events -are charged at approximately one second intervals. - -| Subscription events | Credit cost | -|-------------------------|-------------| -| `logs` | 300 | -| `newHeads` | 50 | -| `newPendingTransaction` | 200 | - -## Linea - -| RPC method | Credit cost | -|-------------------------------------------|-------------| -| `linea_estimateGas` | 100 | - - -## Polygon - -| RPC method | Credit cost | -|----------------------------|-------------| -| `bor_getAuthor` | 80 | -| `bor_getCurrentProposer` | 80 | -| `bor_getCurrentValidators` | 80 | -| `bor_getRootHash` | 80 | -| `bor_getSignersAtHash` | 80 | - -## Starknet - -| RPC Method | Credit cost | -|--------------------------------------------|-------------| -| `starknet_addDeclareTransaction` | 700 | -| `starknet_addDeployAccountTransaction` | 700 | -| `starknet_addInvokeTransaction` | 700 | -| `starknet_blockHashAndNumber` | 80 | -| `starknet_blockNumber` | 80 | -| `starknet_call` | 80 | -| `starknet_chainId` | 5 | -| `starknet_estimateFee` | 240 | -| `starknet_getBlockTransactionCount` | 80 | -| `starknet_getBlockWithTxHashes` | 80 | -| `starknet_getBlockWithTxs` | 80 | -| `starknet_getClass` | 80 | -| `starknet_getClassAt` | 80 | -| `starknet_getClassHashAt` | 80 | -| `starknet_getEvents` | 200 | -| `starknet_getNonce` | 80 | -| `starknet_getStateUpdate` | 80 | -| `starknet_getStorageAt` | 80 | -| `starknet_getTransactionByBlockIdAndIndex` | 80 | -| `starknet_getTransactionByHash` | 80 | -| `starknet_getTransactionReceipt` | 80 | -| `starknet_pendingTransactions` | 160 | -| `starknet_simulateTransactions` | 160 | -| `starknet_specVersion` | 5 | -| `starknet_syncing` | 5 | - - -## ZKsync Era - -| RPC method | Credit cost | -|-------------------------------|-------------| -| `zks_estimateFee` | 80 | -| `zks_estimateGasL1ToL2` | 80 | -| `zks_getAllAccountBalances` | 80 | -| `zks_getBlockDetails` | 80 | -| `zks_getBridgeContracts` | 80 | -| `zks_getBytecodeByHash` | 80 | -| `zks_getL1BatchBlockRange` | 80 | -| `zks_getL1BatchDetails` | 80 | -| `zks_getL2ToL1LogProof` | 80 | -| `zks_getL2ToL1MsgProof` | 80 | -| `zks_getMainContract` | 80 | -| `zks_getProof` | 80 | -| `zks_getRawBlockTransactions` | 80 | -| `zks_getTestnetPaymaster` | 80 | -| `zks_getTransactionDetails` | 80 | -| `zks_L1BatchNumber` | 80 | -| `zks_L1ChainId` | 80 | - -## Gas API - -| API endpoint | Credit cost | -|---------------------|--------------| -| `baseFeeHistory` | 80 | -| `baseFeePercentile` | 80 | -| `busyThreshold` | 80 | -| `suggestedGasFees` | 80 | diff --git a/services/get-started/pricing/credit-cost.mdx b/services/get-started/pricing/credit-cost.mdx new file mode 100644 index 00000000000..f1720585e2f --- /dev/null +++ b/services/get-started/pricing/credit-cost.mdx @@ -0,0 +1,107 @@ +--- +description: API method credit cost. +--- + +import React from 'react' +import CreditCostTable from '@site/src/components/CreditCost/CreditCostTable.js' + +# Credit costs + +The following tables outline the credit costs associated with various RPC methods across different +networks. The credit calculation logic is designed to ensure accurate and fair pricing based on the +specific network and method being used. + +:::caution important + +Requests for [archive data](../../concepts/archive-data.md) (older than 128 blocks) +currently cost the same as non-archive data, but this might change in the near future. +::: + +The process used to determine the credit cost for each request is as follows: + +1. **Initial check for a specific credit value** - When you make a request, the system first checks if there is a specific credit value assigned for the network and method used. + This ensures that any unique resource requirements or costs associated with a particular network are accurately reflected. + +1. **Fallback to the Ethereum method's credit value** - If no specific credit value is found for the network, the system applies the Ethereum method's credit value. + Ethereum serves as the baseline for pricing core RPC methods. + +1. **Fallback to the default credit value** - If the method is not found in the Ethereum table either, the system applies a default credit value. + Initially set to 80 credits, this default value ensures all requests are accounted for, even if specific pricing information is not available. + +## Error code costs + +When making requests that return HTTP status code errors, some errors count towards your credit usage: + +- **`429` errors**: These are not charged and can occur if you've exceeded your allowed throughput limit (requests per second). +- **`402` errors**: These are not charged and can occur if you've exceeded your allowed daily credit usage. +- **`4xx` errors**: These are errors caused by human input, and consume 5 credits. +- **`5xx` errors**: These are server errors, and do not consume any credit charges. + +Making requests to a non-existent JSON-RPC method costs 160 credits. + +## Ethereum + +The Ethereum methods serve as a baseline for pricing RPC methods. If a credit cost is not available for +a specific network, then use the default Ethereum method's credit cost. + +### Standard Ethereum-compliant methods + + + +### Trace methods + + + +### Filter methods + + + +### Debug methods + + + +### Subscription events + +You can subscribe and unsubscribe to events using [`eth_subscribe`](../../reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx) and [`eth_unsubscribe`](../../reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx). + +The credit costs for the `logs` and `newHeads` events are charged per block, whereas `newPendingTransaction` events +are charged at approximately one second intervals. + + + +## Linea + + + +## HyperEVM + + + +## Polygon + + + +## Solana + +All Solana methods are charged at 160 credits per request. + +## Starknet + + + +## ZKsync Era + + + +## Gas API + + + +## Bundler API + +:::info +Refer to the [supported networks section](../../concepts/bundler.md#supported-networks) +for the list of networks that support the Bundler API. +::: + + diff --git a/services/get-started/pricing/index.md b/services/get-started/pricing/index.md index 7f3f5397c6f..4a26376d1f2 100644 --- a/services/get-started/pricing/index.md +++ b/services/get-started/pricing/index.md @@ -4,16 +4,7 @@ description: Infura's credit pricing model. # Pricing -:::info - -The credit pricing model replaces request-based billing for free-tier (Core) customers. Customers on -Developer and Team plans will be transitioned to the credit model on September 30, 2024. - -**Existing customers on Growth and Custom plans will remain on request-based billing**. - -::: - -Infura's credit pricing model introduces a more accurate and transparent pricing structure by assigning +Infura's credit pricing model introduces an accurate and transparent pricing structure by assigning specific credit values to each request, based on computational complexity. Infura users get a fixed allocated daily credit quota as part of their subscription plan, which they can @@ -22,7 +13,7 @@ This shift not only provides greater flexibility but also encourages efficient u :::tip -View the [credit cost table](./credit-cost.md) for a breakdown of the cost for each method. +View the [credit cost table](credit-cost.mdx) for a breakdown of the cost for each method. ::: @@ -32,25 +23,21 @@ Depending on the type of requests, the credit pricing model might have unique wa credits toward your daily credit quota: - [**WebSocket streaming**](../../concepts/websockets.md#pricing): Subscribing and unsubscribing to events consume credits from your - daily quota. Each event received through a WebSocket connection also - [consumes credits based on the event type](./credit-cost.md#subscription-events). - WebSocket connections are severed once you reach your daily credit limit. + daily quota. Each event received through a WebSocket connection also + [consumes credits based on the event type](credit-cost.mdx#subscription-events). + WebSocket connections are severed once you reach your daily credit limit. - [**Batch requests**](../../how-to/make-batch-requests.md): Each individual RPC call - within a batch call consumes credits (including the batch call itself). + within a batch call consumes credits (including the batch call itself). - [**Archive requests**](../../concepts/archive-data.md): Accessing archive data (older than 128 blocks) - currently consumes the same amount of credits as non-archive data, however, this might change in the future. + currently consumes the same amount of credits as non-archive data, however, this might change in the future. ## Infura plans The following credit plans are available for new customers: -- **Free tier**: 6,000,000 daily credits, and 2,000 credits per second rate limit. +- **Free tier**: 3,000,000 daily credits, and 500 credits per second rate limit. - **Developer**: 15,000,000 daily credits, and 4,000 credits per second rate limit. - **Team**: 75,000,000 daily credits, and 40,000 credits per second rate limit. - **Custom**: [Contact us](https://www.infura.io/contact) to determine the custom plan for your requirements. - -:::info important -The existing Growth plan is no longer available to new Infura customers. -::: diff --git a/services/how-to/avoid-rate-limiting.md b/services/how-to/avoid-rate-limiting.md index 1ae429cdaec..4ccb6e1def6 100644 --- a/services/how-to/avoid-rate-limiting.md +++ b/services/how-to/avoid-rate-limiting.md @@ -6,41 +6,38 @@ sidebar_position: 1 # Avoid rate limiting Infura applies rate limiting account-wide after exceeding the [daily credit limit](../get-started/pricing/index.md) -or the number of credits per second (throughput). +or the number of credits per second (throughput). The rate limiting also applies to +[user-defined limits that you can configure in the dashboard](/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits). -:::info +When you exceed your daily credit limit, Infura stops accepting further traffic and removes +access for the rest of the day, halting further usage. You'll need to upgrade your plan, or purchase +additional credit packs for more capacity. -The credit pricing model replaces request-based billing for free-tier (Core) customers. Customers on -Developer and Team plans will be transitioned to the credit model on September 30, 2024. +If you've exceeded your allowed throughput limit, consider reducing the amount of requests per +second, or upgrade for more capacity. -**Existing customers on Growth and Custom plans will remain on request-based billing**. - -::: - -For rate limiting designed to protect our service in the event of an attack, Infura uses a combination of: - -The throughput of an an account will be throttled once the daily credit limit is reached. Credit -quota limits will be reset everyday at 00:00 UTC for all customers. +Credit quota limits are reset every day at 00:00 UTC for all customers. ## Rate limit implications Daily credit quota limits apply after reaching your daily credit allowance: -- Once you reach your daily request limit, you can still make further requests, but throughput - will be throttled. +- Once you reach your daily request limit, your service will be halted for the rest of the day. - The WebSocket service will sever connections. ### Notice rate limiting behavior? -You'll receive a JSON response with an HTTP status code `429` if you reach your credits per second limits: +You'll receive a JSON response with an HTTP status code `402` if you reach your daily credit limit. For example: ```json { "jsonrpc": "2.0", "id": 1, "error": { - "code": -32005, - "message": "daily request count exceeded, request rate limited" + "code": 402, + "event": -33000, + "message": "Payment Required", + "details": "You have reached your daily credit limit. To continue making requests, upgrade your plan or purchase additional credits" } } ``` @@ -53,47 +50,30 @@ allowed limit: "jsonrpc": "2.0", "id": 1, "error": { - "code": -32005, - "message": "project ID request rate exceeded", - "data": { - "see": "https://infura.io/docs/ethereum/jsonrpc/ratelimits", - "current_rps": 13.333, - "allowed_rps": 10.0, - "backoff_seconds": 30.0 - } + "code": 429, + "event": -33200, + "message": "Too Many Requests", + "details": "You have surpassed your allowed throughput limit. Reduce the amount of requests per second or upgrade for more capacity." } } ``` -The `data` array contains three fields related to rate limits: - -- `current_rps` - The current rate per second determined by Infura. -- `allowed_rps` - The current _allowed_ rate which you should stay under. -- `backoff_seconds` - The suggested amount of time to wait before sending more requests. - -:::info - -The value for `allowed_rps` changes depending on overall network conditions; therefore consider the value -for `current_rps` valid and up-to-date. - -::: - ### Tips to avoid rate limiting -We recommend pausing JSON-RPC activity for the time value in `backoff_seconds`. +We recommend pausing JSON-RPC activity if you surpass your request per second capacity. If you're consistently rate limited, consider these workarounds: - **Cache Ethereum data locally.** Barring rare deep reorganizations of the chain, blocks more than a - couple of blocks below the head of the chain can be cached indefinitely. Ask for the data once then - keep it locally. -- **Limit RPCs at dapp startup.** Likewise, limit the number of RPCs your dapp calls immediately - at startup. Only request data as the user accesses that portion of the dapp, and cache anything - from older blocks for next time. -- **Don't poll Infura in a tight loop.** New blocks come roughly every 15 seconds, so requesting new - data at a faster rate usually doesn't make sense. Consider using `eth_subscribe` to be notified - when new blocks are available. - -You can have Infura notify you when you're near your daily daily credit limit by selecting + couple of blocks below the head of the chain can be cached indefinitely. Ask for the data once then + keep it locally. +- **Limit RPC requests at dapp startup.** Likewise, limit the number of RPC methods your dapp calls + at startup. Only request data as the user accesses that portion of the dapp, and cache anything + from older blocks for next time. +- **Don't poll Infura in a tight loop.** New blocks come approximately every 15 seconds, so requesting new + data at a faster rate often doesn't make sense. Consider using `eth_subscribe` to be notified + when new blocks are available. + +You can have Infura notify you when you're near your daily credit limit by selecting **Email Notifications** in the **Accounts** page of the Infura **Settings**. Infura sends emails -when your daily credits reach 75%, 85%, and 100% of the allowed limit. \ No newline at end of file +when your daily credits reach 75%, 85%, and 100% of the allowed limit. diff --git a/services/how-to/enable-api-forwarding.md b/services/how-to/enable-api-forwarding.md index 14450f5b6e7..346d8a24aab 100644 --- a/services/how-to/enable-api-forwarding.md +++ b/services/how-to/enable-api-forwarding.md @@ -9,7 +9,7 @@ import TabItem from "@theme/TabItem"; # Enable API request forwarding For JSON-RPC methods, you can request failover protection by adding the failover header to -your API request using `cURL`, `Web3.js`, `Ethers.js`, or any other language of your choice. +your API request using curl, Web3.js, Ethers.js, or any other language of your choice. For more information about this feature, including our partner and their privacy information, see [Failover protection](../concepts/failover-protection.md). @@ -25,7 +25,7 @@ Failover support is available on Mainnet only. In the code tabs, the `eth_blockNumber` method is used as an example. - + ```bash curl https://.infura.io/v3/ \ @@ -38,22 +38,21 @@ curl https://.infura.io/v3/ \ ```js -const { Web3 } = require("web3") -const https = require("https") +const { Web3 } = require('web3') +const https = require('https') const options = { headers: { - "Enable-Failover": "true", + 'Enable-Failover': 'true', }, } const provider = new https.Agent(options) const web3 = new Web3( - new Web3.providers.HttpProvider( - "https://.infura.io/v3/", - { agent: provider } - ) + new Web3.providers.HttpProvider('https://.infura.io/v3/', { + agent: provider, + }) ) web3.eth.getBlockNumber().then(console.log) @@ -63,19 +62,19 @@ web3.eth.getBlockNumber().then(console.log) ```js -const ethers = require("ethers") -const fetch = require("node-fetch") +const ethers = require('ethers') +const fetch = require('node-fetch') class InfuraJsonRpcProvider extends ethers.providers.JsonRpcProvider { constructor(network, apiKey) { super(network, apiKey) this.fetchFunc = async (url, json, processFunc) => { const response = await fetch(url, { - method: "POST", + method: 'POST', body: json.body, headers: { - "Content-Type": "application/json", - "Enable-Failover": "true", + 'Content-Type': 'application/json', + 'Enable-Failover': 'true', }, }) @@ -92,11 +91,9 @@ class InfuraJsonRpcProvider extends ethers.providers.JsonRpcProvider { } } -const provider = new InfuraJsonRpcProvider( - "https://.infura.io/v3/" -) +const provider = new InfuraJsonRpcProvider('https://.infura.io/v3/') -provider.getBlockNumber().then((blockNumber) => { +provider.getBlockNumber().then(blockNumber => { console.log(blockNumber) }) ``` diff --git a/services/how-to/get-testnet-tokens.md b/services/how-to/get-testnet-tokens.md index 52b3cfaf20e..f8c10b866df 100644 --- a/services/how-to/get-testnet-tokens.md +++ b/services/how-to/get-testnet-tokens.md @@ -5,29 +5,27 @@ sidebar_position: 2 # Get testnet ETH and tokens -Use testnet tokens to test applications on blockchain networks without using real cryptocurrency. +Use testnet tokens to test applications on blockchain networks without using real cryptocurrency. Testnet tokens allow you to simulate transactions, deploy smart contracts, and interact with dapps in a controlled environment. :::note -Use [testnet endpoints](../get-started/endpoints.md) during development and initial testing phases before moving to mainnet for production environments. +Use [testnet endpoints](../get-started/endpoints.md) during development and initial testing phases before moving to mainnet for production environments. ::: - -| Testnet | Faucet URL | Bridge URL | -|-------------|-------------------|-------------------------------| -| [Arbitrum Sepolia](https://docs.arbitrum.io/launch-orbit-chain/how-tos/add-orbit-chain-to-bridge-ui)| [Arbitrum Sepolia faucet](https://faucet.quicknode.com/arbitrum/sepolia)| [Arbitrum bridge](https://bridge.arbitrum.io/)| -| [Avalanche Fuji](https://docs.avax.network/learn/networks/fuji-testnet)| [Avalanche Fuji faucet](https://faucet.avax.network)| [Avalanche bridge](https://bridge.avax.network/)| -| [Base Sepolia](https://docs.base.org/docs/using-base/)| [Base Sepolia faucet](https://faucet.quicknode.com/base/sepolia)| [Base bridge](https://bridge.base.org/deposit)| -| [Blast Sepolia](https://docs.blast.io/using-blast)| [Blast Sepolia faucet](https://faucet.quicknode.com/blast/sepolia)| | -| [Binance Smart Chain (BSC) Sepolia](https://academy.binance.com/en/articles/connecting-metamask-to-binance-smart-chain)| [BSC Sepolia faucet](https://www.bnbchain.org/en/testnet-faucet)| [BSC bridge](https://www.bnbchain.org/en/bnb-chain-bridges)| -| [Celo Alfajores](https://docs.celo.org/getting-started/alfajores-testnet)| [Celo Alfajores faucet](https://faucet.celo.org/alfajores)| [Celo bridge](https://docs.celo.org/protocol/bridge#token-bridges)| -| [Ethereum Sepolia](https://docs.blast.io/building/bridges/testnet)| [Ethereum Sepolia faucet](https://faucet.quicknode.com/ethereum/sepolia)| [Sepolia bridge](https://docs.blast.io/building/bridges/testnet)| -| [Linea Sepolia](https://support.linea.build/getting-started/how-to-get-linea-goerli-testnet-eth)| [Linea Sepolia faucet](https://www.infura.io/faucet/linea) or [Covalent faucet](https://goldrush.dev/faucet/)| [Linea bridge](https://bridge.linea.build)| -| [Mantle Sepolia](https://docs.mantle.xyz/network/for-devs/developing-on-mantle#connecting-to-mantle-testnet)| [Mantle Sepolia faucet](https://faucet.sepolia.mantle.xyz) |[Mantle bridge](https://bridge.sepolia.mantle.xyz)| -| [Optimism Sepolia](https://docs.optimism.io/builders/tools/build/faucets)| [Optimism Sepolia faucet](https://faucet.quicknode.com/optimism/sepolia)| [Optimism bridge](https://app.optimism.io/bridge)| -| [Palm](https://docs.palm.io/get-started/connect/testnet)| [PALM token](https://docs.palm.io/get-started/tokens)| [Token bridge](https://app.palm.io/bridge)| -| [Polygon Amoy](https://docs.polygon.technology/tools/wallets/metamask/add-polygon-network/)| [Polygon Amoy faucet](https://faucet.polygon.technology)| [Polygon bridge](https://portal.polygon.technology/bridge)| -| [Starknet Sepolia](https://www.starknet.io/blog/getting-started-using-starknet-setting-up-a-starknet-wallet/)| [Starknet Sepolia faucet](https://starknet-faucet.vercel.app)| [Starknet bridge (StarkGate)](https://starkgate.starknet.io)| -| [ZKsync Era Sepolia](https://docs.zksync.io/build/connect-to-zksync)| [ZKsync Sepolia faucet](https://docs.zksync.io/ecosystem/network-faucets)| [ZKsync bridge](https://portal.zksync.io/bridge)| +| Testnet | Faucet URL | Bridge URL | +| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| [Arbitrum Sepolia](https://docs.arbitrum.io/launch-orbit-chain/how-tos/add-orbit-chain-to-bridge-ui) | [Arbitrum Sepolia faucet](https://faucet.quicknode.com/arbitrum/sepolia) | [Arbitrum bridge](https://portal.arbitrum.io/bridge) | +| [Avalanche Fuji](https://build.avax.network/academy/avalanche-l1/interchain-messaging/03-avalanche-starter-kit/04-networks) | [Avalanche Fuji faucet](https://faucet.avax.network) | [Avalanche bridge](https://bridge.avax.network/) | +| [Base Sepolia](https://docs.base.org/chain/using-base#metamask-1) | [Base Sepolia faucet](https://faucet.quicknode.com/base/sepolia) | [Base bridge](https://bridge.base.org/deposit) | +| [Blast Sepolia](https://docs.blast.io/using-blast) | [Blast Sepolia faucet](https://faucet.quicknode.com/blast/sepolia) | | +| [Binance Smart Chain (BSC) Sepolia](https://academy.binance.com/en/articles/connecting-metamask-to-binance-smart-chain) | [BSC Sepolia faucet](https://www.bnbchain.org/en/testnet-faucet) | [BSC bridge](https://www.bnbchain.org/en/bnb-chain-bridge) | +| [Celo Sepolia](https://docs.celo.org/build-on-celo/network-overview) | [Celo Sepolia faucet](https://faucet.celo.org/celo-sepolia) | [Celo bridge](https://docs.celo.org/protocol/bridge#token-bridges) | +| [Ethereum Sepolia](https://ethereum.org/developers/docs/networks/) | [Ethereum Sepolia faucet](https://faucet.quicknode.com/ethereum/sepolia) | [Sepolia bridge](https://docs.blast.io/building/bridges/testnet) | +| [Linea Sepolia](https://support.linea.build/getting-started/how-to-get-linea-goerli-testnet-eth) | [Linea Sepolia faucet](https://docs.metamask.io/developer-tools/faucet) | [Linea bridge](https://linea.build/hub/bridge) | +| [Mantle Sepolia](https://docs.mantle.xyz/network/for-uers/how-to-guides/connecting-wallet-to-mantle-network) | [Mantle Sepolia faucet](https://faucet.sepolia.mantle.xyz) | [Mantle bridge](https://app.mantle.xyz/bridge?network=sepolia) | +| [Optimism Sepolia](https://docs.optimism.io/app-developers/tools/faucets) | [Optimism Sepolia faucet](https://faucet.quicknode.com/optimism/sepolia) | [Optimism bridge](https://app.optimism.io/bridge) | +| [Polygon Amoy](https://docs.polygon.technology/tools/wallets/metamask/add-polygon-network/) | [Polygon Amoy faucet](https://faucet.polygon.technology) | [Polygon bridge](https://portal.polygon.technology/bridge) | +| [Starknet Sepolia](https://www.starknet.io/blog/getting-started-using-starknet-setting-up-a-starknet-wallet/) | [Starknet Sepolia faucet](https://starknet-faucet.vercel.app) | [Starknet bridge (StarkGate)](https://starkgate.starknet.io) | +| [ZKsync Era Sepolia](https://docs.zksync.io/zksync-network) | [ZKsync Sepolia faucet](https://docs.zksync.io/zksync-network/ecosystem/network-faucets) | [ZKsync bridge](https://portal.zksync.io/bridge) | diff --git a/services/how-to/interact-with-erc-20-tokens.md b/services/how-to/interact-with-erc-20-tokens.md index 609fadab511..048e55c005a 100644 --- a/services/how-to/interact-with-erc-20-tokens.md +++ b/services/how-to/interact-with-erc-20-tokens.md @@ -12,8 +12,8 @@ import TabItem from "@theme/TabItem" You can: -- [Send ERC-20 transactions](interact-with-erc-20-tokens.md#sending-transactions) using `eth_sendRawTransaction`. -- [Observe event logs of mined ERC-20 transactions](interact-with-erc-20-tokens.md#mined-transactions) using `eth_getLogs`. +- [Send ERC-20 transactions](#send-transactions) using `eth_sendRawTransaction`. +- [Observe event logs of mined ERC-20 transactions](#observe-logs-of-mined-transactions) using `eth_getLogs`. - Follow [this tutorial](../tutorials/ethereum/retrieve-the-balance-of-an-erc-20-token.md) to retrieve the balance of ERC-20 tokens. - Follow [this tutorial](../tutorials/ethereum/track-erc-20-token-transfers.md) to track ERC-20 token transfers. @@ -28,6 +28,14 @@ An ERC-20 token must implement the following functions: - `approve(spender, value)` - Allows `spender` to withdraw from your account multiple times, up to the `value` amount. - `transferFrom(from, to, value)` - Transfers `value` amount of tokens from address `from` to address `to`. +:::tip + +Some widely used tokens don't strictly follow ERC-20 return conventions. Don't +assume `transfer` or `transferFrom` return a boolean value. Use a safe wrapper +(such as [OpenZeppelin's `SafeERC20`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol)) or explicitly handle empty return data. + +::: + At certain times, an ERC-20 token also must emit the following events: - `Transfer(from, to, value)` - Must trigger when tokens are transferred, including zero value transfers. @@ -35,24 +43,24 @@ At certain times, an ERC-20 token also must emit the following events: View [EIP-20](https://eips.ethereum.org/EIPS/eip-20) for more details about how these functions work and when to emit these events. -## **Send transactions** +## Send transactions Use [`eth_sendRawTransaction`](../reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx) to send ERC-20 token transactions. -The JSON-RPC format expects `eth_sendRawTransaction` to have a specific data field format that requires normalizing the `Transfer` function to a short [function selector](https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector). To do this, set the parameters for the function and run it through Ethereum’s [sha3 keccak hash](https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector): +The JSON-RPC format expects `eth_sendRawTransaction` to have a specific data field format that requires normalizing the `transfer` function to a short [function selector](https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector). To do this, set the parameters for the function and run it through Ethereum's [sha3 keccak hash](https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector): - + ```javascript -web3.sha3("Transfer(address, address, uint256)")[0..4] +web3.utils.sha3('transfer(address,uint256)').slice(0, 10) ``` ```javascript -0x70a08231 +0xa9059cbb ``` @@ -84,7 +92,7 @@ curl https://mainnet.infura.io/v3/ \ -## **Observe logs of mined transactions** +## Observe logs of mined transactions When a transaction is mined, event logs are published for public viewing. @@ -92,7 +100,7 @@ Once the event logs are published, you can execute [`eth_getLogs`](../reference/ :::success -For example, an event ticketing service that wants to issue off-chain tickets based on crypto payments can use `eth_getLogs` to find payments to their address, and react to these events by processing some logic in their backend servers to issue tickets to users. +For example, an event ticketing service that wants to issue offchain tickets based on crypto payments can use `eth_getLogs` to find payments to their address, and react to these events by processing some logic in their backend servers to issue tickets to users. ::: @@ -124,7 +132,7 @@ curl https://mainnet.infura.io/v3/ \ "0x000000000000000000000000dfbaf3e4c7496dad574a1b842bc85b402bdc298d" ], "data": "0x00000000000000000000000000000000000000000000041f900d25d6693623a6", - "blockNumbern": "0x91F37C" + "blockNumber": "0x91F37C" } ] } @@ -141,11 +149,11 @@ If `fromBlock` and `toBlock` are omitted, `eth_getLogs` returns the _entire_ cha ::: -This request tells the blockchain to retrieve event logs related to address `0x6B175474E89094C44Da98b954EedeAC495271d0F` emitted in block `0x91F37C` that matches topics `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`, `0x000000000000000000000000ee25e1ba53c225d250861c8e5a9a3e0fe19c790e` and `0x000000000000000000000000dfbaf3e4c7496dad574a1b842bc85b402bdc298d`. +This request tells the blockchain to retrieve event logs related to address `0x6B175474E89094C44Da98b954EedeAC495271d0F` emitted in block `0x91F37C` that match topics `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`, `0x000000000000000000000000ee25e1ba53c225d250861c8e5a9a3e0fe19c790e` and `0x000000000000000000000000dfbaf3e4c7496dad574a1b842bc85b402bdc298d`. The response returned for this request is an array of events. In this example, only one event for one address matches the specified topics. -### **Topics** +### Topics Topics are events emitted by smart contracts. Looking at the source code of the original contract [`0x6B175474E89094C44Da98b954EedeAC495271d0F`](https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f#code) used in this example, there are two event signatures that could be associated with it on lines 94 and 95: @@ -154,13 +162,13 @@ event Approval(address indexed tokenOwner, address indexed spender, uint tokens) event Transfer(address indexed from, address indexed to, uint tokens); ``` -To find out which topic (event) it actually was, create the [function selector](https://docs.soliditylang.org/en/develop/abi-spec.html#function-selector) of the event and take the [sha3 keccak hash](https://docs.soliditylang.org/en/develop/abi-spec.html#function-selector) of it. Let’s try the event on line 94: +To find out which topic (event) it actually was, create the [function selector](https://docs.soliditylang.org/en/develop/abi-spec.html#function-selector) of the event and take the [sha3 keccak hash](https://docs.soliditylang.org/en/develop/abi-spec.html#function-selector) of it. Let's try the event on line 94: ```javascript -web3.sha3("Approval(address,address,uint256)") +web3.sha3('Approval(address,address,uint256)') ``` @@ -173,13 +181,13 @@ web3.sha3("Approval(address,address,uint256)") -The resulting hash doesn’t match the hash provided in the initial request response. Now let’s try the event on line 95 of the contract: +The resulting hash doesn't match the hash provided in the initial request response. Now let's try the event on line 95 of the contract: ```javascript -web3.sha3("Transfer(address,address,uint256)") +web3.sha3('Transfer(address,address,uint256)') ``` @@ -194,6 +202,6 @@ web3.sha3("Transfer(address,address,uint256)") The resulting hash matches the hash provided in the initial request response. Now you know that `0xddf25` is the transfer event in this example. -### **Data** +### Data The `data` field in the request response refers to all the "non-indexed stuff" captured in the events. In this example, for the transfer topic, `data` represents the number of tokens that were transferred. That is, `0x41f900d25d6693623a6` or 19471.6949921 DAI tokens were transferred from `ee25e1ba53c225d250861c8e5a9a3e0fe19c790e` to `dfbaf3e4c7496dad574a1b842bc85b402bdc298d`. diff --git a/services/how-to/javascript-dotenv.md b/services/how-to/javascript-dotenv.md index 2ea927fd3ec..738be659fa4 100644 --- a/services/how-to/javascript-dotenv.md +++ b/services/how-to/javascript-dotenv.md @@ -7,7 +7,7 @@ sidebar_position: 8 [`dotenv`](https://www.npmjs.com/package/dotenv) is an [npm](https://www.npmjs.com/) JavaScript package that loads environment variables from a `.env` file into the `process.env` global variable, storing configuration in the environment separate from the code. -When you create a dapp using Infura, store your environment variables on your local machine using `dotenv` to protect sensitive information, such as Infura API URLs and MetaMask mnemonics, from pushing to GitHub and becoming publicly accessible. +When you create a dapp using Infura, store your environment variables on your local machine using `dotenv` to protect sensitive information, such as Infura API URLs and MetaMask mnemonics, from being pushed to GitHub and becoming publicly accessible. ### Install `dotenv` @@ -37,7 +37,7 @@ You can create a `package.json` file by running a CLI questionnaire, or by creat At the root of your project directory, create a file named `.env` containing environment variables for sensitive information that shouldn't be shared, such as an Infura API key, Ethereum private key, or MetaMask secret recovery phrase: ```bash -INFURA_API_KEY = "" +RPC_URL = "https://sepolia.infura.io/v3/" PRIVATE_KEY = "" ``` @@ -52,20 +52,20 @@ Never disclose your private keys or secret recovery phrases. Anyone with your pr Give your project access to the `.env` information by including the following line at the top of your project script: ```javascript -require("dotenv").config() +require('dotenv').config() ``` Access the environment variables using `process.env.`. For example, the following is a `hardhat.config.js` file for a Hardhat project: ```javascript -require("@nomiclabs/hardhat-waffle") -require("dotenv").config() +require('@nomiclabs/hardhat-waffle') +require('dotenv').config() module.exports = { - solidity: "0.8.0", + solidity: '0.8.0', networks: { - rinkeby: { - url: process.env.INFURA_API_KEY, + sepolia: { + url: process.env.RPC_URL, accounts: [process.env.PRIVATE_KEY], }, }, diff --git a/services/how-to/json-web-token-jwt.md b/services/how-to/json-web-token-jwt.md index b4937a78eb5..bb4a9051751 100644 --- a/services/how-to/json-web-token-jwt.md +++ b/services/how-to/json-web-token-jwt.md @@ -10,9 +10,9 @@ import TabItem from "@theme/TabItem"; JSON Web Token (JWT) is an internet standard ([RFC 7519](https://tools.ietf.org/html/rfc7519)) that defines a process for secure data exchange between two parties. -Infura projects can use [JSON Web Tokens](https://jwt.io) to authorize users and external parties. +Infura projects can use [JSON Web Tokens](https://jwt.io) to authorize users and external parties. This allows developers to enhance the security profile of their dapps by configuring the expiry time and scope of JWTs. -:::warning +:::info Infura supports using JWTs for Web3 networks. @@ -24,7 +24,7 @@ Only authenticated users can access Infura projects by including JWTs in request #### Workflow -1. Infura security settings enforce authorized access with JWTs. +1. Set up your project's Infura security settings to enforce authorized access with JWTs. 2. A user logs into the project application and receives a JWT. 3. Each request the user makes to Infura with the application's API key includes the JWT in the header. 4. The JWT is verified and the request is successful, or the request is rejected if the JWT is invalid. @@ -39,7 +39,7 @@ JWTs may also include allowlists that enforce further restrictions. ### Generate keys -You can generate your private and public key pair using a tool such as [OpenSSL](https://www.openssl.org). Infura supports the [RS256](https://datatracker.ietf.org/doc/html/rfc7518#section-3.3) and [ES256](https://datatracker.ietf.org/doc/html/rfc7518#section-3.4) cryptographic algorithms. +Generate your private and public key pair. Infura supports the [RS256](https://datatracker.ietf.org/doc/html/rfc7518#section-3.3) and [ES256](https://datatracker.ietf.org/doc/html/rfc7518#section-3.4) cryptographic algorithms. If you are unfamiliar with generating keys, follow the [Authenticate with JWT](../tutorials/ethereum/authenticate-with-jwt.md#21-generate-your-private-key) tutorial. :::warning @@ -47,76 +47,53 @@ Ensure your private key stays private! ::: -The following example creates the key pairs using `openssl`: - - - - -```bash -openssl genrsa -out private.pem 2048 -openssl rsa -in private.pem -outform PEM -pubout -out public.pembas -``` - - - - -```bash -openssl ecparam -name prime256v1 -genkey -noout -out private.pem -openssl ec -in private.pem -pubout -out public.pembash -``` - - - - ### Upload the public key Upload the contents of the public key file that you [generated earlier](json-web-token-jwt.md#generate-keys): -1. Go to the **SECURITY** section in your project settings. - - ![Security settings](../images/security-page.png) +1. In the dashboard, select the API key, then select the **Settings** tab. - :::info + :::info - You must implement separate security settings for each project. + You must implement separate security settings for each API key. - ::: + ::: -2. (Optional) Check the **Require JWT for all requests** box to enforce JWT on all requests. +1. Select **Require JWT for all requests** to enforce JWTs on all requests. - :::info + :::info - Use allowlists to specify a subset of requests that must use JWTs. + You can use [allowlists](/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist) to + specify a subset of requests that must use JWTs. - ::: + ::: -3. Give the public key a name. +1. Provide a unique name for your JWT public key, which can help you manage multiple keys. -4. Paste the public key into the **JWT PUBLIC KEY** input box. It looks something like this: +1. Paste the public key into the **JWT Public Key** input box. It looks something like this: - ``` - -----BEGIN PUBLIC KEY----- - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr7VlNytvNFt9wVkjJ8vG - L4F0+id4kS1CpG7UMh1kghrLg9KMb8gauy7Bxk6PRz5Ckv1FnG4FL+Z3Cdzwd6c8 - jJlzJxbRTYvNi3elqAyItE3tRl6CatRur49t9nGepgFOrwmPP5We52G5O0BsW6Mx - w/neqQH+Y/bXqs0PG/0ZbpTyr044Lh+p9grSuPIogIGIY5JM4AI+fpdH6hVnA7od - PkinkWhQqAW+F8jngwZK+JCFS1GAeobTZVbvsiHZQGuP/T7hqE8z5Q8HYO4ymnkI - MPH6zSKhSxsQRs/kWU5lXqY67ORC3DIMA+I/AJujLuoqC+YaMP0fO81XjrwXPf2j - 4wIDAQAB - -----END PUBLIC KEY----- - ``` + ``` + -----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr7VlNytvNFt9wVkjJ8vG + L4F0+id4kS1CpG7UMh1kghrLg9KMb8gauy7Bxk6PRz5Ckv1FnG4FL+Z3Cdzwd6c8 + jJlzJxbRTYvNi3elqAyItE3tRl6CatRur49t9nGepgFOrwmPP5We52G5O0BsW6Mx + w/neqQH+Y/bXqs0PG/0ZbpTyr044Lh+p9grSuPIogIGIY5JM4AI+fpdH6hVnA7od + PkinkWhQqAW+F8jngwZK+JCFS1GAeobTZVbvsiHZQGuP/T7hqE8z5Q8HYO4ymnkI + MPH6zSKhSxsQRs/kWU5lXqY67ORC3DIMA+I/AJujLuoqC+YaMP0fO81XjrwXPf2j + 4wIDAQAB + -----END PUBLIC KEY----- + ``` -5. Click **ADD** to add the key to the settings. After the key is added, the security settings look like the following: +1. Select **Add** to add the key to the settings. - ![JWT set up](../images/jwt-set-up.png) +1. The key has a **Name**, **ID**, **Fingerprint**. These are used for creating and verifying JWTs. + You'll need the **ID** to [generate the JWT](json-web-token-jwt.md#generate-a-jwt). -6. The key has a **NAME**, **ID**, **FINGERPRINT**. These are used for creating and verifying JWTs. You'll need the **ID** to [generate the JWT](json-web-token-jwt.md#generate-a-jwt). + :::info - :::info + For key rotation, upload up to three keys for each API key. - For key rotation, upload up to three keys for each project. - - ::: + ::: ## Send requests with JWTs @@ -133,12 +110,20 @@ To get the request to pass, generate a JWT, and add it to the request. ### Generate a JWT +Generate a JWT with an online tool, or programmatically: + +#### Online tool + The following example uses the [jwt.io](https://jwt.io) site to generate the JWT: - Use a supported algorithm (`RS256` or `ES256`) and declare it in the `alg` header field. - Specify `JWT` in the `typ` header field. - Include the JWT `ID` in the `kid` header field. - Have an unexpired `exp` timestamp in the payload data. +- Specify `infura.io` in the `aud` field. +- Add the public key and private key created earlier into the **Verify Signature** section. + +![Generate a JWT online](../images/jwt.png) :::info @@ -146,14 +131,14 @@ To generate a timestamp for testing, use an [online timestamp converter tool](ht ::: -- Specify `infura.io` in the `aud` field. -- Add the public key and private key created earlier into the **Verify Signature** section. +#### Programmatically -To see how this works, go to a site like [jwt.io](https://jwt.io) and enter the data. +Developers typically create the JWT token from their keys programmatically. +To learn more, follow the tutorial demonstrating how to [create and apply a JWT with Node.js](../tutorials/ethereum/authenticate-with-jwt.md). -![Generate a JWT online](../images/jwt.png) +### Apply the JWT -Copy the encoded token as part of the `-H "Authorization: Bearer` entry: +Pass the encoded token as part of the `-H "Authorization: Bearer` entry: ```bash curl -X POST \ @@ -167,6 +152,8 @@ curl -X POST \ {"jsonrpc": "2.0", "id": 1, "result": "0x1cc23d4"} ``` +## Next steps + ### Set up allowlists Allowlists restrict specific activity to users without JWTs. For example, in a system with proxy contracts, allowlists can restrict a user to sending requests to their own proxy only. @@ -218,10 +205,10 @@ curl -X POST \ ``` ```bash -{"jsonrpc": "2.0", "id": 1, "result": "0x1a66d865b7f200"}% +{"jsonrpc": "2.0", "id": 1, "result": "0x1a66d865b7f200"} ``` -## Verify JWTs +### Verify JWTs To identify the public key you have used to create a JWT, verify it with the `FINGERPRINT`. @@ -243,3 +230,8 @@ openssl ec -in private.pem -pubout -outform DER | openssl sha256 -binary | opens + +### Learn more + +- Follow a [tutorial](../tutorials/ethereum/authenticate-with-jwt.md) to create and apply a JWT to authenticate an + `eth_blockNumber` API request. diff --git a/services/how-to/subscribe-to-events.md b/services/how-to/subscribe-to-events.md index a97301a7d35..1230c99897e 100644 --- a/services/how-to/subscribe-to-events.md +++ b/services/how-to/subscribe-to-events.md @@ -24,10 +24,10 @@ You need to be aware of the following when sending HTTP RPC requests: - Silent failures - [Users need to manage client-side silent failures](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#pings_and_pongs_the_heartbeat_of_websockets). - Load balancing - Unlike HTTP requests, WSS requests are not load-balanced to the fastest possible server. - Retries - Retrying failed WebSocket requests typically requires custom JSON-RPC ID-based tracking, whereas support for - retrying failed HTTP requests often is automatic, or easily configured. + retrying failed HTTP requests often is automatic, or easy to configure. - Status codes - WebSockets use its own set of [status codes](https://pkg.go.dev/github.com/gorilla/websocket#pkg-constants) to provide users with a disconnection reason. The service will respond with the standard - [EVM response codes](../reference/ethereum/json-rpc-methods/index.md#error-codes) for each JSON-RPC request. + [EVM response codes](../reference/ethereum/json-rpc-methods/index.md) for each JSON-RPC request. ## Example event subscription diff --git a/services/how-to/trace-transactions.md b/services/how-to/trace-transactions.md index ceb47105cc2..d05b29e8652 100644 --- a/services/how-to/trace-transactions.md +++ b/services/how-to/trace-transactions.md @@ -19,7 +19,7 @@ extract information about contract interactions, transactions, and blocks on the also use the API to retrieve transaction details that are not recorded on the blockchain. For example, use the [`trace_call`](../reference/ethereum/json-rpc-methods/trace-methods/trace_call.mdx) API to observe contract interactions. -![Example for using the trace_call API](../images/trace-call.png) +![Trace API example](../images/trace-call.png) :::tip @@ -59,12 +59,12 @@ only use the [`trace`](../reference/ethereum/json-rpc-methods/trace-methods/inde ## Trace a transaction example -In the following example,you'll trace a transaction using a transaction hash on Ethereum mainnet. The result displays two traces, meaning two separate calls were made within the transaction, and includes the gas used for each call. +In the following example, you'll trace a transaction using a transaction hash on Ethereum mainnet. The result displays two traces, meaning two separate calls were made within the transaction, and includes the gas used for each call. This example represents a call to the `transfer` function of an ERC-20 token contract (indicated in the `input` field), transferring tokens to the address, `0x7154980e9be95eab4eef2269650d4c7e17f156b8`. - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -134,6 +134,19 @@ curl https://mainnet.infura.io/v3/ \ Use cases for the trace API include: -- **Debugging transactions** – The trace API allows you to analyze and debug Ethereum transactions. Trace the execution of a transaction to identify issues or bugs in smart contracts or dapps. Track the sequence of operations, inspect the input and output data, and pinpoint potential errors or unexpected behavior. -- **Optimizing gas usage** – The trace API allows you to analyze the gas consumption of transactions and identify areas where gas usage can be optimized. By examining the execution trace, you can spot expensive operations, inefficient code patterns, or unnecessary computations that consume excessive gas. You can use this information to refactor smart contracts and reduce transaction costs for users. -- **Security auditing** – Conduct security audits of smart contracts and dapps by tracing the execution flow. This allows you to identify potential vulnerabilities or attack vectors in the code. You can analyze contract interactions, track data modifications, and validate that the smart contract behaves as intended. This helps uncover security loopholes and ensures that the smart contracts are robust against various types of attacks, such as reentrancy or unauthorized access. +- **Debugging transactions** - The trace API allows you to analyze and debug Ethereum transactions. + Trace the execution of a transaction to identify issues or bugs in smart contracts or dapps. + Track the sequence of operations, inspect the input and output data, and pinpoint potential errors + or unexpected behavior. +- **Optimizing gas usage** - The trace API allows you to analyze the gas consumption of transactions + and identify areas where gas usage can be optimized. + By examining the execution trace, you can spot expensive operations, inefficient code patterns, or + unnecessary computations that consume excessive gas. + You can use this information to refactor smart contracts and reduce transaction costs for users. +- **Security auditing** - Conduct security audits of smart contracts and dapps by tracing the + execution flow. + This allows you to identify potential vulnerabilities or attack vectors in the code. + You can analyze contract interactions, track data modifications, and validate that the smart + contract behaves as intended. + This helps uncover security loopholes and ensures that the smart contracts are robust against + various types of attacks, such as reentrancy or unauthorized access. diff --git a/services/how-to/use-ipfs/_category_.json b/services/how-to/use-ipfs/_category_.json index 92888fd6741..f3758c76513 100644 --- a/services/how-to/use-ipfs/_category_.json +++ b/services/how-to/use-ipfs/_category_.json @@ -1,11 +1,4 @@ { - "position": 6, "label": "Use IPFS", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "services/how-to/", - "description": "This section has information on using the Interplanetary File System (IPFS)." - } + "position": 7 } diff --git a/services/how-to/use-ipfs/access-ipfs-content/_category_.json b/services/how-to/use-ipfs/access-ipfs-content/_category_.json index 01e70caef78..7f867d9faa3 100644 --- a/services/how-to/use-ipfs/access-ipfs-content/_category_.json +++ b/services/how-to/use-ipfs/access-ipfs-content/_category_.json @@ -1,11 +1,4 @@ { - "position": 1, "label": "Access IPFS content", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "use-ipfs/access-ips-content", - "description": "This section provides information about how to access IPFS content." - } + "position": 1 } diff --git a/services/how-to/use-ipfs/access-ipfs-content/dedicated-gateways.md b/services/how-to/use-ipfs/access-ipfs-content/dedicated-gateways.md index 716338b7112..7a90e52f84f 100644 --- a/services/how-to/use-ipfs/access-ipfs-content/dedicated-gateways.md +++ b/services/how-to/use-ipfs/access-ipfs-content/dedicated-gateways.md @@ -10,14 +10,13 @@ You can only use dedicated gateways to access IPFS content, not to upload conten ### Enable dedicated gateway -Go to your IPFS project settings. - -Toggle **DEDICATED GATEWAYS** to enable. +To enable a dedicated gateway, go to your API key's **Settings** tab, and toggle +**Enable Dedicated Gateways**.
Dedicated gateways in project settings
@@ -33,7 +32,7 @@ https://.infura-ipfs.io/ipfs//
@@ -111,7 +110,7 @@ Traffic is billed at the same price as access to IPFS via the Infura API: - 5GB data transfer up free. - 5GB data transfer down free. -Anything above those limits are charged at: +Anything above those limits is charged at: - Unlimited storage at **$0.08/GB/month.** - Unlimited data transfer at **$0.12/GB/month.** diff --git a/services/how-to/use-ipfs/access-ipfs-content/index.md b/services/how-to/use-ipfs/access-ipfs-content/index.md index d40a4e47ac7..d3c158ffa05 100644 --- a/services/how-to/use-ipfs/access-ipfs-content/index.md +++ b/services/how-to/use-ipfs/access-ipfs-content/index.md @@ -2,7 +2,7 @@ Access files on the IPFS network with gateways. -[IPFS Gateways](https://docs.ipfs.io/concepts/ipfs-gateway/#overview) are HTTP-based services that access content residing on the IPFS network. They provide workarounds for applications - such as browsers, curl, and wget - that have no native support for IPFS. +[IPFS Gateways](https://docs.ipfs.io/concepts/ipfs-gateway/#overview) are HTTP-based services that access content residing on the IPFS network. They provide workarounds for applications—such as browsers, curl, and wget—that have no native support for IPFS. For example, errors may occur when an application that does not support IPFS attempts to access content in the canonical form: diff --git a/services/how-to/use-ipfs/authenticate-requests.md b/services/how-to/use-ipfs/authenticate-requests.md index 01981afd28b..1fd5c26b739 100644 --- a/services/how-to/use-ipfs/authenticate-requests.md +++ b/services/how-to/use-ipfs/authenticate-requests.md @@ -23,13 +23,13 @@ Authorization: Basic ``` Username is the `API_KEY` and password is the `API_KEY_SECRET.` Find your authorization credentials in the API key's settings -page after you [register your Infura account](https://infura.io/register) and -[create an API key](../../../../developer-tools/dashboard/get-started/create-api/) that includes the IPFS network. +page after you [register your Infura account](https://app.infura.io/register) and +[create an API key](/developer-tools/dashboard/get-started/create-api) that includes the IPFS network. -For example, to authenticate and upload a file to IPFS using cURL, you would use the following command: +For example, to authenticate and upload a file to IPFS using curl, you would use the following command: ```bash -curl -X POST -F file=@myfile -u ":" "https://ipfs.infura.io:5001/api/v0/add" +curl -X POST -F file=@myfile -u ":" "https://ipfs.infura.io:5001/api/v0/add" ``` -cURL automatically generates the authorization header and encodes your credentials. +curl automatically generates the authorization header and encodes your credentials. diff --git a/services/how-to/use-ipfs/manage-files.md b/services/how-to/use-ipfs/manage-files.md index 3b7d3c213c8..944e2dc939e 100644 --- a/services/how-to/use-ipfs/manage-files.md +++ b/services/how-to/use-ipfs/manage-files.md @@ -17,7 +17,7 @@ Infura doesn't currently support remote pinning services on IPFS Desktop. ```bash curl -X POST -F file=@myfile \ - -u ":" \ + -u ":" \ "https://ipfs.infura.io:5001/api/v0/add" > { @@ -64,7 +64,7 @@ Infura's [ipfs-upload-client](https://github.com/INFURA/ipfs-upload-client) is a Upload your files and directories to IPFS using the following syntax: ``` -./ipfs-upload-client --id --secret +./ipfs-upload-client --id --secret ``` By default, the tool also pins your uploaded file. You can override this default by setting `--pin false`. Read more @@ -85,7 +85,7 @@ IPFS pinning allows you to retain and persist data on IPFS nodes. Pinning assure not removed during the [IPFS garbage collection process](https://docs.ipfs.io/concepts/persistence/#garbage-collection). ```bash -curl -X POST -u ":" \ +curl -X POST -u ":" \ "https://ipfs.infura.io:5001/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn" ``` @@ -101,14 +101,14 @@ To unpin a file in the Infura UI, select the file in the IPFS dashboard for your Alternatively, use the IPFS API to unpin content. ```bash -curl -X POST -u ":" \ +curl -X POST -u ":" \ "https://ipfs.infura.io:5001/api/v0/pin/rm?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn" ``` ### Read a file ```bash -curl -X POST -u ":" \ +curl -X POST -u ":" \ "https://ipfs.infura.io:5001/api/v0/cat?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn" > Infura IPFS - Getting started demo. diff --git a/services/how-to/use-ipfs/migrate-to-infuras-ipfs-service.md b/services/how-to/use-ipfs/migrate-to-infuras-ipfs-service.md index 316e3fe2181..6ad5f0e82d7 100644 --- a/services/how-to/use-ipfs/migrate-to-infuras-ipfs-service.md +++ b/services/how-to/use-ipfs/migrate-to-infuras-ipfs-service.md @@ -7,7 +7,7 @@ sidebar_position: 4 The updated Infura IPFS service offers: -- A [project dashboard](../../../../../developer-tools/dashboard/how-to/dashboard-stats/) with essential statistics. +- A [project dashboard](/developer-tools/dashboard/how-to/dashboard-stats) with essential statistics. - [Pinning](manage-files.md#pin-a-file) and [unpinning](manage-files.md#unpin-a-file) API access. - Publishing files in the background to the IPFS P2P network, so that content is globally accessible. diff --git a/services/how-to/use-ipfs/request-rate-limits.md b/services/how-to/use-ipfs/request-rate-limits.md index 1c28c44337a..aceeaea3ab1 100644 --- a/services/how-to/use-ipfs/request-rate-limits.md +++ b/services/how-to/use-ipfs/request-rate-limits.md @@ -33,4 +33,4 @@ You can retrieve IPFS data using the API with a limit of 1500 requests per secon Read-only requests from a [dedicated gateway](access-ipfs-content/dedicated-gateways.md) have a limit of 100 requests per second. -If you would like a custom rate limit for requests per second, [contact us](https://app.infura.io/support/ticket). +If you would like a custom rate limit for requests per second, [contact us](https://www.infura.io/contact). diff --git a/services/how-to/use-ipfs/set-quotas.md b/services/how-to/use-ipfs/set-quotas.md index 9bc43290fb5..a3a616911f6 100644 --- a/services/how-to/use-ipfs/set-quotas.md +++ b/services/how-to/use-ipfs/set-quotas.md @@ -15,13 +15,13 @@ Control monthly quotas from your API key's settings page.
-- **Storage quota:** maximum total storage, e.g: 0.001 GB. -- **Data transfer UP quota:** maximum data per month sent to the IPFS service, e.g: 0.001 GB. -- **Data transfer DOWN quota:** maximum data per month retrieved from the IPFS service, e.g: 0.001 GB. +- **Storage quota** - Maximum total storage, for example, 0.001 GB. +- **Data transfer UP quota** - Maximum data per month sent to the IPFS service, for example, 0.001 GB. +- **Data transfer DOWN quota** - Maximum data per month retrieved from the IPFS service, for example, 0.001 GB. :::info -- A zero setting, i.e. 0.0, means you can’t dd any data. +- A zero setting (0.0) means you can't add any data. - A clear input means there is no quota. ::: diff --git a/services/images/400_developers.png b/services/images/400_developers.png deleted file mode 100644 index e0999555eb9..00000000000 Binary files a/services/images/400_developers.png and /dev/null differ diff --git a/services/images/analytics.png b/services/images/analytics.png index 785b99a0faa..5149ad57065 100644 Binary files a/services/images/analytics.png and b/services/images/analytics.png differ diff --git a/services/images/api-key-page copy.png b/services/images/api-key-page copy.png deleted file mode 100644 index a7fd524b119..00000000000 Binary files a/services/images/api-key-page copy.png and /dev/null differ diff --git a/services/images/dashboard.png b/services/images/dashboard.png deleted file mode 100644 index b00b0b52c19..00000000000 Binary files a/services/images/dashboard.png and /dev/null differ diff --git a/services/images/dedicated-gateway-toggle.png b/services/images/dedicated-gateway-toggle.png new file mode 100644 index 00000000000..c5dff60f376 Binary files /dev/null and b/services/images/dedicated-gateway-toggle.png differ diff --git a/services/images/first-api-key.png b/services/images/first-api-key.png index bd2c5d4a735..2d79a78de0e 100644 Binary files a/services/images/first-api-key.png and b/services/images/first-api-key.png differ diff --git a/services/images/image.png b/services/images/image.png deleted file mode 100644 index 0c8099845f4..00000000000 Binary files a/services/images/image.png and /dev/null differ diff --git a/services/images/quotas.png b/services/images/quotas.png index b6fe223e5cc..a2486de76e2 100644 Binary files a/services/images/quotas.png and b/services/images/quotas.png differ diff --git a/services/images/settings-tab.png b/services/images/settings-tab.png index 61a5394bcf3..6f000d59e52 100644 Binary files a/services/images/settings-tab.png and b/services/images/settings-tab.png differ diff --git a/services/images/settings.png b/services/images/settings.png index 114a8e35650..f9090af6628 100644 Binary files a/services/images/settings.png and b/services/images/settings.png differ diff --git a/services/images/stats-frame.png b/services/images/stats-frame.png deleted file mode 100644 index ec99bc9ba18..00000000000 Binary files a/services/images/stats-frame.png and /dev/null differ diff --git a/services/images/unique-subdomain.png b/services/images/unique-subdomain.png index 3b036c2f945..936da6035fc 100644 Binary files a/services/images/unique-subdomain.png and b/services/images/unique-subdomain.png differ diff --git a/services/images/view-usage.png b/services/images/view-usage.png index cccfa341222..ee819e96637 100644 Binary files a/services/images/view-usage.png and b/services/images/view-usage.png differ diff --git a/services/images/welcome-to-truffle.png b/services/images/welcome-to-truffle.png deleted file mode 100644 index 9ace82aaa09..00000000000 Binary files a/services/images/welcome-to-truffle.png and /dev/null differ diff --git a/services/index.md b/services/index.md index bacbc387883..1f60644a288 100644 --- a/services/index.md +++ b/services/index.md @@ -1,10 +1,9 @@ ---- +Hvfb2aL6NfzOE2rWJJTV/oHITB2MKqIkDeekGqBivkfGBzmxBO4PJg--- +title: Services introduction sidebar_label: Introduction sidebar_position: 1 --- -import CodeTerminal from "@site/src/components/CodeTerminal/CodeTerminal.jsx"; -import SectionAPIs from "@site/src/components/Sections/SectionAPIs.jsx"; import SectionNetworks from "@site/src/components/Sections/SectionNetworks.jsx"; # Build and scale your dapp using services @@ -21,17 +20,23 @@ dapps and Snaps. Infura offers a robust set of features designed to enhance the development, deployment, and management of dapps. These features include: -- **Broad access to major networks** - Infura supports the major networks, allowing you to take advantage of Ethereums's smart +- **Broad access to major networks** - Infura supports the major networks, allowing you to take advantage of Ethereum's smart contracts, IPFS's distributed file system, or high performing layer 2 networks. -- **Failover support for APIs** - Currently available on select networks for customers on Growth or Custom plans; if an Infura API - endpoint becomes unavailable for any reason, requests can be forwarded to a partner to fulfill the request. - This ensures that your application remains up and running, providing uninterrupted service to your users. +- [**Decentralized Infrastructure Network (DIN) support**](https://www.infura.io/solutions/decentralized-infrastructure-service) - + DIN works alongside Infura to provide the following: + - **Failover support for APIs** - Currently available on select networks for customers on Growth or Custom plans; if an Infura API + endpoint becomes unavailable for any reason, requests can be forwarded to a DIN partner to fulfill the request. + This ensures that your application remains running, providing uninterrupted service to your users. + - **Expanded network access** - Infura can extend its network offerings by leveraging DIN to access networks that it doesn't + natively support. + - **Expanded method support** - This includes access to debug or trace methods not natively + supported by Infura. For these types of calls, Infura leverages DIN to provide user access. - **Archive data querying** - [Access historical state data](concepts/archive-data.md) at any given - block height. This is an invaluable feature for those who need to perform deep analyses of past transactions, contract + block height. This is essential for performing deep analyses of past transactions, contract states, or balances. With this feature, developers can build applications that are not only data-rich but also comprehensive. + Infura can leverage DIN to provide access to archive data that may not be natively supported. - **Expansion APIs** - - [Access Infura's multi-chain Gas API](reference/gas-api/api-reference/index.md). Use the Gas API used by the MetaMask wallet to analyze and - optimize gas costs on EIP-1559 compatible chains. + [Access Infura's multichain Gas API](reference/gas-api/api-reference/index.md). Use the Gas API used by the MetaMask wallet to analyze and optimize gas costs on EIP-1559 compatible chains. diff --git a/services/reference/_partials/_eth_accounts-description.mdx b/services/reference/_partials/_eth_accounts-description.mdx index ff6f25b9d14..081a2c38adb 100644 --- a/services/reference/_partials/_eth_accounts-description.mdx +++ b/services/reference/_partials/_eth_accounts-description.mdx @@ -1 +1,3 @@ -Returns a list of addresses owned by client. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns a list of addresses owned by the client. diff --git a/services/reference/_partials/_eth_accounts-example.mdx b/services/reference/_partials/_eth_accounts-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_accounts-example.mdx +++ b/services/reference/_partials/_eth_accounts-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_accounts-request.mdx b/services/reference/_partials/_eth_accounts-request.mdx index 94bde24fd64..88216238625 100644 --- a/services/reference/_partials/_eth_accounts-request.mdx +++ b/services/reference/_partials/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_accounts-response.mdx b/services/reference/_partials/_eth_accounts-response.mdx index 8c3bf0d6eb5..3f31f5a3043 100644 --- a/services/reference/_partials/_eth_accounts-response.mdx +++ b/services/reference/_partials/_eth_accounts-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_accounts-returns.mdx b/services/reference/_partials/_eth_accounts-returns.mdx index 074c1db61b5..c32fb6e670b 100644 --- a/services/reference/_partials/_eth_accounts-returns.mdx +++ b/services/reference/_partials/_eth_accounts-returns.mdx @@ -1,5 +1,5 @@ An array of hexadecimals as strings representing the addresses owned by the client. :::caution Infura will not return any accounts -While this JSON-RPC method is supported by Infura, it will _not_ return any accounts as Infura does not support "unlocking" accounts. Instead, users should send pre-signed raw transactions using [`eth_sendRawTransaction`](../ethereum/json-rpc-methods/eth_sendrawtransaction.mdx). +While this JSON-RPC method is supported by Infura, it will _not_ return any accounts as Infura does not support "unlocking" accounts. Instead, users should send pre-signed raw transactions using `eth_sendRawTransaction`. ::: diff --git a/services/reference/_partials/_eth_blobbasefee-description.mdx b/services/reference/_partials/_eth_blobbasefee-description.mdx index 507022cb163..0d78c6d96eb 100644 --- a/services/reference/_partials/_eth_blobbasefee-description.mdx +++ b/services/reference/_partials/_eth_blobbasefee-description.mdx @@ -1 +1,3 @@ -Returns the expected base fee for blobs in the next block. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the expected base fee for blobs in the next block. diff --git a/services/reference/_partials/_eth_blobbasefee-example.mdx b/services/reference/_partials/_eth_blobbasefee-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_blobbasefee-example.mdx +++ b/services/reference/_partials/_eth_blobbasefee-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_blobbasefee-request.mdx b/services/reference/_partials/_eth_blobbasefee-request.mdx index b46ff03d4f0..8bf4125c972 100644 --- a/services/reference/_partials/_eth_blobbasefee-request.mdx +++ b/services/reference/_partials/_eth_blobbasefee-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_blobbasefee-response.mdx b/services/reference/_partials/_eth_blobbasefee-response.mdx index 555cde4f524..7123aa2fd16 100644 --- a/services/reference/_partials/_eth_blobbasefee-response.mdx +++ b/services/reference/_partials/_eth_blobbasefee-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_blocknumber-description.mdx b/services/reference/_partials/_eth_blocknumber-description.mdx index 43b963a7a1a..08f0044e51f 100644 --- a/services/reference/_partials/_eth_blocknumber-description.mdx +++ b/services/reference/_partials/_eth_blocknumber-description.mdx @@ -1 +1,3 @@ -Returns the current latest block number. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the current latest block number. diff --git a/services/reference/_partials/_eth_blocknumber-example.mdx b/services/reference/_partials/_eth_blocknumber-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_blocknumber-example.mdx +++ b/services/reference/_partials/_eth_blocknumber-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_blocknumber-request.mdx b/services/reference/_partials/_eth_blocknumber-request.mdx index 1da2ef2f824..12a080bf0be 100644 --- a/services/reference/_partials/_eth_blocknumber-request.mdx +++ b/services/reference/_partials/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params":[], "id": 1}' +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' ``` diff --git a/services/reference/_partials/_eth_blocknumber-response.mdx b/services/reference/_partials/_eth_blocknumber-response.mdx index 8dfeafd3592..8869c523b48 100644 --- a/services/reference/_partials/_eth_blocknumber-response.mdx +++ b/services/reference/_partials/_eth_blocknumber-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_call-description.mdx b/services/reference/_partials/_eth_call-description.mdx index 68a9b0f5cbc..113b73a41e1 100644 --- a/services/reference/_partials/_eth_call-description.mdx +++ b/services/reference/_partials/_eth_call-description.mdx @@ -1,8 +1,10 @@ -Executes a new message call immediately without creating a transaction on the blockchain. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Executes a new message call immediately without creating a transaction on the blockchain. :::warning Gas parameter is capped -To prevent API abuse, the `gas` parameter in [`eth_estimateGas`](../ethereum/json-rpc-methods/eth_estimategas.mdx) and -this [`eth_call`](../ethereum/json-rpc-methods/eth_call.mdx) method is capped at 10x (1000%) the current block gas limit. +To prevent API abuse, the `gas` parameter in `eth_estimateGas` and +this `eth_call` method is capped at 10x (1000%) the current block gas limit. ::: diff --git a/services/reference/_partials/_eth_call-example.mdx b/services/reference/_partials/_eth_call-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_call-example.mdx +++ b/services/reference/_partials/_eth_call-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_call-parameters.mdx b/services/reference/_partials/_eth_call-parameters.mdx index 5ed3c621913..2dfdbeef8b4 100644 --- a/services/reference/_partials/_eth_call-parameters.mdx +++ b/services/reference/_partials/_eth_call-parameters.mdx @@ -1,9 +1,10 @@ -- `from`: 20 bytes [_Required_] Address the transaction is sent from. -- `to`: 20 bytes - Address the transaction is directed to. -- `gas`: Hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero gas, but this parameter may be needed by some executions. -- `gasPrice`: Hexadecimal value of the `gasPrice` used for each paid gas. -- `maxPriorityFeePerGas`: Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `value`: Hexadecimal of the value sent with this transaction. -- `data`: Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). +- TRANSACTION CALL OBJECT [_Required_] + - `from`: 20 bytes [_Required_] Address the transaction is sent from. + - `to`: 20 bytes - Address the transaction is directed to. + - `gas`: Hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero gas, but this parameter may be needed by some executions. + - `gasPrice`: Hexadecimal value of the `gasPrice` used for each paid gas. + - `maxPriorityFeePerGas`: Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). + - `maxFeePerGas`: Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). + - `value`: Hexadecimal of the value sent with this transaction. + - `data`: Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). - `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). diff --git a/services/reference/_partials/_eth_call-request.mdx b/services/reference/_partials/_eth_call-request.mdx index 5d6362d60d3..4fa7bda3e15 100644 --- a/services/reference/_partials/_eth_call-request.mdx +++ b/services/reference/_partials/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_call-response.mdx b/services/reference/_partials/_eth_call-response.mdx index 2b881d7a6a2..0dd098d89d8 100644 --- a/services/reference/_partials/_eth_call-response.mdx +++ b/services/reference/_partials/_eth_call-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_callmany-description.mdx b/services/reference/_partials/_eth_callmany-description.mdx new file mode 100644 index 00000000000..41e773486e5 --- /dev/null +++ b/services/reference/_partials/_eth_callmany-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Executes a list of transaction bundles without creating transactions on the blockchain. This is useful for simulating transactions and reviewing outcomes before submitting them. diff --git a/services/reference/_partials/_eth_callmany-example.mdx b/services/reference/_partials/_eth_callmany-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/_eth_callmany-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_callmany-parameters.mdx b/services/reference/_partials/_eth_callmany-parameters.mdx new file mode 100644 index 00000000000..f5c6fbf9633 --- /dev/null +++ b/services/reference/_partials/_eth_callmany-parameters.mdx @@ -0,0 +1,8 @@ +- `bundles`: [_Required_] Array of bundles to simulate. Each bundle includes: + - `transactions`: Array of call objects using the same fields as `eth_call`. + - `blockOverride`: [_Optional_] Block header overrides (for example, block number, hash, coinbase, timestamp, difficulty, gas limit, base fee). +- `simulationContext`: [_Required_] Object describing where to simulate: + - `blockNumber`: Block number (hex quantity) or a tag (`latest`, `pending`, `safe`, `finalized`, `earliest`), or a block hash. + - `transactionIndex`: Index within the block to simulate against. +- `stateOverrides`: [_Optional_] Object mapping addresses to overrides (`balance`, `nonce`, `code`, `state`, `stateDiff`). +- `timeout`: [_Optional_] Max simulation time in milliseconds. Defaults to 5000. diff --git a/services/reference/_partials/_eth_callmany-response.mdx b/services/reference/_partials/_eth_callmany-response.mdx new file mode 100644 index 00000000000..b35f6be14a9 --- /dev/null +++ b/services/reference/_partials/_eth_callmany-response.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + [ + { + "value": "0x" + } + ] + ] +} +``` + + + diff --git a/services/reference/_partials/_eth_callmany-returns.mdx b/services/reference/_partials/_eth_callmany-returns.mdx new file mode 100644 index 00000000000..a959375dcab --- /dev/null +++ b/services/reference/_partials/_eth_callmany-returns.mdx @@ -0,0 +1,4 @@ +A list of bundles. Each bundle returns an array with one result per transaction. Each result contains either: + +- `value`: The return value when the call succeeds. +- `error`: An error object when the call reverts, including `code`, `message`, and optional `data`. diff --git a/services/reference/_partials/_eth_chainid-description.mdx b/services/reference/_partials/_eth_chainid-description.mdx index 29620428245..2ec25686cf6 100644 --- a/services/reference/_partials/_eth_chainid-description.mdx +++ b/services/reference/_partials/_eth_chainid-description.mdx @@ -1 +1,4 @@ -Returns the currently configured chain ID, a value used in replay-protected transaction signing as introduced by [EIP-155](https://eips.ethereum.org/EIPS/eip-155). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the currently configured chain ID, a value used in replay-protected transaction signing as introduced +by [EIP-155](https://eips.ethereum.org/EIPS/eip-155). diff --git a/services/reference/_partials/_eth_chainid-example.mdx b/services/reference/_partials/_eth_chainid-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_chainid-example.mdx +++ b/services/reference/_partials/_eth_chainid-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_chainid-request.mdx b/services/reference/_partials/_eth_chainid-request.mdx index 45c72cce7f4..268cf8b4875 100644 --- a/services/reference/_partials/_eth_chainid-request.mdx +++ b/services/reference/_partials/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_chainid-response.mdx b/services/reference/_partials/_eth_chainid-response.mdx index 555cde4f524..7123aa2fd16 100644 --- a/services/reference/_partials/_eth_chainid-response.mdx +++ b/services/reference/_partials/_eth_chainid-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_coinbase-description.mdx b/services/reference/_partials/_eth_coinbase-description.mdx deleted file mode 100644 index d3a7b0bd207..00000000000 --- a/services/reference/_partials/_eth_coinbase-description.mdx +++ /dev/null @@ -1,7 +0,0 @@ -:::warning Not supported - -The `eth_coinbase` JSON-RPC method is not supported by Infura. - -::: - -Returns the client coinbase address. The coinbase address is the account to pay mining rewards to. For more information about the method refer to the [official Ethereum wiki](https://eth.wiki/json-rpc/API#eth_coinbase). diff --git a/services/reference/_partials/_eth_createaccesslist-description.mdx b/services/reference/_partials/_eth_createaccesslist-description.mdx index 9f2c288ee7b..ad068423174 100644 --- a/services/reference/_partials/_eth_createaccesslist-description.mdx +++ b/services/reference/_partials/_eth_createaccesslist-description.mdx @@ -1,6 +1,11 @@ -Creates an [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) access list that you can include in a [transaction](../../concepts/transaction-types.md). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' -Use this method to optimize your smart contract interactions. Access lists are a part of Ethereum's EIP-2930, which aims to improve the network's scalability and reduce gas costs by specifying an explicit list of addresses and storage keys that a transaction intends to access. +Creates an [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) access list that you can include in a +[transaction](../../concepts/transaction-types.md). + +Use this method to optimize your smart contract interactions. Access lists are a part of Ethereum's +EIP-2930, which aims to improve the network's scalability and reduce gas costs by specifying an explicit +list of addresses and storage keys that a transaction intends to access. :::tip Optimizing Ethereum Transactions diff --git a/services/reference/_partials/_eth_createaccesslist-example.mdx b/services/reference/_partials/_eth_createaccesslist-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_createaccesslist-example.mdx +++ b/services/reference/_partials/_eth_createaccesslist-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_createaccesslist-parameters.mdx b/services/reference/_partials/_eth_createaccesslist-parameters.mdx index b3351d6c158..497eee03fe0 100644 --- a/services/reference/_partials/_eth_createaccesslist-parameters.mdx +++ b/services/reference/_partials/_eth_createaccesslist-parameters.mdx @@ -2,9 +2,9 @@ - `from`: _[optional]_ 20 bytes. The address of the sender. - `to`: 20 bytes. Address the transaction is directed to. - `gas`: _[optional]_ Hexadecimal value of the gas provided for the transaction execution. - - `gasPrice`: _[optional]_ Hexadecimal value gas price, in Wei, provided by the sender. The default is `0`. Used only in non-EIP-1559 transactions. - - `maxPriorityFeePerGas`: _[optional]_ Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#access-list-transactions). If used, must specify `maxFeePerGas`. - - `maxFeePerGas`: _[optional]_ Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). If used, must specify `maxPriorityFeePerGas`. - - `value`: _[optional]_ Hexadecimal of the value transferred, in Wei. + - `gasPrice`: _[optional]_ Hexadecimal value gas price, in wei, provided by the sender. The default is `0`. Used only in non-EIP-1559 transactions. + - `maxPriorityFeePerGas`: _[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#access-list-transactions). If used, must specify `maxFeePerGas`. + - `maxFeePerGas`: _[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). If used, must specify `maxPriorityFeePerGas`. + - `value`: _[optional]_ Hexadecimal of the value transferred, in wei. - `data`: _[optional]_ Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). - `block number` or `block hash`: _[required]_ A string representing a block number, block hash, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). diff --git a/services/reference/_partials/_eth_createaccesslist-request.mdx b/services/reference/_partials/_eth_createaccesslist-request.mdx index a45f39100ff..124fa25ecb1 100644 --- a/services/reference/_partials/_eth_createaccesslist-request.mdx +++ b/services/reference/_partials/_eth_createaccesslist-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_createaccesslist-response.mdx b/services/reference/_partials/_eth_createaccesslist-response.mdx index 51678601849..37d60c5f5c4 100644 --- a/services/reference/_partials/_eth_createaccesslist-response.mdx +++ b/services/reference/_partials/_eth_createaccesslist-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_estimategas-description.mdx b/services/reference/_partials/_eth_estimategas-description.mdx index d1283f80138..ccf4fa7eda8 100644 --- a/services/reference/_partials/_eth_estimategas-description.mdx +++ b/services/reference/_partials/_eth_estimategas-description.mdx @@ -1,6 +1,11 @@ -Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction will not be added to the blockchain. Note that the estimate may be significantly more than the amount of gas actually used by the transaction, for a variety of reasons including EVM mechanics and node performance. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. +The transaction will not be added to the blockchain. Note that the estimate may be significantly more +than the amount of gas actually used by the transaction, for a variety of reasons including EVM mechanics +and node performance. :::warning Gas parameter is capped -To prevent abuse of the API, the `gas` parameter in this `eth_estimateGas` method and in [`eth_call`](../ethereum/json-rpc-methods/eth_call.mdx) is capped at 10x (1000%) the current block gas limit. You can recreate this behavior in your local test environment (besu, geth, or other client) via the [`rpc.gascap`](https://geth.ethereum.org/docs/fundamentals/command-line-options#commands) command-line option. +To prevent abuse of the API, the `gas` parameter in this `eth_estimateGas` method and in [`eth_call`](../ethereum/json-rpc-methods/eth_call.mdx) is capped at 10x (1000%) the current block gas limit. You can recreate this behavior in your local test environment (Besu, geth, or other client) using the [`rpc.gascap`](https://geth.ethereum.org/docs/fundamentals/command-line-options#commands) command line option. ::: diff --git a/services/reference/_partials/_eth_estimategas-example.mdx b/services/reference/_partials/_eth_estimategas-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_estimategas-example.mdx +++ b/services/reference/_partials/_eth_estimategas-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_estimategas-parameters.mdx b/services/reference/_partials/_eth_estimategas-parameters.mdx index 830f7d58928..d3d1e6c0617 100644 --- a/services/reference/_partials/_eth_estimategas-parameters.mdx +++ b/services/reference/_partials/_eth_estimategas-parameters.mdx @@ -4,9 +4,9 @@ - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `eth_estimateGas` consumes zero gas, but this parameter may be needed by some executions. - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. - - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. + - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. + - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the diff --git a/services/reference/_partials/_eth_estimategas-request.mdx b/services/reference/_partials/_eth_estimategas-request.mdx index f4bb023a5cc..e1d934d0239 100644 --- a/services/reference/_partials/_eth_estimategas-request.mdx +++ b/services/reference/_partials/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_estimategas-response.mdx b/services/reference/_partials/_eth_estimategas-response.mdx index 8a392da5902..1a945386994 100644 --- a/services/reference/_partials/_eth_estimategas-response.mdx +++ b/services/reference/_partials/_eth_estimategas-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_feehistory-description.mdx b/services/reference/_partials/_eth_feehistory-description.mdx index 2baf4c89646..0446fe0c1d4 100644 --- a/services/reference/_partials/_eth_feehistory-description.mdx +++ b/services/reference/_partials/_eth_feehistory-description.mdx @@ -1 +1,3 @@ -Returns historical gas information, allowing you to track trends over time. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns historical gas information, allowing you to track trends over time. diff --git a/services/reference/_partials/_eth_feehistory-example.mdx b/services/reference/_partials/_eth_feehistory-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_feehistory-example.mdx +++ b/services/reference/_partials/_eth_feehistory-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_feehistory-request.mdx b/services/reference/_partials/_eth_feehistory-request.mdx index dd7b12f272b..7f01c808b80 100644 --- a/services/reference/_partials/_eth_feehistory-request.mdx +++ b/services/reference/_partials/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_feehistory-response.mdx b/services/reference/_partials/_eth_feehistory-response.mdx index c3d4e13e64b..f77de72e23b 100644 --- a/services/reference/_partials/_eth_feehistory-response.mdx +++ b/services/reference/_partials/_eth_feehistory-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gasprice-description.mdx b/services/reference/_partials/_eth_gasprice-description.mdx index 9db52abaf8b..9c20d7c5128 100644 --- a/services/reference/_partials/_eth_gasprice-description.mdx +++ b/services/reference/_partials/_eth_gasprice-description.mdx @@ -1 +1,3 @@ -Returns the current gas price in wei. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the current gas price in wei. diff --git a/services/reference/_partials/_eth_gasprice-example.mdx b/services/reference/_partials/_eth_gasprice-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gasprice-example.mdx +++ b/services/reference/_partials/_eth_gasprice-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gasprice-request.mdx b/services/reference/_partials/_eth_gasprice-request.mdx index 732c453b5eb..d5bdba3f9b5 100644 --- a/services/reference/_partials/_eth_gasprice-request.mdx +++ b/services/reference/_partials/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gasprice-response.mdx b/services/reference/_partials/_eth_gasprice-response.mdx index d41980c551d..c4c2faae79a 100644 --- a/services/reference/_partials/_eth_gasprice-response.mdx +++ b/services/reference/_partials/_eth_gasprice-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getaccount-description.mdx b/services/reference/_partials/_eth_getaccount-description.mdx new file mode 100644 index 00000000000..9f9e2fa590a --- /dev/null +++ b/services/reference/_partials/_eth_getaccount-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns account details (code hash, storage root, balance, nonce) for a given address at a specified block. diff --git a/services/reference/_partials/_eth_getaccount-example.mdx b/services/reference/_partials/_eth_getaccount-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/_eth_getaccount-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getaccount-parameters.mdx b/services/reference/_partials/_eth_getaccount-parameters.mdx new file mode 100644 index 00000000000..78c48d027f6 --- /dev/null +++ b/services/reference/_partials/_eth_getaccount-parameters.mdx @@ -0,0 +1,2 @@ +- `address`: [_Required_] The account address to query. +- `blockReference`: [_Required_] Block number (hex quantity) or a tag (`latest`, `pending`, `safe`, `finalized`, `earliest`). diff --git a/services/reference/_partials/_eth_getaccount-response.mdx b/services/reference/_partials/_eth_getaccount-response.mdx new file mode 100644 index 00000000000..58b350cce17 --- /dev/null +++ b/services/reference/_partials/_eth_getaccount-response.mdx @@ -0,0 +1,21 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storageRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "balance": "0x0", + "nonce": "0x2c160f5" + } +} +``` + + + diff --git a/services/reference/_partials/_eth_getaccount-returns.mdx b/services/reference/_partials/_eth_getaccount-returns.mdx new file mode 100644 index 00000000000..c06a3d33832 --- /dev/null +++ b/services/reference/_partials/_eth_getaccount-returns.mdx @@ -0,0 +1,6 @@ +Account fields at the requested block: + +- `codeHash`: 32-byte hash of the account code. +- `storageRoot`: Storage trie root for the account. +- `balance`: Account balance in wei (hex quantity). +- `nonce`: Transaction count for the account (hex quantity). diff --git a/services/reference/_partials/_eth_getbalance-description.mdx b/services/reference/_partials/_eth_getbalance-description.mdx index 0645c40ee52..09021ce09fb 100644 --- a/services/reference/_partials/_eth_getbalance-description.mdx +++ b/services/reference/_partials/_eth_getbalance-description.mdx @@ -1 +1,3 @@ -Returns the balance of the account of a given address. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the balance of the account of a given address. diff --git a/services/reference/_partials/_eth_getbalance-example.mdx b/services/reference/_partials/_eth_getbalance-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getbalance-example.mdx +++ b/services/reference/_partials/_eth_getbalance-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getbalance-request.mdx b/services/reference/_partials/_eth_getbalance-request.mdx index 46e53d9ea8e..80ec118b464 100644 --- a/services/reference/_partials/_eth_getbalance-request.mdx +++ b/services/reference/_partials/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getbalance-response.mdx b/services/reference/_partials/_eth_getbalance-response.mdx index 91c37e7eeb0..188826d3281 100644 --- a/services/reference/_partials/_eth_getbalance-response.mdx +++ b/services/reference/_partials/_eth_getbalance-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getblockbyhash-description.mdx b/services/reference/_partials/_eth_getblockbyhash-description.mdx index dd90a078981..34ba44930f0 100644 --- a/services/reference/_partials/_eth_getblockbyhash-description.mdx +++ b/services/reference/_partials/_eth_getblockbyhash-description.mdx @@ -1 +1,3 @@ -Returns information about a block whose hash is in the request. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about a block given its block hash. diff --git a/services/reference/_partials/_eth_getblockbyhash-example.mdx b/services/reference/_partials/_eth_getblockbyhash-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getblockbyhash-example.mdx +++ b/services/reference/_partials/_eth_getblockbyhash-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getblockbyhash-request.mdx b/services/reference/_partials/_eth_getblockbyhash-request.mdx index 29133489479..d882a97fdee 100644 --- a/services/reference/_partials/_eth_getblockbyhash-request.mdx +++ b/services/reference/_partials/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getblockbyhash-response.mdx b/services/reference/_partials/_eth_getblockbyhash-response.mdx index 40faaca5718..84f947fb6c7 100644 --- a/services/reference/_partials/_eth_getblockbyhash-response.mdx +++ b/services/reference/_partials/_eth_getblockbyhash-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getblockbynumber-description.mdx b/services/reference/_partials/_eth_getblockbynumber-description.mdx index e1404c8e475..7fb721b52f9 100644 --- a/services/reference/_partials/_eth_getblockbynumber-description.mdx +++ b/services/reference/_partials/_eth_getblockbynumber-description.mdx @@ -1 +1,3 @@ -Returns information about a block by hash. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about a block given its block number. diff --git a/services/reference/_partials/_eth_getblockbynumber-example.mdx b/services/reference/_partials/_eth_getblockbynumber-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getblockbynumber-example.mdx +++ b/services/reference/_partials/_eth_getblockbynumber-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getblockbynumber-request.mdx b/services/reference/_partials/_eth_getblockbynumber-request.mdx index 5cf511390b2..9605b28379b 100644 --- a/services/reference/_partials/_eth_getblockbynumber-request.mdx +++ b/services/reference/_partials/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getblockbynumber-response.mdx b/services/reference/_partials/_eth_getblockbynumber-response.mdx index d3517720e33..b69e6f91100 100644 --- a/services/reference/_partials/_eth_getblockbynumber-response.mdx +++ b/services/reference/_partials/_eth_getblockbynumber-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getblockreceipts-description.mdx b/services/reference/_partials/_eth_getblockreceipts-description.mdx index ed1ea04d407..b7de4b6d9dc 100644 --- a/services/reference/_partials/_eth_getblockreceipts-description.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-description.mdx @@ -1 +1,4 @@ -Returns all transaction receipts for a given block, the amount of gas used, and any event logs that might have been produced by a smart contract during the transaction. \ No newline at end of file +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns all transaction receipts for a given block, the amount of gas used, and any event logs that +might have been produced by a smart contract during the transaction. diff --git a/services/reference/_partials/_eth_getblockreceipts-example.mdx b/services/reference/_partials/_eth_getblockreceipts-example.mdx index 18b78c40076..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getblockreceipts-example.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). \ No newline at end of file +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getblockreceipts-parameters.mdx b/services/reference/_partials/_eth_getblockreceipts-parameters.mdx index a7e9f9b68ab..95dcc010355 100644 --- a/services/reference/_partials/_eth_getblockreceipts-parameters.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-parameters.mdx @@ -1,11 +1,12 @@ -`blockNumber`:[_Required_] Hexadecimal or decimal integer representing a block number, or one of - the string tags: - - `latest` - - `earliest` - - `pending` - - `finalized` - - `safe` +`blockNumber`: [_Required_] Hexadecimal or decimal integer representing a block number, or one of +the string tags: - :::note - `pending` returns the same data as `latest`. - ::: \ No newline at end of file +- `latest` +- `earliest` +- `pending` +- `finalized` +- `safe` + +:::note +`pending` returns the same data as `latest`. +::: diff --git a/services/reference/_partials/_eth_getblockreceipts-request.mdx b/services/reference/_partials/_eth_getblockreceipts-request.mdx index 4d5151e14c4..cf53cbec5db 100644 --- a/services/reference/_partials/_eth_getblockreceipts-request.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; - import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "me ``` - \ No newline at end of file + diff --git a/services/reference/_partials/_eth_getblockreceipts-response.mdx b/services/reference/_partials/_eth_getblockreceipts-response.mdx index 080921cfe85..ad6c85b7bd8 100644 --- a/services/reference/_partials/_eth_getblockreceipts-response.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -63,4 +63,4 @@ import TabItem from "@theme/TabItem"; ``` - \ No newline at end of file + diff --git a/services/reference/_partials/_eth_getblockreceipts-returns.mdx b/services/reference/_partials/_eth_getblockreceipts-returns.mdx index 300e3076413..3a952e217f1 100644 --- a/services/reference/_partials/_eth_getblockreceipts-returns.mdx +++ b/services/reference/_partials/_eth_getblockreceipts-returns.mdx @@ -1 +1 @@ -`result`: _object_ Block object or `null` when there is no corresponding block. \ No newline at end of file +`result`: _object_ Block object or `null` when there is no corresponding block. diff --git a/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx b/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx index 5e2186c497f..96daa664aea 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx @@ -1 +1,3 @@ -Returns the number of transactions in the block with the given block hash. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of transactions in the block with the given block hash. diff --git a/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx b/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx index e9790fc3210..28fbbc9f833 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx b/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx index affe48f97f8..228bd2ba9b5 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx b/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx index a476d1ac354..353c195f302 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx @@ -1 +1,3 @@ -Returns the number of transactions in the block with the given block number. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of transactions in the block with the given block number. diff --git a/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx b/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx index 7830e1026a4..631bbd26e16 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx b/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx index df720d61927..f1b973c8fdb 100644 --- a/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx +++ b/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getcode-description.mdx b/services/reference/_partials/_eth_getcode-description.mdx index 6693110dd42..33697128f24 100644 --- a/services/reference/_partials/_eth_getcode-description.mdx +++ b/services/reference/_partials/_eth_getcode-description.mdx @@ -1 +1,3 @@ -Returns the compiled byte code of a smart contract, if any, at a given address. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the compiled byte code of a smart contract, if any, at a given address. diff --git a/services/reference/_partials/_eth_getcode-example.mdx b/services/reference/_partials/_eth_getcode-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getcode-example.mdx +++ b/services/reference/_partials/_eth_getcode-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getcode-request.mdx b/services/reference/_partials/_eth_getcode-request.mdx index a1184ae9702..7ee97467ecb 100644 --- a/services/reference/_partials/_eth_getcode-request.mdx +++ b/services/reference/_partials/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getcode-response.mdx b/services/reference/_partials/_eth_getcode-response.mdx index 617c6f43982..ca75da43481 100644 --- a/services/reference/_partials/_eth_getcode-response.mdx +++ b/services/reference/_partials/_eth_getcode-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getlogs-description.mdx b/services/reference/_partials/_eth_getlogs-description.mdx index 42d64e88da7..d167841b174 100644 --- a/services/reference/_partials/_eth_getlogs-description.mdx +++ b/services/reference/_partials/_eth_getlogs-description.mdx @@ -1 +1,3 @@ -Returns an array of all the logs matching the given filter object. See also the below [Constraints](#constraints) section. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns an array of all the logs matching the given filter object. See also the below [Constraints](#constraints) section. diff --git a/services/reference/_partials/_eth_getlogs-example.mdx b/services/reference/_partials/_eth_getlogs-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getlogs-example.mdx +++ b/services/reference/_partials/_eth_getlogs-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getlogs-parameters.mdx b/services/reference/_partials/_eth_getlogs-parameters.mdx index 8d3fe0abe0c..bbfbd4c613b 100644 --- a/services/reference/_partials/_eth_getlogs-parameters.mdx +++ b/services/reference/_partials/_eth_getlogs-parameters.mdx @@ -4,4 +4,4 @@ A filter object containing the following: - `fromBlock`: _[optional, default is "latest"]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - `toBlock`: _[optional, default is "latest"]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - `topics`: _[optional]_ Array of 32 bytes DATA topics. Topics are order-dependent. -- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. +- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. diff --git a/services/reference/_partials/_eth_getlogs-request.mdx b/services/reference/_partials/_eth_getlogs-request.mdx index 4e8c2bbd32a..46e8938fcf0 100644 --- a/services/reference/_partials/_eth_getlogs-request.mdx +++ b/services/reference/_partials/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getlogs-response.mdx b/services/reference/_partials/_eth_getlogs-response.mdx index 7a4d89167eb..95130aebbf2 100644 --- a/services/reference/_partials/_eth_getlogs-response.mdx +++ b/services/reference/_partials/_eth_getlogs-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -16,9 +16,7 @@ import TabItem from "@theme/TabItem" "data": "0x0000000000000000000000003e3310720058c51f0de456e273c626cdd35065700000000000000000000000000000000000000000000000000000000000003185000000000000000000000000000000000000000000000000000000000000318200000000000000000000000000000000000000000000000000000000005c2a23", "logIndex": "0x1d", "removed": false, - "topics": [ - "0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80" - ], + "topics": ["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"], "transactionHash": "0x3dc91b98249fa9f2c5c37486a2427a3a7825be240c1c84961dfb3063d9c04d50", "transactionIndex": "0x1d" }, @@ -29,9 +27,7 @@ import TabItem from "@theme/TabItem" "data": "0x00000000000000000000000077ea137625739598666ded665953d26b3d8e374400000000000000000000000000000000000000000000000000000000000749ff00000000000000000000000000000000000000000000000000000000000a749d00000000000000000000000000000000000000000000000000000000005c2a0f", "logIndex": "0x57", "removed": false, - "topics": [ - "0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80" - ], + "topics": ["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"], "transactionHash": "0x788b1442414cb9c9a36dba2abe250763161a6f6395788a2e808f1b34e92beec1", "transactionIndex": "0x54" } diff --git a/services/reference/_partials/_eth_getlogs-returns.mdx b/services/reference/_partials/_eth_getlogs-returns.mdx index 5c8fd4d2ec7..c1826209e18 100644 --- a/services/reference/_partials/_eth_getlogs-returns.mdx +++ b/services/reference/_partials/_eth_getlogs-returns.mdx @@ -1,4 +1,4 @@ -`log objects`: An array of log objects, or an empty array if nothing has changed since last poll. Log objects contain the following keys and their values: +`log objects`: An array of log objects, or an empty array if nothing has changed since the last poll. Log objects contain the following keys and their values: - `removed`: (boolean) `true` when the log was removed, due to a chain reorganization. `false` if it's a valid log. - `logIndex`: Hexadecimal of the log index position in the block. `Null` when it is a pending log. @@ -8,4 +8,4 @@ - `blockNumber`: Block number where this log was in. `Null` when it is a pending log. - `address`: 20 bytes. Address from which this log originated. - `data`: Contains one or more 32-bytes non-indexed arguments of the log. -- `topics`: An array of 0 to 4 indexed log arguments, each 32 bytes. In solidity the first topic is the hash of the signature of the event (e.g. Deposit(address,bytes32,uint256)), except when you declared the event with the anonymous specifier. +- `topics`: An array of 0 to 4 indexed log arguments, each 32 bytes. In solidity the first topic is the hash of the signature of the event (for example, `Deposit(address,bytes32,uint256)`), except when you declared the event with the anonymous specifier. diff --git a/services/reference/_partials/_eth_getproof-description.mdx b/services/reference/_partials/_eth_getproof-description.mdx index 30ecc67cf10..06aabccc164 100644 --- a/services/reference/_partials/_eth_getproof-description.mdx +++ b/services/reference/_partials/_eth_getproof-description.mdx @@ -1 +1,3 @@ -Returns the account and storage values, including the Merkle proof, of the specified account. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the account and storage values, including the Merkle proof, of the specified account. diff --git a/services/reference/_partials/_eth_getproof-example.mdx b/services/reference/_partials/_eth_getproof-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getproof-example.mdx +++ b/services/reference/_partials/_eth_getproof-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getproof-request.mdx b/services/reference/_partials/_eth_getproof-request.mdx index 89fb9fb2a0c..1ab4d550207 100644 --- a/services/reference/_partials/_eth_getproof-request.mdx +++ b/services/reference/_partials/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getproof-response.mdx b/services/reference/_partials/_eth_getproof-response.mdx index 93e16bd59b5..df289c3a6f5 100644 --- a/services/reference/_partials/_eth_getproof-response.mdx +++ b/services/reference/_partials/_eth_getproof-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getrawtransactionbyhash-description.mdx b/services/reference/_partials/_eth_getrawtransactionbyhash-description.mdx new file mode 100644 index 00000000000..ec9a8c04176 --- /dev/null +++ b/services/reference/_partials/_eth_getrawtransactionbyhash-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the raw RLP-encoded transaction data for a transaction by its hash. diff --git a/services/reference/_partials/_eth_getrawtransactionbyhash-example.mdx b/services/reference/_partials/_eth_getrawtransactionbyhash-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/_eth_getrawtransactionbyhash-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getrawtransactionbyhash-parameters.mdx b/services/reference/_partials/_eth_getrawtransactionbyhash-parameters.mdx new file mode 100644 index 00000000000..82f814edd5f --- /dev/null +++ b/services/reference/_partials/_eth_getrawtransactionbyhash-parameters.mdx @@ -0,0 +1 @@ +- `transaction hash`: [_Required_] The hash of the transaction to retrieve. diff --git a/services/reference/_partials/_eth_getrawtransactionbyhash-response.mdx b/services/reference/_partials/_eth_getrawtransactionbyhash-response.mdx new file mode 100644 index 00000000000..50d037f6073 --- /dev/null +++ b/services/reference/_partials/_eth_getrawtransactionbyhash-response.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x02f86c0180843b9aca008502540be4008252089400000000000000000000000000000000000000008080c001a0b7c3a2f1a9f0e2b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a06c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d" +} +``` + + + diff --git a/services/reference/_partials/_eth_getrawtransactionbyhash-returns.mdx b/services/reference/_partials/_eth_getrawtransactionbyhash-returns.mdx new file mode 100644 index 00000000000..30f8f9dce28 --- /dev/null +++ b/services/reference/_partials/_eth_getrawtransactionbyhash-returns.mdx @@ -0,0 +1 @@ +The raw RLP-encoded transaction data as a hexadecimal string, or `null` if the transaction is not found. diff --git a/services/reference/_partials/_eth_getstorageat-description.mdx b/services/reference/_partials/_eth_getstorageat-description.mdx index faa3175c24a..9dbf292fdd3 100644 --- a/services/reference/_partials/_eth_getstorageat-description.mdx +++ b/services/reference/_partials/_eth_getstorageat-description.mdx @@ -1 +1,3 @@ -Returns the value from a storage position at a given address. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the value from a storage position at a given address. diff --git a/services/reference/_partials/_eth_getstorageat-example.mdx b/services/reference/_partials/_eth_getstorageat-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getstorageat-example.mdx +++ b/services/reference/_partials/_eth_getstorageat-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getstorageat-request.mdx b/services/reference/_partials/_eth_getstorageat-request.mdx index 03db9181560..8011e74a1dd 100644 --- a/services/reference/_partials/_eth_getstorageat-request.mdx +++ b/services/reference/_partials/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getstorageat-response.mdx b/services/reference/_partials/_eth_getstorageat-response.mdx index 5dea70a45b9..693c8c029b0 100644 --- a/services/reference/_partials/_eth_getstorageat-response.mdx +++ b/services/reference/_partials/_eth_getstorageat-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -59,8 +59,8 @@ This means to retrieve the storage on `pos1["0x391694e7e0b0cce554cb130d723a9d274 ```js keccak( decodeHex( - "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + - "0000000000000000000000000000000000000000000000000000000000000001" + '000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298' + + '0000000000000000000000000000000000000000000000000000000000000001' ) ) ``` diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx index 60539c04659..633bad29dda 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx @@ -1 +1,3 @@ -Returns information about a transaction given block hash and transaction index position. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about a transaction given block hash and transaction index position. diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx index ef4ee949013..ce99c17a703 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx index d12c4e33a03..504b1b22cf8 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx index 3a1251cb9d5..37c129d9da2 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx index 4ee81f43641..f190d2e8d4e 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,6 +18,6 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. - `yParity`: [_optional_] Parity (`0x0` for even, `0x1` for odd) of the y-value of a [`secp256k1`](https://eips.ethereum.org/EIPS/eip-2098#:~:text=A%20secp256k1%20signature%20is%20made%20up%20of%203%20parameters%2C%20r%2C%20s%20and%20yParity.) signature. diff --git a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx index 2a42981b0e8..5372c276a47 100644 --- a/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,4 +18,4 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx index 6c7fc633fad..409ca73ac3a 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx @@ -1 +1,3 @@ -Returns information about a transaction given block number and transaction index position. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about a transaction given block number and transaction index position. diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx index b3bdfe150e5..b15a93ba7ff 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx index c8c75a55197..8d223189088 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx index 3a1251cb9d5..37c129d9da2 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx index 4ee81f43641..f190d2e8d4e 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,6 +18,6 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. - `yParity`: [_optional_] Parity (`0x0` for even, `0x1` for odd) of the y-value of a [`secp256k1`](https://eips.ethereum.org/EIPS/eip-2098#:~:text=A%20secp256k1%20signature%20is%20made%20up%20of%203%20parameters%2C%20r%2C%20s%20and%20yParity.) signature. diff --git a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx index 2a42981b0e8..5372c276a47 100644 --- a/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx +++ b/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,4 +18,4 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. diff --git a/services/reference/_partials/_eth_gettransactionbyhash-description.mdx b/services/reference/_partials/_eth_gettransactionbyhash-description.mdx index 7bf5c059817..0d8937214e0 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-description.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-description.mdx @@ -1 +1,3 @@ -Returns information about a transaction for a given hash. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about a transaction for a given hash. diff --git a/services/reference/_partials/_eth_gettransactionbyhash-example.mdx b/services/reference/_partials/_eth_gettransactionbyhash-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-example.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gettransactionbyhash-request.mdx b/services/reference/_partials/_eth_gettransactionbyhash-request.mdx index 27d08984b04..1678849a648 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx index ff807063072..8060be00521 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyhash-response.mdx b/services/reference/_partials/_eth_gettransactionbyhash-response.mdx index c7c760599b6..4101e9018d7 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-response.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx b/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx index 4ee81f43641..f190d2e8d4e 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,6 +18,6 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. - `yParity`: [_optional_] Parity (`0x0` for even, `0x1` for odd) of the y-value of a [`secp256k1`](https://eips.ethereum.org/EIPS/eip-2098#:~:text=A%20secp256k1%20signature%20is%20made%20up%20of%203%20parameters%2C%20r%2C%20s%20and%20yParity.) signature. diff --git a/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx b/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx index 2a42981b0e8..5372c276a47 100644 --- a/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx +++ b/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx @@ -6,11 +6,11 @@ A transaction object, or null when no transaction was found. The transaction obj - `chainID`: [_optional_] chain ID specifying the network. Returned only for [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `from`: 20 bytes. The address of the sender. - `gas`: Gas provided by the sender. -- `gasPrice`: Gas price provided by the sender in Wei. +- `gasPrice`: Gas price provided by the sender in wei. - `hash`: 32 bytes. The hash of the transaction. - `input`: The data sent along with the transaction. -- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: [_optional_] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: [_optional_] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../concepts/transaction-types.md#eip-1559-transactions). - `nonce`: The number of transactions made by the sender prior to this one. - `r`: 32 bytes. The ECDSA signature `r`. - `s`: 32 bytes. The ECDSA signature `s`. @@ -18,4 +18,4 @@ A transaction object, or null when no transaction was found. The transaction obj - `transactionIndex`: The transaction's index position in the block, in hexadecimal. `null` when it's pending. - `type`: The [transaction type](../../concepts/transaction-types.md). - `v`: The ECDSA recovery ID. -- `value`: The value transferred in Wei. +- `value`: The value transferred in wei. diff --git a/services/reference/_partials/_eth_gettransactioncount-description.mdx b/services/reference/_partials/_eth_gettransactioncount-description.mdx index 69535db32f5..8d1f499fa58 100644 --- a/services/reference/_partials/_eth_gettransactioncount-description.mdx +++ b/services/reference/_partials/_eth_gettransactioncount-description.mdx @@ -1 +1,3 @@ -Returns the number of transactions sent from an address. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of transactions sent from an address. diff --git a/services/reference/_partials/_eth_gettransactioncount-example.mdx b/services/reference/_partials/_eth_gettransactioncount-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gettransactioncount-example.mdx +++ b/services/reference/_partials/_eth_gettransactioncount-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gettransactioncount-request.mdx b/services/reference/_partials/_eth_gettransactioncount-request.mdx index d00689d3d7e..fa418dfd860 100644 --- a/services/reference/_partials/_eth_gettransactioncount-request.mdx +++ b/services/reference/_partials/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gettransactioncount-response.mdx b/services/reference/_partials/_eth_gettransactioncount-response.mdx index efe97251ecb..dd9f58b1f9d 100644 --- a/services/reference/_partials/_eth_gettransactioncount-response.mdx +++ b/services/reference/_partials/_eth_gettransactioncount-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_gettransactionreceipt-description.mdx b/services/reference/_partials/_eth_gettransactionreceipt-description.mdx index 90bf584c68a..ed7439809f6 100644 --- a/services/reference/_partials/_eth_gettransactionreceipt-description.mdx +++ b/services/reference/_partials/_eth_gettransactionreceipt-description.mdx @@ -1 +1,3 @@ -Returns the receipt of a transaction given transaction hash. Note that the receipt is not available for pending transactions. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the receipt of a transaction given transaction hash. Note that the receipt is not available for pending transactions. diff --git a/services/reference/_partials/_eth_gettransactionreceipt-example.mdx b/services/reference/_partials/_eth_gettransactionreceipt-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_gettransactionreceipt-example.mdx +++ b/services/reference/_partials/_eth_gettransactionreceipt-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_gettransactionreceipt-request.mdx b/services/reference/_partials/_eth_gettransactionreceipt-request.mdx index f5260b78147..b0db4997db6 100644 --- a/services/reference/_partials/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/_partials/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_gettransactionreceipt-response.mdx b/services/reference/_partials/_eth_gettransactionreceipt-response.mdx index 10c21725a46..59414aacdaf 100644 --- a/services/reference/_partials/_eth_gettransactionreceipt-response.mdx +++ b/services/reference/_partials/_eth_gettransactionreceipt-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -24,9 +24,7 @@ import TabItem from "@theme/TabItem" "data": "0x00000000000000000000000000000000000000000000000011b6b79503fb875d", "logIndex": "0x187", "removed": false, - "topics": [ - "0x27f12abfe35860a9a927b465bb3d4a9c23c8428174b83f278fe45ed7b4da2662" - ], + "topics": ["0x27f12abfe35860a9a927b465bb3d4a9c23c8428174b83f278fe45ed7b4da2662"], "transactionHash": "0x7114b4da1a6ed391d5d781447ed443733dcf2b508c515b81c17379dea8a3c9af", "transactionIndex": "0x76" } diff --git a/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx b/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx index 6d1b0d13a70..b24cf1ec0c9 100644 --- a/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx +++ b/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx @@ -1 +1,3 @@ -Returns information about a uncle of a block given the block hash and the uncle index position. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about an uncle of a block given the block hash and the uncle index position. diff --git a/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx b/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx +++ b/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx index 097adb76932..23a8745f6a4 100644 --- a/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx b/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx index 670a771289a..70cb71d1d2c 100644 --- a/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx +++ b/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx b/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx index 51fbeacad8f..fde3fdbd458 100644 --- a/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx +++ b/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx @@ -1 +1,3 @@ -Returns information about a uncle of a block given the block number and the uncle index position. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns information about an uncle of a block given the block number and the uncle index position. diff --git a/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx b/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx +++ b/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx index 0f2e39c4831..37a8dd5ce3e 100644 --- a/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx b/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx index 778881be27d..13fc476b163 100644 --- a/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx +++ b/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx b/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx index 4e34e1dc1fa..5129cf3c00b 100644 --- a/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx @@ -1 +1,3 @@ -Returns the number of uncles in a block from a block matching the given block hash. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of uncles in a block from a block matching the given block hash. diff --git a/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx b/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx b/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx index e8dcea612ee..b1ea23a552b 100644 --- a/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx b/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx index fddef70a02a..19198f4e3c1 100644 --- a/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx b/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx index 7a75b367abc..352aa1b5f6b 100644 --- a/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx @@ -1 +1,3 @@ -Returns the number of uncles in a block from a block matching the given block number. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of uncles in a block from a block matching the given block number. diff --git a/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx b/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx index dfe40609e94..6e674c32dbd 100644 --- a/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx b/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx index fddef70a02a..19198f4e3c1 100644 --- a/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx +++ b/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getwork-description.mdx b/services/reference/_partials/_eth_getwork-description.mdx index 77bbfb43a1f..6cd3541de01 100644 --- a/services/reference/_partials/_eth_getwork-description.mdx +++ b/services/reference/_partials/_eth_getwork-description.mdx @@ -1 +1,3 @@ -Returns the hash of the current block, the seedHash, and the boundary condition to be met ("target"). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the hash of the current block, the seed hash, and the boundary condition to be met ("target"). diff --git a/services/reference/_partials/_eth_getwork-example.mdx b/services/reference/_partials/_eth_getwork-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_getwork-example.mdx +++ b/services/reference/_partials/_eth_getwork-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_getwork-request.mdx b/services/reference/_partials/_eth_getwork-request.mdx index ad418c6f919..1b54f921de4 100644 --- a/services/reference/_partials/_eth_getwork-request.mdx +++ b/services/reference/_partials/_eth_getwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_getwork-response.mdx b/services/reference/_partials/_eth_getwork-response.mdx index 6fee101fe44..c4b3c682551 100644 --- a/services/reference/_partials/_eth_getwork-response.mdx +++ b/services/reference/_partials/_eth_getwork-response.mdx @@ -2,8 +2,8 @@ While Infura will allow this method, `eth_getWork` will not actually return mining work. ::: -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_getwork-returns.mdx b/services/reference/_partials/_eth_getwork-returns.mdx index 69279b626f9..0ad181da37d 100644 --- a/services/reference/_partials/_eth_getwork-returns.mdx +++ b/services/reference/_partials/_eth_getwork-returns.mdx @@ -1,5 +1,5 @@ An array with the following properties: -- Current block header pow-hash (32 bytes). +- Current block header PoW-hash (32 bytes). - The seed hash used for the DAG (32 bytes). - The boundary condition ("target") (32 bytes), 2^256 / difficulty. diff --git a/services/reference/_partials/_eth_hashrate-description.mdx b/services/reference/_partials/_eth_hashrate-description.mdx index 04d5477970c..0de7cfaa05e 100644 --- a/services/reference/_partials/_eth_hashrate-description.mdx +++ b/services/reference/_partials/_eth_hashrate-description.mdx @@ -1 +1,3 @@ -Returns the number of hashes per second that the node is mining with. Only applicable when the node is mining. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of hashes per second that the node is mining with. Only applicable when the node is mining. diff --git a/services/reference/_partials/_eth_hashrate-example.mdx b/services/reference/_partials/_eth_hashrate-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_hashrate-example.mdx +++ b/services/reference/_partials/_eth_hashrate-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_hashrate-request.mdx b/services/reference/_partials/_eth_hashrate-request.mdx index cd8db3d11eb..fe22a27d7e8 100644 --- a/services/reference/_partials/_eth_hashrate-request.mdx +++ b/services/reference/_partials/_eth_hashrate-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_hashrate-response.mdx b/services/reference/_partials/_eth_hashrate-response.mdx index 1cf978e5124..09af21bb553 100644 --- a/services/reference/_partials/_eth_hashrate-response.mdx +++ b/services/reference/_partials/_eth_hashrate-response.mdx @@ -2,8 +2,8 @@ Infura will always return a `0x0` mining hash rate. ::: -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx b/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx index 1a3928ce94a..2ce9fbb8d39 100644 --- a/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx +++ b/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx @@ -1 +1,3 @@ -Returns an estimate of how much priority fee, in wei, you need to be included in a block. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns an estimate of how much priority fee, in wei, you need to be included in a block. diff --git a/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx b/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx +++ b/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx b/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx index deae57887d2..8a599e6eeb4 100644 --- a/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx b/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx index 1992dc06e4e..3d63edbc07d 100644 --- a/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx +++ b/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_mining-description.mdx b/services/reference/_partials/_eth_mining-description.mdx index 28961a21604..6b8dd5ebc58 100644 --- a/services/reference/_partials/_eth_mining-description.mdx +++ b/services/reference/_partials/_eth_mining-description.mdx @@ -1 +1,3 @@ -Returns true if client is actively mining new blocks. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns true if client is actively mining new blocks. diff --git a/services/reference/_partials/_eth_mining-example.mdx b/services/reference/_partials/_eth_mining-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_mining-example.mdx +++ b/services/reference/_partials/_eth_mining-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_mining-request.mdx b/services/reference/_partials/_eth_mining-request.mdx index f4d9c69c530..dc80b12d7b8 100644 --- a/services/reference/_partials/_eth_mining-request.mdx +++ b/services/reference/_partials/_eth_mining-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_mining-response.mdx b/services/reference/_partials/_eth_mining-response.mdx index 4d638cbeb2c..95f9e363381 100644 --- a/services/reference/_partials/_eth_mining-response.mdx +++ b/services/reference/_partials/_eth_mining-response.mdx @@ -2,8 +2,8 @@ Infura will always return `false` in response to `eth_mining`. ::: -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_protocolversion-description.mdx b/services/reference/_partials/_eth_protocolversion-description.mdx index 425946f4ffb..77285c29cfb 100644 --- a/services/reference/_partials/_eth_protocolversion-description.mdx +++ b/services/reference/_partials/_eth_protocolversion-description.mdx @@ -1 +1,3 @@ -Returns the current Ethereum protocol version. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the current Ethereum protocol version. diff --git a/services/reference/_partials/_eth_protocolversion-example.mdx b/services/reference/_partials/_eth_protocolversion-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_protocolversion-example.mdx +++ b/services/reference/_partials/_eth_protocolversion-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_protocolversion-request.mdx b/services/reference/_partials/_eth_protocolversion-request.mdx index 2553833b38b..19eb1a751a8 100644 --- a/services/reference/_partials/_eth_protocolversion-request.mdx +++ b/services/reference/_partials/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_protocolversion-response.mdx b/services/reference/_partials/_eth_protocolversion-response.mdx index 0020913271a..55b616aa7eb 100644 --- a/services/reference/_partials/_eth_protocolversion-response.mdx +++ b/services/reference/_partials/_eth_protocolversion-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_sendrawtransaction-description.mdx b/services/reference/_partials/_eth_sendrawtransaction-description.mdx index b9ea82ce662..749618ffcc3 100644 --- a/services/reference/_partials/_eth_sendrawtransaction-description.mdx +++ b/services/reference/_partials/_eth_sendrawtransaction-description.mdx @@ -1 +1,3 @@ -Submits a pre-signed transaction for broadcast to the Ethereum network. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Submits a pre-signed transaction for broadcast to the Ethereum network. diff --git a/services/reference/_partials/_eth_sendrawtransaction-example.mdx b/services/reference/_partials/_eth_sendrawtransaction-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_sendrawtransaction-example.mdx +++ b/services/reference/_partials/_eth_sendrawtransaction-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_sendrawtransaction-request.mdx b/services/reference/_partials/_eth_sendrawtransaction-request.mdx index 3f0e3d2efa9..23db7ec12dc 100644 --- a/services/reference/_partials/_eth_sendrawtransaction-request.mdx +++ b/services/reference/_partials/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_sendrawtransaction-response.mdx b/services/reference/_partials/_eth_sendrawtransaction-response.mdx index 0192cee8785..06398c560d1 100644 --- a/services/reference/_partials/_eth_sendrawtransaction-response.mdx +++ b/services/reference/_partials/_eth_sendrawtransaction-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_sendtransaction-description.mdx b/services/reference/_partials/_eth_sendtransaction-description.mdx deleted file mode 100644 index 49063e7d32f..00000000000 --- a/services/reference/_partials/_eth_sendtransaction-description.mdx +++ /dev/null @@ -1,7 +0,0 @@ -:::warning Not supported by Infura - -The `eth_sendTransaction` JSON-RPC method is not supported because Infura doesn't store the user's private key required to sign the transaction. Use [`eth_sendRawTransaction`](../ethereum/json-rpc-methods/eth_sendrawtransaction.mdx) instead. - -::: - -You can use [`web3.eth.sendTransaction`](https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html#sendtransaction), which in turn signs the transaction locally using the private key of the account, and sends the transaction via [`web3.eth.sendSignedTransaction`](https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html#sendsignedtransaction), which is a wrapper for `eth_sendRawTransaction`. diff --git a/services/reference/_partials/_eth_sign-description.mdx b/services/reference/_partials/_eth_sign-description.mdx deleted file mode 100644 index d9e33c119f4..00000000000 --- a/services/reference/_partials/_eth_sign-description.mdx +++ /dev/null @@ -1,7 +0,0 @@ -:::warning Not supported by Infura - -The `eth_sign` JSON-RPC method is not supported because Infura doesn't store the user's private key required for the signature. - -::: - -For more information about the method refer to the [official Ethereum wiki](https://eth.wiki/json-rpc/API#eth_sign). diff --git a/services/reference/_partials/_eth_submitwork-description.mdx b/services/reference/_partials/_eth_submitwork-description.mdx index a63d784b490..41e41c69fcc 100644 --- a/services/reference/_partials/_eth_submitwork-description.mdx +++ b/services/reference/_partials/_eth_submitwork-description.mdx @@ -1 +1,3 @@ -Used for submitting a proof-of-work solution. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Used for submitting a proof-of-work solution. diff --git a/services/reference/_partials/_eth_submitwork-example.mdx b/services/reference/_partials/_eth_submitwork-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_submitwork-example.mdx +++ b/services/reference/_partials/_eth_submitwork-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_submitwork-parameters.mdx b/services/reference/_partials/_eth_submitwork-parameters.mdx index 3da95341c08..0169485f146 100644 --- a/services/reference/_partials/_eth_submitwork-parameters.mdx +++ b/services/reference/_partials/_eth_submitwork-parameters.mdx @@ -1,5 +1,5 @@ A `work array` array with the following properties: - 8 bytes: The nonce found (64 bits) -- 32 bytes: The header's pow-hash (256 bits) +- 32 bytes: The header's PoW-hash (256 bits) - 32 bytes: The mix digest (256 bits) diff --git a/services/reference/_partials/_eth_submitwork-request.mdx b/services/reference/_partials/_eth_submitwork-request.mdx index 7b7cd2b9887..42669b069b8 100644 --- a/services/reference/_partials/_eth_submitwork-request.mdx +++ b/services/reference/_partials/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_submitwork-response.mdx b/services/reference/_partials/_eth_submitwork-response.mdx index b95954415d0..d970565e2bd 100644 --- a/services/reference/_partials/_eth_submitwork-response.mdx +++ b/services/reference/_partials/_eth_submitwork-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_eth_syncing-description.mdx b/services/reference/_partials/_eth_syncing-description.mdx index c71522b4741..e068f012c99 100644 --- a/services/reference/_partials/_eth_syncing-description.mdx +++ b/services/reference/_partials/_eth_syncing-description.mdx @@ -1 +1,3 @@ -Returns an object with data about the sync status or `false`. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns an object with data about the sync status or `false`. diff --git a/services/reference/_partials/_eth_syncing-example.mdx b/services/reference/_partials/_eth_syncing-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_eth_syncing-example.mdx +++ b/services/reference/_partials/_eth_syncing-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_eth_syncing-request.mdx b/services/reference/_partials/_eth_syncing-request.mdx index b8d33a95a00..73002dc1bfc 100644 --- a/services/reference/_partials/_eth_syncing-request.mdx +++ b/services/reference/_partials/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_eth_syncing-response.mdx b/services/reference/_partials/_eth_syncing-response.mdx index b95954415d0..d970565e2bd 100644 --- a/services/reference/_partials/_eth_syncing-response.mdx +++ b/services/reference/_partials/_eth_syncing-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_net_listening-description.mdx b/services/reference/_partials/_net_listening-description.mdx index 9bb51ea3cea..f42acf6f0ec 100644 --- a/services/reference/_partials/_net_listening-description.mdx +++ b/services/reference/_partials/_net_listening-description.mdx @@ -1 +1,3 @@ -Returns `true` if client is actively listening for network connections. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns `true` if client is actively listening for network connections. diff --git a/services/reference/_partials/_net_listening-example.mdx b/services/reference/_partials/_net_listening-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_net_listening-example.mdx +++ b/services/reference/_partials/_net_listening-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_net_listening-request.mdx b/services/reference/_partials/_net_listening-request.mdx index 12dbf0ce0af..677bba85d09 100644 --- a/services/reference/_partials/_net_listening-request.mdx +++ b/services/reference/_partials/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_net_listening-response.mdx b/services/reference/_partials/_net_listening-response.mdx index 276e3a761c7..1e79ed42aee 100644 --- a/services/reference/_partials/_net_listening-response.mdx +++ b/services/reference/_partials/_net_listening-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_net_peercount-description.mdx b/services/reference/_partials/_net_peercount-description.mdx index 737759c3b9b..956a08a85d7 100644 --- a/services/reference/_partials/_net_peercount-description.mdx +++ b/services/reference/_partials/_net_peercount-description.mdx @@ -1 +1,3 @@ -Returns the number of peers currently connected to the client. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of peers currently connected to the client. diff --git a/services/reference/_partials/_net_peercount-example.mdx b/services/reference/_partials/_net_peercount-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_net_peercount-example.mdx +++ b/services/reference/_partials/_net_peercount-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_net_peercount-request.mdx b/services/reference/_partials/_net_peercount-request.mdx index 408318146bf..48fcc52bfff 100644 --- a/services/reference/_partials/_net_peercount-request.mdx +++ b/services/reference/_partials/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_net_peercount-response.mdx b/services/reference/_partials/_net_peercount-response.mdx index df61200ef55..9486f2d20f8 100644 --- a/services/reference/_partials/_net_peercount-response.mdx +++ b/services/reference/_partials/_net_peercount-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_net_version-description.mdx b/services/reference/_partials/_net_version-description.mdx index 39a99785497..692b74a06fd 100644 --- a/services/reference/_partials/_net_version-description.mdx +++ b/services/reference/_partials/_net_version-description.mdx @@ -1 +1,3 @@ -Returns the current network ID. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the current network ID. diff --git a/services/reference/_partials/_net_version-example.mdx b/services/reference/_partials/_net_version-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_net_version-example.mdx +++ b/services/reference/_partials/_net_version-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_net_version-request.mdx b/services/reference/_partials/_net_version-request.mdx index 5daa5c5a84d..99e601b424e 100644 --- a/services/reference/_partials/_net_version-request.mdx +++ b/services/reference/_partials/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_net_version-response.mdx b/services/reference/_partials/_net_version-response.mdx index 93111b16fbd..845d9dd796f 100644 --- a/services/reference/_partials/_net_version-response.mdx +++ b/services/reference/_partials/_net_version-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/_web3_clientversion-description.mdx b/services/reference/_partials/_web3_clientversion-description.mdx index 73b595da935..e97d498d228 100644 --- a/services/reference/_partials/_web3_clientversion-description.mdx +++ b/services/reference/_partials/_web3_clientversion-description.mdx @@ -1 +1,3 @@ -Returns the current client version. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the current client version. diff --git a/services/reference/_partials/_web3_clientversion-example.mdx b/services/reference/_partials/_web3_clientversion-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/_web3_clientversion-example.mdx +++ b/services/reference/_partials/_web3_clientversion-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/_web3_clientversion-request.mdx b/services/reference/_partials/_web3_clientversion-request.mdx index c9183b41e14..5fe02808c78 100644 --- a/services/reference/_partials/_web3_clientversion-request.mdx +++ b/services/reference/_partials/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/_web3_clientversion-response.mdx b/services/reference/_partials/_web3_clientversion-response.mdx index e82b97282bb..053d773624b 100644 --- a/services/reference/_partials/_web3_clientversion-response.mdx +++ b/services/reference/_partials/_web3_clientversion-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx new file mode 100644 index 00000000000..805a6487111 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx @@ -0,0 +1,14 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Simulates the user operation and estimates the appropriate gas limits. Returns an error if the operation +is unsuccessful. + +:::tip + +- You can use `stateOverrides` to estimate the gas cost even if the sender has no funds. + However, if the operation is sent onchain when the sender has no balance, it will revert during + the call phase due to lack of funds. + +- You can include a dummy signature for the `signature` field to estimate the gas cost. For example: + `0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c` + ::: diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx new file mode 100644 index 00000000000..321e548c2d6 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx @@ -0,0 +1,77 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. This includes the key and sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the post-operation step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification step, or `null` if no paymaster. + - `signature`: (string) - The signature data. For gas estimation, this can be a dummy signature. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization + for estimations: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). + +- `stateOverrides`: (object) [_optional_] - State overrides to apply for the simulation. Each key is an address, and each value is an object that can contain: + - `balance`: (string) [_optional_] - The balance to set for the address. + - `nonce`: (string) [_optional_] - The nonce to set for the address. + - `code`: (string) [_optional_] - The code to set for the address. + - `state`: (object) [_optional_] - Complete state to set, where each key is a 32-byte hex storage slot and each value is a 32-byte hex value. + - `stateDiff`: (object) [_optional_] - State differences to apply, where each key is a 32-byte hex storage slot and each value is a 32-byte hex value. + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymasterAndData`: (string) - The address of the paymaster contract and the data that will be passed to it. + - `signature`: (string) - The signature data. For gas estimation, this can be a dummy signature. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization + for estimations: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). + +- `stateOverrides`: (object) [_optional_] - State overrides to apply for the simulation. Each key is an address, and each value is an object that can contain: + - `balance`: (string) [_optional_] - The balance to set for the address. + - `nonce`: (string) [_optional_] - The nonce to set for the address. + - `code`: (string) [_optional_] - The code to set for the address. + - `state`: (object) [_optional_] - Complete state to set, where each key is a 32-byte hex storage slot and each value is a 32-byte hex value. + - `stateDiff`: (object) [_optional_] - State differences to apply, where each key is a 32-byte hex storage slot and each value is a 32-byte hex value. + + + diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..b94beb8c760 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx new file mode 100644 index 00000000000..7c27f6bf37e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "preVerificationGas": "0xd3e3", + "verificationGasLimit": "0x60b01", + "callGasLimit": "0x13880", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0" + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx new file mode 100644 index 00000000000..c99b37bbf08 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx @@ -0,0 +1,30 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +**Type:** `Object` + +An object containing the estimated gas values for the user operation. + + + + +- `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for + pre-verification execution and `calldata`. +- `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. +- `callGasLimit`: (string) - The amount of gas to allocate the main execution call. +- `paymasterVerificationGasLimit`: (string) - The amount of gas to allocate for the verification step + of the paymaster, or `null` if no paymaster. +- `paymasterPostOpGasLimit`: (string) - The amount of gas to allocate for the post-operation step of + the paymaster, or `null` if no paymaster. + + + + +- `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for + pre-verification execution and `calldata`. +- `verificationGas`: (string) - The amount of gas used for verification (legacy field from v0.6). +- `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. +- `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + + + diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx new file mode 100644 index 00000000000..454b1480390 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Fetches user operation details by providing its hash. If the user operation is not available, it +will return `null`. diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx new file mode 100644 index 00000000000..528680be2b2 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx @@ -0,0 +1 @@ +- `userOpHash`: (string) - The 32-byte hash of the user operation to retrieve. diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..b137833e25c --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx new file mode 100644 index 00000000000..13920f914f0 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx @@ -0,0 +1,34 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "userOperation": { + "sender": "0x8C6bdb488F664EB98E12cB2671fE2389Cc227D33", + "nonce": "0x18554d9a95404c5e8ac591f8608a18f80000000000000000", + "initCode": "0xaee9762ce625e0a8f7b184670fb57c37bfe1d0f1296601cd000000000000000000000000417f5a41305ddc99d18b5e176521b468b2a31b86000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c982ab3499d854fca39ff8326b27d3b8a9463c5d000000000000000000000000", + "callData": "0x519454470000000000000000000000008eb187a55b701f8990539bf219b7921d5d3bdadd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001647c7efe6b0000000000000000000000000000000000000000000000000000000000000080bfa0715290784075e564f966fffd9898ace1d7814f833780f62e59b0791357460000000000000000000000008c6bdb488f664eb98e12cb2671fe2389cc227d3300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000007677265676f7279000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001b1ec8da9a52488e3f60b7b7af36c2e64f1873e03a047c2c2e9061bbef4d0a9d8f1332b32afb163075273cd462140c2a24b2c9e1276adfaae0b4cb84ef78b95e8a0000000000000000000000000000000000000000000000000000000065a32e4f00000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x39b2d", + "verificationGasLimit": "0x6fb14", + "preVerificationGas": "0xc6a0", + "maxFeePerGas": "0x974038caf", + "maxPriorityFeePerGas": "0x974038c95", + "paymasterAndData": "0xe3dc822d77f8ca7ac74c30b0dffea9fcdcaaa3210000000000000000000000000000000000000000000000000000000065a3229b00000000000000000000000000000000000000000000000000000000000000009c3e8f934f2ec99974fddae7d38107a6d899c236c1b127e97d3c074cea5bb328023e295bb95254be40c47b82633676f8716c43c81aca3f2e49c2944afd1326371b", + "signature": "0x000000003ea0a3434dfd35a9eb05c4605466a7e05a5c3fc8aaba066c83bf4b43300dfd930e2203725eafa2702f860e5b6c18b4402ffb86b0d9b9c1719f1692254039810b1b" + }, + "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "transactionHash": "0x57465d20d634421008a167cfcfcde94847dba9d6b5d3652b071d4b84e5ce74ff", + "blockHash": "0xeaeec1eff4095bdcae44d86574cf1bf08b14b26be571b7c2290f32f9f250c103", + "blockNumber": "0x31de70e" + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx new file mode 100644 index 00000000000..33df9649183 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx @@ -0,0 +1,20 @@ +An object containing the user operation information and transaction details, or `null` if the user +operation is not available. When available, the response object contains: + +- `userOperation`: (object) - The user operation object containing: + - `sender`: (string) - The address of the account that initiated the user operation. + - `nonce`: (string) - The nonce used for the user operation. + - `initCode`: (string) - The initialization code for account creation. + - `callData`: (string) - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas allocated for the main execution call. + - `verificationGasLimit`: (string) - The amount of gas allocated for the verification step. + - `preVerificationGas`: (string) - The amount of gas to compensate the bundler for pre-verification execution. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above + the base fee. + - `paymasterAndData`: (string) - The paymaster address and data. + - `signature`: (string) - The signature data for the user operation. +- `entryPoint`: (string) - The EntryPoint contract address used. +- `transactionHash`: (string) - The hash of the transaction that included this user operation. +- `blockHash`: (string) - The hash of the block containing the transaction. +- `blockNumber`: (string) - The number of the block containing the transaction. diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx new file mode 100644 index 00000000000..cf1c7bcf16f --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Fetches the receipt of a user operation by providing its hash. If the receipt is not available, it +will return `null`. diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx new file mode 100644 index 00000000000..dc088102182 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx @@ -0,0 +1 @@ +- `userOpHash`: (string) - The 32-byte hash of the user operation for which to retrieve the receipt. diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..6a1d0b1c6af --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx new file mode 100644 index 00000000000..14388022b7e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx @@ -0,0 +1,44 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "userOpHash": "0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f", + "sender": "0x8C6bdb488F664EB98E12cB2671fE2389Cc227D33", + "nonce": "0x18554d9a95404c5e8ac591f8608a18f80000000000000000", + "actualGasUsed": "0x7f550", + "actualGasCost": "0x4b3b147f788710", + "success": true, + "logs": [ + // ... + ], + "receipt": { + "transactionHash": "0x57465d20d634421008a167cfcfcde94847dba9d6b5d3652b071d4b84e5ce74ff", + "transactionIndex": "0x20", + "blockHash": "0xeaeec1eff4095bdcae44d86574cf1bf08b14b26be571b7c2290f32f9f250c103", + "blockNumber": "0x31de70e", + "from": "0x43370996A3Aff7B66B3AC7676dD973d01Ecec039", + "to": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "cumulativeGasUsed": "0x4724c3", + "gasUsed": "0x7ff5a", + "address": null, + "logs": [ + // ... + ], + "logsBloom": "0x010004000800020000000040000000000000040000000000000010000004000000080000001000000212841100000000041080000000000020000240000000000800000022001000400000080000028000040000000000200001000010000000000000000a0000000000000000800800000000004110004080800110282000000000000002000000000000000000000000000200000400000000000000240040200002000000000000400000000002000140000000000000000002200000004000000002000000000021000000000000000000000000800080108020000020000000080000000000000000000000000000000000000000000108000000102000", + "status": "0x1", + "effectiveGasPrice": "0x89b098f46" + } + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx new file mode 100644 index 00000000000..7445c2870b0 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx @@ -0,0 +1,25 @@ +An object containing the user operation receipt information, or `null` if the receipt is not available. +When available, the receipt object contains: + +- `entryPoint`: (string) - The EntryPoint contract address. +- `userOpHash`: (string) - The hash of the user operation. +- `sender`: (string) - The address of the account that initiated the user operation. +- `nonce`: (string) - The nonce used for the user operation. +- `actualGasUsed`: (string) - The actual amount of gas used during execution. +- `actualGasCost`: (string) - The actual cost of gas in wei. +- `success`: (boolean) - Whether the user operation was successful. +- `logs`: (array) - Array of log entries generated during execution. +- `receipt`: (object) - The underlying transaction receipt containing: + - `transactionHash`: (string) - The hash of the transaction. + - `transactionIndex`: (string) - The index of the transaction in the block. + - `blockHash`: (string) - The hash of the block containing the transaction. + - `blockNumber`: (string) - The number of the block containing the transaction. + - `from`: (string) - The address that initiated the transaction. + - `to`: (string) - The address that received the transaction. + - `cumulativeGasUsed`: (string) - The total gas used by all transactions in the block up to this one. + - `gasUsed`: (string) - The amount of gas used by this transaction. + - `address`: (string) - The contract address created, if any. + - `logs`: (array) - Array of log entries for this transaction. + - `logsBloom`: (string) - The bloom filter for the logs. + - `status`: (string) - The status of the transaction (`0x1` for success, `0x0` for failure). + - `effectiveGasPrice`: (string) - The effective gas price used for the transaction. diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx new file mode 100644 index 00000000000..acb3a8fb2f5 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Submits a user operation to be included onchain and returns the user operation hash if successful (or queued). +If the operation is not successful, it will return an error. diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx new file mode 100644 index 00000000000..609b2c0eafd --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx @@ -0,0 +1,61 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Nonce for the request from this sender. This includes the key and sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas` : (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the post-operation step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification step, or `null` if no paymaster. + - `signature`: (string) - The signature data. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Nonce for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas` : (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymasterAndData`: (string) - The address of the paymaster contract and the data that will be passed to it. + - `signature`: (string) - The signature data. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). + + + diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..b405c7f6b88 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx new file mode 100644 index 00000000000..5d7842f3cab --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154" +} +``` + + + diff --git a/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx b/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx new file mode 100644 index 00000000000..ab9f7f37f61 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx @@ -0,0 +1,2 @@ +The 32-byte hash of the user operation (`userOpHash`). This hash uniquely identifies the user operation +and can be used to track its status. diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx new file mode 100644 index 00000000000..3d974b4ce6e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Fetches the EntryPoint addresses supported by the bundler. The first address is the one preferred by the +bundler to use. diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx new file mode 100644 index 00000000000..ed30b68824b --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx @@ -0,0 +1 @@ +None. diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..9b23053590d --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx new file mode 100644 index 00000000000..7153e738d29 --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": ["0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"] +} +``` + + + diff --git a/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx b/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx new file mode 100644 index 00000000000..b212a20bcfb --- /dev/null +++ b/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx @@ -0,0 +1,2 @@ +An array of supported EntryPoint addresses. The first address in the array is the preferred EntryPoint +that the bundler recommends using. diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-description.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-description.mdx new file mode 100644 index 00000000000..b091b22ac5b --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the tentative token exchange rates used by the ERC-20 Paymaster. diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-example.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-example.mdx new file mode 100644 index 00000000000..cb377aead35 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your Infura dashboard. diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-parameters.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-parameters.mdx new file mode 100644 index 00000000000..57a26efc62b --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-parameters.mdx @@ -0,0 +1,10 @@ +:::warning +If a token in the request input is not supported by the ERC-20 Paymaster, the request will still succeed but it will not be included in the `quotes` array in the response. +::: + +- `Object`: An object containing: + - `tokens`: (array) - An array of token addresses to get quotes for. + +- `entryPoint`: (string) - The EntryPoint contract address. + +- `chainId`: (string) - The chain ID in hexadecimal format. diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-request.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-request.mdx new file mode 100644 index 00000000000..f816ae54b8f --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-request.mdx @@ -0,0 +1,21 @@ +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getTokenQuotes", + "params": [ + { + "tokens": [ + "0x6b175474e89094c44da98b954eedeac495271d0f", + "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + "0x514910771af9ca656af840dff83e8264ecf986ca" + ] + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x1" + ], + "id": 1 + }' +``` diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-response.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-response.mdx new file mode 100644 index 00000000000..b0f8ab4544f --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-response.mdx @@ -0,0 +1,19 @@ +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "quotes": [ + { + "paymaster": "0x0000000000000039cd5e8aE05257CE51C473ddd1", + "token": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "postOpGas": "0xa7f8", + "exchangeRate": "0xe9d61943a68eaf17e8", + "exchangeRateNativeToUsd": "0xe9e52828", + "balanceSlot": "0x2", + "allowanceSlot": "0x3" + } + ] + } +} +``` diff --git a/services/reference/_partials/bundler/_pimlico_gettokenquotes-returns.mdx b/services/reference/_partials/bundler/_pimlico_gettokenquotes-returns.mdx new file mode 100644 index 00000000000..85413a447f7 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_gettokenquotes-returns.mdx @@ -0,0 +1,10 @@ +An object containing an array of token quotes. Each quote includes information about the token, exchange rates, and storage slots. + +- `quotes`: (array) - An array of quote objects, each containing: + - `paymaster`: (string) - The address of the paymaster contract. + - `token`: (string) - The address of the token. + - `postOpGas`: (string) - The amount of gas required for post-operation processing. + - `exchangeRate`: (string) - The exchange rate between the token and the native gas token. + - `exchangeRateNativeToUsd`: (string) - The exchange rate between the native gas token and USD with 6 decimals of precision. + - `balanceSlot`: (string) - The storage slot for the token balance. + - `allowanceSlot`: (string) - The storage slot for the token allowance. diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx new file mode 100644 index 00000000000..52c1c6d2c50 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the gas prices that must be used for the user operation you are bundling with Pimlico bundlers. diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx new file mode 100644 index 00000000000..ed30b68824b --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx @@ -0,0 +1 @@ +None. diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..9c7c3b66782 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx new file mode 100644 index 00000000000..6a9c6f998b6 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx @@ -0,0 +1,29 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "slow": { + "maxFeePerGas": "0x829b42b5", + "maxPriorityFeePerGas": "0x829b42b5" + }, + "standard": { + "maxFeePerGas": "0x88d36a75", + "maxPriorityFeePerGas": "0x88d36a75" + }, + "fast": { + "maxFeePerGas": "0x8f0b9234", + "maxPriorityFeePerGas": "0x8f0b9234" + } + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx new file mode 100644 index 00000000000..79f6932dc19 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx @@ -0,0 +1,11 @@ +An object containing gas price recommendations for different priority levels: + +- `slow`: (object) - Lower gas prices for non-urgent transactions: + - `maxFeePerGas`: (string) - Maximum fee per gas for slow priority. + - `maxPriorityFeePerGas`: (string) - Maximum priority fee per gas for slow priority. +- `standard`: (object) - Standard gas prices for normal transactions: + - `maxFeePerGas`: (string) - Maximum fee per gas for standard priority. + - `maxPriorityFeePerGas`: (string) - Maximum priority fee per gas for standard priority. +- `fast`: (object) - Higher gas prices for urgent transactions: + - `maxFeePerGas`: (string) - Maximum fee per gas for fast priority. + - `maxPriorityFeePerGas`: (string) - Maximum priority fee per gas for fast priority. diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx new file mode 100644 index 00000000000..07074dacc8d --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx @@ -0,0 +1,10 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the user operation status and, optionally, the transaction hash that +the bundler is using to bundle the user operation onchain. + +:::info +The transaction hash returned when the result is `submitted` can change if the bundler resubmits the +user operation inside a different transaction. For this reason, when showing the pending transaction hash to +the user, it is recommended to keep calling this method in case the transaction hash changes. +::: diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx new file mode 100644 index 00000000000..81c016b2223 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx @@ -0,0 +1 @@ +- `userOpHash`: (string) - The 32-byte hash of the user operation to check the status for. diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..23764402c32 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx new file mode 100644 index 00000000000..c8996d01187 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx @@ -0,0 +1,47 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "status": "not_found", + "transactionHash": null + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "status": "submitted", + "transactionHash": "0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3" + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "status": "included", + "transactionHash": "0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3" + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx new file mode 100644 index 00000000000..5e4a7cb0fb9 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx @@ -0,0 +1,16 @@ +An object containing the status information: + +- `status`: (string) - The current status of the user operation. Possible values: + + | Result | Response includes transaction hash | Description | + | :-------------- | :--------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | + | `not_found` | false | The operation hash is not known to the bundler or has been rejected during validation and has never entered the mempool. | + | `not_submitted` | false | The operation hash is known to the bundler but is sitting in the mempool and has not been bundled into a transaction yet. | + | `submitted` | true | The operation hash is known to the bundler, has been bundled into a transaction which is currently pending in the mempool. | + | `rejected` | false | The operation hash has entered the mempool but as it was being bundled into a bundle transaction the re-simulation failed and it was never submitted. | + | `included` | true | The operation hash is known to the bundler and has been included onchain. | + | `failed` | true | The operation hash is known to the bundler and the transaction bundling it has been included onchain but the bundle transaction reverted. | + | `queued` | false | The operation hash is known to the bundler but is waiting in a queue before being sent to the mempool due to its nonce being too high. | + +- `transactionHash`: (string) - The transaction hash bundling the user operation, or `null` if + not applicable for the current status. diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx new file mode 100644 index 00000000000..aa1f76a4c74 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx @@ -0,0 +1,8 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Simulates a user operation to predict the asset changes it will cause. Shows all balance changes +and shows all balance changes including native currency, ERC-20, ERC-1155, and ERC-721 tokens. + +:::info +This method does not support v0.6 user operations. +::: diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx new file mode 100644 index 00000000000..75988519315 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx @@ -0,0 +1,7 @@ +Common error responses when simulation fails: + +| Error Code | Description | +| :---------------------- | :------------------------------------------------- | +| `AA23` | User operation reverted during simulation. | +| `UserOperationReverted` | User operation execution failed during simulation. | +| `SimulateValidation` | Validation failed for the user operation. | diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx new file mode 100644 index 00000000000..e5aedbbd61c --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx @@ -0,0 +1,16 @@ +- `userOperation`: (object) - The user operation object with the same format as `eth_estimateUserOperationGas`: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - The account nonce. + - `callData`: (string) - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) [_optional_] - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) [_optional_] - The amount of gas to pay for to compensate the bundler. + - `maxFeePerGas`: (string) [_optional_] - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) [_optional_] - Maximum priority fee per gas above the base fee. + - `paymasterVerificationGasLimit`: (string) [_optional_] - Gas for paymaster verification step. + - `paymasterPostOpGasLimit`: (string) [_optional_] - Gas for paymaster post-operation step. + - `signature`: (string) - Must be a valid dummy signature for simulation. + +- `entryPoint`: (string) - The EntryPoint contract address. + +- `blockNumber`: (string) [_optional_] - Hex encoded block number to run the simulation at (defaults to `latest`). diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..ff4da33f142 --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx new file mode 100644 index 00000000000..d8c9de33d9f --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx @@ -0,0 +1,165 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "assetChanges": [ + { + "token": { + "tokenType": "NATIVE" + }, + "value": { + "diff": "-1000000000000000000", + "pre": "5000000000000000000", + "post": "4000000000000000000" + } + } + ] + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "assetChanges": [ + { + "token": { + "tokenType": "ERC-20", + "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "decimals": 6, + "name": "USD Coin", + "symbol": "USDC" + }, + "value": { + "diff": "-1000000", + "pre": "100000000", + "post": "99000000" + } + } + ] + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "assetChanges": [ + { + "token": { + "tokenType": "ERC-721", + "address": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", + "tokenId": 1234, + "name": "Bored Ape Yacht Club", + "symbol": "BAYC" + }, + "value": { + "diff": "1", + "pre": "0", + "post": "1" + } + } + ] + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "assetChanges": [ + { + "token": { + "tokenType": "ERC-1155", + "address": "0x76BE3b62873462d2142405439777e971754E8E77", + "tokenId": 5678, + "name": "OpenSea Shared Storefront", + "symbol": "OPENSTORE" + }, + "value": { + "diff": "10", + "pre": "5", + "post": "15" + } + } + ] + } +} +``` + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "assetChanges": [ + { + "token": { + "tokenType": "ERC-20", + "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "decimals": 6, + "name": "USD Coin", + "symbol": "USDC" + }, + "value": { + "diff": "-1000000", + "pre": "100000000", + "post": "99000000" + } + }, + { + "token": { + "tokenType": "ERC-20", + "address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + "decimals": 8, + "name": "Wrapped BTC", + "symbol": "WBTC" + }, + "value": { + "diff": "1196", + "pre": "0", + "post": "1196" + } + }, + { + "token": { + "tokenType": "NATIVE" + }, + "value": { + "diff": "-1000000000000000000", + "pre": "5000000000000000000", + "post": "4000000000000000000" + } + } + ] + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx new file mode 100644 index 00000000000..71b67545b2b --- /dev/null +++ b/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx @@ -0,0 +1,10 @@ +An object containing asset changes that would occur from executing the user operation: + +`assetChanges`: (array) - Array of asset change objects, each containing: + +- `token`: (object) - Token information (varies by token type). Token metadata fields (`name` and `symbol`) + are included when available but may be undefined as they are optional in token standards. +- `value`: (object) - Balance change information: + - `diff`: (string) - The balance difference. + - `pre`: (string) - Balance before the operation. + - `post`: (string) - Balance after the operation. diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-description.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-description.mdx new file mode 100644 index 00000000000..8af969feabc --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns values to be used in paymaster-related fields of a signed user operation. diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-example.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-example.mdx new file mode 100644 index 00000000000..cb377aead35 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your Infura dashboard. diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-parameters.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-parameters.mdx new file mode 100644 index 00000000000..db1fb1c42ac --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-parameters.mdx @@ -0,0 +1,72 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. This includes the key and sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the post-operation step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification step, or `null` if no paymaster. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). + +- `chainId`: (string) - The chain ID in hexadecimal format. + +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). + +- `chainId`: (string) - The chain ID in hexadecimal format. + +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-request.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-request.mdx new file mode 100644 index 00000000000..865c7b586aa --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-request.mdx @@ -0,0 +1,129 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterData", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d0000000000000000...", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + } + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x1", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 4337 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterData", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d0000000000000000...", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x1", + { + "sponsorshipPolicyId": "policy-123456" + } + ], + "id": 4337 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterData", + "params": [ + { + "sender": "0xb341FEAFaF71b09089d03B7D114599f8F491EE45", + "nonce": "0x0", + "initCode": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3296601cd000000...", + "callData": "0x51945447", + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + }, + "callGasLimit": "0x115b5c0", + "verificationGasLimit": "0x249f0", + "preVerificationGas": "0xeb11", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa" + }, + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "0x1", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 4337 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-response.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-response.mdx new file mode 100644 index 00000000000..d8f4fb3d168 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-response.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "paymaster": "0x0000000000000039cd5e8aE05257CE51C473ddd1", + "paymasterData": "0x01000066d1a1a4000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000000000c350000000000000000000000000000000000000000000000000000000009666598f0b846603deb0a8e59b78ba3dce9c3466394ccf07795d38ecf7925dfe12c07a022c27bb199099fa54de2f5e3e87dd9c581df52e9d3d199166a31124cc1227a9921b" + } +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "paymasterAndData": "0x0000000000000039cd5e8aE05257CE51C473ddd101000066d1a1a4000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000000000c350000000000000000000000000000000000000000000000000000000009666598f0b846603deb0a8e59b78ba3dce9c3466394ccf07795d38ecf7925dfe12c07a022c27bb199099fa54de2f5e3e87dd9c581df52e9d3d199166a31124cc1227a9921b", + "preVerificationGas": "0x350f7", + "verificationGasLimit": "0x501ab", + "callGasLimit": "0x212df" + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterdata-returns.mdx b/services/reference/_partials/bundler/_pm_getpaymasterdata-returns.mdx new file mode 100644 index 00000000000..dc46bca8dc6 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterdata-returns.mdx @@ -0,0 +1,21 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +An object containing paymaster-related fields. + + + + +- `paymaster`: (string) - The address of the paymaster contract. +- `paymasterData`: (string) - The data to be used in the paymasterData field of the user operation. + + + + +- `paymasterAndData`: (string) - The combined paymaster address and data to be used in the user operation. +- `preVerificationGas`: (string) - The updated preVerificationGas value to use in the user operation. +- `verificationGasLimit`: (string) - The updated verificationGasLimit value to use in the user operation. +- `callGasLimit`: (string) - The updated callGasLimit value to use in the user operation. + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-description.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-description.mdx new file mode 100644 index 00000000000..7391bc1bd2d --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns stub values to be used in paymaster-related fields of an unsigned user operation for gas estimation. diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-example.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-example.mdx new file mode 100644 index 00000000000..cb377aead35 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your Infura dashboard. diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-parameters.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-parameters.mdx new file mode 100644 index 00000000000..62065ff3744 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-parameters.mdx @@ -0,0 +1,74 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. This includes the key and sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the post-operation step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification step, or `null` if no paymaster. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). + +- `chainId`: (string) - The chain ID in hexadecimal format. + +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymasterAndData`: (string) - The address of the paymaster contract and the data that will be passed to it. + - `signature`: (string) - The signature data. + - `eip7702Auth`: (object) [_optional_] - The EIP-7702 authorization data. This can be a dummy authorization: + - `address`: (string) - The contract address for the authorization. + - `chainId`: (string) - The chain ID. + - `nonce`: (string) - The nonce. + - `r`: (string) - The r component of the signature. + - `s`: (string) - The s component of the signature. + - `v`: (string) - The v component of the signature. + - `yParity`: (string) - The y-parity value. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). + +- `chainId`: (string) - The chain ID in hexadecimal format. + +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-request.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-request.mdx new file mode 100644 index 00000000000..97832e6f66a --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-request.mdx @@ -0,0 +1,131 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterStubData", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e4190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001243c3b752b01845ADb2C711129d4f3966735eD98a9F09fC4cE570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000014375d883Cb4afb913aC35c4B394468C4bC73d77C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + } + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x1", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 4337 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterStubData", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e4190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001243c3b752b01845ADb2C711129d4f3966735eD98a9F09fC4cE570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000014375d883Cb4afb913aC35c4B394468C4bC73d77C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "0x1", + { + "sponsorshipPolicyId": "policy-123456" + } + ], + "id": 4337 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_getPaymasterStubData", + "params": [ + { + "sender": "0xb341FEAFaF71b09089d03B7D114599f8F491EE45", + "nonce": "0x0", + "initCode": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3296601cd0000000000000000000000000da6a956b9488ed4dd761e59f52fdc6c8068e6b5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d1f57894000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea039000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014375cd3E53E18f65672E9d0Eb6AD174511b0BF98100000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0x5194544700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x115b5c0", + "verificationGasLimit": "0x249f0", + "preVerificationGas": "0xeb11", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymasterAndData": "0x", + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c", + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + } + }, + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "0x1", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 4337 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-response.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-response.mdx new file mode 100644 index 00000000000..ce8c491ddd4 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-response.mdx @@ -0,0 +1,34 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "paymaster": "0x0000000000000039cd5e8aE05257CE51C473ddd1", + "paymasterData": "0x01000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000c350000000000000000000000000000000000000000000000088ed21153e8f500000cd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c", + "paymasterVerificationGasLimit": "0xc350", + "paymasterPostOpGasLimit": "0x4e20" + } +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "id": 4337, + "result": { + "paymasterAndData": "0x0000000000000039cd5e8aE05257CE51C473ddd101000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000c350000000000000000000000000000000000000000000000088ed21153e8f500000cd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c" + } +} +``` + + + diff --git a/services/reference/_partials/bundler/_pm_getpaymasterstubdata-returns.mdx b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-returns.mdx new file mode 100644 index 00000000000..be7312e987c --- /dev/null +++ b/services/reference/_partials/bundler/_pm_getpaymasterstubdata-returns.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +An object containing stub paymaster-related fields for gas estimation. + + + + +- `paymaster`: (string) - The address of the paymaster contract. +- `paymasterData`: (string) - The data to be used in the `paymasterData` field of the user operation. +- `paymasterVerificationGasLimit`: (string) - The amount of gas to allocate for the verification step + of the paymaster. +- `paymasterPostOpGasLimit`: (string) - The amount of gas to allocate for the post-operation step of + the paymaster. + + + + +- `paymasterAndData`: (string) - The combined paymaster address and data to be used in the user operation. + + + diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-description.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-description.mdx new file mode 100644 index 00000000000..8a9683d536b --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Sponsors a user operation by providing all necessary paymaster-related fields and updated gas +parameters. diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-example.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-example.mdx new file mode 100644 index 00000000000..cb377aead35 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your Infura dashboard. diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-parameters.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-parameters.mdx new file mode 100644 index 00000000000..9774cd0415a --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-parameters.mdx @@ -0,0 +1,59 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. This includes the key and + sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account + if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for + pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above + the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the + verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the post-operation + step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification + step, or `null` if no paymaster. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymasterAndData`: (string) - The address of the paymaster contract and the data that will be passed to it. + - `signature`: (string) - The signature data. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). +- `context`: (object) [_optional_] - Information about the specific paymaster implementation you are using. + If use paying gas in ERC-20 Tokens, pass the token address: + - An object with `token`: (string) - The ERC-20 token address to use for payment. + - An object with `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy to use. + + + diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-request.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-request.mdx new file mode 100644 index 00000000000..8301ab9648a --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-request.mdx @@ -0,0 +1,128 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_sponsorUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e4190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001243c3b752b01845ADb2C711129d4f3966735eD98a9F09fC4cE570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000014375d883Cb4afb913aC35c4B394468C4bC73d77C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + } + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 1 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_sponsorUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e4190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001243c3b752b01845ADb2C711129d4f3966735eD98a9F09fC4cE570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000014375d883Cb4afb913aC35c4B394468C4bC73d77C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0xe9ae5c53", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "sponsorshipPolicyId": "policy-123456" + } + ], + "id": 1 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_sponsorUserOperation", + "params": [ + { + "sender": "0xb341FEAFaF71b09089d03B7D114599f8F491EE45", + "nonce": "0x0", + "initCode": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3296601cd0000000000000000000000000da6a956b9488ed4dd761e59f52fdc6c8068e6b5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d1f57894000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea039000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014375cd3E53E18f65672E9d0Eb6AD174511b0BF98100000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callData": "0x5194544700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x3b9aca00", + "maxFeePerGas": "0x7a5cf70d5", + "paymasterAndData": "0x", + "signature": "0x00000000fffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c", + "eip7702Auth": { + "address": "0x1234567890123456789012345678901234567890", + "chainId": "0x1", + "nonce": "0x1", + "r": "0x1234567890123456789012345678901234567890123456789012345678901234", + "s": "0x1234567890123456789012345678901234567890123456789012345678901234", + "v": "0x1b", + "yParity": "0x1" + } + }, + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + { + "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-response.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-response.mdx new file mode 100644 index 00000000000..b6fda890abe --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-response.mdx @@ -0,0 +1,41 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "paymaster": "0x0000000000000039cd5e8aE05257CE51C473ddd1", + "paymasterData": "0x01000066d1a1a4000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000000000c350000000000000000000000000000000000000000000000000000000009666598f0b846603deb0a8e59b78ba3dce9c3466394ccf07795d38ecf7925dfe12c07a022c27bb199099fa54de2f5e3e87dd9c581df52e9d3d199166a31124cc1227a9921b", + "preVerificationGas": "0x350f7", + "verificationGasLimit": "0x501ab", + "callGasLimit": "0x212df", + "paymasterVerificationGasLimit": "0x6dae", + "paymasterPostOpGasLimit": "0x706e" + }, + "id": 1 +} +``` + + + + +```json +{ + "jsonrpc": "2.0", + "result": { + "paymasterAndData": "0x0000000000000039cd5e8aE05257CE51C473ddd101000066d1a1a4000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000000000c350000000000000000000000000000000000000000000000000000000009666598f0b846603deb0a8e59b78ba3dce9c3466394ccf07795d38ecf7925dfe12c07a022c27bb199099fa54de2f5e3e87dd9c581df52e9d3d199166a31124cc1227a9921b", + "preVerificationGas": "0xdf55", + "verificationGas": "0x52503", + "verificationGasLimit": "0x52503", + "callGasLimit": "0x13880" + }, + "id": 1 +} +``` + + + diff --git a/services/reference/_partials/bundler/_pm_sponsoruseroperation-returns.mdx b/services/reference/_partials/bundler/_pm_sponsoruseroperation-returns.mdx new file mode 100644 index 00000000000..8f57b72d2e1 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_sponsoruseroperation-returns.mdx @@ -0,0 +1,29 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +An object containing paymaster-related fields and updated gas parameters. + + + + +- `paymaster`: (string) - The address of the paymaster contract. +- `paymasterData`: (string) - The data to be used in the `paymasterData` field of the user operation. +- `preVerificationGas`: (string) - The updated `preVerificationGas` value to use in the user operation. +- `verificationGasLimit`: (string) - The updated `verificationGasLimit` value to use in the user operation. +- `callGasLimit`: (string) - The updated `callGasLimit` value to use in the user operation. +- `paymasterVerificationGasLimit`: (string) - The amount of gas to allocate for the verification step + of the paymaster. +- `paymasterPostOpGasLimit`: (string) - The amount of gas to allocate for the post-operation step of + the paymaster. + + + + +- `paymasterAndData`: (string) - The combined paymaster address and data to be used in the user operation. +- `preVerificationGas`: (string) - The updated `preVerificationGas` value to use in the user operation. +- `verificationGas`: (string) - The amount of gas to allocate for the verification step. +- `verificationGasLimit`: (string) - The updated `verificationGasLimit` value to use in the user operation. +- `callGasLimit`: (string) - The updated `callGasLimit` value to use in the user operation. + + + diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-description.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-description.mdx new file mode 100644 index 00000000000..c4222f39426 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-description.mdx @@ -0,0 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Validates a user operation against an array of sponsorship policies and returns which policies are +willing to sponsor the user operation. diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-example.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-example.mdx new file mode 100644 index 00000000000..cb377aead35 --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your Infura dashboard. diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-parameters.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-parameters.mdx new file mode 100644 index 00000000000..a94a7b00fbf --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-parameters.mdx @@ -0,0 +1,56 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. This includes the key and + sequence number. + - `factory`: (string) [_optional_] - The factory contract address that will deploy the smart account + if it doesn't exist yet. + - `factoryData`: (string) [_optional_] - The data passed to the factory contract to deploy the smart account. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for + pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymaster`: (string) [_optional_] - Address of paymaster sponsoring the transaction, or `null` if none. + - `paymasterVerificationGasLimit`: (string) [_optional_] - The amount of gas to allocate for the + verification step of the paymaster, or `null` if no paymaster. + - `paymasterPostOpGasLimit`: (string) [_optional_] - The amount of gas to allocate for the + post-operation step of the paymaster, or `null` if no paymaster. + - `paymasterData`: (string) [_optional_] - The data to pass to the paymaster during the verification + step, or `null` if no paymaster. + - `signature`: (string) - The signature data. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x0000000071727De22E5E9d8BAf0edAc6f37da032`). + +- `sponsorshipPolicyIds`: (array) - An array of sponsorship policy IDs to validate against. + + + + +- `userOperation`: The user operation object containing the following fields: + - `sender`: (string) - The address of the account making the operation. + - `nonce`: (string) - Unique identifier for the request from this sender. + - `initCode`: (string) - The initialization code for the smart account if it doesn't exist yet. + - `callData`: (string) [_optional_] - The data to pass to the sender during the main execution call. + - `callGasLimit`: (string) - The amount of gas to allocate the main execution call. + - `verificationGasLimit`: (string) - The amount of gas to allocate for the verification step. + - `preVerificationGas`: (string) - The amount of gas to pay for to compensate the bundler for + pre-verification execution and `calldata`. + - `maxFeePerGas`: (string) - Maximum fee per gas, in wei, the sender is willing to pay per gas. + - `maxPriorityFeePerGas`: (string) - Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `paymasterAndData`: (string) - The address of the paymaster contract and the data that will be passed to it. + - `signature`: (string) - The signature data. + +- `entryPoint`: (string) - The EntryPoint contract address (`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`). + +- `sponsorshipPolicyIds`: (array) - An array of sponsorship policy IDs to validate against. + + + diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-request.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-request.mdx new file mode 100644 index 00000000000..a19984a4a9b --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-request.mdx @@ -0,0 +1,71 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_validateSponsorshipPolicies", + "params": [ + { + "sender": "0x1234567890123456789012345678901234567890", + "nonce": "0x1", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0x", + "callData": "0x", + "callGasLimit": "0x100000", + "verificationGasLimit": "0x20000", + "preVerificationGas": "0x10000", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0x" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + ["sp_crazy_kangaroo", "sp_talented_turtle"] + ], + "id": 1 + }' +``` + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pm_validateSponsorshipPolicies", + "params": [ + { + "sender": "0x1234567890123456789012345678901234567890", + "nonce": "0x1", + "initCode": "0x", + "callData": "0x", + "callGasLimit": "0x100000", + "verificationGasLimit": "0x20000", + "preVerificationGas": "0x10000", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterAndData": "0x", + "signature": "0x" + }, + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + ["sp_crazy_kangaroo", "sp_talented_turtle"] + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-response.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-response.mdx new file mode 100644 index 00000000000..07dbea2959d --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-response.mdx @@ -0,0 +1,17 @@ +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "sponsorshipPolicyId": "sp_crazy_kangaroo", + "data": { + "name": "Linea Christmas Week", + "author": "Linea", + "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==", + "description": "Linea is sponsoring the first 10 transactions for existing users between Christmas and New Year's Eve." + } + } + ], + "id": 1 +} +``` diff --git a/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-returns.mdx b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-returns.mdx new file mode 100644 index 00000000000..cfaf3beb0fb --- /dev/null +++ b/services/reference/_partials/bundler/_pm_validatesponsorshippolicies-returns.mdx @@ -0,0 +1,9 @@ +An array of sponsorship policy objects that are willing to sponsor the user operation. Each object in +the array contains: + +- `sponsorshipPolicyId`: (string) - The ID of the sponsorship policy. +- `data`: (object) - Additional metadata about the sponsorship policy: + - `name`: (string) [_optional_] - The display name of the sponsorship policy. + - `author`: (string) [_optional_] - The author or organization behind the sponsorship policy. + - `icon`: (string) [_optional_] - Base64-encoded image data for the policy icon. + - `description`: (string) [_optional_] - A description of the sponsorship policy. diff --git a/services/reference/_partials/bundler/arbitrum/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/arbitrum/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..690d240af04 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..2678bbc1f1a --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..0ed56efea11 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/arbitrum/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..80c0297e260 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/arbitrum/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..00e96f2be80 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..ab978765d59 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..4fcb2447f50 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/arbitrum/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/arbitrum/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..67bd44b86d9 --- /dev/null +++ b/services/reference/_partials/bundler/arbitrum/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/avalanche/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..5c3d1282013 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/avalanche/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..6a0bf05d394 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/avalanche/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..a5409aef60c --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/avalanche/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..cdd49fa5336 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/avalanche/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..43e7173ff86 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..370ccd2113b --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..9c28887d946 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/avalanche/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/avalanche/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..c09b723be96 --- /dev/null +++ b/services/reference/_partials/bundler/avalanche/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/base/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..1726c9b718c --- /dev/null +++ b/services/reference/_partials/bundler/base/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/base/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..921717c237e --- /dev/null +++ b/services/reference/_partials/bundler/base/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/base/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..a3da7783e50 --- /dev/null +++ b/services/reference/_partials/bundler/base/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/base/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..b4de62df990 --- /dev/null +++ b/services/reference/_partials/bundler/base/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/base/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..2c88b4bbe47 --- /dev/null +++ b/services/reference/_partials/bundler/base/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/base/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..ca42e7ea65c --- /dev/null +++ b/services/reference/_partials/bundler/base/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/base/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..36eaf483139 --- /dev/null +++ b/services/reference/_partials/bundler/base/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/base/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/base/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..25b804f42b5 --- /dev/null +++ b/services/reference/_partials/bundler/base/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/blast/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..2a1fa17558a --- /dev/null +++ b/services/reference/_partials/bundler/blast/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/blast/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..8db05935bcd --- /dev/null +++ b/services/reference/_partials/bundler/blast/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/blast/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..807ed476506 --- /dev/null +++ b/services/reference/_partials/bundler/blast/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/blast/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..6f16fcc7332 --- /dev/null +++ b/services/reference/_partials/bundler/blast/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/blast/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..59653203218 --- /dev/null +++ b/services/reference/_partials/bundler/blast/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/blast/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..5989f5e5443 --- /dev/null +++ b/services/reference/_partials/bundler/blast/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/blast/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..f60a950fad8 --- /dev/null +++ b/services/reference/_partials/bundler/blast/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/blast/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/blast/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..04a506bc4bc --- /dev/null +++ b/services/reference/_partials/bundler/blast/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://blast-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..85419c88364 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..974887743ef --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..81b6f456a93 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..03945cb3b42 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..fbb0fb2fb17 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..684ae2134c2 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..2f1dd2ac3b7 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..06ae343eb19 --- /dev/null +++ b/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://bsc-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/celo/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..90472810de9 --- /dev/null +++ b/services/reference/_partials/bundler/celo/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/celo/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..3a9a4a0ecca --- /dev/null +++ b/services/reference/_partials/bundler/celo/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/celo/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..775dcfd0e6c --- /dev/null +++ b/services/reference/_partials/bundler/celo/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/celo/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..35eeadcadcc --- /dev/null +++ b/services/reference/_partials/bundler/celo/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/celo/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..1dcc820d92f --- /dev/null +++ b/services/reference/_partials/bundler/celo/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/celo/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..b0d0a4575f3 --- /dev/null +++ b/services/reference/_partials/bundler/celo/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/celo/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..0d41c099995 --- /dev/null +++ b/services/reference/_partials/bundler/celo/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/celo/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/celo/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..188b18efbe0 --- /dev/null +++ b/services/reference/_partials/bundler/celo/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/linea/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..5b01410f7bc --- /dev/null +++ b/services/reference/_partials/bundler/linea/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/linea/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..e5f60cd5e28 --- /dev/null +++ b/services/reference/_partials/bundler/linea/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/linea/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..37638eed552 --- /dev/null +++ b/services/reference/_partials/bundler/linea/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/linea/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..060371f545b --- /dev/null +++ b/services/reference/_partials/bundler/linea/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/linea/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..99d7077be77 --- /dev/null +++ b/services/reference/_partials/bundler/linea/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/linea/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..6ef5ac672fc --- /dev/null +++ b/services/reference/_partials/bundler/linea/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/linea/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..d72a79c835e --- /dev/null +++ b/services/reference/_partials/bundler/linea/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/linea/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/linea/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..91be69c23e1 --- /dev/null +++ b/services/reference/_partials/bundler/linea/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/mantle/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..88bded8f2ff --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/mantle/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..5c6e689b3c5 --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/mantle/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..d9a50b481e2 --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/mantle/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..5e9544c27e7 --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/mantle/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..6e3507b12aa --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..e6f0ffbfb31 --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..31fd906f3b7 --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/mantle/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/mantle/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..104791d3a1c --- /dev/null +++ b/services/reference/_partials/bundler/mantle/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/opbnb/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..44edb1a6408 --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/opbnb/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..ee7bc278fbf --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/opbnb/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..41ee3a44ef8 --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/opbnb/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..99de380e8c1 --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/opbnb/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..46483312e6a --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..c94570faa84 --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..85fed5e0269 --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/opbnb/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/opbnb/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..8e3e64abbaa --- /dev/null +++ b/services/reference/_partials/bundler/opbnb/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://opbnb-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/optimism/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..c800fecaea8 --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/optimism/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..7dbd7f322ad --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/optimism/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..c55507e4af2 --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/optimism/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..7558a98dc1b --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/optimism/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..a34fb09b1d6 --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..9cedda5c85b --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..75cb24aa7f8 --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/optimism/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/optimism/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..697851e7314 --- /dev/null +++ b/services/reference/_partials/bundler/optimism/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/polygon/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..6564e74d1d0 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/polygon/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..ad3ca73cb47 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/polygon/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..d9f5b8117e8 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/polygon/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..dda7b6e8265 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/polygon/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..77902c1918a --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..d887b950184 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..7c6c98bbe7f --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/polygon/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/polygon/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..58fb0757e41 --- /dev/null +++ b/services/reference/_partials/bundler/polygon/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/scroll/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..99849bc3bc5 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/scroll/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..5cd03e395cb --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/scroll/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..34df45ddb82 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/scroll/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..850a6951044 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/scroll/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..5fce93ae961 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..2a6c2704e83 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..b0d9abc8ba3 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/scroll/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/scroll/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..1de295a4b17 --- /dev/null +++ b/services/reference/_partials/bundler/scroll/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/sei/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..b4164633502 --- /dev/null +++ b/services/reference/_partials/bundler/sei/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/sei/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..9669f4e069c --- /dev/null +++ b/services/reference/_partials/bundler/sei/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/sei/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..830830ddc30 --- /dev/null +++ b/services/reference/_partials/bundler/sei/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/sei/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..8791d1125f5 --- /dev/null +++ b/services/reference/_partials/bundler/sei/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/sei/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..17a7b766fab --- /dev/null +++ b/services/reference/_partials/bundler/sei/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/sei/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..ca5328f9e3b --- /dev/null +++ b/services/reference/_partials/bundler/sei/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/sei/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..7bcdc549ae9 --- /dev/null +++ b/services/reference/_partials/bundler/sei/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/sei/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/sei/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..2761af05ae1 --- /dev/null +++ b/services/reference/_partials/bundler/sei/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_eth_estimateuseroperationgas-request.mdx b/services/reference/_partials/bundler/unichain/_eth_estimateuseroperationgas-request.mdx new file mode 100644 index 00000000000..0eea3c3c2b4 --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_eth_estimateuseroperationgas-request.mdx @@ -0,0 +1,82 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845adb2c711129d4f3966735ed98a9f09fc4ce5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_estimateUserOperationGas", + "params": [ + { + "sender": "0xa203fDb8bC335F86016F635b85389B62B189E417", + "nonce": "0x35bf2a054f92f3730b87582ef223c8d663f9eb01158154750000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "callData": "0xb61d27f6000000000000000000000000530fff22987e137e7c8d2adcc4c15eb45b4fa752", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxPriorityFeePerGas": "0x12a05f200", + "maxFeePerGas": "0x5b08082fa", + "paymaster": null, + "paymasterVerificationGasLimit": null, + "paymasterPostOpGasLimit": null, + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + { + "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3": { + "balance": "0xde0b6b3a7640000" + }, + "0xebe8efa441b9302a0d7eaecc277c09d20d684540": { + "stateDiff": { + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80": "0x21" + } + } + } + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_eth_getuseroperationbyhash-request.mdx b/services/reference/_partials/bundler/unichain/_eth_getuseroperationbyhash-request.mdx new file mode 100644 index 00000000000..a03cf554a9d --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_eth_getuseroperationbyhash-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationByHash", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_eth_getuseroperationreceipt-request.mdx b/services/reference/_partials/bundler/unichain/_eth_getuseroperationreceipt-request.mdx new file mode 100644 index 00000000000..1181dfd3e61 --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_eth_getuseroperationreceipt-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getUserOperationReceipt", + "params": ["0xa5a579c6fd86c2d8a4d27f5bb22796614d3a31bbccaba8f3019ec001e001b95f"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_eth_senduseroperation-request.mdx b/services/reference/_partials/bundler/unichain/_eth_senduseroperation-request.mdx new file mode 100644 index 00000000000..54ca5ad4ae0 --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_eth_senduseroperation-request.mdx @@ -0,0 +1,39 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_sendUserOperation", + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000", + "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "factoryData": "0xc5265d5d000000000000000000000000aac5d4240af87249b3f71bc8e4a2cae074a3e419", + "callData": "0xe9ae5c5300000000000000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x13880", + "verificationGasLimit": "0x60B01", + "preVerificationGas": "0xD3E3", + "maxPriorityFeePerGas": "0x3B9ACA00", + "maxFeePerGas": "0x7A5CF70D5", + "paymaster": "0x", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "paymasterData": null, + "signature": "0xa6cc6589c8bd561cfd68d7b6b0757ef6f208e7438782939938498eee7d703260137856c840c491b3d415956265e81bf5c2184a725be2abfc365f7536b6af525e1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_eth_supportedentrypoints-request.mdx b/services/reference/_partials/bundler/unichain/_eth_supportedentrypoints-request.mdx new file mode 100644 index 00000000000..2d75729eeec --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_eth_supportedentrypoints-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_supportedEntryPoints", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationgasprice-request.mdx b/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationgasprice-request.mdx new file mode 100644 index 00000000000..0a08d436000 --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationgasprice-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationGasPrice", + "params": [], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationstatus-request.mdx b/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationstatus-request.mdx new file mode 100644 index 00000000000..710413f3847 --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationstatus-request.mdx @@ -0,0 +1,20 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_getUserOperationStatus", + "params": ["0x9bd004b8240da8eba3a02190a72be8a70ade8ef4c581b6e59789643c5e642ac3"], + "id": 1 + }' +``` + + + diff --git a/services/reference/_partials/bundler/unichain/_pimlico_simulateassetchanges-request.mdx b/services/reference/_partials/bundler/unichain/_pimlico_simulateassetchanges-request.mdx new file mode 100644 index 00000000000..32b06b2a5ab --- /dev/null +++ b/services/reference/_partials/bundler/unichain/_pimlico_simulateassetchanges-request.mdx @@ -0,0 +1,35 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "pimlico_simulateAssetChanges", + "id": 4337, + "params": [ + { + "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149", + "nonce": "0x1", + "callData": "0x9faf00f4d9c8df66a69fd6242d468aa8a31a439d14fc6c7af3868a06ed392233bc7e39475df25ad2b52bd5e19e1d438277207a415cb4d4ce8ad192464c55ddf1a9559ff900000000000000000000000073da77f0f2daaa88b908413495d3d0e37458212e00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039946fd82c9c86c9a61bceed86fbdd284590bdd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "callGasLimit": "0x0", + "verificationGasLimit": "0x0", + "preVerificationGas": "0x0", + "maxFeePerGas": "0x7a5cf70d5", + "maxPriorityFeePerGas": "0x3b9aca00", + "paymasterVerificationGasLimit": "0x0", + "paymasterPostOpGasLimit": "0x0", + "signature": "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c" + }, + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ] + }' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-description.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-description.mdx new file mode 100644 index 00000000000..7fed4c3e877 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns a list of the last "bad blocks" that the client has seen on the network. Bad blocks are blocks that were rejected by the client due to validation errors. diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-example.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-parameters.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-parameters.mdx new file mode 100644 index 00000000000..b0047fa49f0 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-parameters.mdx @@ -0,0 +1 @@ +None diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-request.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-request.mdx new file mode 100644 index 00000000000..f3df18ec394 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-request.mdx @@ -0,0 +1,11 @@ +```bash +curl https://hemi-testnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "debug_getBadBlocks", + "params": [], + "id": 1 + }' +``` diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-response.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-response.mdx new file mode 100644 index 00000000000..3145872774b --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-response.mdx @@ -0,0 +1,32 @@ +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": [ + { + "author": "0x0000000000000000000000000000000000000000", + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x0", + "gasUsed": "0x0", + "hash": "0x27bfb37e507ce90da141307204b1c6ba24194380613590ac50ca4b1d7198ff65", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x0000000000000000000000000000000000000000", + "number": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reason": "Invalid block", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "rlp": "0x010203", + "sealFields": [], + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x3", + "stateRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "timestamp": "0x0", + "totalDifficulty": null, + "transactions": [], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [] + } + ] +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_getbadblocks-returns.mdx b/services/reference/_partials/debug-methods/_debug_getbadblocks-returns.mdx new file mode 100644 index 00000000000..4cd963c8a16 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_getbadblocks-returns.mdx @@ -0,0 +1,45 @@ +An array of bad block objects. Each bad block object contains: + +- `baseFeePerGas`: The integer representation of the base fee per gas for this block encoded as hexadecimal. +- `difficulty`: The integer representation of the difficulty for this block encoded as hexadecimal. +- `extraData`: The extra data field of this block. +- `gasLimit`: The maximum gas allowed in this block encoded as hexadecimal. +- `gasUsed`: The total used gas by all transactions in this block encoded as hexadecimal. +- `hash`: The hash of the block. +- `logsBloom`: The bloom filter for the logs of the block. Null if pending. +- `miner`: The address of the beneficiary to whom the mining rewards were given. +- `mixHash`: A 256-bit hash encoded as hexadecimal. +- `nonce`: The hash of the generated proof-of-work. `Null if pending. +- `number`: The block number of the requested block encoded as hexadecimal. Null if pending. +- `parentHash`: The hash of the parent block. +- `reason`: The reason why this block was considered "bad". +- `receiptsRoot`: The root of the receipts trie of the block. +- `rlp`: The RLP encoded header. +- `sealFields`: Array of seal fields. +- `sha3Uncles`: The SHA3 of the uncles' data in the block. +- `size`: The size of this block in bytes as an Integer value encoded as hexadecimal. +- `stateRoot`: The root of the final state trie of the block. +- `timestamp`: The Unix timestamp for when the block was collated. +- `totalDifficulty`: The total difficulty of the chain until this block. +- `transactions`: An array of transaction objects with the following fields: + - `blockHash`: The hash of the block where this log was in. Null when it's a pending log. + - `blockNumber`: The block number where this log was in. Null when it's a pending log. + - `from`: The address of the sender. + - `gas`: The gas provided by the sender, encoded as hexadecimal. + - `gasPrice`: The gas price provided by the sender in wei, encoded as hexadecimal. + - `maxFeePerGas`: The maximum fee per gas set in the transaction. + - `maxPriorityFeePerGas`: The maximum priority gas fee set in the transaction. + - `hash`: The hash of the transaction. + - `input`: The data sent along with the transaction. + - `nonce`: The number of transactions made by the sender before this one encoded as hexadecimal. + - `to`: The address of the receiver. Null when it's a contract creation transaction. + - `transactionIndex`: The integer of the transaction's index position that the log was created from. Null when it's a pending log. + - `value`: The value transferred in wei encoded as hexadecimal. + - `type`: The transaction type. + - `accessList`: A list of addresses and storage keys that the transaction plans to access. + - `chainId`: The chain id of the transaction, if any. + - `v`: The standardized V field of the signature. + - `r`: The R field of the signature. + - `s`: The S field of the signature. +- `transactionsRoot`: The root of the transaction trie of the block. +- `uncles`: An array of uncle hashes. diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-description.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-description.mdx new file mode 100644 index 00000000000..d5d22f84430 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the contract storage for the specified range. diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-example.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-parameters.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-parameters.mdx new file mode 100644 index 00000000000..24cf40ca425 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-parameters.mdx @@ -0,0 +1,5 @@ +- `blockHash` : (string) _[required]_ hash of the block to trace. +- `txIndex`: (number) _[required]_ transaction index from which to start. +- `address`: (string) _[required]_ contract address. +- `startKey`: (string) _[required]_ - hash of the storage key at which to start. +- `limit`: (number) _[required]_ number of storage entries to return. diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-request.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-request.mdx new file mode 100644 index 00000000000..eb2baad41a4 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x'{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-response.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-response.mdx new file mode 100644 index 00000000000..a32bd5c253c --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-response.mdx @@ -0,0 +1,15 @@ +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "storage": { + "0x0001187ffafb4707176f1c510f173cdcc2a48cb15bdc894c424897555968a831": { + "key": "0x85929f3b98e0d49f6ba064139f82d0fa9b5cf0eaf629d07b9a7301e222a63173", + "value": "0x00000000000000000000000000000000000000000000000000000000b478ed24" + } + }, + "nextKey": "0x000b5c2024e6480c554272610fdfb9437f2aee44f6f04d396469e6adbcedc03b" + } +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_storagerangeat-returns.mdx b/services/reference/_partials/debug-methods/_debug_storagerangeat-returns.mdx new file mode 100644 index 00000000000..bb629de3890 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_storagerangeat-returns.mdx @@ -0,0 +1 @@ +An object with the storage hash values, and for each of them the key and value it represents. diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-description.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-description.mdx new file mode 100644 index 00000000000..5e4e5cf88d0 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns a full trace of all invoked opcodes of all transactions included in the block. diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-example.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-parameters.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-parameters.mdx new file mode 100644 index 00000000000..5cd45891bdb --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-parameters.mdx @@ -0,0 +1,7 @@ +- `block`: (string) RLP of the block +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` or + `prestateTracer`. + - `tracerConfig`: (object) _[optional]_ tracer configuration options: + - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any + sub-calls. It eliminates the additional processing for each call frame. diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-request.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-request.mdx new file mode 100644 index 00000000000..cd67ef62bb4 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x'{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-response.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-response.mdx new file mode 100644 index 00000000000..f4c5a3ce15a --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-response.mdx @@ -0,0 +1,20 @@ +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": [ + { + "result": { + "from": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3", + "gas": "0x2d48c", + "gasUsed": "0xc7ab", + "to": "0x55d398326f99059ff775485246999027b3197955", + "input": "0xa9059cbb0000000000000000000000003b9f33b3a9d382fa60283c555bde8f78855957be00000000000000000000000000000000000000000000000d4e7f4f79da7c0000", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "value": "0x0", + "type": "CALL" + } + } + ] +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_traceblock-returns.mdx b/services/reference/_partials/debug-methods/_debug_traceblock-returns.mdx new file mode 100644 index 00000000000..3dc99afee8d --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblock-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`prestateTracer` object. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx new file mode 100644 index 00000000000..60ac16fdade --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns tracing results by executing all transactions in the block specified by the block hash. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx new file mode 100644 index 00000000000..7a2eb090645 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx @@ -0,0 +1,7 @@ +- `blockHash`: (string) _[required]_ hash of the block to trace. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` or + `prestateTracer`. + - `tracerConfig`: (object) _[optional]_ tracer configuration options: + - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any + sub-calls. It eliminates the additional processing for each call frame. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-request.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-request.mdx new file mode 100644 index 00000000000..38842ba4312 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash","params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx new file mode 100644 index 00000000000..853a3552b06 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx @@ -0,0 +1,63 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "result": { + "calls": [ + { + "from": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", + "gas": "0x1feac", + "gasUsed": "0x9d5", + "input": "0x0902f1ac", + "output": "0x0000000000000000000000000000000000000000000000025aa314728293841e00000000000000000000000000000000000000000000000000000007a5cc7a260000000000000000000000000000000000000000000000000000000064b8c380", + "to": "0x75a97d88ff19e07da99023ef0e35e35f51869de0", + "type": "STATICCALL" + }, + { + "calls": [ + { + "from": "0xf56dc6695cf1f5c364edebc7dc7077ac9b586068", + "gas": "0x1bc78", + "gasUsed": "0x6c8f", + "input": "0x23b872dd000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f00000000000000000000000075a97d88ff19e07da99023ef0e35e35f51869de00000000000000000000000000000000000000000000000000000000002faf080", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x1c92ff898f7c34fc6ed884aec3859fd6c655c1f0", + "type": "DELEGATECALL", + "value": "0x0" + } + ], + "from": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", + "gas": "0x1dfd5", + "gasUsed": "0x8907", + "input": "0x23b872dd000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f00000000000000000000000075a97d88ff19e07da99023ef0e35e35f51869de00000000000000000000000000000000000000000000000000000000002faf080", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0xf56dc6695cf1f5c364edebc7dc7077ac9b586068", + "type": "CALL", + "value": "0x0" + } + ], + "from": "0xc2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f", + "gas": "0x273bd", + "gasUsed": "0x22499", + "input": "0x38ed17390000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000e8291f2bdfeff000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f0000000000000000000000000000000000000000000000000000000064b8cdb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f56dc6695cf1f5c364edebc7dc7077ac9b586068000000000000000000000000ed4ccdd10b8b97ba9555a6767613bfb98aaf72c4", + "output": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000e9c8a628b94ade", + "to": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", + "type": "CALL", + "value": "0x0" + } + } + ... + ] +} +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx new file mode 100644 index 00000000000..3dc99afee8d --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`prestateTracer` object. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx new file mode 100644 index 00000000000..7042bbee6d9 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns tracing results by executing all transactions in the specified block number. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx new file mode 100644 index 00000000000..64b5f15ec7b --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx @@ -0,0 +1,13 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). + ::: + +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` or + `prestateTracer`. + - `tracerConfig`: (object) _[optional]_ tracer configuration options: + - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any + sub-calls. It eliminates the additional processing for each call frame. diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-request.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-request.mdx new file mode 100644 index 00000000000..c7a982d8109 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ \ +-x '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx new file mode 100644 index 00000000000..c6033c86cff --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx @@ -0,0 +1,31 @@ +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "result": { + "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", + "gas": "0x5208", + "gasUsed": "0x5208", + "input": "0x", + "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", + "type": "CALL", + "value": "0x2ca186f5fda8004" + } + }, + { + "result": { + "from": "0x25f2650cc9e8ad863bf5da6a7598e24271574e29", + "gas": "0xfe0e", + "gasUsed": "0xafee", + "input": "0xd0e30db0", + "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "type": "CALL", + "value": "0x2386f26fc10000" + } + }, + ... + ] +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx new file mode 100644 index 00000000000..3dc99afee8d --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`prestateTracer` object. diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx new file mode 100644 index 00000000000..56997780447 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx @@ -0,0 +1,9 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns the number of possible tracing result by executing an `eth_call` within the context of the +given block execution. + +:::caution Limited access +Infura restricts `debug_traceCall` to a select set of customers. Please +[contact the Infura support team](https://support.infura.io/ipfs) to ask about custom plans. +::: diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-parameters.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-parameters.mdx new file mode 100644 index 00000000000..f9a40c1bc36 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-parameters.mdx @@ -0,0 +1,25 @@ +- Transaction object with the following fields: + - `from`: (string) address (20 bytes) the transaction is sent from. + - `to`: (string) _[required]_ address (20 bytes) the transaction is directed to. + - `gas`: (string) hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero + gas, but this parameter may be needed by some executions. + - `gasPrice`: (string) hexadecimal value of the `gasPrice` used for each paid gas. + - `maxPriorityFeePerGas`: (string) maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `maxFeePerGas`: (string) maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. + - `value`: (string) hexadecimal of the value sent with this transaction. + - `data`: (string) hash of the method signature and encoded parameters. + See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). +- `block parameter`: [_Required_] hexadecimal block number, or one of the string tags + `latest`, `earliest`, `pending`, or `finalized`. + See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` or + `prestateTracer`. + - `tracerConfig`: (object) _[optional]_ tracer configuration options: + - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any + sub-calls. It eliminates the additional processing for each call frame. diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-request.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-request.mdx new file mode 100644 index 00000000000..ddc6088b307 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx new file mode 100644 index 00000000000..8ab4e8df50c --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx @@ -0,0 +1,15 @@ +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "from": "0x0000000000000000000000000000000000000000", + "gas": "0x28cc0", + "gasUsed": "0x3635000", + "to": "0x6b175474e89094c44da98b954eedeac495271d0f", + "input": "0x70a082310000000000000000000000006e0d01a76c3cf4288372a29124a26d4353ee51be", + "value": "0x0", + "type": "CALL" + } +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx b/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx new file mode 100644 index 00000000000..3dc99afee8d --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`prestateTracer` object. diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx new file mode 100644 index 00000000000..e43a23759da --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx @@ -0,0 +1,3 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns tracing results for the specified transaction. diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx new file mode 100644 index 00000000000..5300ca6f76e --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx @@ -0,0 +1 @@ +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-parameters.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-parameters.mdx new file mode 100644 index 00000000000..29ae0187fca --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-parameters.mdx @@ -0,0 +1,9 @@ +- `transactionHash`: (string) _[required]_ hash of the transaction. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` or + `prestateTracer`. + - `tracerConfig`: (object) _[optional]_ tracer configuration options: + - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any + sub-calls. It eliminates the additional processing for each call frame. + - `timeout`: (string) _[optional]_ string of decimals numbers to set the timeout. The default is 5 seconds. The maximum + timeout is 10 seconds. Valid units are `ns`, `us`, `ms`, `s`. For example, `3s30ms`. diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-request.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-request.mdx new file mode 100644 index 00000000000..9269875add5 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx new file mode 100644 index 00000000000..dd760ca17c7 --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx @@ -0,0 +1,15 @@ +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", + "gas": "0x5208", + "gasUsed": "0x5208", + "input": "0x", + "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", + "type": "CALL", + "value": "0x2ca186f5fda8004" + } +} +``` diff --git a/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx b/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx new file mode 100644 index 00000000000..3dc99afee8d --- /dev/null +++ b/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`prestateTracer` object. diff --git a/services/reference/_partials/error-codes.mdx b/services/reference/_partials/error-codes.mdx new file mode 100644 index 00000000000..eed1e9c0e00 --- /dev/null +++ b/services/reference/_partials/error-codes.mdx @@ -0,0 +1,151 @@ +This section contains the JSON-RPC API endpoints on the left sidebar. You can [call these APIs using a variety of tools](../quickstart). + +## Error codes + +You may encounter various errors when interacting with a network: + +- [**JSON-RPC errors**](#json-rpc-errors): + These are related to operations on the blockchain network. It means the server has received the JSON-RPC + request but encountered an issue processing it. Causes might include invalid parameters, a method not + found, or execution errors related to the requested operation. + +- [**HTTP errors**](#http-errors): These happen at the transport layer during data transmission to the blockchain + network. They could stem from Infura-related issues like rate limits, API key problems, or + service availability issues. + +- [**Smart contract errors**](#smart-contract-errors): These arise during attempts to execute transactions in the EVM + involving smart contracts. + +### JSON-RPC errors + +Error codes returned by Infura's RPC service network APIs can vary slightly between implementations, but +they follow the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#error_object) +and Ethereum-specific conventions. + +The following table lists the error codes, their messages, and meanings. The "Standard" category includes +common JSON-RPC errors, while the "Non-standard" category encompasses server errors defined by the +implementation. + +| Code | Message | Meaning | Category | +| ------ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| -32003 | Transaction rejected | The transaction could not be created. | Non-standard | +| -32002 | Resource unavailable | The requested resource is not available. | Non-standard | +| -32001 | Resource not found | The requested resource cannot be found, possibly when calling an unsupported method. | Non-standard | +| -32700 | Parse error | The JSON request is invalid, this can be due to syntax errors. | Standard | +| -32004 | Method not supported | The requested method is not implemented. | Non-standard | +| -32601 | Method not found | The method does not exist, often due to a typo in the method name or the method not being supported. | Standard | +| -32005 | Limit exceeded | The request exceeds your request limit. | Non-standard | +| -32006 | JSON-RPC version not supported | The version of the JSON-RPC protocol is not supported. | Non-standard | +| -32600 | Invalid request | The JSON request is possibly malformed. | Standard | +| -32000 | Invalid input | Missing or invalid parameters, possibly due to server issues or a block not being processed yet. | Non-standard | +| -32602 | Invalid argument | Invalid method parameters. For example, `"error":{"code":-32602,"message":"invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go value of type common.Hash"}` indicates the `0x` prefix is missing from the hexadecimal address. | Standard | +| -32603 | Internal error | An internal JSON-RPC error, often caused by a bad or invalid payload. | Standard | +| -33000 | Payment Required | You've reached your daily credit quota limits. | Non-standard | +| -33100 | Forbidden | The request is forbidden, your account could possibly be suspended. | Non-standard | +| -33200 | Too Many Requests | You have surpassed your allowed throughput limit. Reduce the amount of requests per second or upgrade for more capacity | Non-standard | +| -33300 | Too Many Requests | You have surpassed your [user-defined key throughput limit setting](/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits). To make more requests, adjust your rate limit. | Non-standard | +| -33400 | Too Many Requests | You have surpassed your [user-defined key daily credit limit setting](/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits). To make more requests, adjust your daily quota limit. | Non-standard | + +Example error response: + +```json +{ + "id": 1337 + "jsonrpc": "2.0", + "error": { + "code": -32003, + "message": "Transaction rejected" + } +} +``` + +### HTTP errors + +Infura-specific error codes or messages could include errors for rate limits, API key issues, or +service availability problems. + +| Code | Message | Meaning | +| ---- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 400 | Bad request | Incorrect HTTP Request type or invalid characters, ensure that your request body and format is correct. | +| 401 | Unauthorized | This can happen when one or multiple security requirements aren't met. Example responses: `project id required in the URL`, `invalid project id`, `invalid project id or project secret`, `invalid JWT`. | +| 402 | Payment Required | You've reached your daily quota on your free plan. [Upgrade your plan](https://app.infura.io/billing/plan) to continue using the product for the day. | +| 403 | Forbidden | The request was intentionally refused. For example, an account that has been banned, or has not completed verification in a timely manner might receive this error. | +| 429 | Too Many Requests | You have reached your plan's daily throughput limits, or [user-defined throughput limits](/developer-tools/dashboard/how-to/secure-an-api/set-rate-limits). To continue making requests, reduce the requests per second, upgrade your plan, or review your user-defined limits. Refer to the [Avoid rate limiting](/services/how-to/avoid-rate-limiting) topic for more information. Example response: `"error": {"code": -32005, "message": "project ID request rate exceeded"}`. | +| 500 | Internal Server Error | Error while processing the request on the server side. | +| 502 | Bad Gateway | Indicates a communication error which can have various causes, from networking issues to invalid response received from the server. | +| 503 | Service Unavailable | Indicates that the server isn't ready to handle the request. | +| 504 | Gateway Timeout | The request ended with a timeout, it can indicate a networking issue or a delayed or missing response from the server. | + +### Smart contract errors + +When interacting with smart contracts, you might also encounter errors related to the execution of +transactions in the EVM: + +- **Out of gas**: The transaction doesn't have enough gas to complete. +- **Revert**: The transaction was reverted by the EVM, often due to a condition in the smart contract code. +- **Bad instruction**: The transaction tried to execute an invalid operation. +- **Bad jump destination**: A jump was made to an invalid location in the smart contract code. + +## Value encoding + +Specific types of values passed to and returned from Ethereum RPC methods require special encoding: + +### Quantity + +A `Quantity` (integer, number) must: + +- Be hex-encoded. +- Be `0x`-prefixed. +- Be expressed using the fewest possible hex digits per byte. +- Express zero as `0x0`. + +Examples `Quantity` values: + +| Value | Validity | Reason | +| -------- | --------- | --------------------------------- | +| `0x` | `invalid` | empty not a valid quantity | +| `0x0` | `valid` | interpreted as a quantity of zero | +| `0x00` | `invalid` | leading zeroes not allowed | +| `0x41` | `valid` | interpreted as a quantity of 65 | +| `0x400` | `valid` | interpreted as a quantity of 1024 | +| `0x0400` | `invalid` | leading zeroes not allowed | +| `ff` | `invalid` | values must be prefixed | + +### Block identifier + +The RPC methods below take a default block identifier as a parameter. + +- `eth_getBalance` +- `eth_getStorageAt` +- `eth_getTransactionCount` +- `eth_getCode` +- `eth_call` +- `eth_getProof` + +Since there is no way to clearly distinguish between a `Data` parameter and a `Quantity` parameter, [EIP-1898](https://eips.ethereum.org/EIPS/eip-1898) provides a format to specify a block either using the block hash or block number. The block identifier is a JSON `object` with the following fields: + +| Property | Type | Description | +| ------------------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `blockNumber` | `Quantity` | The block in the canonical chain with this number. | +| OR `blockHash` | `Data` | The block uniquely identified by this hash. The `blockNumber` and `blockHash` properties are mutually exclusive; exactly one of them must be set. | +| `requireCanonical` | `boolean` | (Optional) Whether or not to throw an error if the block is not in the canonical chain. Only allowed in conjunction with the `blockHash` tag. The default is `false`. | + +### Data + +A `Data` value (for example, byte arrays, account addresses, hashes, and bytecode arrays) must: + +- Be hex-encoded. +- Be `0x`-prefixed. +- Be expressed using two hex digits per byte. + +Examples `Data` values: + +| Value | Valid | Reason | +| ---------- | --------- | -------------------------------------------------- | +| `0x` | `valid` | interpreted as empty data | +| `0x0` | `invalid` | each byte must be represented using two hex digits | +| `0x00` | `valid` | interpreted as a single zero byte | +| `0x41` | `true` | interpreted as a data value of 65 | +| `0x004200` | `true` | interpreted as a data value of 16896 | +| `0xf0f0f` | `false` | bytes require two hex digits | +| `004200` | `false` | values must be prefixed | diff --git a/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx b/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx index 001e5fcf2f5..1c13a8b1b53 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx @@ -1,2 +1,5 @@ -Polling method for a filter, which returns an array of logs which occurred since last poll. -Filter must be created by calling either [`eth_newFilter`](../../ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx) or [`eth_newBlockFilter`](../../ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Polling method for a filter, which returns an array of logs which occurred since the last poll. + +Filter must be created by calling either [`eth_newFilter`](../eth_newfilter) or [`eth_newBlockFilter`](../eth_newblockfilter). diff --git a/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx b/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx index c84659c90d5..640d7d87caf 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx b/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx index d586f25e887..9f130c7471d 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx b/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx index 0b80ec7e123..0f8a8af168c 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx @@ -1,12 +1,12 @@ -- `log object array`: (array) An array of log objects, or an empty array if nothing has changed since last poll. -- For filters created with [`eth_newBlockFilter`](../../ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx) the return values are block hashes (32 bytes), e.g. `["0x3454645634534..."]`. -- For filters created with [`eth_newFilter`](../../ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx) the logs are objects with the following params: +- `log object array`: (array) An array of log objects, or an empty array if nothing has changed since the last poll. +- For filters created with [`eth_newBlockFilter`](../eth_newblockfilter) the return values are block hashes (32 bytes), for example, `["0x3454645634534..."]`. +- For filters created with [`eth_newFilter`](../eth_newfilter) the logs are objects with the following params: - `address`: 20 bytes. Address from which this log originated. - - `blockHash`: 32 bytes. The hash of the block where this log was in. `Null` when it is a pending log. - - `blockNumber`: The block number where this log was in. `Null` when it is a pending log. + - `blockHash`: 32 bytes. The hash of the block where this log was in. `null` when it is a pending log. + - `blockNumber`: The block number where this log was in. `null` when it is a pending log. - `data`: DATA. Contains the non-indexed arguments of the log. - - `logIndex`: A hexadecimal of the log index position in the block. `Null` when it is a pending log. + - `logIndex`: A hexadecimal of the log index position in the block. `null` when it is a pending log. - `removed`: `true` when the log was removed, due to a chain reorganization. `false` if it is a valid log. - - `topics`: Array of DATA. An array of 0 to 4 32-bytes DATA of indexed log arguments. In Solidity the first `topic` is the hash of the signature of the event (e.g. Deposit(address,bytes32,uint256)), except when you declared the event with the anonymous specifier. - - `transactionHash`: 32 bytes. A hash of the transactions from which this log was created. `Null` when it is a pending log. - - `transactionIndex`: A hexadecimal of the transactions index position from which this log was created. `Null` when it is a pending log. + - `topics`: Array of DATA. An array of 0 to 4 32-bytes DATA of indexed log arguments. In Solidity the first `topic` is the hash of the signature of the event (for example, `Deposit(address,bytes32,uint256)`), except when you declared the event with the anonymous specifier. + - `transactionHash`: 32 bytes. A hash of the transactions from which this log was created. `null` when it is a pending log. + - `transactionIndex`: A hexadecimal of the transactions index position from which this log was created. `null` when it is a pending log. diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx index 325b393373f..6c63dc3d5e0 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx @@ -1 +1,3 @@ -Returns an array of all logs matching filter with given filter ID. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns an array of all logs matching the filter with the given filter ID. diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx index 47049a136e1..b7e134235b0 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx @@ -1,7 +1,7 @@ -A `filter object` with the fillowing keys and their values: +A `filter object` with the following keys and their values: - `fromBlock`: _[optional, default: `latest`]_ A hexadecimal block number, or `latest` for the last mined block. The `pending` option is not currently supported. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - `toBlock`: _[optional, default: `latest`]_ A hexadecimal block number, or `latest` for the last mined block. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - `address`: _[optional]_ (20 bytes). Contract address or a list of addresses from which logs should originate. - `topics`: _[optional]_ An array of 32 bytes DATA topics. Topics are order-dependent. Each topic can also be an array of DATA with `or` options. -- blockHash: _[optional]_ With the addition of EIP-234, `blockHash` restricts the logs returned to the single block with the 32-byte hash `blockHash`. Using `blockHash` is equivalent to `fromBlock` = `toBlock` = the block number with hash `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. +- `blockHash`: _[optional]_ With the addition of EIP-234, `blockHash` restricts the logs returned to the single block with the 32-byte hash `blockHash`. Using `blockHash` is equivalent to `fromBlock` = `toBlock` = the block number with hash `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx index 888c3d13ff1..b5896ac85b8 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx index d586f25e887..9f130c7471d 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx b/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx index ca340f25d49..bfc37eed578 100644 --- a/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx +++ b/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx @@ -1,10 +1,10 @@ -- `log object array`: (array) An array of log objects that match filter. For an array of logs that occurred since the last poll, use [eth_getFilterChanges](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx). Log objects contain the following keys and their values: +- `log object array`: (array) An array of log objects that match the filter. For an array of logs that occurred since the last poll, use [eth_getFilterChanges](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx). Log objects contain the following keys and their values: - `address`: 20 bytes. Address from which this log originated. - - `blockHash`: 32 bytes. The hash of the block where this log was in. `Null` when it is a pending log. - - `blockNumber`: The block number where this log was in. `Null` when it is a pending log. + - `blockHash`: 32 bytes. The hash of the block where this log was in. `null` when it's a pending log. + - `blockNumber`: The block number where this log was in. `null` when it's a pending log. - `data`: DATA. Contains the non-indexed arguments of the log. - - `logIndex`: A hexadecimal of the log index position in the block. `Null` when it is a pending log. - - `removed`: `true` when the log was removed, due to a chain reorganization. `false` if it is a valid log. - - `topics`: Array of DATA. An array of 0 to 4 32-bytes DATA of indexed log arguments. In Solidity the first `topic` is the hash of the signature of the event (e.g. Deposit(address,bytes32,uint256)), except when you declared the event with the anonymous specifier. - - `transactionHash`: 32 bytes. A hash of the transactions from which this log was created. `Null` when it is a pending log. - - `transactionIndex`: A hexadecimal of the transactions index position from which this log was created. `Null` when it is a pending log. + - `logIndex`: A hexadecimal of the log index position in the block. `null` when it is a pending log. + - `removed`: `true` when the log was removed, due to a chain reorganization. `false` if it's a valid log. + - `topics`: Array of DATA. An array of 0 to 4 32-bytes DATA of indexed log arguments. In Solidity the first `topic` is the hash of the signature of the event (for example, `Deposit(address,bytes32,uint256)`), except when you declared the event with the anonymous specifier. + - `transactionHash`: 32 bytes. A hash of the transactions from which this log was created. `null` when it's a pending log. + - `transactionIndex`: A hexadecimal of the transactions index position from which this log was created. `null` when it's a pending log. diff --git a/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx b/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx index fd0f16b5bad..513c4abba45 100644 --- a/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx +++ b/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx @@ -1,5 +1,10 @@ -Creates a filter in the node, to notify when a new block arrives. To check if the state has changed, call [`eth_getFilterChanges`](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' -:::tip Valid for fifteen minutes -Filter IDs will be valid for up to fifteen minutes, and can polled by any connection using the same ``. +Creates a filter in the node, to notify when a new block arrives. To check if the state has +changed, call [`eth_getFilterChanges`](../eth_getfilterchanges). + +:::warning Expires after 15 minutes of inactivity +Filters that are not polled using [`eth_getFilterChanges`](../eth_getfilterchanges) automatically +expires after 15 minutes of inactivity. +Filter IDs can be polled by any connection using the same API key. ::: diff --git a/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx b/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx +++ b/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx index 6dbde6b6001..002a023c8ba 100644 --- a/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx +++ b/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx b/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx index da5a9e89488..77501011fef 100644 --- a/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx +++ b/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx b/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx index e7303d38864..0596d79d0be 100644 --- a/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx +++ b/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx @@ -1,5 +1,10 @@ -Creates a filter object based on the given filter options, to notify when the state changes (logs). To check if the state has changed, call [`eth_getFilterChanges`](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx). +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' -:::tip Valid for fifteen minutes -Filter IDs will be valid for up to fifteen minutes, and can polled by any connection using the same ``. +Creates a filter object based on the given filter options, to notify when the state changes (logs). +To check if the state has changed, call [`eth_getFilterChanges`](../eth_getfilterchanges). + +:::warning Expires after 15 minutes of inactivity +Filters that are not polled using [`eth_getFilterChanges`](../eth_getfilterchanges) automatically +expires after 15 minutes of inactivity. +Filter IDs can be polled by any connection using the same API key. ::: diff --git a/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx b/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx +++ b/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx b/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx index fea97a7feb8..b3922b704c0 100644 --- a/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx +++ b/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx @@ -1,4 +1,4 @@ -A `filter object` with the fillowing keys and their values: +A `filter object` with the following keys and their values: - `address`: _[optional]_ A contract address or a list of addresses from which logs should originate. - `fromBlock`: _[optional, default is `latest`]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). diff --git a/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx b/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx index 3354ae727a4..2ebb7de9904 100644 --- a/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx +++ b/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx b/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx index e8b7a0d8938..01663790078 100644 --- a/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx +++ b/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/filter-methods/_eth_newpendingtransactionfilter-description.mdx b/services/reference/_partials/filter-methods/_eth_newpendingtransactionfilter-description.mdx deleted file mode 100644 index e7229770836..00000000000 --- a/services/reference/_partials/filter-methods/_eth_newpendingtransactionfilter-description.mdx +++ /dev/null @@ -1,5 +0,0 @@ -:::warning Not supported - -The `eth_newPendingTransactionFilter` JSON-RPC method is not supported by Infura. - -::: diff --git a/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx b/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx index 7090b7eb6b4..30c7ab102a7 100644 --- a/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx +++ b/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx @@ -1 +1,5 @@ -Uninstalls a filter with given ID. This method should always be called when watching is no longer needed. Additionally, filters time out when they aren't requested with [`eth_getFilterChanges`](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx) for a period of time. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Uninstalls a filter with given ID. This method should always be called when watching is no longer needed. +Additionally, filters time out when they aren't requested with +[`eth_getFilterChanges`](../../ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx) for a period of time. diff --git a/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx b/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx +++ b/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx index e155d40a55f..ae2c961aebc 100644 --- a/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx +++ b/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx b/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx index 276e3a761c7..1e79ed42aee 100644 --- a/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx +++ b/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx index 35c54020be3..8b146687ff6 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx @@ -1,2 +1,4 @@ +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + Creates a new subscription for particular events. The node returns a subscription ID. For each event -that matches the subscription, a notification with relevant data is sent together with the subscription ID. +that matches the subscription, a notification with relevant data is sent together with the subscription ID. diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx index 1060ec18ead..19e0c2ab73a 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx @@ -1,4 +1,4 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). :::tip WebSocket connections only diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx index 8fde87ee08d..738eb0f2939 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx @@ -3,7 +3,6 @@ Specify one of the following subscription events: - `newHeads`: Subscribing to this returns a notification each time a new header is appended to the chain, including chain reorganizations. In a chain reorganization, the subscription emits all new headers for the new chain. Therefore the subscription can emit multiple headers at the same height. - `logs`: Returns logs that are included in new imported blocks and match the given filter criteria. In case of a chain reorganization, previously sent logs that are on the old chain are resent with the removed property set to `true`. Logs from transactions that ended up in the new chain are emitted. Therefore a subscription can emit logs for the same transaction multiple times. This parameter has the following fields: - - `address`: (_optional_) Either an address or an array of addresses. Only logs that are created from these addresses are returned. - `topics`: (_optional_) Only logs that match these specified topics are returned. diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx index 7a9bda76b35..891a4dc80d7 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx @@ -4,7 +4,7 @@ Specify one of the following subscription events: - `logs`: Returns logs that are included in new imported blocks and match the given filter criteria. In case of a chain reorganization, previously sent logs that are on the old chain are resent with the removed property set to `true`. Logs from transactions that ended up in the new chain are emitted. Therefore a subscription can emit logs for the same transaction multiple times. This parameter has the following fields: - `address`: (_optional_) Either an address or an array of addresses. Only logs that are created from these addresses are returned. - `topics`: (_optional_) Only logs that match these specified topics are returned. - :::tip Infura Recommendation - We strongly recommend specifying a filter (`address` or `topics` or both) when subscribing to the `logs` event. - ::: + :::tip Infura Recommendation + We strongly recommend specifying a filter (`address` or `topics` or both) when subscribing to the `logs` event. + ::: - `newPendingTransactions`: Returns the hash for all transactions that are added to the pending state and are signed with a key that's available in the node. When a transaction that was previously part of the canonical chain isn't part of the new canonical chain after a reorganization, it's emitted again. diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx index ed2af47320c..24fb88fbd5f 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx index dbe0bdb44bc..b4570a387b5 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -56,9 +56,7 @@ import TabItem from "@theme/TabItem" "blockNumber": "0x29e87", "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", "logIndex": "0x0", - "topics": [ - "0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902" - ], + "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"], "transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4", "transactionIndex": "0x0" } diff --git a/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx b/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx index b6275210f56..a26d8b2e418 100644 --- a/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx +++ b/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -56,9 +56,7 @@ import TabItem from "@theme/TabItem" "blockNumber": "0x29e87", "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003", "logIndex": "0x0", - "topics": [ - "0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902" - ], + "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"], "transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4", "transactionIndex": "0x0" } diff --git a/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx b/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx index e6670afea3f..33f7170ed1e 100644 --- a/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx +++ b/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx @@ -1 +1,4 @@ -Cancel subscriptions by calling this method with the subscription ID. It returns a boolean indicating that the subscription was canceled successfully. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Cancel subscriptions by calling this method with the subscription ID. It returns a boolean indicating +that the subscription was canceled successfully. diff --git a/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx b/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx index 1060ec18ead..19e0c2ab73a 100644 --- a/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx +++ b/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx @@ -1,4 +1,4 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). :::tip WebSocket connections only diff --git a/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx index e84301e1895..3eed9564bda 100644 --- a/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx b/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx index 1e980b8ff0e..9d7f1ddc4b1 100644 --- a/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx +++ b/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/trace-methods/_trace_block-description.mdx b/services/reference/_partials/trace-methods/_trace_block-description.mdx index 6d3ca6d3bf1..83752a6d5e8 100644 --- a/services/reference/_partials/trace-methods/_trace_block-description.mdx +++ b/services/reference/_partials/trace-methods/_trace_block-description.mdx @@ -1 +1,4 @@ -Get trace information about all the transactions in a given block. This can be useful for debugging purposes or for analyzing the behavior of a blockchain. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Get trace information about all the transactions in a given block. This can be useful for debugging +purposes or for analyzing the behavior of a blockchain. diff --git a/services/reference/_partials/trace-methods/_trace_block-example.mdx b/services/reference/_partials/trace-methods/_trace_block-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/trace-methods/_trace_block-example.mdx +++ b/services/reference/_partials/trace-methods/_trace_block-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/trace-methods/_trace_block-request.mdx b/services/reference/_partials/trace-methods/_trace_block-request.mdx index c911d81df78..88d813e19ad 100644 --- a/services/reference/_partials/trace-methods/_trace_block-request.mdx +++ b/services/reference/_partials/trace-methods/_trace_block-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/trace-methods/_trace_block-response.mdx b/services/reference/_partials/trace-methods/_trace_block-response.mdx index 7a94a71a7ff..1f583910eeb 100644 --- a/services/reference/_partials/trace-methods/_trace_block-response.mdx +++ b/services/reference/_partials/trace-methods/_trace_block-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -42,7 +42,7 @@ import TabItem from "@theme/TabItem" "traceAddress": [0], "transactionHash": "0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e", "transactionPosition": 0, - "type": "suicide" + "type": "selfdestruct" }, { "action": { diff --git a/services/reference/_partials/trace-methods/_trace_call-description.mdx b/services/reference/_partials/trace-methods/_trace_call-description.mdx index 99230ba8b58..b7570857566 100644 --- a/services/reference/_partials/trace-methods/_trace_call-description.mdx +++ b/services/reference/_partials/trace-methods/_trace_call-description.mdx @@ -1,2 +1,4 @@ -Executes the given call and returns a number of possible traces for it. Use this API to retrieve detailed information about the transaction execution, including -state changes and logs generated during the process. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Executes the given call and returns a number of possible traces for it. Use this API to retrieve detailed +information about the transaction execution, including state changes and logs generated during the process. diff --git a/services/reference/_partials/trace-methods/_trace_call-example.mdx b/services/reference/_partials/trace-methods/_trace_call-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/trace-methods/_trace_call-example.mdx +++ b/services/reference/_partials/trace-methods/_trace_call-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/trace-methods/_trace_call-parameters.mdx b/services/reference/_partials/trace-methods/_trace_call-parameters.mdx index 106e5406504..0338bfae85e 100644 --- a/services/reference/_partials/trace-methods/_trace_call-parameters.mdx +++ b/services/reference/_partials/trace-methods/_trace_call-parameters.mdx @@ -1,13 +1,13 @@ - `transaction call object` _[Required]_ with the following keys and their values: - `from`: 20 bytes. The address the transaction is sent from. - `to`: 20 bytes. The address the transaction is directed to. - - `gas`: _[optional]_ The hexadecimal value of the gas provided for the transaction execution. - - `gasPrice`: _[optional]_ The hexadecimal value of the gasPrice used for each paid gas. - - `maxPriorityFeePerGas`: _[optional]_ Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. + - `gas`: _[optional]_ The gas provided for the transaction execution, in hexadecimal. + - `gasPrice`: _[optional]_ The gas price used for each paid gas, in hexadecimal. + - `maxPriorityFeePerGas`: _[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). - - `maxFeePerGas`: _[optional]_ Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. + - `maxFeePerGas`: _[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). - - `value`: _[optional]_ The hexadecimal equivalent of the value sent with this transaction. + - `value`: _[optional]_ The value sent with this transaction, in hexadecimal. - `data`: _[optional]_ The hash of the method signature and encoded parameters. See the [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). - `block parameter` : _[Required]_ The hexadecimal block number, or the string `latest`, `earliest`, or `pending`. See the diff --git a/services/reference/_partials/trace-methods/_trace_call-request.mdx b/services/reference/_partials/trace-methods/_trace_call-request.mdx index 41943ea2d12..682931e0f99 100644 --- a/services/reference/_partials/trace-methods/_trace_call-request.mdx +++ b/services/reference/_partials/trace-methods/_trace_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/trace-methods/_trace_call-response.mdx b/services/reference/_partials/trace-methods/_trace_call-response.mdx index a0811737161..0a2aac9d807 100644 --- a/services/reference/_partials/trace-methods/_trace_call-response.mdx +++ b/services/reference/_partials/trace-methods/_trace_call-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/trace-methods/_trace_callmany-description.mdx b/services/reference/_partials/trace-methods/_trace_callmany-description.mdx index 06d6c293e30..638dc43b439 100644 --- a/services/reference/_partials/trace-methods/_trace_callmany-description.mdx +++ b/services/reference/_partials/trace-methods/_trace_callmany-description.mdx @@ -1 +1,4 @@ -Performs multiple call-traces on top of the same block. You can analyze the interactions between different transactions and contracts. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Performs multiple call-traces on top of the same block. You can analyze the interactions between +different transactions and contracts. diff --git a/services/reference/_partials/trace-methods/_trace_callmany-example.mdx b/services/reference/_partials/trace-methods/_trace_callmany-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/trace-methods/_trace_callmany-example.mdx +++ b/services/reference/_partials/trace-methods/_trace_callmany-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx b/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx index 2d65dddecbf..a183d39d9f1 100644 --- a/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx +++ b/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx @@ -1,5 +1,5 @@ - `trace call parameters`: _[Required]_ Array of trace call parameters. Each trace call parameter itself is an array containing the following: - - `transaction call object`: _[Required]_ Transaction call object containing the same data as in the [`trace_call`](../../ethereum/json-rpc-methods/trace-methods/trace_call.mdx#parameters) parameter. - - `options`:_[Optional]_ An array of tracing options. Tracing options are [`trace`](../../ethereum/json-rpc-methods/trace-methods/index.md#trace) and [`stateDiff`](../../ethereum/json-rpc-methods/trace-methods/index.md#statediff). Specify both options or none. + - `transaction call object`: _[Required]_ Transaction call object containing the same data as in the [`trace_call`](../../ethereum/json-rpc-methods/trace-methods/trace_call.mdx#parameters) parameter. + - `options`: _[Optional]_ An array of tracing options. Tracing options are [`trace`](../../ethereum/json-rpc-methods/trace-methods/index.md#trace) and [`stateDiff`](../../ethereum/json-rpc-methods/trace-methods/index.md#statediff). Specify both options or none. - `block parameter`: _[Required]_ The hexadecimal block number, or the string `latest`, `earliest`, or `pending`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). The block parameter is applied uniformly to all trace calls in the `trace call parameters` array. diff --git a/services/reference/_partials/trace-methods/_trace_callmany-request.mdx b/services/reference/_partials/trace-methods/_trace_callmany-request.mdx index d91786e9046..3a7d248c9de 100644 --- a/services/reference/_partials/trace-methods/_trace_callmany-request.mdx +++ b/services/reference/_partials/trace-methods/_trace_callmany-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/trace-methods/_trace_callmany-response.mdx b/services/reference/_partials/trace-methods/_trace_callmany-response.mdx index 4ebf9b89c36..1ba1e89e62c 100644 --- a/services/reference/_partials/trace-methods/_trace_callmany-response.mdx +++ b/services/reference/_partials/trace-methods/_trace_callmany-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/trace-methods/_trace_filter-description.mdx b/services/reference/_partials/trace-methods/_trace_filter-description.mdx index 467bf68707f..1d2af5bc135 100644 --- a/services/reference/_partials/trace-methods/_trace_filter-description.mdx +++ b/services/reference/_partials/trace-methods/_trace_filter-description.mdx @@ -1 +1,3 @@ -Returns traces matching the specified filter. The response is limited to 10000 traces per response. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Returns traces matching the specified filter. The block range is limited to 100 blocks per query (the difference between `fromBlock` and `toBlock`). diff --git a/services/reference/_partials/trace-methods/_trace_filter-example.mdx b/services/reference/_partials/trace-methods/_trace_filter-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/trace-methods/_trace_filter-example.mdx +++ b/services/reference/_partials/trace-methods/_trace_filter-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/trace-methods/_trace_filter-request.mdx b/services/reference/_partials/trace-methods/_trace_filter-request.mdx index 11dad9e0b45..ff858d86f3e 100644 --- a/services/reference/_partials/trace-methods/_trace_filter-request.mdx +++ b/services/reference/_partials/trace-methods/_trace_filter-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "trace_filter", "params": [{"fromBlock": "0x1", "toBlock": "0x21", "after": 2, "count":2, "fromAddress": ["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"]}], "id": 415}' +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "trace_filter", "params": [{"fromBlock": "0x1", "toBlock": "0x21", "after": 2, "count": 2, "fromAddress": ["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"]}], "id": 415}' ``` diff --git a/services/reference/_partials/trace-methods/_trace_filter-response.mdx b/services/reference/_partials/trace-methods/_trace_filter-response.mdx index 66ab946e83e..99f9ed3cba8 100644 --- a/services/reference/_partials/trace-methods/_trace_filter-response.mdx +++ b/services/reference/_partials/trace-methods/_trace_filter-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/_partials/trace-methods/_trace_transaction-description.mdx b/services/reference/_partials/trace-methods/_trace_transaction-description.mdx index 829972e0fc1..498bc376ff1 100644 --- a/services/reference/_partials/trace-methods/_trace_transaction-description.mdx +++ b/services/reference/_partials/trace-methods/_trace_transaction-description.mdx @@ -1 +1,6 @@ -Provides transaction processing of type [`trace`](../../ethereum/json-rpc-methods/trace-methods/index.md#trace) for the specified transaction. Use this API to improve smart contract performance by analyzing its internal transactions and execution steps. You can use this information to identify bottlenecks and optimize the contract for better performance. +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +Provides transaction processing of type [`trace`](../../ethereum/json-rpc-methods/trace-methods/index.md#trace) +for the specified transaction. Use this API to improve smart contract performance by analyzing its +internal transactions and execution steps. You can use this information to identify bottlenecks and +optimize the contract for better performance. diff --git a/services/reference/_partials/trace-methods/_trace_transaction-example.mdx b/services/reference/_partials/trace-methods/_trace_transaction-example.mdx index e6703977041..5300ca6f76e 100644 --- a/services/reference/_partials/trace-methods/_trace_transaction-example.mdx +++ b/services/reference/_partials/trace-methods/_trace_transaction-example.mdx @@ -1 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/_partials/trace-methods/_trace_transaction-request.mdx b/services/reference/_partials/trace-methods/_trace_transaction-request.mdx index 78bd29a36b4..96f1d176a91 100644 --- a/services/reference/_partials/trace-methods/_trace_transaction-request.mdx +++ b/services/reference/_partials/trace-methods/_trace_transaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mainnet.infura.io/v3/ \ diff --git a/services/reference/_partials/trace-methods/_trace_transaction-response.mdx b/services/reference/_partials/trace-methods/_trace_transaction-response.mdx index c279214afaa..ced5850efce 100644 --- a/services/reference/_partials/trace-methods/_trace_transaction-response.mdx +++ b/services/reference/_partials/trace-methods/_trace_transaction-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/arbitrum/index.md b/services/reference/arbitrum/index.md index d99e24f604e..4cfe5f01e01 100644 --- a/services/reference/arbitrum/index.md +++ b/services/reference/arbitrum/index.md @@ -7,15 +7,19 @@ import CardList from '@site/src/components/CardList' # Arbitrum :::note Failover protection - Arbitrum [failover support](../../concepts/failover-protection.md) is available for customers on the Growth or Custom plans. Arbitrum failover support is available on Mainnet only. Calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). +::: +:::note Archive data support +All calls that require access to archive data (older than 128 blocks) are handled by the +[DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service. These archive calls +are routed to [partner infrastructure providers](#partners-and-privacy-policies). ::: Arbitrum is an Ethereum scaling solution that provides high throughput and low-cost smart contract execution. Arbitrum's design -allows it to be fully compatible with Ethereum. Developers will find that building with Arbitrum is nearly identical to +allows it to be fully compatible with Ethereum. Building on Arbitrum is almost identical to building on Ethereum. Arbitrum is compatible with Ethereum's JSON-RPC API implementation, which allows using tools such as Infura, Hardhat, and @@ -31,29 +35,40 @@ MetaMask. Select one of the following options to get started with the Arbitrum network: ## Partners and privacy policies No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. -For any parameters required in an RPC request, these could be the type that describe the method, addresses, gas, and session. +### Failover support partner + +Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) is Infura's failover-protection partner and currently offers failover support for all Infura's Arbitrum methods. + +### Archive data partners + +The following partners provide access to archive data for the various Arbitrum networks: -Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) is Infura's failover-protection partner and currently offer failover support for all Infura's Arbitrum methods. +- **Mainnet**: + - [Nodefleet](https://nodefleet.org/) + - BlockPi ([Terms of Service](https://blockpi.io/terms-of-use), [Privacy Policy](https://blockpi.io/privacy-policy)) + - Chainstack ([Terms of Service](https://chainstack.com/tos/), [Privacy Policy](https://chainstack.com/privacy/)) +- **Sepolia**: + - [Nodefleet](https://nodefleet.org/) diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_accounts-request.mdx index 6cc59587a9b..f00851abb70 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_blocknumber-request.mdx index 07bb04eced2..1363fbfa9c5 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_call-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_call-request.mdx index c33f6d74dc5..de12ed2acfd 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_chainid-request.mdx index 49d0dba701d..ffdf8f2ce66 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_createaccesslist-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_createaccesslist-request.mdx index 7a02ba25813..4047ea56671 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_createaccesslist-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_createaccesslist-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_estimategas-request.mdx index 3a818f524bc..9c296a40602 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_feehistory-request.mdx index 32f9acbe2be..9e5d77706f4 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gasprice-request.mdx index 0f90c6da422..bd04dbdc04e 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getbalance-request.mdx index a707b2f64bb..6db72eda0bd 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getblockbyhash-request.mdx index 3a10b02f4ba..708833ded15 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getblockbynumber-request.mdx index af7d57736c4..f652f285204 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getblockreceipts-request.mdx index 5dda398a738..19454bdff9f 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ curl https://arbitrum-mainnet.infura.io/v3/ \ ``` - \ No newline at end of file + diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 766c68168f7..bfa7d619f5b 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 0bb7370eeb9..4f63238b3a7 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getcode-request.mdx index 000ba7b0751..15071971b9a 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getlogs-request.mdx index 1a20b811017..97d31ab4130 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getproof-request.mdx index f390c5ad0c6..238dedeba7a 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getstorageat-request.mdx index 07dbee12adb..ef67f11e599 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 440761f2357..f81a1d17fd0 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 850e3bdd057..9ed244a83d6 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index af81a6fdb40..a5fb9a37333 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactioncount-request.mdx index dae17e39ab9..65687427437 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index dd78c889884..6254528b7ae 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index bdeb427871d..fabdba3e9d1 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index 8dc48f56dfd..b55159ff0dd 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 3fb629e8b7b..d14f03f788c 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 220e2e48c72..ecc1574b687 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index d9bf3f2c680..0c668e135d3 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://arbitrum-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 7f3fc619cbb..80642ce4198 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/arbitrum/json-rpc-methods/_eth_syncing-request.mdx index 17e299c476b..b35608ccc2b 100644 --- a/services/reference/arbitrum/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_net_listening-request.mdx b/services/reference/arbitrum/json-rpc-methods/_net_listening-request.mdx index 002a621cf41..d7909fa4ec1 100644 --- a/services/reference/arbitrum/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_net_peercount-request.mdx b/services/reference/arbitrum/json-rpc-methods/_net_peercount-request.mdx index 1f43fda5738..16c15469f6d 100644 --- a/services/reference/arbitrum/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_net_version-request.mdx b/services/reference/arbitrum/json-rpc-methods/_net_version-request.mdx index 8f410fc1a62..22d758b68f7 100644 --- a/services/reference/arbitrum/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/arbitrum/json-rpc-methods/_web3_clientversion-request.mdx index 3c009cca84a..b13200805e6 100644 --- a/services/reference/arbitrum/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://arbitrum-mainnet.infura.io/v3/ \ diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..80313fca65c --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..f531e8fec29 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..aa8f5def1c1 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..112c883ad2b --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..a2c39f4964f --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/index.md b/services/reference/arbitrum/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..c98871406f9 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Arbitrum bundler methods +sidebar_label: Bundler methods +sidebar_key: arbitrum-bundler-methods +description: Arbitrum bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Arbitrum mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..ecc88fd9e62 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..b6220e3b9a6 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..fed545f2c83 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/arbitrum/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/eth_accounts.mdx b/services/reference/arbitrum/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..72049b381e2 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Arbitrum eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Arbitrum addresses. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_blocknumber.mdx b/services/reference/arbitrum/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..c6a09525947 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Arbitrum eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Arbitrum block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_call.mdx b/services/reference/arbitrum/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..1c4afa23d50 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_call.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Arbitrum eth_call +sidebar_label: eth_call +description: Executes an Arbitrum call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_chainid.mdx b/services/reference/arbitrum/json-rpc-methods/eth_chainid.mdx index a6f446ad268..4754440f765 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Arbitrum eth_chainId +sidebar_label: eth_chainId +description: Returns the Arbitrum chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_coinbase.mdx b/services/reference/arbitrum/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/arbitrum/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/arbitrum/json-rpc-methods/eth_createaccesslist.mdx b/services/reference/arbitrum/json-rpc-methods/eth_createaccesslist.mdx index cb0d52a0fd4..571afe28a15 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_createaccesslist.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_createaccesslist.mdx @@ -1,40 +1,44 @@ --- -title: "eth_createAccessList" +title: Arbitrum eth_createAccessList +sidebar_label: eth_createAccessList +description: Creates an access list on Arbitrum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_createaccesslist-description.mdx" +import Description from '/services/reference/_partials/_eth_createaccesslist-description.mdx' + +# `eth_createAccessList` ## Parameters -import Params from "/services/reference/_partials/_eth_createaccesslist-parameters.mdx" +import Params from '/services/reference/_partials/_eth_createaccesslist-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_createaccesslist-returns.mdx" +import Returns from '/services/reference/_partials/_eth_createaccesslist-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_createaccesslist-example.mdx" +import Example from '/services/reference/_partials/_eth_createaccesslist-example.mdx' ### Request -import Request from "./_eth_createaccesslist-request.mdx" +import Request from './_eth_createaccesslist-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_createaccesslist-response.mdx" +import Response from '/services/reference/_partials/_eth_createaccesslist-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_estimategas.mdx b/services/reference/arbitrum/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..0e5bf642560 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Arbitrum eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for an Arbitrum transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_feehistory.mdx b/services/reference/arbitrum/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..bb918c8a3b3 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Arbitrum eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical gas information for Arbitrum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gasprice.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..5b9802643f8 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Arbitrum eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns current Arbitrum gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getbalance.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..c575e3469ce 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Arbitrum eth_getBalance +sidebar_label: eth_getBalance +description: Returns Arbitrum account balance. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..ecb9f3df706 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Arbitrum eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Arbitrum block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..06307c43fd2 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Arbitrum eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Arbitrum block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getblockreceipts.mdx index d8cab295159..45def3acf0a 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: Arbitrum eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for an Arbitrum block. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..ad37de46c38 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Arbitrum eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns number of transactions in an Arbitrum block by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..0cf23539a32 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Arbitrum eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns the number of transactions in an Arbitrum block by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getcode.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..c9018634e69 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Arbitrum eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of an Arbitrum smart contract. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getlogs.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..4fb7f4b0452 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Arbitrum eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered Arbitrum logs. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getproof.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..88bfc4dd45c 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Arbitrum eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs for an Arbitrum account. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getstorageat.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..dce4314178d 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Arbitrum eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Returns storage value for an Arbitrum address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..bdaaa937359 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Arbitrum eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Returns Arbitrum transaction information by block hash and index. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..e17203eef5c 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Arbitrum eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Returns Arbitrum transaction information by block number and index. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..fb39d63b17d 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Arbitrum eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Returns Arbitrum transaction information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..df736157442 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Arbitrum eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Returns transaction count for an Arbitrum address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..457bfe3f6df 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Arbitrum eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Returns Arbitrum transaction receipt by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..86922facdcd 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Arbitrum eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Returns Arbitrum uncle information by block hash and index. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..03d8db4bd89 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Arbitrum eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Returns Arbitrum uncle information by block number and index. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..97465a71ec5 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Arbitrum eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Returns Arbitrum uncle count by block hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..88e259266f9 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Arbitrum eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Returns Arbitrum uncle count by block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/arbitrum/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..a0088548ebe 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Arbitrum eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates priority fee required to be included in Arbitrum block. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/arbitrum/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..d690d1b4c3d 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Arbitrum eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed Arbitrum transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/arbitrum/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/arbitrum/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/arbitrum/json-rpc-methods/eth_sign.mdx b/services/reference/arbitrum/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/arbitrum/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/arbitrum/json-rpc-methods/eth_syncing.mdx b/services/reference/arbitrum/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..8903d323b2c 100644 --- a/services/reference/arbitrum/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/arbitrum/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Arbitrum eth_syncing +sidebar_label: eth_syncing +description: Returns the Arbitrum sync status. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..193a48714da --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..77caf98f9af --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..4aeea293aae --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..fe954567928 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..3f7270d331c --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://arbitrum-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..5828ded4460 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Arbitrum logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..8274dc17dae --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns Arbitrum logs by filter ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..72a04834746 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates an Arbitrum filter to notify when a new block arrives. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..66fb93f708c --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_newFilter +sidebar_label: eth_newFilter +description: Creates an Arbitrum filter to notify when the state changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..e0aa8351119 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls an Arbitrum filter. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/arbitrum/json-rpc-methods/filter-methods/index.md b/services/reference/arbitrum/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..95618da4e03 --- /dev/null +++ b/services/reference/arbitrum/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,18 @@ +--- +sidebar_label: 'Filter methods' +sidebar_key: arbitrum-filter-methods +--- + +# Arbitrum filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/arbitrum/json-rpc-methods/index.md b/services/reference/arbitrum/json-rpc-methods/index.md index 6e653fb7242..dc887f134b3 100644 --- a/services/reference/arbitrum/json-rpc-methods/index.md +++ b/services/reference/arbitrum/json-rpc-methods/index.md @@ -1,12 +1,13 @@ --- -title: "JSON-RPC APIs" +sidebar_label: JSON-RPC API +sidebar_key: arbitrum-json-rpc-api description: Supported standard Ethereum methods on Arbitrum network. --- -# JSON-RPC APIs +# Arbitrum JSON-RPC API The standard Ethereum methods documented in this section are supported by Infura on the Arbitrum network. The Arbitrum API aims to be a superset of the Ethereum JSON-RPC specification and supports all the standard Ethereum JSON-RPC-APIs. -When interacting with the API, you can expect all the usual Ethereum JSON-RPC specification fields, [and some extra ones](https://developer.offchainlabs.com/docs/differences_overview#json-rpc-api) used to display information unique to Arbitrum. +When interacting with the API, you can expect all the usual Ethereum JSON-RPC specification fields, [and some extra ones](https://docs.arbitrum.io/build-decentralized-apps/arbitrum-vs-ethereum/rpc-methods) used to display information unique to Arbitrum. diff --git a/services/reference/arbitrum/json-rpc-methods/net_peercount.mdx b/services/reference/arbitrum/json-rpc-methods/net_peercount.mdx index c0246b44d39..74b69b13a60 100644 --- a/services/reference/arbitrum/json-rpc-methods/net_peercount.mdx +++ b/services/reference/arbitrum/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Arbitrum net_peerCount +sidebar_label: net_peerCount +description: Returns the Arbitrum peer count. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/net_version.mdx b/services/reference/arbitrum/json-rpc-methods/net_version.mdx index 1d6c0080c60..f0dabb6ab33 100644 --- a/services/reference/arbitrum/json-rpc-methods/net_version.mdx +++ b/services/reference/arbitrum/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Arbitrum net_version +sidebar_label: net_version +description: Returns the Arbitrum network ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index ff5a1d16353..a0ab85896c1 100644 --- a/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index 250af79b451..97f97c215a8 100644 --- a/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/arbitrum/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,11 +1,11 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' ```bash -wscat -c wss://arbitrum-mainnet.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' +wscat -c wss://arbitrum-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' ``` diff --git a/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_subscribe.mdx index d79d2a15bb3..efa24097d45 100644 --- a/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: Arbitrum eth_subscribe +sidebar_label: eth_subscribe +description: Creates a new Arbitrum supscription. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx" +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 6fe9ca4660e..7a664cc8501 100644 --- a/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/arbitrum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: Arbitrum eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels Arbitrum subscriptions. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx" +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/arbitrum/json-rpc-methods/subscription-methods/index.md b/services/reference/arbitrum/json-rpc-methods/subscription-methods/index.md index 33a8804d49c..b533d84d115 100644 --- a/services/reference/arbitrum/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/arbitrum/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,9 @@ --- -title: "Subscription methods" +sidebar_label: 'Subscription methods' +sidebar_key: arbitrum-subscription-methods --- -# Subscription methods +# Arbitrum subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/arbitrum/json-rpc-methods/web3_clientversion.mdx b/services/reference/arbitrum/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..02c386dac7c 100644 --- a/services/reference/arbitrum/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/arbitrum/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Arbitrum web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns the Arbitrum client version. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/arbitrum/quickstart.md b/services/reference/arbitrum/quickstart.md index 6e00e9051a1..90669ffa400 100644 --- a/services/reference/arbitrum/quickstart.md +++ b/services/reference/arbitrum/quickstart.md @@ -1,11 +1,12 @@ --- description: Arbitrum quickstart guide +sidebar_label: Quickstart sidebar_position: 2 --- import Banner from '@site/src/components/Banner' -# Quickstart +# Arbitrum quickstart This quickstart guide will help you set up and make calls on the Arbitrum network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Arbi ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Arbitrum network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Arbitrum network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://arbitrum-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://arbitrum-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://arbitrum-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://arbitrum-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,17 +126,20 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers"); + const ethers = require('ethers') - const provider = new ethers.providers.JsonRpcProvider("https://arbitrum-mainnet.infura.io/v3/"); + const provider = new ethers.providers.JsonRpcProvider( + 'https://arbitrum-mainnet.infura.io/v3/' + ) - provider.getBlockNumber() - .then(blockNumber => { - console.log(blockNumber)" - }) - .catch(error => { - console.error(error); - }); + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) ``` 1. Run the code using the following command: @@ -192,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/avalanche-c-chain/index.md b/services/reference/avalanche-c-chain/index.md index d514bae09dc..a0ba5e0ae08 100644 --- a/services/reference/avalanche-c-chain/index.md +++ b/services/reference/avalanche-c-chain/index.md @@ -8,57 +8,56 @@ import CardList from '@site/src/components/CardList' :::note Failover protection -Avalanche (C-Chain) [failover support](../../concepts/failover-protection.md) is available for customers on the Growth or Custom plans. +Avalanche (C-Chain) [failover support](../../concepts/failover-protection.md) is available for +customers on the Growth or Custom plans. Avalanche (C-Chain) failover support is available on Mainnet only. Calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). ::: -Avalanche is a Proof of Stake (PoS), layer 1 platform that features 3 built-in blockchains: -- [Contract Chain (C-Chain)](https://docs.avax.network/learn/primary-network#c-chain) -- [Exchange Chain (X-Chain)](https://docs.avax.network/learn/primary-network#x-chain) -- [Platform Chain (P-Chain)](https://docs.avax.network/learn/primary-network#p-chain) +Avalanche is a Proof of Stake (PoS), layer 1 platform that features 3 built-in blockchains: + +- [Contract Chain (C-Chain)](https://build.avax.network/docs/primary-network#c-chain-contract-chain) +- [Exchange Chain (X-Chain)](https://build.avax.network/docs/primary-network#x-chain-exchange-chain) +- [Platform Chain (P-Chain)](https://build.avax.network/docs/primary-network#p-chain-platform-chain) Infura provides access to the C-Chain only. -The C-Chain supports the Ethereum Virtual Machine (EVM), allowing Ethereum developers to deploy Solidity -smart contract dapps onto the C-Chain. Dapps can run on both Avalanche and Ethereum. Avalanche -Platform's C-Chain is EVM-compatible, but it is not identical. +The C-Chain supports the Ethereum Virtual Machine (EVM), allowing Ethereum developers to deploy Solidity +smart contract dapps onto the C-Chain. Dapps can run on both Avalanche and Ethereum. Avalanche +Platform's C-Chain is EVM-compatible, but it is not identical. :::info See also -- View the [official Avalanche C-Chain documentation](https://docs.avax.network/dapps) -for more information about building on the Avalanche C-Chain. -- View the [differences between developing on Ethereum versus Avalanche C-Chain](https://docs.avax.network/dapps/end-to-end/launch-ethereum-dapp#gotchas-and-things-to-look-out-for). +- View the [official Avalanche C-Chain documentation](https://build.avax.network/) + for more information about building on the Avalanche C-Chain. ::: Select one of the following options to get started with the Avalanche C-Chain network: ## Partners and privacy policies No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. -For any parameters required in an RPC request, these could be the type that describe the method, addresses, gas, and session. - -Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) is Infura's failover-protection partner and currently offer failover support for all Infura's Avalanche (C-Chain) methods. +Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) is Infura's failover-protection partner and currently offers failover support for all Infura's Avalanche (C-Chain) methods. diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_accounts-request.mdx index e107b1a6181..6d8d566f20d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_blocknumber-request.mdx index 71a007a77f9..c9011af53d7 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_call-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_call-request.mdx index ad191105cb0..10bf44b72d7 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_chainid-request.mdx index 5f1e62c1ed2..2c911c61775 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_estimategas-request.mdx index 95463020b6b..37b6d93bc60 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_feehistory-request.mdx index 8b997112fe0..45b4e3dc27d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gasprice-request.mdx index 42db174831a..cf6601a9b45 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getbalance-request.mdx index e0a2ad69534..7bab2cf5d01 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx index b3b9716126b..9837cb19983 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx index 51c41c62391..b78559515e5 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx index 03c7e7df93f..aaf5e839f78 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https:///avalanche-mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ wscat -c wss:///avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": ``` - \ No newline at end of file + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 68d0e8293c3..448a8cec81b 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 630eb6ceb07..fc3192e04b8 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getcode-request.mdx index 5695cf3c87a..ca17b27cefb 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getlogs-request.mdx index 7c006040ba7..ddd16fe372d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getproof-request.mdx index 23ea591612c..f2e2fa0daa9 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getstorageat-request.mdx index 7f8fa9d9981..62b9c6ccd24 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 595449a9ac5..9da3f9ffb3f 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index b0a584b5329..e3a360585de 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 83a5e8beb49..e34fe2c9295 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx index aa52a4374e0..b42a7ff1d7e 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index d9e522642f8..33a2eb8b22d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index 60628c89591..82e0e284dcb 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index 8cf3983b7c2..b97d9dc1654 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 118a6a772dd..5a9eb45b72f 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 1cfaa9bb7f3..71ef9a9496d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 1ded0f7bfe8..839ba1231c5 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://avalanche-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://avalanche-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 563ba665474..189b8b3f43b 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_net_peercount-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_net_peercount-request.mdx index 29ad5cc5fd0..90587bcb0db 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_net_version-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_net_version-request.mdx index 3e721098bb4..d8e41e2a92d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/_web3_clientversion-request.mdx index 6f2dcb3933b..c535c56eaea 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://avalanche-mainnet.infura.io/v3/ \ diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..3187c1a1e23 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..ec7a91d9cca --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..c11be5743a3 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..bcf4b8e23f5 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..0680b7c8d2b --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/index.md b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..ec6e447cc9c --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Avalanche (C-Chain) bundler methods +sidebar_label: Bundler methods +sidebar_key: avalanche-c-chain-bundler-methods +description: Avalanche (C-Chain) bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Avalanche mainnet +and Fuji: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..40f336a60d6 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..ed18b309162 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..c446ec352a1 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/avalanche/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_accounts.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..61472db7b12 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Avalanche (C-Chain) eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Avalanche (C-Chain) accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_blocknumber.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..d838098101c 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Avalanche (C-Chain) eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Avalanche (C-Chain) block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_call.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..9f36d0bba80 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_call.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Avalanche (C-Chain) eth_call +sidebar_label: eth_call +description: Executes a Avalanche (C-Chain) call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_chainid.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_chainid.mdx index a6f446ad268..5ae30e1af13 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Avalanche (C-Chain) eth_chainId +sidebar_label: eth_chainId +description: Returns the Avalanche (C-Chain) chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_coinbase.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_estimategas.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..89e88ff4f5f 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Avalanche (C-Chain) eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Avalanche (C-Chain) transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_feehistory.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..70778bc268a 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Avalanche (C-Chain) eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Avalanche (C-Chain) gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gasprice.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..17408469baa 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Avalanche (C-Chain) eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Avalanche (C-Chain) gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getbalance.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..ee590da95cf 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Avalanche (C-Chain) eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Avalanche (C-Chain) address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..8b1df9c7983 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Avalanche (C-Chain) eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Avalanche (C-Chain) block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..b19d42d7ad9 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Avalanche (C-Chain) eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Avalanche (C-Chain) block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockreceipts.mdx index d8cab295159..f53282eb905 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,42 @@ --- -title: "eth_getBlockReceipts" +title: Avalanche (C-Chain) eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..c0580f7def5 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Avalanche (C-Chain) eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..61c0c881498 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Avalanche (C-Chain) eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getcode.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..6b1589e1985 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Avalanche (C-Chain) eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getlogs.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..6a76b656f98 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Avalanche (C-Chain) eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getproof.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..e03416a63d9 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Avalanche (C-Chain) eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getstorageat.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..2aed8f90e10 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Avalanche (C-Chain) eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..c2c23bde6df 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Avalanche (C-Chain) eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..e01939a6bba 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Avalanche (C-Chain) eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..7d40244c20b 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Avalanche (C-Chain) eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..b5aa092d2ec 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Avalanche (C-Chain) eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..3a1b242b5e7 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Avalanche (C-Chain) eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..ef2a0d6a957 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Avalanche (C-Chain) eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..46cbf27d860 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Avalanche (C-Chain) eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..af925ecc707 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Avalanche (C-Chain) eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..54bd0aef437 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Avalanche (C-Chain) eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..928270bbe85 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Avalanche (C-Chain) eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..be39c80d086 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Avalanche (C-Chain) eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sign.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/avalanche-c-chain/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..8124b459bd8 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..f9e305b7000 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..d41a17deae7 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..1b9e0d4efd5 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..44c59883b87 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://avalanche-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://avalanche-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..41a4107a832 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Avalanche (C-Chain) eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Avalanche (C-Chain) logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..ec7717168fd --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Avalanche (C-Chain) eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Avalanche (C-Chain). +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..5a012557c7c --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Avalanche (C-Chain) eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Avalanche (C-Chain). +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..301deb2f5a7 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Avalanche (C-Chain) eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Avalanche (C-Chain). +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..50644f0f21b --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Avalanche (C-Chain) eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Avalanche (C-Chain). +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/index.md b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..755274d98c1 --- /dev/null +++ b/services/reference/avalanche-c-chain/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Avalanche (C-Chain) filter methods +sidebar_label: Filter methods +sidebar_key: avalanche-c-chain-filter-methods +description: Avalanche (C-Chain) filter methods +--- + +# Avalanche (C-Chain) filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/index.md b/services/reference/avalanche-c-chain/json-rpc-methods/index.md index 0747f2e97c9..d54caabc06e 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/index.md +++ b/services/reference/avalanche-c-chain/json-rpc-methods/index.md @@ -1,5 +1,7 @@ --- -title: JSON-RPC methods +title: Avalanche (C-Chain) JSON-RPC API +sidebar_label: JSON-RPC API +sidebar_key: avalanche-c-chain-json-rpc-api --- Avalanche C-Chain uses the Go Ethereum (Geth) API and supports the standard [Ethereum JSON-RPC APIs](../../ethereum/json-rpc-methods/index.md) for the following services: @@ -14,5 +16,5 @@ Avalanche-specific methods (`avax.*`) that have a dependency on the P-Chain and ::: -Refer to the [Avalanche documentation](https://docs.avax.network/api-reference/c-chain/api) for more +Refer to the [Avalanche documentation](https://docs.avax.network/docs/rpcs/c-chain) for more information about supported methods. diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/net_peercount.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/net_peercount.mdx index c0246b44d39..eb89a18467f 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/net_peercount.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Avalanche (C-Chain) net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/net_version.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/net_version.mdx index 1d6c0080c60..6669f80aef7 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/net_version.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Avalanche (C-Chain) net_version +sidebar_label: net_version +description: Returns network ID on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 5bc4f7b71e8..72bbacdc0d0 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index abfc6596ddb..0ebaadfee1d 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx index d79d2a15bb3..b24869a3289 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: Avalanche (C-Chain) eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx" +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 6fe9ca4660e..f0c33d5d5e4 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: Avalanche (C-Chain) eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx" +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/index.md b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/index.md index 33a8804d49c..4d756a2dbd9 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/avalanche-c-chain/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: Avalanche (C-Chain) subscription methods +sidebar_label: Subscription methods +sidebar_key: avalanche-c-chain-subscription-methods +description: Avalanche (C-Chain) subscription methods --- -# Subscription methods +# Avalanche (C-Chain) subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/avalanche-c-chain/json-rpc-methods/web3_clientversion.mdx b/services/reference/avalanche-c-chain/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..076e76c7626 100644 --- a/services/reference/avalanche-c-chain/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/avalanche-c-chain/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Avalanche (C-Chain) web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Avalanche (C-Chain). --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/avalanche-c-chain/quickstart.md b/services/reference/avalanche-c-chain/quickstart.md index 68ce87e8b71..2a4cff525d9 100644 --- a/services/reference/avalanche-c-chain/quickstart.md +++ b/services/reference/avalanche-c-chain/quickstart.md @@ -1,11 +1,12 @@ --- description: Avalanche C-Chain quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Avalanche (C-Chain) quickstart This quickstart guide will help you set up and make calls on Avalanche C-Chain using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Aval ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Avalanche C-Chain network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Avalanche C-Chain network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://avalanche-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://avalanche-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,20 +90,21 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios"); + const axios = require('axios') - axios.post("https://avalanche-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", - params: [], - id: 1 - }) - .then(response => { - console.log(response.data); - } - .catch(error => { - console.error(error); - }); + axios + .post('https://avalanche-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) ``` 1. Run the code using the following command: @@ -124,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://avalanche-mainnet.infura.io/v3/" + 'https://avalanche-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -194,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/base/index.md b/services/reference/base/index.md index 67fa8648200..259d134af08 100644 --- a/services/reference/base/index.md +++ b/services/reference/base/index.md @@ -8,36 +8,36 @@ import CardList from '@site/src/components/CardList' Base is an optimistic layer 2 rollup chain built by Coinbase on the MIT-licensed [OP Stack](https://docs.optimism.io/stack/getting-started#the-op-stack-today), in collaboration with [Optimism](../optimism/index.md). -The Base network provides seamless Coinbase integrations, easy fiat onramps, and access to more than +The Base network provides seamless Coinbase integrations, easy fiat on-ramps, and access to more than 100 million users and $100 billion in assets in the Coinbase ecosystem. :::info See also -- The [official Base documentation](https://docs.base.org/) for more information. -- The official -[Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/builders/node-operators/json-rpc) -(Bedrock release) for custom Base methods. +- The [official Base documentation](https://docs.base.org/) for more information. +- The official + [Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/node-operators/reference/op-node-json-rpc) + (Bedrock release) for custom Base methods. ::: Select an option below to get started with the Base network. diff --git a/services/reference/base/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/base/json-rpc-methods/_eth_accounts-request.mdx index 249764599f6..87718ece48d 100644 --- a/services/reference/base/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0" - diff --git a/services/reference/base/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/base/json-rpc-methods/_eth_blocknumber-request.mdx index 1551390508a..b2262c9fb26 100644 --- a/services/reference/base/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_call-request.mdx b/services/reference/base/json-rpc-methods/_eth_call-request.mdx index c257948d1ec..578ef267fbb 100644 --- a/services/reference/base/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/base/json-rpc-methods/_eth_chainid-request.mdx index 8fe92b0f7d6..4d30915aab7 100644 --- a/services/reference/base/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/base/json-rpc-methods/_eth_estimategas-request.mdx index ccfd010002f..8425244eb67 100644 --- a/services/reference/base/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/base/json-rpc-methods/_eth_feehistory-request.mdx index df7eee57336..43e8b13a50e 100644 --- a/services/reference/base/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/base/json-rpc-methods/_eth_gasprice-request.mdx index b0414515fa4..d70a6b89309 100644 --- a/services/reference/base/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/base/json-rpc-methods/_eth_getbalance-request.mdx index ab38aec9a20..4aeffc025f3 100644 --- a/services/reference/base/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/base/json-rpc-methods/_eth_getblockbyhash-request.mdx index 30f386f5b64..81d600f2231 100644 --- a/services/reference/base/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/base/json-rpc-methods/_eth_getblockbynumber-request.mdx index 557a21a0b21..d9adfcbadef 100644 --- a/services/reference/base/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 58258d42508..b4180a80a07 100644 --- a/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 6ecd18d6fa8..2338d5de10d 100644 --- a/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/base/json-rpc-methods/_eth_getcode-request.mdx index c1a9791d92d..b3aabe3fa98 100644 --- a/services/reference/base/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/base/json-rpc-methods/_eth_getlogs-request.mdx index 4bd45c1d69e..be4a08558f2 100644 --- a/services/reference/base/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/base/json-rpc-methods/_eth_getproof-request.mdx index 653f742e816..93b9af1e97d 100644 --- a/services/reference/base/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/base/json-rpc-methods/_eth_getstorageat-request.mdx index 1f0dead3e19..6813f8a25c9 100644 --- a/services/reference/base/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/base/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index b52f60ea704..c979c648b6d 100644 --- a/services/reference/base/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/base/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 50049d512a6..6fc3649f4fa 100644 --- a/services/reference/base/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/base/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index aa8d0fa49dd..afc23532b27 100644 --- a/services/reference/base/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/base/json-rpc-methods/_eth_gettransactioncount-request.mdx index 2c7378b77ad..2aff1af207c 100644 --- a/services/reference/base/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/base/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index bf3265e9413..e151754b549 100644 --- a/services/reference/base/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/base/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index 08f3ee368c5..dc718336445 100644 --- a/services/reference/base/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/base/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index c590b20d230..8392b942528 100644 --- a/services/reference/base/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/base/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 26bfd60693c..09592f1d2fe 100644 --- a/services/reference/base/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/base/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index c9c646c2667..6ee581d43fb 100644 --- a/services/reference/base/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_getwork-request.mdx b/services/reference/base/json-rpc-methods/_eth_getwork-request.mdx index 24dbe65cb27..b139b16a7d3 100644 --- a/services/reference/base/json-rpc-methods/_eth_getwork-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_getwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_hashrate-request.mdx b/services/reference/base/json-rpc-methods/_eth_hashrate-request.mdx index 2558d535c2f..e927e0702ce 100644 --- a/services/reference/base/json-rpc-methods/_eth_hashrate-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_hashrate-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/base/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 518605c02c9..907544bd1e2 100644 --- a/services/reference/base/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://base-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://base-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/base/json-rpc-methods/_eth_mining-request.mdx b/services/reference/base/json-rpc-methods/_eth_mining-request.mdx index 3afb45bd682..58c1b7971ab 100644 --- a/services/reference/base/json-rpc-methods/_eth_mining-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_mining-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/base/json-rpc-methods/_eth_protocolversion-request.mdx index 7d523ca79cc..d7457c8ff71 100644 --- a/services/reference/base/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/base/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 3127d667473..9c134588e90 100644 --- a/services/reference/base/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/base/json-rpc-methods/_eth_submitwork-request.mdx index 7e1e367b71b..7bf6cf53bca 100644 --- a/services/reference/base/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/base/json-rpc-methods/_eth_syncing-request.mdx index 1bc52d59017..e6d637886b6 100644 --- a/services/reference/base/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/base/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_net_listening-request.mdx b/services/reference/base/json-rpc-methods/_net_listening-request.mdx index a1c7379bc7c..6e72ae22b09 100644 --- a/services/reference/base/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/base/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_net_peercount-request.mdx b/services/reference/base/json-rpc-methods/_net_peercount-request.mdx index bea59f752e5..1619789e28c 100644 --- a/services/reference/base/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/base/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_net_version-request.mdx b/services/reference/base/json-rpc-methods/_net_version-request.mdx index 5a910f56532..ba4e3356484 100644 --- a/services/reference/base/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/base/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/base/json-rpc-methods/_web3_clientversion-request.mdx index 1bff44a3122..08c85b9b4e3 100644 --- a/services/reference/base/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/base/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://base-mainnet.infura.io/v3/ \ diff --git a/services/reference/base/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/base/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..bf7eace3240 --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..b574eb0c5bf --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..887b86bb36f --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/base/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..f2bc9802227 --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/base/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..b0dbb3d870a --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/index.md b/services/reference/base/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..a5f2326f148 --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Base bundler methods +sidebar_label: Bundler methods +sidebar_key: base-bundler-methods +description: Base bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Base mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..1d4834bf951 --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..2c6fcf171fb --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/base/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..81668cd95c2 --- /dev/null +++ b/services/reference/base/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/base/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/base/json-rpc-methods/eth_accounts.mdx b/services/reference/base/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..0d2a4588515 100644 --- a/services/reference/base/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/base/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Base eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Base accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_blocknumber.mdx b/services/reference/base/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..64f4642ab94 100644 --- a/services/reference/base/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/base/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Base eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Base block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_call.mdx b/services/reference/base/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..d5804b4a97f 100644 --- a/services/reference/base/json-rpc-methods/eth_call.mdx +++ b/services/reference/base/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Base eth_call +sidebar_label: eth_call +description: Executes a Base call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_chainid.mdx b/services/reference/base/json-rpc-methods/eth_chainid.mdx index a6f446ad268..58b77911400 100644 --- a/services/reference/base/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/base/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Base eth_chainId +sidebar_label: eth_chainId +description: Returns the Base chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_coinbase.mdx b/services/reference/base/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/base/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/base/json-rpc-methods/eth_estimategas.mdx b/services/reference/base/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..fbea22add74 100644 --- a/services/reference/base/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/base/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Base eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Base transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_feehistory.mdx b/services/reference/base/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..daf128c82ee 100644 --- a/services/reference/base/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/base/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Base eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Base gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gasprice.mdx b/services/reference/base/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..f840a8f7513 100644 --- a/services/reference/base/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/base/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Base eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Base gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getbalance.mdx b/services/reference/base/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..3dc5a61dffd 100644 --- a/services/reference/base/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/base/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Base eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Base address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/base/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..e5edfd5467d 100644 --- a/services/reference/base/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/base/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Base eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Base block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/base/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..e367009d3ff 100644 --- a/services/reference/base/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/base/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Base eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Base block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..373feb4c16f 100644 --- a/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Base eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..856582e3aa1 100644 --- a/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/base/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Base eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getcode.mdx b/services/reference/base/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..9587ed13e3b 100644 --- a/services/reference/base/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/base/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Base eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getlogs.mdx b/services/reference/base/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..9e417343155 100644 --- a/services/reference/base/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/base/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Base eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getproof.mdx b/services/reference/base/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..d51d75aa424 100644 --- a/services/reference/base/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/base/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Base eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getstorageat.mdx b/services/reference/base/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..e43d3c3f728 100644 --- a/services/reference/base/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/base/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Base eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/base/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..3ef9b9277c3 100644 --- a/services/reference/base/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/base/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Base eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/base/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..b8dffa465c6 100644 --- a/services/reference/base/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/base/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Base eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/base/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..46a6f26a1dc 100644 --- a/services/reference/base/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/base/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Base eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/base/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..b42a40afa02 100644 --- a/services/reference/base/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/base/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Base eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/base/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..a6d99da7f7a 100644 --- a/services/reference/base/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/base/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Base eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/base/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..8b19da226bb 100644 --- a/services/reference/base/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/base/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Base eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/base/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..eaf8d8d9d1d 100644 --- a/services/reference/base/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/base/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Base eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/base/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..85eaac8c0dd 100644 --- a/services/reference/base/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/base/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Base eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/base/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..37f86064bcd 100644 --- a/services/reference/base/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/base/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Base eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/base/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..bbc04dfe97b 100644 --- a/services/reference/base/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/base/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Base eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_protocolversion.mdx b/services/reference/base/json-rpc-methods/eth_protocolversion.mdx index 02b5da95bff..45d9966d6b7 100644 --- a/services/reference/base/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/base/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: Base eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/base/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..15075c69f3c 100644 --- a/services/reference/base/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/base/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Base eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/base/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/base/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/base/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/base/json-rpc-methods/eth_sign.mdx b/services/reference/base/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/base/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/base/json-rpc-methods/eth_syncing.mdx b/services/reference/base/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..a42ae22e7f2 100644 --- a/services/reference/base/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/base/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Base eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..1edf0b317f4 --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..4be6b7963c7 --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/base/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..34c12a537ca --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/base/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..fa59edc91da --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/base/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..c34966ed0d8 --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://base-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..20bda94ee43 --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Base logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..727de16998a --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/base/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..326c7a2a99b --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/base/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..1a97007906e --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/base/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..a7d83bbfa0e --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/filter-methods/index.md b/services/reference/base/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..96941ee2185 --- /dev/null +++ b/services/reference/base/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Base filter methods +sidebar_label: Filter methods +sidebar_key: base-filter-methods +description: Base filter methods +--- + +# Base filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/base/json-rpc-methods/index.md b/services/reference/base/json-rpc-methods/index.md index a366cb7098b..3cc66445b64 100644 --- a/services/reference/base/json-rpc-methods/index.md +++ b/services/reference/base/json-rpc-methods/index.md @@ -1,10 +1,12 @@ --- -title: "JSON-RPC methods" +title: Base JSON-RPC API description: Supported standard Ethereum methods on Base network. +sidebar_label: JSON-RPC API +sidebar_key: base-json-rpc-api --- -# JSON-RPC methods +# Base JSON-RPC API -The standard Ethereum methods documented in this section are supported by Infura on the Base network. For custom Base methods, see the official [Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/builders/node-operators/json-rpc) (Bedrock release). +The standard Ethereum methods documented in this section are supported by Infura on the Base network. For custom Base methods, see the official [Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/node-operators/reference/op-node-json-rpc) (Bedrock release). The Base optimistic layer 2 rollup chain is built by Coinbase, in collaboration with Optimism on the MIT-licensed OP Stack ([Bedrock](https://docs.optimism.io/stack/getting-started#the-op-stack-today)). diff --git a/services/reference/base/json-rpc-methods/net_peercount.mdx b/services/reference/base/json-rpc-methods/net_peercount.mdx index c0246b44d39..e2e6726e0b6 100644 --- a/services/reference/base/json-rpc-methods/net_peercount.mdx +++ b/services/reference/base/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Base net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/base/json-rpc-methods/net_version.mdx b/services/reference/base/json-rpc-methods/net_version.mdx index 1d6c0080c60..1e4fb6635b3 100644 --- a/services/reference/base/json-rpc-methods/net_version.mdx +++ b/services/reference/base/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Base net_version +sidebar_label: net_version +description: Returns network ID on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/base/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/base/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx new file mode 100644 index 00000000000..25c92e6140e --- /dev/null +++ b/services/reference/base/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -0,0 +1,19 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}' +``` + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/base/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx new file mode 100644 index 00000000000..844794e413b --- /dev/null +++ b/services/reference/base/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -0,0 +1,12 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://base-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' +``` + + + diff --git a/services/reference/base/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/base/json-rpc-methods/subscription-methods/eth_subscribe.mdx new file mode 100644 index 00000000000..105bedf605d --- /dev/null +++ b/services/reference/base/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' + + + +### Request + +import Request from './_eth_subscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' + + diff --git a/services/reference/base/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/base/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx new file mode 100644 index 00000000000..e0a10992b0a --- /dev/null +++ b/services/reference/base/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -0,0 +1,44 @@ +--- +title: Base eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Base. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' + + + +### Request + +import Request from './_eth_unsubscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' + + diff --git a/services/reference/base/json-rpc-methods/subscription-methods/index.md b/services/reference/base/json-rpc-methods/subscription-methods/index.md new file mode 100644 index 00000000000..2aef66ee925 --- /dev/null +++ b/services/reference/base/json-rpc-methods/subscription-methods/index.md @@ -0,0 +1,22 @@ +--- +title: Base subscription methods +sidebar_label: Subscription methods +sidebar_key: base-subscription-methods +description: Base subscription methods +--- + +# Base subscription methods + +Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. + +The following subscription methods are available: + +- [`eth_subscribe`](eth_subscribe.mdx) - Create a subscription to a particular event +- [`eth_unsubscribe`](eth_unsubscribe.mdx) - Cancel an active subscription + +:::info + +We recommend you use the WSS protocol to set up bidirectional stateful subscriptions. Stateless HTTP WebSockets are also +supported. + +::: diff --git a/services/reference/base/json-rpc-methods/web3_clientversion.mdx b/services/reference/base/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..a2649370ffb 100644 --- a/services/reference/base/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/base/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Base web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Base. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/base/quickstart.md b/services/reference/base/quickstart.md index 2d23c4bcf86..9facf3f7c25 100644 --- a/services/reference/base/quickstart.md +++ b/services/reference/base/quickstart.md @@ -1,11 +1,12 @@ --- description: Base quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Base quickstart This quickstart guide will help you set up and make calls on the Base network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Base ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Base network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Base network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://base-sepolia.infura.io/v3/", { - method: "POST", + fetch('https://base-sepolia.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://base-sepolia.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://base-sepolia.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://base-sepolia.infura.io/v3/" + 'https://base-sepolia.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/blast/index.md b/services/reference/blast/index.md index 50f94d55457..42288d1e437 100644 --- a/services/reference/blast/index.md +++ b/services/reference/blast/index.md @@ -30,28 +30,30 @@ See also the [official Blast documentation](https://docs.blast.io/about-blast) f Select one of the following options to get started with the Blast network: ## Partners and privacy policies +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + The following partners provide access to the Blast network: - Nodies DLB ([Terms of Use](https://www.nodies.app/tos.txt), [Privacy Policy](https://www.nodies.app/privacy.txt)) -- Laconic LLC ([Privacy Policy](https://www.laconic.com/privacy-policy)) +- Bware Labs ([Terms of Use](https://bwarelabs.com/terms), [Privacy Policy](https://bwarelabs.com/privacy)) diff --git a/services/reference/blast/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/blast/json-rpc-methods/_eth_accounts-request.mdx index 013479d4ee7..7f35f488e11 100644 --- a/services/reference/blast/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://blast-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0 - diff --git a/services/reference/blast/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/blast/json-rpc-methods/_eth_blocknumber-request.mdx index 7d8498c6b84..e5db7f7766b 100644 --- a/services/reference/blast/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_call-request.mdx b/services/reference/blast/json-rpc-methods/_eth_call-request.mdx index 55e4d6c2f2d..5bacf7336b1 100644 --- a/services/reference/blast/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/blast/json-rpc-methods/_eth_chainid-request.mdx index 4f02002cea0..2629e18c687 100644 --- a/services/reference/blast/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/blast/json-rpc-methods/_eth_estimategas-request.mdx index 49d584372c1..b05d307a178 100644 --- a/services/reference/blast/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/blast/json-rpc-methods/_eth_feehistory-request.mdx index f220d501555..896550edef4 100644 --- a/services/reference/blast/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gasprice-request.mdx index bae99a6dc57..2812c80cac4 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getbalance-request.mdx index 3716965dc28..b3d396b2f4d 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getblockbyhash-request.mdx index f6594884478..abe35ee01f1 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getblockbynumber-request.mdx index 196aa36de15..4e814e37fa5 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx index 91d5ae4c01d..fc4c61dc07c 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ wscat -c wss://blast-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0 ``` - \ No newline at end of file + diff --git a/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index fbe9ecec4b2..2d08a340a06 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 813d3ecdfc3..90de064c264 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getcode-request.mdx index f43484822e9..6174ad58687 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getlogs-request.mdx index ffc9c950fe8..748c6fb4d39 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getproof-request.mdx index 72ee968f359..0acf8fc2127 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getstorageat-request.mdx index 64cf3881a87..76fd530d267 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index d87be43ab50..630e5a63cf5 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index ac2cb8e45ce..da7ef6a75b9 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index f58f4baa724..eac7ec7b4d7 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gettransactioncount-request.mdx index 507660fe632..b8642ea7d08 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/blast/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 08f748db370..322a7665b8d 100644 --- a/services/reference/blast/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index f0058c05dc5..2f15307ef16 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index bec1c9ce620..5ffb464e413 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 7875709a34d..3a38be8c037 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 1a4f2e9de09..0f042109c34 100644 --- a/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/blast/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index be8c1deb258..94ddf643587 100644 --- a/services/reference/blast/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://blast-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://blast-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://blast-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/blast/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/blast/json-rpc-methods/_eth_protocolversion-request.mdx index 54a85bf4140..a49da5dcffe 100644 --- a/services/reference/blast/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/blast/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 01463d4bb4e..ea9f1e3d5f7 100644 --- a/services/reference/blast/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/blast/json-rpc-methods/_eth_submitwork-request.mdx index 248960e3420..665d3f32961 100644 --- a/services/reference/blast/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/blast/json-rpc-methods/_eth_syncing-request.mdx index d6890dfd2f9..3d48c4b60d0 100644 --- a/services/reference/blast/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/blast/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_net_listening-request.mdx b/services/reference/blast/json-rpc-methods/_net_listening-request.mdx index 6cbbf0e3062..1873538d13f 100644 --- a/services/reference/blast/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/blast/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_net_peercount-request.mdx b/services/reference/blast/json-rpc-methods/_net_peercount-request.mdx index 3e083bc3a04..57310351411 100644 --- a/services/reference/blast/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/blast/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_net_version-request.mdx b/services/reference/blast/json-rpc-methods/_net_version-request.mdx index a848d2a8c72..0575a3b7c93 100644 --- a/services/reference/blast/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/blast/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/blast/json-rpc-methods/_web3_clientversion-request.mdx index a182ddc19d1..d72cf27912a 100644 --- a/services/reference/blast/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/blast/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/blast/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..0bc28e6467f --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..628389969c6 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..cd3d2f381f5 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/blast/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..3717c180ac1 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/blast/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..ec143d8f0a1 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/index.md b/services/reference/blast/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..4edbdc25e7e --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Blast bundler methods +sidebar_label: Bundler methods +sidebar_key: blast-bundler-methods +description: Blast bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Blast mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..66e93f37988 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..0341ded1bda --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/blast/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..485b7c69b30 --- /dev/null +++ b/services/reference/blast/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/blast/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/blast/json-rpc-methods/eth_accounts.mdx b/services/reference/blast/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..b7da0f849c9 100644 --- a/services/reference/blast/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/blast/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,43 @@ --- -title: "eth_accounts" +title: Blast eth_accounts +sidebar_label: eth_accounts --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_blocknumber.mdx b/services/reference/blast/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..28cd101a818 100644 --- a/services/reference/blast/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/blast/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,43 @@ --- -title: "eth_blockNumber" +title: Blast eth_blockNumber +sidebar_label: eth_blockNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_call.mdx b/services/reference/blast/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..cc3901506b4 100644 --- a/services/reference/blast/json-rpc-methods/eth_call.mdx +++ b/services/reference/blast/json-rpc-methods/eth_call.mdx @@ -1,40 +1,43 @@ --- -title: "eth_call" +title: Blast eth_call +sidebar_label: eth_call --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_chainid.mdx b/services/reference/blast/json-rpc-methods/eth_chainid.mdx index a6f446ad268..21d8e8667cf 100644 --- a/services/reference/blast/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/blast/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,43 @@ --- -title: "eth_chainId" +title: Blast eth_chainId +sidebar_label: eth_chainId --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_coinbase.mdx b/services/reference/blast/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/blast/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/blast/json-rpc-methods/eth_estimategas.mdx b/services/reference/blast/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..0ee0718c487 100644 --- a/services/reference/blast/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/blast/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,43 @@ --- -title: "eth_estimateGas" +title: Blast eth_estimateGas +sidebar_label: eth_estimateGas --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_feehistory.mdx b/services/reference/blast/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..38811fc5702 100644 --- a/services/reference/blast/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/blast/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,43 @@ --- -title: "eth_feeHistory" +title: Blast eth_feeHistory +sidebar_label: eth_feeHistory --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gasprice.mdx b/services/reference/blast/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..852359996bf 100644 --- a/services/reference/blast/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,43 @@ --- -title: "eth_gasPrice" +title: Blast eth_gasPrice +sidebar_label: eth_gasPrice --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getbalance.mdx b/services/reference/blast/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..e391a65a162 100644 --- a/services/reference/blast/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBalance" +title: Blast eth_getBalance +sidebar_label: eth_getBalance --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getbalancevalues.mdx b/services/reference/blast/json-rpc-methods/eth_getbalancevalues.mdx index c758aad95d6..043528902aa 100644 --- a/services/reference/blast/json-rpc-methods/eth_getbalancevalues.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getbalancevalues.mdx @@ -1,9 +1,12 @@ --- -title: "eth_getBalanceValues" +title: Blast eth_getBalanceValues +sidebar_label: eth_getBalanceValues --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `eth_getBalanceValues` Returns the parameters that control an accounts rebasing ETH balance. @@ -31,12 +34,12 @@ Object with the following fields: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://blast-mainnet.infura.io/v3/ \ diff --git a/services/reference/blast/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/blast/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..218625a0ac7 100644 --- a/services/reference/blast/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBlockByHash" +title: Blast eth_getBlockByHash +sidebar_label: eth_getBlockByHash --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/blast/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..3baae2b6157 100644 --- a/services/reference/blast/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBlockByNumber" +title: Blast eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/blast/json-rpc-methods/eth_getblockreceipts.mdx index a15483c02b0..7ec4d696167 100644 --- a/services/reference/blast/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBlockReceipts" +title: Blast eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx"; +import Request from '/services/reference/blast/json-rpc-methods/_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..0a367585765 100644 --- a/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Blast eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..50d82600561 100644 --- a/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Blast eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getcode.mdx b/services/reference/blast/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..7fc7cf6c99f 100644 --- a/services/reference/blast/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getCode" +title: Blast eth_getCode +sidebar_label: eth_getCode --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getlogs.mdx b/services/reference/blast/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..4b0841957d5 100644 --- a/services/reference/blast/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getLogs" +title: Blast eth_getLogs +sidebar_label: eth_getLogs --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getproof.mdx b/services/reference/blast/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..aecf6647c8e 100644 --- a/services/reference/blast/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getProof" +title: Blast eth_getProof +sidebar_label: eth_getProof --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getstorageat.mdx b/services/reference/blast/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..170a29eaa42 100644 --- a/services/reference/blast/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getStorageAt" +title: Blast eth_getStorageAt +sidebar_label: eth_getStorageAt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/blast/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..f325bb2d7ca 100644 --- a/services/reference/blast/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Blast eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/blast/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..d578b955c37 100644 --- a/services/reference/blast/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Blast eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/blast/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..d9cf1f365e1 100644 --- a/services/reference/blast/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getTransactionByHash" +title: Blast eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/blast/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..d72b4e311fe 100644 --- a/services/reference/blast/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getTransactionCount" +title: Blast eth_getTransactionCount +sidebar_label: eth_getTransactionCount --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/blast/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..11132f39885 100644 --- a/services/reference/blast/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/blast/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getTransactionReceipt" +title: Blast eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/blast/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..94b1c3aef3b 100644 --- a/services/reference/blast/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Blast eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/blast/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..b3b7ce481d1 100644 --- a/services/reference/blast/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Blast eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/blast/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..f175e118e0a 100644 --- a/services/reference/blast/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Blast eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/blast/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..395caa62129 100644 --- a/services/reference/blast/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/blast/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,43 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Blast eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/blast/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..dff2b31880b 100644 --- a/services/reference/blast/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/blast/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,43 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Blast eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_protocolversion.mdx b/services/reference/blast/json-rpc-methods/eth_protocolversion.mdx index 02b5da95bff..8aef1e98188 100644 --- a/services/reference/blast/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/blast/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,43 @@ --- -title: "eth_protocolVersion" +title: Blast eth_protocolVersion +sidebar_label: eth_protocolVersion --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/blast/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..473f6c3a852 100644 --- a/services/reference/blast/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/blast/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,43 @@ --- -title: "eth_sendRawTransaction" +title: Blast eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/blast/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/blast/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/blast/json-rpc-methods/eth_sign.mdx b/services/reference/blast/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/blast/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/blast/json-rpc-methods/eth_submitwork.mdx b/services/reference/blast/json-rpc-methods/eth_submitwork.mdx index 3e302cecfe3..73bcf7ab4d8 100644 --- a/services/reference/blast/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/blast/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,43 @@ --- -title: "eth_submitWork" +title: Blast eth_submitWork +sidebar_label: eth_submitWork --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx" +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/eth_syncing.mdx b/services/reference/blast/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..137d9cf94e8 100644 --- a/services/reference/blast/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/blast/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,43 @@ --- -title: "eth_syncing" +title: Blast eth_syncing +sidebar_label: eth_syncing --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/index.md b/services/reference/blast/json-rpc-methods/index.md index 4918a070cd8..3ec81d7f20e 100644 --- a/services/reference/blast/json-rpc-methods/index.md +++ b/services/reference/blast/json-rpc-methods/index.md @@ -1,4 +1,9 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: blast-json-rpc-api +--- + +# Blast JSON-RPC API Blast supports a subset [Ethereum JSON-RPC methods](../../ethereum/json-rpc-methods/index.md). WebSocket calls are not supported when using the Blast endpoints. diff --git a/services/reference/blast/json-rpc-methods/net_peercount.mdx b/services/reference/blast/json-rpc-methods/net_peercount.mdx index c0246b44d39..2796564f3e2 100644 --- a/services/reference/blast/json-rpc-methods/net_peercount.mdx +++ b/services/reference/blast/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,43 @@ --- -title: "net_peerCount" +title: Blast net_peerCount +sidebar_label: net_peerCount --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/net_version.mdx b/services/reference/blast/json-rpc-methods/net_version.mdx index 1d6c0080c60..7872992d71c 100644 --- a/services/reference/blast/json-rpc-methods/net_version.mdx +++ b/services/reference/blast/json-rpc-methods/net_version.mdx @@ -1,40 +1,43 @@ --- -title: "net_version" +title: Blast net_version +sidebar_label: net_version --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/blast/json-rpc-methods/web3_clientversion.mdx b/services/reference/blast/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..f19ba445b47 100644 --- a/services/reference/blast/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/blast/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,43 @@ --- -title: "web3_clientVersion" +title: Blast web3_clientVersion +sidebar_label: web3_clientVersion --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/blast/quickstart.md b/services/reference/blast/quickstart.md index cac00329d7e..c84a3263da4 100644 --- a/services/reference/blast/quickstart.md +++ b/services/reference/blast/quickstart.md @@ -1,11 +1,12 @@ --- -description: Celo quickstart guide. +description: Blast quickstart guide. sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Blast quickstart This quickstart guide will help you set up and make calls on the Blast network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Blas ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Blast network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Blast network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -32,7 +33,7 @@ curl https://blast-mainnet.infura.io/v3/ \ ### Node (JavaScript) -In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. #### Node Fetch @@ -47,25 +48,25 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://blast-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://blast-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://blast-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://blast-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://blast-mainnet.infura.io/v3/" + 'https://blast-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -194,8 +195,8 @@ Now that you have successfully made a call to the Blast network, you can explore - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/bnb-smart-chain/index.md b/services/reference/bnb-smart-chain/index.md index 00e4edbbf84..75e3d9a0254 100644 --- a/services/reference/bnb-smart-chain/index.md +++ b/services/reference/bnb-smart-chain/index.md @@ -11,14 +11,14 @@ import CardList from "@site/src/components/CardList" BNB Smart Chain (BSC) is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). -Infura provides Open Beta access to BSC. During this period, there might be feature limitations. +Infura provides Open Beta access to BSC. During this period, there might be feature limitations. Performance issues are not expected, but they are possible as we optimize and stabilize the service. -Currently, only near head requests (the last 128 blocks) are supported in the -BSC service. Archive requests are not currently supported. Be aware of this limitation when making calls +Archive requests are supported on BSC Mainnet only. BSC Testnet only supports near head requests (the last 128 blocks). +Be aware of this limitation when making calls to API calls to methods such as [`eth_getStorageAt`](./json-rpc-methods/eth_getstorageat.mdx), [`eth_getTransactionReceipt`](./json-rpc-methods/eth_gettransactionreceipt.mdx), and -[`eth_getTransactionByHash`](./json-rpc-methods/eth_gettransactionbyhash.mdx). +[`eth_getTransactionByHash`](./json-rpc-methods/eth_gettransactionbyhash.mdx) on BSC Testnet. ::: @@ -31,33 +31,38 @@ For more information, refer to the official [BSC documentation](https://docs.bnb ::: -Select an option below to get started with the BSC network. +Select an option below to get started with the BSC network. ## Partners and privacy policies +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + The following partners provide access to the BSC network: + + - Chainstack ([Terms of Service](https://chainstack.com/tos/), [Privacy Policy](https://chainstack.com/privacy/)) - Infstones ([Privacy Policy](https://infstones.com/terms/privacy-notice)) - Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) - \ No newline at end of file +- Validation Cloud ([Terms of Use](https://www.validationcloud.io/terms), [Privacy Policy](https://www.validationcloud.io/privacy)) + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_accounts-request.mdx index e3e5a6bd808..3181b6172f2 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_blocknumber-request.mdx index 7d3d43690af..19553e5f9ec 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_call-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_call-request.mdx index 76f5b379401..5b9b8da08fe 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_chainid-request.mdx index b8d9eca22bb..4f229192acd 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_estimategas-request.mdx index 89957a090b5..1e13797a546 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gasprice-request.mdx index 60e53bf3237..5292c0fb83d 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getbalance-request.mdx index ac8f9e4c95f..b8aeff4ee2c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx index 012aa85855d..6557a6faa1c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx index 3b3763d6f95..90a78207ef7 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx index bf05571a30c..c1720ae28eb 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 9b53f23cbe2..ef3856e1c46 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 60f0c3c4953..e11eb8f317c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getcode-request.mdx index 1cc5af4df00..52e0f6a1427 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getlogs-request.mdx index 4fe332b40ba..ec1849a02a8 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getproof-request.mdx index fa59be7ad03..367d19b6366 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-description.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-description.mdx deleted file mode 100644 index b62112535ac..00000000000 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-description.mdx +++ /dev/null @@ -1,8 +0,0 @@ -Returns the value from a storage position at a given address. - -:::info - -Currently, the Binance Smart Chain service supports only near head requests (the latest 128 blocks). -Archive requests are not available at this time. - -::: diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-request.mdx index 47d969d7391..d7a06c24f7a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index db1b71ff120..51422f745df 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 96b2a8a10e4..7d79203295a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-description.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-description.mdx deleted file mode 100644 index 7d1167671ba..00000000000 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-description.mdx +++ /dev/null @@ -1,8 +0,0 @@ -Returns information about a transaction for a given hash. - -:::info - -Currently, the Binance Smart Chain service supports only near head requests (the latest 128 blocks). -Archive requests are not available at this time. - -::: \ No newline at end of file diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 02e7424d578..c7fd7f2ab88 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx index 7b35e18bfc4..83b6b4b5ebf 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-description.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-description.mdx deleted file mode 100644 index 16ee0fbab3b..00000000000 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-description.mdx +++ /dev/null @@ -1,8 +0,0 @@ -Returns the receipt of a transaction given transaction hash. Note that the receipt is not available for pending transactions. - -:::info - -Currently, the Binance Smart Chain service supports only near head requests (the latest 128 blocks). -Archive requests are not available at this time. - -::: \ No newline at end of file diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 56aeea4e7ed..4edf544a2cd 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index c6c59e250a4..dddaa347f10 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index a94e3bee324..401de063cad 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 41aec0c8f14..6662693801b 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index c868c04c96e..07f1b2dec92 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 8ac6bf8630a..b20cf6def37 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://bsc-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://bsc-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://bsc-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_protocolversion-request.mdx index 44f49702726..649730b3769 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 6b76490f62f..54e7d5312b5 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_submitwork-request.mdx index 84b6ca0ca10..d6b272a5ce4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_syncing-request.mdx index ec3f96273d5..b2733d04ac5 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_net_listening-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_net_listening-request.mdx index d886292d965..a05891485b4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_net_peercount-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_net_peercount-request.mdx index d670ef82cb9..90bfd75b1c4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_net_version-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_net_version-request.mdx index 237148bc02d..27e4d93fd7d 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/_web3_clientversion-request.mdx index b8c99246dfe..ffe65a884a0 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..7ed5a152cd0 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..f7be5c374e2 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..0e3d44acb06 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..0e53f832e57 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..cb674e9e2be --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/index.md b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..616c248d1d6 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: BNB Smart Chain bundler methods +sidebar_label: Bundler methods +sidebar_key: bnb-smart-chain-bundler-methods +description: BNB Smart Chain bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on BNB Smart Chain mainnet +and testnet: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..1107ae66105 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..9b2eccac784 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..91ab1fc3ef4 --- /dev/null +++ b/services/reference/bnb-smart-chain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/bnb-smart-chain/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_accounts.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_accounts.mdx index 0c5088b9560..7a3926ba840 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: BNB Smart Chain eth_accounts +sidebar_label: eth_accounts +description: Returns a list of BNB Smart Chain accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx"; +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx"; +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx"; +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx"; +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_blocknumber.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_blocknumber.mdx index f10357f32e3..de379588abd 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: BNB Smart Chain eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest BNB Smart Chain block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx"; +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_call.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_call.mdx index d4c9cf9a095..d55be57d2fe 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_call.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: BNB Smart Chain eth_call +sidebar_label: eth_call +description: Executes a BNB Smart Chain call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx"; +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx"; +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx"; +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx"; +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_chainid.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_chainid.mdx index c385efc1ed1..efb40406cec 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: BNB Smart Chain eth_chainId +sidebar_label: eth_chainId +description: Returns the BNB Smart Chain chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx"; +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx"; +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx"; +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx"; +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_estimategas.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_estimategas.mdx index fcf752d84b3..9d7012c631e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: BNB Smart Chain eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a BNB Smart Chain transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx"; +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx"; +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx"; +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx"; +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gasprice.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gasprice.mdx index f5ce241a9ae..9068ad2404c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: BNB Smart Chain eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current BNB Smart Chain gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx"; +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx"; +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx"; +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx"; +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getbalance.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getbalance.mdx index 814f2e5a8bf..b1c0e528f62 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: BNB Smart Chain eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a BNB Smart Chain address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx"; +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx"; +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx"; +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx"; +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbyhash.mdx index 435c47dd6d2..f0e03a8e1b4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: BNB Smart Chain eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns BNB Smart Chain block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx"; +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbynumber.mdx index 2a4855cfb5d..336d1771de7 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: BNB Smart Chain eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns BNB Smart Chain block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx"; +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockreceipts.mdx index 80a91784b1a..d12e2f96c2e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: BNB Smart Chain eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 30ece4724b3..fad9e57acb4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: BNB Smart Chain eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx"; +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index 2cc69dd469e..e9f1c0ca256 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: BNB Smart Chain eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx"; +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getcode.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getcode.mdx index 906f21a6d9e..4ee4c442104 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: BNB Smart Chain eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx"; +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx"; +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx"; +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx"; +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getlogs.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getlogs.mdx index 860d7568027..3648204f3b6 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: BNB Smart Chain eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx"; +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx"; +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx"; +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx"; +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getproof.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getproof.mdx index c80a278d835..2fd34e745e5 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: BNB Smart Chain eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx"; +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx"; +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx"; +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx"; +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getstorageat.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getstorageat.mdx index e55efec5a0c..46e4ef019c4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,51 @@ --- -title: "eth_getStorageAt" +title: BNB Smart Chain eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_getstorageat-description.mdx"; +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` +:::info Binance Smart Chain archive support + +- **Mainnet:** Near head requests (latest 128 blocks) and archive requests are supported. +- **Testnet:** Only near head requests are supported; archive requests are not available. + +::: + ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx"; +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx"; +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx"; +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index 0a240af37d2..0e77ef81a35 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: BNB Smart Chain eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx"; +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index e31108b277a..181333dea2a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: BNB Smart Chain eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx"; +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyhash.mdx index 38ff25005b8..0c0cf3ce0de 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,51 @@ --- -title: "eth_getTransactionByHash" +title: BNB Smart Chain eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_gettransactionbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# eth_getTransactionByHash +:::info Binance Smart Chain archive support + +- **Mainnet:** Near head requests (latest 128 blocks) and archive requests are supported. +- **Testnet:** Only near head requests are supported; archive requests are not available. + +::: + ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx"; +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactioncount.mdx index 28ec372d1e1..59d06fa4850 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: BNB Smart Chain eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx"; +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionreceipt.mdx index 2aba9413dba..ebf5570acb3 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,51 @@ --- -title: "eth_getTransactionReceipt" +title: BNB Smart Chain eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_gettransactionreceipt-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` +:::info Binance Smart Chain archive support + +- **Mainnet:** Near head requests (latest 128 blocks) and archive requests are supported. +- **Testnet:** Only near head requests are supported; archive requests are not available. + +::: + ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx"; +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index dda3bcea3a6..858f4c9abcc 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: BNB Smart Chain eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx"; +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 6575fe4d2c4..04754df453c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: BNB Smart Chain eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx"; +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 51a8d4b79c5..4613ccb1d0f 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: BNB Smart Chain eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx"; +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 6b5a5f068ae..0dd25d6261a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: BNB Smart Chain eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx"; +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 89d1421df00..25498ce88d7 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: BNB Smart Chain eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx"; +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx"; +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx"; +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx"; +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_protocolversion.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_protocolversion.mdx index 632a6b6cefd..34c02aa827c 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: BNB Smart Chain eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx"; +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx"; +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx"; +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx"; +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendrawtransaction.mdx index 007139c8a82..70dde687844 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: BNB Smart Chain eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx"; +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx"; +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx"; +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx"; +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 915363a6184..00000000000 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx"; - - - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_submitwork.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_submitwork.mdx index 4acde46ee9f..6cbf9ac4892 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: BNB Smart Chain eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx"; +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx"; +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx"; +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx"; +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/eth_syncing.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/eth_syncing.mdx index 4dd0c0a0803..744d0f229e7 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: BNB Smart Chain eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx"; +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx"; +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx"; +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx"; +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx index b0647295d3c..24c60f99285 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -1,9 +1,9 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ @@ -20,4 +20,4 @@ wscat -c wss://bsc-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", ``` - \ No newline at end of file + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx index 9becaf1adf5..e079a2eca8e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -1,9 +1,9 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx index cc32d9c74ef..4fac84d95c4 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -1,9 +1,9 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx index d5735ad8409..1afb83f4f81 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -1,9 +1,9 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-description.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-description.mdx index 1c259a424d7..07b49ee828d 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-description.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-description.mdx @@ -1,2 +1,2 @@ Creates a filter to retrieve new pending transaction hashes. To poll for new pending transactions, use -[`eth_getFilterChanges`](./eth_getfilterchanges.mdx). \ No newline at end of file +[`eth_getFilterChanges`](./eth_getfilterchanges.mdx). diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-example.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-example.mdx index a54d63c1a3d..5300ca6f76e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-example.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-example.mdx @@ -1,2 +1 @@ -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-request.mdx index ab7bd18d21b..f8128ad6388 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ wscat -c wss://bsc-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", ``` - \ No newline at end of file + diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-response.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-response.mdx index c7ed47d5a6a..ef039b98467 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-response.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-response.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -14,4 +14,3 @@ import TabItem from "@theme/TabItem" - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-returns.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-returns.mdx index bb9337e06b0..4e14882e19e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-returns.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_newpendingtransactionfilter-returns.mdx @@ -1,2 +1 @@ A filter ID that can be used to call [`eth_getFilterChanges`](./eth_getfilterchanges.mdx). - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx index 965bcd4d926..d600371bcd6 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -1,9 +1,9 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://bsc-mainnet.infura.io/v3/ \ diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx index 1c2db1bbfd2..8c329b2c94b 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getFilterChanges" +title: BNB Smart Chain eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns BNB Smart Chain logs since last poll. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx"; +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx"; +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx"; +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx"; +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' ### Request -import Request from "./_eth_getfilterchanges-request.mdx"; +import Request from './_eth_getfilterchanges-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx"; +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx index 34175570f83..80ac5236fc6 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getFilterLogs" +title: BNB Smart Chain eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx"; +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx"; +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx"; +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx"; +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' ### Request -import Request from "./_eth_getfilterlogs-request.mdx"; +import Request from './_eth_getfilterlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx"; +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx index f0a2da610bc..ea409846a61 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_newBlockFilter" +title: BNB Smart Chain eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx"; +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx"; +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx"; +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx"; +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' ### Request -import Request from "./_eth_newblockfilter-request.mdx"; +import Request from './_eth_newblockfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx"; +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx index 40355694f3e..8cb2cba9a4f 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_newFilter" +title: BNB Smart Chain eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx"; +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx"; +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx"; +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx"; +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' ### Request -import Request from "./_eth_newfilter-request.mdx"; +import Request from './_eth_newfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx"; +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx index e499f4971d6..4ca7744beb2 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx @@ -1,41 +1,43 @@ --- -title: "eth_newPendingTransactionFilter" +title: BNB Smart Chain eth_newPendingTransactionFilter +sidebar_label: eth_newPendingTransactionFilter --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_newpendingtransactionfilter-description.mdx"; +import Description from './_eth_newpendingtransactionfilter-description.mdx' + +# `eth_newPendingTransactionFilter` ## Parameters -import Params from "./_eth_newpendingtransactionfilter-parameters.mdx"; +import Params from './_eth_newpendingtransactionfilter-parameters.mdx' ## Returns -import Returns from "./_eth_newpendingtransactionfilter-returns.mdx"; +import Returns from './_eth_newpendingtransactionfilter-returns.mdx' ## Example -import Example from "./_eth_newpendingtransactionfilter-example.mdx"; +import Example from './_eth_newpendingtransactionfilter-example.mdx' ### Request -import Request from "./_eth_newpendingtransactionfilter-request.mdx"; +import Request from './_eth_newpendingtransactionfilter-request.mdx' ### Response -import Response from "./_eth_newpendingtransactionfilter-response.mdx"; +import Response from './_eth_newpendingtransactionfilter-response.mdx' - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx index ef2597682d9..521278ceb6e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_uninstallFilter" +title: BNB Smart Chain eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx"; +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx"; +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx"; +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx"; +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' ### Request -import Request from "./_eth_uninstallfilter-request.mdx"; +import Request from './_eth_uninstallfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx"; +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/index.md b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/index.md index 6b93b3a83dd..5ac5762cb5a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/index.md +++ b/services/reference/bnb-smart-chain/json-rpc-methods/filter-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Filter methods" +title: BNB Smart Chain filter methods +sidebar_label: Filter methods +sidebar_key: bnb-smart-chain-filter-methods +description: BNB Smart Chain filter methods --- -# Filter Methods +# BNB Smart Chain filter methods Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs can be shared by any connection using the same API key. diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/index.md b/services/reference/bnb-smart-chain/json-rpc-methods/index.md index b1f73b79f59..8726aaa7548 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/index.md +++ b/services/reference/bnb-smart-chain/json-rpc-methods/index.md @@ -1,12 +1,17 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: bnb-smart-chain-json-rpc-api +--- + +# BNB Smart Chain JSON-RPC API The standard Ethereum methods documented here are supported by Infura on the BNB Smart Chain (BSC) network. -Currently, only near head requests (the last 128 blocks) are supported in the -BSC service. Archive requests are not currently supported. +WebSockets are also supported on the BSC network and can be used to set up bidirectional stateful [subscriptions](subscription-methods/index.md). -:::info +:::info Binance Smart Chain archive support -WebSockets are also supported on the BSC network and can be used to set up bidirectional stateful [subscriptions](subscription-methods/index.md). +- **Mainnet:** Near head requests (latest 128 blocks) and archive requests are supported. +- **Testnet:** Only near head requests are supported; archive requests are not available. ::: diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/net_listening.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/net_listening.mdx index 2c1fb3481b5..87d52172e17 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/net_listening.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/net_listening.mdx @@ -1,40 +1,44 @@ --- -title: "net_listening" +title: BNB Smart Chain net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_listening-description.mdx"; +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx"; +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx"; +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx"; +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "./_net_listening-request.mdx"; +import Request from './_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx"; +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/net_peercount.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/net_peercount.mdx index c15460a96e3..7e1eb545bec 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/net_peercount.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: BNB Smart Chain net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx"; +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx"; +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx"; +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx"; +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx"; +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx"; +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/net_version.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/net_version.mdx index b594ac81c6e..0f14b8a731e 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/net_version.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: BNB Smart Chain net_version +sidebar_label: net_version +description: Returns network ID on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx"; +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx"; +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx"; +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx"; +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx"; +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx"; +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 89ab2aed37e..9a7478d652f 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -17,4 +17,3 @@ wscat -c wss://bsc-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index e8f3865d8ca..762641afa83 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -11,4 +11,3 @@ wscat -c wss://bsc-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", - diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 3962e2ef0cb..a11113324f9 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: BNB Smart Chain eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx"; +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index fd4aedad7ad..b7680adceea 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: BNB Smart Chain eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx"; +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/index.md b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/index.md index dc5adeaf968..919e4498589 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/bnb-smart-chain/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: BNB Smart Chain subscription methods +sidebar_label: Subscription methods +sidebar_key: bnb-smart-chain-subscription-methods +description: BNB Smart Chain subscription methods --- -# Subscription methods +# BNB Smart Chain subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/bnb-smart-chain/json-rpc-methods/web3_clientversion.mdx b/services/reference/bnb-smart-chain/json-rpc-methods/web3_clientversion.mdx index 0576523fc98..d40b8e3038a 100644 --- a/services/reference/bnb-smart-chain/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/bnb-smart-chain/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: BNB Smart Chain web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on BNB Smart Chain. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx"; +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx"; +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx"; +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx"; +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx"; +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx"; +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/bnb-smart-chain/quickstart.md b/services/reference/bnb-smart-chain/quickstart.md index 1d3ea79c4ce..38d28dc710d 100644 --- a/services/reference/bnb-smart-chain/quickstart.md +++ b/services/reference/bnb-smart-chain/quickstart.md @@ -1,11 +1,12 @@ --- description: BNB Smart Chain quickstart guide +sidebar_label: Quickstart sidebar_position: 2 --- import Banner from "@site/src/components/Banner" -# Quickstart +# BNB Smart Chain quickstart This quickstart guide will help you set up and make calls on the BNB Smart Chain network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the BNB ## Prerequisites -- Ensure you have an [API key](../../../developer-tools/dashboard/get-started/create-api) with the BNB Smart Chain networked enabled. +- Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the BNB Smart Chain network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal. Replace `` with your actual Infura API key. @@ -38,161 +39,163 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta 1. In your project folder, install the Node Fetch package using npm: - ```bash - npm i node-fetch - `````` - -1. Create your Javascript file and copy the following code: - - Replace `` with your actual Infura API key. - - ```javascript title="index.js" - import fetch from "node-fetch"; - - fetch("https://bsc-mainnet.infura.io/v3/", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", - params: [], - id: 1 - }) - }) - .then(response => - response.json() - ) - .then(data => { - console.log(data); - }) - .catch(error => { - console.error(error); - }); - ``` + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://bsc-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` 1. Run the code using the following command: - ```bash - node index.js - ``` + ```bash + node index.js + ``` #### Axios 1. In your project folder, install the Axios package using npm: - ```bash - npm i axios - `````` - -1. Create your Javascript file and copy the following code: - - Replace `` with your actual Infura API key. - - ```javascript title="index.js" - const axios = require("axios"); - - axios.post("https://bsc-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", - params: [], - id: 1 - }) - .then(response => { - console.log(response.data); - }) - .catch(error => { - console.error(error); - }); - ``` + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://bsc-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` 1. Run the code using the following command: - ```bash - node index.js - ``` + ```bash + node index.js + ``` #### Ethers 1. In your project folder, install the ethers package using npm: - ```bash - npm install ethers - `````` + ```bash + npm install ethers + ``` -1. Create your Javascript file and copy the following code: +1. Create your JavaScript file and copy the following code: - Replace `` with your actual Infura API key. + Replace `` with your actual Infura API key. - ```javascript title="index.js" - const ethers = require("ethers"); + ```javascript title="index.js" + const ethers = require('ethers') - const provider = new ethers.providers.JsonRpcProvider("https://bsc-mainnet.infura.io/v3/"); + const provider = new ethers.providers.JsonRpcProvider( + 'https://bsc-mainnet.infura.io/v3/' + ) - provider.getBlockNumber() - .then(blockNumber => { - console.log(blockNumber); - }) - .catch(error => { - console.error(error); - }); - ``` + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` 1. Run the code using the following command: - ```bash - node index.js - ``` + ```bash + node index.js + ``` ### Python 1. In your project folder, install the `requests` library: - ```bash - pip install requests - `````` + ```bash + pip install requests + ``` 1. Create your Python file and copy the following code: - Replace `` with your actual Infura API key. + Replace `` with your actual Infura API key. - ```python title="index.py" - import requests - import json + ```python title="index.py" + import requests + import json - url = "https://bsc-mainnet.infura.io/v3/" + url = "https://bsc-mainnet.infura.io/v3/" - payload = { - "jsonrpc": "2.0", - "method": "eth_blockNumber", - "params": [], - "id": 1 - } + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } - headers = {"content-type": "application/json"} + headers = {"content-type": "application/json"} - response = requests.post(url, data=json.dumps(payload), headers=headers).json() + response = requests.post(url, data=json.dumps(payload), headers=headers).json() - print(response) - ``` + print(response) + ``` 1. Run the code using the following command: - ```bash - python index.py - ``` + ```bash + python index.py + ``` ## Next steps Now that you have successfully made a call to the BNB Smart Chain network, you can explore more functionalities and APIs. Here are some suggestions: - **Explore other BNB Smart Chain APIs**: Infura supports a wide range of APIs. You can find more information in the -[JSON-RPC API method documentation](json-rpc-methods/index.md). + [JSON-RPC API method documentation](json-rpc-methods/index.md). - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/celo/index.md b/services/reference/celo/index.md index ce38944c883..946b548f6f5 100644 --- a/services/reference/celo/index.md +++ b/services/reference/celo/index.md @@ -6,37 +6,53 @@ import CardList from '@site/src/components/CardList' # Celo -Celo is a fully EVM-compatible, Proof of Stake (PoS), layer-1 protocol that features a mobile-first platform, built-in -stablecoins, collateralized by crypto and natural assets. +:::note Decentralized Infrastructure Network (DIN) -Celo is a platform that acts as a global payment infrastructure for cryptocurrencies targeting mobile users. Celo operates -native, ERC20-like stable tokens like [cUSD, cEUR, and cREAL](https://celoreserve.org/). +Celo is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +::: + +Celo is an Ethereum layer-2 network designed for fast, low-cost payments. It offers low fees and fast finality while letting you reuse familiar Ethereum tools and contracts with little or no change. :::info See also - The [official Celo documentation](https://docs.celo.org/) for more information. -- The [key differences between building on Celo and Ethereum](https://docs.celo.org/developer/migrate/from-ethereum). ::: Select an option below to get started with the Celo network. + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API +request. This means that Infura's partner service provider can service your request, but not store the +content of your request. + +The following partners provide access to the Celo network: + + + +- BlockPI ([Terms of Use](https://blockpi.io/terms-of-use), [Privacy Policy](https://blockpi.io/privacy-policy)) +- 0xFury ([Privacy policy](https://0xfury.com/privacy)) + diff --git a/services/reference/celo/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/celo/json-rpc-methods/_eth_accounts-request.mdx index 9a0c555957d..de2e85c8617 100644 --- a/services/reference/celo/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/celo/json-rpc-methods/_eth_blocknumber-request.mdx index b008e1c82d5..b943e439c57 100644 --- a/services/reference/celo/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_call-request.mdx b/services/reference/celo/json-rpc-methods/_eth_call-request.mdx index a550b4afef8..d4c53d88a3b 100644 --- a/services/reference/celo/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/celo/json-rpc-methods/_eth_chainid-request.mdx index 8d23f85b307..87556af039a 100644 --- a/services/reference/celo/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/celo/json-rpc-methods/_eth_estimategas-request.mdx index a8a6e650b90..465509eb575 100644 --- a/services/reference/celo/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gasprice-request.mdx index 665cfe8a266..fb227c0f1a9 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getbalance-request.mdx index 665207944fb..fb9be66a35d 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getblockbyhash-request.mdx index cf405e281c3..42488599595 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getblockbynumber-request.mdx index e0df51ebbe2..590ee63042f 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getblockreceipts-request.mdx index 2994bb0b083..c383a98a723 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ @@ -19,4 +19,4 @@ wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0" ``` - \ No newline at end of file + diff --git a/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 821c22803f1..5e883bd1280 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 566b9fcf474..cd51ad2f1b5 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getcode-request.mdx index 28b403e646c..9433375b2d8 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getlogs-request.mdx index 0720ed30d87..b39c3c115a3 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getproof-request.mdx index cc355117804..aef34fd7d44 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/celo/json-rpc-methods/_eth_getstorageat-request.mdx index a6f772c0365..d15c50fcb57 100644 --- a/services/reference/celo/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index ba756009de2..5e0357bc337 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 3bc84ad67c2..cee8ab90510 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 12ec76c2895..9baa76de4b0 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gettransactioncount-request.mdx index 493476db15e..0310e16d666 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/celo/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 9e1ef047ce4..a1a1e57412d 100644 --- a/services/reference/celo/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/celo/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index f0315b46463..ef9e494f85f 100644 --- a/services/reference/celo/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/celo/json-rpc-methods/_eth_sendrawtransaction-request.mdx index a8743767749..525de0d33a8 100644 --- a/services/reference/celo/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/celo/json-rpc-methods/_eth_syncing-request.mdx index d1e03065372..174b6044c09 100644 --- a/services/reference/celo/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/celo/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_net_listening-request.mdx b/services/reference/celo/json-rpc-methods/_net_listening-request.mdx index cb07c31c49b..e732c5cb3f9 100644 --- a/services/reference/celo/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/celo/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_net_peercount-request.mdx b/services/reference/celo/json-rpc-methods/_net_peercount-request.mdx index 7f58057f6ad..164d299b4b5 100644 --- a/services/reference/celo/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/celo/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_net_version-request.mdx b/services/reference/celo/json-rpc-methods/_net_version-request.mdx index be3b2381eb1..33ea1801dbf 100644 --- a/services/reference/celo/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/celo/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/celo/json-rpc-methods/_web3_clientversion-request.mdx index 75155fb8648..7fca2e7151c 100644 --- a/services/reference/celo/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/celo/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://celo-mainnet.infura.io/v3/ \ diff --git a/services/reference/celo/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/celo/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..54818d656ce --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..a0fc06e96ae --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..07e8d796735 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/celo/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..e8039371dd5 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/celo/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..c66c45ac689 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/index.md b/services/reference/celo/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..eafa4348a22 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Celo bundler methods +sidebar_label: Bundler methods +sidebar_key: celo-bundler-methods +description: Celo bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Celo mainnet +and Alfajores: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..350ae4f0ee4 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..18385bd00ad --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/celo/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..fd76c0a9d60 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/celo/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/eth_accounts.mdx b/services/reference/celo/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..7d032984d37 100644 --- a/services/reference/celo/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/celo/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Celo eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Celo accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_blocknumber.mdx b/services/reference/celo/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..b31f80d50b5 100644 --- a/services/reference/celo/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/celo/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Celo eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Celo block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_call.mdx b/services/reference/celo/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..76a1a06b8a1 100644 --- a/services/reference/celo/json-rpc-methods/eth_call.mdx +++ b/services/reference/celo/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Celo eth_call +sidebar_label: eth_call +description: Executes a Celo call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_chainid.mdx b/services/reference/celo/json-rpc-methods/eth_chainid.mdx index a6f446ad268..ca113d38439 100644 --- a/services/reference/celo/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/celo/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Celo eth_chainId +sidebar_label: eth_chainId +description: Returns the Celo chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_coinbase.mdx b/services/reference/celo/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/celo/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/celo/json-rpc-methods/eth_estimategas.mdx b/services/reference/celo/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..fa05fed4f93 100644 --- a/services/reference/celo/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/celo/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Celo eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Celo transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gasprice.mdx b/services/reference/celo/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..d073895c965 100644 --- a/services/reference/celo/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Celo eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Celo gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getbalance.mdx b/services/reference/celo/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..8081a7744f9 100644 --- a/services/reference/celo/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Celo eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Celo address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/celo/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..ca9b269c5e6 100644 --- a/services/reference/celo/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Celo eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Celo block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/celo/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..55ac1288396 100644 --- a/services/reference/celo/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Celo eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Celo block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/celo/json-rpc-methods/eth_getblockreceipts.mdx index d8cab295159..f2b5f02509d 100644 --- a/services/reference/celo/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: Celo eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Celo. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..a747e121818 100644 --- a/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Celo eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..71276588911 100644 --- a/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Celo eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getcode.mdx b/services/reference/celo/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..dd5eb065201 100644 --- a/services/reference/celo/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Celo eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getlogs.mdx b/services/reference/celo/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..c248900f946 100644 --- a/services/reference/celo/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Celo eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getproof.mdx b/services/reference/celo/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..4f9a31d4f3d 100644 --- a/services/reference/celo/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Celo eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_getstorageat.mdx b/services/reference/celo/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..186900764eb 100644 --- a/services/reference/celo/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/celo/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Celo eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/celo/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..c3e62514c9f 100644 --- a/services/reference/celo/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Celo eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/celo/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..b8e9dab7ade 100644 --- a/services/reference/celo/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Celo eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/celo/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..8e1752415d5 100644 --- a/services/reference/celo/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Celo eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/celo/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..458a69e7c27 100644 --- a/services/reference/celo/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Celo eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/celo/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..affb212071a 100644 --- a/services/reference/celo/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/celo/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Celo eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/celo/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..5066c2169e5 100644 --- a/services/reference/celo/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/celo/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Celo eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/celo/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..07789cf1b1c 100644 --- a/services/reference/celo/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/celo/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Celo eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/celo/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/celo/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/celo/json-rpc-methods/eth_sign.mdx b/services/reference/celo/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/celo/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/celo/json-rpc-methods/eth_syncing.mdx b/services/reference/celo/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..0673a18f963 100644 --- a/services/reference/celo/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/celo/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Celo eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..5d537246608 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..5abc09f8c00 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/celo/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..e36cb69e262 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/celo/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..9ed85ca2530 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/celo/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..6308d1939be --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://celo-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..3c9bad7a50b --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Celo eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Celo logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..a76af5a6ba9 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Celo eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Celo. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/celo/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..d6c69cca62a --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Celo eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Celo. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/celo/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..4eee137387d --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Celo eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Celo. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/celo/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..a636611f49e --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Celo eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Celo. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/celo/json-rpc-methods/filter-methods/index.md b/services/reference/celo/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..771610c9419 --- /dev/null +++ b/services/reference/celo/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Celo filter methods +sidebar_label: Filter methods +sidebar_key: celo-filter-methods +description: Celo filter methods +--- + +# Celo filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/celo/json-rpc-methods/index.md b/services/reference/celo/json-rpc-methods/index.md index 8dbc716022c..9d1f041ab23 100644 --- a/services/reference/celo/json-rpc-methods/index.md +++ b/services/reference/celo/json-rpc-methods/index.md @@ -1,4 +1,9 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: celo-json-rpc-api +--- + +# Celo JSON-RPC API Celo supports a subset [Ethereum JSON-RPC methods](../../ethereum/json-rpc-methods/index.md). WebSocket calls are not supported when using the Celo endpoints. @@ -17,6 +22,3 @@ The following methods are supported by Celo, but not supported by Infura using a - `eth_newFilter` - `eth_newBlockFilter` - `eth_uninstallFilter` - -Infura is also compatible with the [Celo ContractKit](https://docs.celo.org/developer/contractkit), a library of tools -designed to integrate applications with Celo. diff --git a/services/reference/celo/json-rpc-methods/net_peercount.mdx b/services/reference/celo/json-rpc-methods/net_peercount.mdx index c0246b44d39..2110d3bcf16 100644 --- a/services/reference/celo/json-rpc-methods/net_peercount.mdx +++ b/services/reference/celo/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Celo net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/net_version.mdx b/services/reference/celo/json-rpc-methods/net_version.mdx index 1d6c0080c60..b7f5bf119c8 100644 --- a/services/reference/celo/json-rpc-methods/net_version.mdx +++ b/services/reference/celo/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Celo net_version +sidebar_label: net_version +description: Returns network ID on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/celo/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 95970950870..83f3de347a0 100644 --- a/services/reference/celo/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/celo/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -16,5 +16,12 @@ wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0" ``` - + + +```bash +wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}' +``` + + + diff --git a/services/reference/celo/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/celo/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index 04c4bba69f0..debe1209228 100644 --- a/services/reference/celo/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/celo/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -10,4 +10,3 @@ wscat -c wss://celo-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0" - diff --git a/services/reference/celo/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/celo/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 3f187a761ec..cba466b657c 100644 --- a/services/reference/celo/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/celo/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: Celo eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Celo. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx"; +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/celo/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/celo/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index aa033555c02..708982d60c1 100644 --- a/services/reference/celo/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/celo/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: Celo eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Celo. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx"; +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/celo/json-rpc-methods/subscription-methods/index.md b/services/reference/celo/json-rpc-methods/subscription-methods/index.md index dc5adeaf968..ccacc1e9ac4 100644 --- a/services/reference/celo/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/celo/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: Celo subscription methods +sidebar_label: Subscription methods +sidebar_key: celo-subscription-methods +description: Celo subscription methods --- -# Subscription methods +# Celo subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/celo/json-rpc-methods/web3_clientversion.mdx b/services/reference/celo/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..d90b550d466 100644 --- a/services/reference/celo/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/celo/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Celo web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Celo. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/celo/quickstart.md b/services/reference/celo/quickstart.md index 1c460030e68..8bceabc0321 100644 --- a/services/reference/celo/quickstart.md +++ b/services/reference/celo/quickstart.md @@ -1,11 +1,12 @@ --- description: Celo quickstart guide. sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Celo quickstart This quickstart guide will help you set up and make calls on the Celo network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Celo ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Celo network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Celo network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://celo-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://celo-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://celo-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://celo-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://celo-mainnet.infura.io/v3/" + 'https://celo-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/ethereum/index.md b/services/reference/ethereum/index.md index f60ee8a3366..917c8ad742e 100644 --- a/services/reference/ethereum/index.md +++ b/services/reference/ethereum/index.md @@ -22,21 +22,21 @@ The [official Ethereum documentation](https://ethereum.org/en/) for more informa ::: diff --git a/services/reference/ethereum/json-rpc-methods/_eth_feehistory-response.mdx b/services/reference/ethereum/json-rpc-methods/_eth_feehistory-response.mdx new file mode 100644 index 00000000000..4c618b5e91c --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/_eth_feehistory-response.mdx @@ -0,0 +1,70 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```js +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "baseFeePerBlobGas": [ + "0xe3f5193b", + "0xf6942037", + "0xdb2e5553", + "0xc2d3d9e8", + "0xdb2e5553", + "0xed15d41e" + ], + "baseFeePerGas": [ + "0x279c70a9b", + "0x2a63ee068", + "0x2a01a5449", + "0x299fc09af", + "0x29aa0b0c5", + "0x28b21aaec" + ], + "blobGasUsedRatio": [ + 0.8333333333333334, + 0, + 0, + 1, + 0.8333333333333334 + ], + "gasUsedRatio": [ + 0.7806543666666667, + 0.46377263333333335, + 0.46358696666666666, + 0.503863, + 0.40701746666666666 + ], + "oldestBlock": "0x14535f8", + "reward": [ + [ + "0x5f5e100", + "0x34142698" + ], + [ + "0x5f5e100", + "0x1f619e76" + ], + [ + "0x5f5e100", + "0x39d10680" + ], + [ + "0x6824280", + "0x214c9a15" + ], + [ + "0x4b571c0", + "0x1ac123d6" + ] + ] + } +} +``` + + + diff --git a/services/reference/ethereum/json-rpc-methods/_eth_feehistory-returns.mdx b/services/reference/ethereum/json-rpc-methods/_eth_feehistory-returns.mdx new file mode 100644 index 00000000000..99d6f4435de --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/_eth_feehistory-returns.mdx @@ -0,0 +1,6 @@ +- `oldestBlock`: Lowest number block of the returned range expressed as a hexadecimal number. +- `baseFeePerBlobGas`: Array of base fees per blob gas. Returns zeroes for blocks created before [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844). +- `blobGasUsedRatio`: Array of blob gas used ratios. These are calculated as the ratio of `blobGasUsed` and the max blob gas per block. +- `baseFeePerGas`: An array of block base fees per gas, including an extra block value. The extra value is the next block after the newest block in the returned range. Returns zeroes for blocks created before [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). +- `gasUsedRatio`: An array of block gas used ratios. These are calculated as the ratio of `gasUsed` and `gasLimit`. +- `reward`: An array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty. diff --git a/services/reference/ethereum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/ethereum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..a47c29860ae --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..dfeac287035 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..eca06f85075 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/ethereum/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..e77237cad4e --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/ethereum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..d2d3843b33c --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/index.md b/services/reference/ethereum/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..4c2b56e631a --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Ethereum bundler methods +sidebar_label: Bundler methods +sidebar_key: ethereum-bundler-methods +description: Ethereum bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Ethereum Mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..afa6b653e29 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..43bf16ee5e1 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..6ac799240b6 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/ethereum/json-rpc-methods/eth_accounts.mdx b/services/reference/ethereum/json-rpc-methods/eth_accounts.mdx index c91b72a6e28..74f25d0d0b2 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_accounts.mdx @@ -1,37 +1,41 @@ --- -title: "eth_accounts" +title: Ethereum eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Ethereum accounts. --- -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_accounts-request.mdx" +import Request from '/services/reference/_partials/_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_blobbasefee.mdx b/services/reference/ethereum/json-rpc-methods/eth_blobbasefee.mdx index cc35f0137ad..0ecca619a05 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_blobbasefee.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_blobbasefee.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blobBaseFee" +title: Ethereum eth_blobBaseFee +sidebar_label: eth_blobBaseFee +description: Returns the expected blob base fee for the next Ethereum block. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blobbasefee-description.mdx" +import Description from '/services/reference/_partials/_eth_blobbasefee-description.mdx' + +# `eth_blobBaseFee` ## Parameters -import Params from "/services/reference/_partials/_eth_blobbasefee-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blobbasefee-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blobbasefee-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blobbasefee-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blobbasefee-example.mdx" +import Example from '/services/reference/_partials/_eth_blobbasefee-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_blobbasefee-request.mdx" +import Request from '/services/reference/_partials/_eth_blobbasefee-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blobbasefee-response.mdx" +import Response from '/services/reference/_partials/_eth_blobbasefee-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_blocknumber.mdx b/services/reference/ethereum/json-rpc-methods/eth_blocknumber.mdx index 70710017c27..d6588ab3d9c 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Ethereum eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Ethereum block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_blocknumber-request.mdx" +import Request from '/services/reference/_partials/_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_call.mdx b/services/reference/ethereum/json-rpc-methods/eth_call.mdx index 3d6dd6ead59..df8b26ebb97 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_call.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Ethereum eth_call +sidebar_label: eth_call +description: Executes a Ethereum call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_call-request.mdx" +import Request from '/services/reference/_partials/_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_chainid.mdx b/services/reference/ethereum/json-rpc-methods/eth_chainid.mdx index 5df54cf3fec..4acb0e70a55 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Ethereum eth_chainId +sidebar_label: eth_chainId +description: Returns the Ethereum chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_chainid-request.mdx" +import Request from '/services/reference/_partials/_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_coinbase.mdx b/services/reference/ethereum/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/ethereum/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx b/services/reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx index ab6fd57500b..f44abbe991d 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_createaccesslist.mdx @@ -1,40 +1,44 @@ --- -title: "eth_createAccessList" +title: Ethereum eth_createAccessList +sidebar_label: eth_createAccessList +description: Creates an access list to include in a Ethereum transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_createaccesslist-description.mdx" +import Description from '/services/reference/_partials/_eth_createaccesslist-description.mdx' + +# `eth_createAccessList` ## Parameters -import Params from "/services/reference/_partials/_eth_createaccesslist-parameters.mdx" +import Params from '/services/reference/_partials/_eth_createaccesslist-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_createaccesslist-returns.mdx" +import Returns from '/services/reference/_partials/_eth_createaccesslist-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_createaccesslist-example.mdx" +import Example from '/services/reference/_partials/_eth_createaccesslist-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_createaccesslist-request.mdx" +import Request from '/services/reference/_partials/_eth_createaccesslist-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_createaccesslist-response.mdx" +import Response from '/services/reference/_partials/_eth_createaccesslist-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_estimategas.mdx b/services/reference/ethereum/json-rpc-methods/eth_estimategas.mdx index 5dbb1ebb29c..8a809b3c820 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Ethereum eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Ethereum transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_estimategas-request.mdx" +import Request from '/services/reference/_partials/_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_feehistory.mdx b/services/reference/ethereum/json-rpc-methods/eth_feehistory.mdx index 8ceda53743a..2a25fd47f36 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Ethereum eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Ethereum gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from './_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_feehistory-request.mdx" +import Request from '/services/reference/_partials/_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from './_eth_feehistory-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gasprice.mdx b/services/reference/ethereum/json-rpc-methods/eth_gasprice.mdx index d917710eb5b..9032d8d7434 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Ethereum eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Ethereum gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gasprice-request.mdx" +import Request from '/services/reference/_partials/_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getbalance.mdx b/services/reference/ethereum/json-rpc-methods/eth_getbalance.mdx index fb7e8ca54b7..891dfd96c8f 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Ethereum eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Ethereum address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getbalance-request.mdx" +import Request from '/services/reference/_partials/_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/ethereum/json-rpc-methods/eth_getblockbyhash.mdx index 8d0bade5ab7..a1473eeece6 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Ethereum eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Ethereum block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getblockbyhash-request.mdx" +import Request from '/services/reference/_partials/_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/ethereum/json-rpc-methods/eth_getblockbynumber.mdx index 8778e0ad8c7..d88f5586726 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Ethereum eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Ethereum block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getblockbynumber-request.mdx" +import Request from '/services/reference/_partials/_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/ethereum/json-rpc-methods/eth_getblockreceipts.mdx index 6171b6fc4e5..98fa6764c23 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: Ethereum eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Ethereum. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getblockreceipts-request.mdx"; +import Request from '/services/reference/_partials/_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 115c8b200c0..45ea18e040a 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Ethereum eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx" +import Request from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index a3c1a366bb7..eddce55e792 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Ethereum eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx" +import Request from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getcode.mdx b/services/reference/ethereum/json-rpc-methods/eth_getcode.mdx index 7d49aa8dae1..9264309b80b 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Ethereum eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getcode-request.mdx" +import Request from '/services/reference/_partials/_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getlogs.mdx b/services/reference/ethereum/json-rpc-methods/eth_getlogs.mdx index 5e4b09641fc..a2dfc09606c 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Ethereum eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getlogs-request.mdx" +import Request from '/services/reference/_partials/_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getproof.mdx b/services/reference/ethereum/json-rpc-methods/eth_getproof.mdx index 81923ad7075..e9c65cafbfb 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Ethereum eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getproof-request.mdx" +import Request from '/services/reference/_partials/_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getstorageat.mdx b/services/reference/ethereum/json-rpc-methods/eth_getstorageat.mdx index 91db9a31bb3..51ca8888f21 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Ethereum eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getstorageat-request.mdx" +import Request from '/services/reference/_partials/_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index 0c6f047cf53..b44c2931890 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Ethereum eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 180277be33e..0bba806ee0e 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Ethereum eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyhash.mdx index 4287b3b3355..dde06d0e2e5 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,50 @@ --- -title: "eth_getTransactionByHash" +title: Ethereum eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` +:::tip MEV protection +Maximal Extractable Value (MEV) protection is available for all Infura customers on Mainnet. +This means `r`, `s`, and `v` signature fields might return empty hex values (`0x0`) +while the transaction is pending on Mainnet. +::: + ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gettransactionbyhash-request.mdx" +import Request from '/services/reference/_partials/_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/ethereum/json-rpc-methods/eth_gettransactioncount.mdx index e97dd246a3b..55097178871 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Ethereum eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gettransactioncount-request.mdx" +import Request from '/services/reference/_partials/_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/ethereum/json-rpc-methods/eth_gettransactionreceipt.mdx index 66256857019..6b7865b115a 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Ethereum eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_gettransactionreceipt-request.mdx" +import Request from '/services/reference/_partials/_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/ethereum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index a04530030b1..f87316b0430 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Ethereum eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx" +import Request from '/services/reference/_partials/_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/ethereum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 4b1372d7b31..f5adcdec191 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Ethereum eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx" +import Request from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblockhash.mdx index c4fc2f93969..29f5fa2d7eb 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Ethereum eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx" +import Request from '/services/reference/_partials/_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index a1f61ab91bd..65f3dcdb7c3 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Ethereum eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx" +import Request from '/services/reference/_partials/_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_getwork.mdx b/services/reference/ethereum/json-rpc-methods/eth_getwork.mdx index f0549d24dd5..990ec5665c3 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_getwork.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_getwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getWork" +title: Ethereum eth_getWork +sidebar_label: eth_getWork +description: Return current block and seed hash on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getwork-description.mdx" +import Description from '/services/reference/_partials/_eth_getwork-description.mdx' + +# `eth_getWork` ## Parameters -import Params from "/services/reference/_partials/_eth_getwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getwork-example.mdx" +import Example from '/services/reference/_partials/_eth_getwork-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_getwork-request.mdx" +import Request from '/services/reference/_partials/_eth_getwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getwork-response.mdx" +import Response from '/services/reference/_partials/_eth_getwork-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_hashrate.mdx b/services/reference/ethereum/json-rpc-methods/eth_hashrate.mdx index 989660d632f..d1f9ad538b4 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_hashrate.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_hashrate.mdx @@ -1,40 +1,44 @@ --- -title: "eth_hashrate" +title: Ethereum eth_hashrate +sidebar_label: eth_hashrate +description: Return hashes per second on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_hashrate-description.mdx" +import Description from '/services/reference/_partials/_eth_hashrate-description.mdx' + +# `eth_hashrate` ## Parameters -import Params from "/services/reference/_partials/_eth_hashrate-parameters.mdx" +import Params from '/services/reference/_partials/_eth_hashrate-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_hashrate-returns.mdx" +import Returns from '/services/reference/_partials/_eth_hashrate-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_hashrate-example.mdx" +import Example from '/services/reference/_partials/_eth_hashrate-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_hashrate-request.mdx" +import Request from '/services/reference/_partials/_eth_hashrate-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_hashrate-response.mdx" +import Response from '/services/reference/_partials/_eth_hashrate-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/ethereum/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 68c00281be6..e97cdce605d 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Ethereum eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx" +import Request from '/services/reference/_partials/_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_mining.mdx b/services/reference/ethereum/json-rpc-methods/eth_mining.mdx index 87d49f9dca8..c9bd305e56e 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_mining.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_mining.mdx @@ -1,40 +1,44 @@ --- -title: "eth_mining" +title: Ethereum eth_mining +sidebar_label: eth_mining +description: Indicates whether client is mining on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_mining-description.mdx" +import Description from '/services/reference/_partials/_eth_mining-description.mdx' + +# `eth_mining` ## Parameters -import Params from "/services/reference/_partials/_eth_mining-parameters.mdx" +import Params from '/services/reference/_partials/_eth_mining-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_mining-returns.mdx" +import Returns from '/services/reference/_partials/_eth_mining-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_mining-example.mdx" +import Example from '/services/reference/_partials/_eth_mining-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_mining-request.mdx" +import Request from '/services/reference/_partials/_eth_mining-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_mining-response.mdx" +import Response from '/services/reference/_partials/_eth_mining-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_protocolversion.mdx b/services/reference/ethereum/json-rpc-methods/eth_protocolversion.mdx index 0e30330792f..973d232a1d3 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: Ethereum eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_protocolversion-request.mdx" +import Request from '/services/reference/_partials/_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx index 6dde8798901..fcffe210b9c 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,50 @@ --- -title: "eth_sendRawTransaction" +title: Ethereum eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` +:::tip MEV protection +Maximal Extractable Value (MEV) protection is available for all Infura customers on Mainnet. +This means `r`, `s`, and `v` signature fields might return empty hex values (`0x0`) +while the transaction is pending on Mainnet. +::: + ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_sendrawtransaction-request.mdx" +import Request from '/services/reference/_partials/_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/ethereum/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/ethereum/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/ethereum/json-rpc-methods/eth_sign.mdx b/services/reference/ethereum/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/ethereum/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/ethereum/json-rpc-methods/eth_simulatev1.mdx b/services/reference/ethereum/json-rpc-methods/eth_simulatev1.mdx new file mode 100644 index 00000000000..36880eabc47 --- /dev/null +++ b/services/reference/ethereum/json-rpc-methods/eth_simulatev1.mdx @@ -0,0 +1,265 @@ +--- +title: Ethereum eth_simulateV1 +sidebar_label: eth_simulateV1 +description: Simulate transactions across multiple blocks on Ethereum. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `eth_simulateV1` + +Simulates transactions across multiple blocks. Allows you to test transactions with custom state and +block parameters without submitting them to the network. + +:::info important +This method is only supported on Mainnet and Sepolia. + +A maximum of 16 block state calls can be simulated in a single request. This is determined by +assessing the `blockStateCalls` array of objects. +::: + +## Parameters + +- `BLOCK STATE CALL OBJECT`: + - `blockStateCalls`: _\[required]_ Array of block, state, and call objects: + - `blockOverrides`: _\[optional]_ Object to override block parameters: + - `baseFeePerGas`: (string) Hexadecimal value for the base fee per gas for the block. + - `blobBaseFee`: (string) Hexadecimal value for the base fee per unit of blob gas. + - `feeRecipient`: (string) Address of the fee recipient for the block proposal. + - `gasLimit`: (string) Hexadecimal value that represents the maximum amount of gas that transactions + are allowed to consume. + - `number`: (string) Hexadecimal block number. + - `prevRandao`: (string) The previous value of randomness, which is + used as a source of randomness for various protocol operations. + - `time`: (string) Hexadecimal value representing the Unix epoch time in seconds. + - `stateOverrides`: _\[optional]_ Object to override account states: + - `balance`: (string) Hexadecimal value representing the account balance. + - `nonce`: (string) Hexadecimal temporary nonce value for the call execution. + - `code`: (string) Bytecode to inject into the account. + - `state`: Object of key-value mappings to override all slots in the account storage + before executing the call. + - `stateDiff`: Object of key-value mappings to override individual slots in the account + storage before executing the call. + - `movePrecompileToAddress`: (string) Moves the precompile to the supplied address. + - `calls`: _\[required]_ Array of transaction call objects: + - `from`: _\[optional]_ 20 bytes - The address the transaction is sent from. + - `to`: _\[optional]_ 20 bytes - The address the transaction is directed to. + - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. + - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. + - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. + - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. + - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the + [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `returnFullTransactionObjects`: _\[optional]_ Boolean value which when `true`, returns full transaction + objects, otherwise, just hashes are returned. The default is `false`. + - `traceTransfers`: _\[optional]_ Boolean value which when `true`, adds ETH transfers as ERC20 transfer + events to the logs, allowing you to trace value transfers. The default is `false`. + - `validation`: _\[optional]_ Boolean value which when `true`, does all the validation that a + normal EVM would do, except contract sender and signature checks. When `false`, `eth_simulateV1` behaves like `eth_call`. + The default is `false`. + - `blockParameter`: (string) [_optional_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + +## Returns + +An array of simulation result objects: + +- `baseFeePerGas`: Hexadecimal value for the base fee per gas for the block. +- `blobGasUsed`: Hexadecimal value for the amount of blob gas used. +- `calls`: Array of call results: + - `returnData`: Data returned for the call. + - `logs`: Array of logs generated during the call. + - `address`: Address of the contract that generated the log. + - `blockHash`: Hash of the block. + - `blockNumber`: Hexadecimal block number. + - `data`: Non-indexed log parameters. + - `logIndex`: Index of the log in the block. + - `removed`: Whether the log was removed due to chain reorganization. + - `topics`: Array of indexed log parameters. + - `transactionHash`: Hash of the transaction. + - `transactionIndex`: Index of the transaction in the block. + - `error`: Object containing error information: + - `message`: The error message. + - `code`: The error status code. + - `data`: Error-related information. + - `gasUsed`: Hexadecimal value representing the amount of gas used. + - `status`: Status indicating whether the transaction succeeded (`0x1`). `0x0` indicates that a transaction has failed. +- `difficulty`: A hexadecimal of the difficulty for this block. +- `excessBlobGas`: A hexadecimal of the excess blob gas. +- `extraData`: The "extra data" field of this block. +- `gasLimit`: Maximum gas allowed in this block. +- `gasUsed`: Total used gas by all transactions in this block. +- `hash`: Hash of the block. `Null` when the returned block is the pending block. +- `logsBloom`: The bloom filter for the logs of the block. `Null` when the returned block is the pending block. +- `miner`: Address of the beneficiary to whom the mining rewards were given. +- `mixHash`: Hexadecimal mix hash. +- `nonce`: Hash of the generated proof-of-work. `Null` when the returned block is the pending block. +- `number`: Block number. `Null` when the returned block is the pending block. +- `parentBeaconBlockRoot`: Parent beacon block root. +- `parentHash`: Hash of the parent block. +- `receiptsRoot`: The root of the receipts trie of the block. Also see [Tries in Ethereum](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#tries-in-ethereum). +- `sha3Uncles`: The SHA3 of the uncles data in the block. +- `size`: A hexadecimal of the size of this block in bytes. +- `stateRoot`: The root of the final state trie of the block. +- `timestamp`: The unix timestamp for when the block was collated. +- `totalDifficulty`: A hexadecimal of the total difficulty of the chain until this block. +- `transactions`: (Array) An array of transaction objects, or 32 bytes transaction hashes depending on the last given parameter. +- `transactionsRoot`: The root of the transaction trie of the block. +- `uncles`: (Array) An array of uncle hashes. +- `withdrawals`: (Array) Withdrawal objects. +- `withdrawalsRoot`: Withdrawals trie root. + +## Example + +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). + +### Request + + + + +```bash +curl https://mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "eth_simulateV1", + "params": [ + { + "blockStateCalls": [ + { + "blockOverrides": { + "baseFeePerGas": "0x9" + }, + "stateOverrides": { + "0xc000000000000000000000000000000000000000": { + "balance": "0x4a817c800" + } + }, + "calls": [ + { + "from": "0xc000000000000000000000000000000000000000", + "to": "0xc000000000000000000000000000000000000001", + "maxFeePerGas": "0xf", + "value": "0x1" + }, + { + "from": "0xc000000000000000000000000000000000000000", + "to": "0xc000000000000000000000000000000000000002", + "maxFeePerGas": "0xf", + "value": "0x1" + } + ] + } + ], + "validation": true, + "traceTransfers": true + }, + "latest" + ] + }' +``` + + + + +```bash +wscat -c wss://mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","id":1,"method":"eth_simulateV1","params":[{"blockStateCalls":[{"blockOverrides":{"baseFeePerGas":"0x9"},"stateOverrides":{"0xc000000000000000000000000000000000000000":{"balance":"0x4a817c800"}},"calls":[{"from":"0xc000000000000000000000000000000000000000","to":"0xc000000000000000000000000000000000000001","maxFeePerGas":"0xf","value":"0x1"},{"from":"0xc000000000000000000000000000000000000000","to":"0xc000000000000000000000000000000000000002","maxFeePerGas":"0xf","value":"0x1"}]}],"validation":true,"traceTransfers":true},"latest"]}' +``` + + + + +### Response + + + + +```JSON +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "baseFeePerGas": "0x9", + "blobGasUsed": "0x0", + "calls": [ + { + "gasUsed": "0x5208", + "logs": [ + { + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "blockHash": "0xc98388385b0dbfc15ad5c6a0f4b19f7abd94efb4618ced05e3eb320ee30b1e7f", + "blockNumber": "0x1496e50", + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": "0x0", + "removed": false, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000c000000000000000000000000000000000000000", + "0x000000000000000000000000c000000000000000000000000000000000000001" + ], + "transactionHash": "0xe7217784e0c3f7b35d39303b1165046e9b7e8af9b9cf80d5d5f96c3163de8f51", + "transactionIndex": "0x0" + } + ], + "returnData": "0x", + "status": "0x1" + }, + { + "gasUsed": "0x5208", + "logs": [ + { + "address": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + "blockHash": "0xc98388385b0dbfc15ad5c6a0f4b19f7abd94efb4618ced05e3eb320ee30b1e7f", + "blockNumber": "0x1496e50", + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": "0x1", + "removed": false, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000c000000000000000000000000000000000000000", + "0x000000000000000000000000c000000000000000000000000000000000000002" + ], + "transactionHash": "0xf0182201606ec03701ba3a07d965fabdb4b7d06b424f226ea7ec3581802fc6fa", + "transactionIndex": "0x1" + } + ], + "returnData": "0x", + "status": "0x1" + } + ], + "difficulty": "0x0", + "excessBlobGas": "0x4920000", + "extraData": "0x", + "gasLimit": "0x1c9c380", + "gasUsed": "0xa410", + "hash": "0xc98388385b0dbfc15ad5c6a0f4b19f7abd94efb4618ced05e3eb320ee30b1e7f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x7e2a2fa2a064f693f0a55c5639476d913ff12d05", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x1496e50", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0xddd47e7383c8ced495e85e053f898d7a333feb0432fa9098306f6f563cde4984", + "receiptsRoot": "0x75308898d571eafb5cd8cde8278bf5b3d13c5f6ec074926de3bb895b519264e1", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x29c", + "stateRoot": "0xd6da11fae4ab94ddba2c4c71206962f7c6eaec6e5fabf00f3f7540c4ed7ad8f1", + "timestamp": "0x67803e64", + "transactions": [ + "0xe7217784e0c3f7b35d39303b1165046e9b7e8af9b9cf80d5d5f96c3163de8f51", + "0xf0182201606ec03701ba3a07d965fabdb4b7d06b424f226ea7ec3581802fc6fa" + ], + "transactionsRoot": "0x9bdb74f3ce41f5893a02a631e904ae0d21ae8c4e416786d8dbd9cb5c54f1dc0f", + "uncles": [], + "withdrawals": [], + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } +``` + + + diff --git a/services/reference/ethereum/json-rpc-methods/eth_submitwork.mdx b/services/reference/ethereum/json-rpc-methods/eth_submitwork.mdx index eb77a8d490b..7a1342f7de5 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: Ethereum eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_submitwork-request.mdx" +import Request from '/services/reference/_partials/_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/eth_syncing.mdx b/services/reference/ethereum/json-rpc-methods/eth_syncing.mdx index 860ce985ef2..86929df6659 100644 --- a/services/reference/ethereum/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/ethereum/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Ethereum eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "/services/reference/_partials/_eth_syncing-request.mdx" +import Request from '/services/reference/_partials/_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx index 967dd1fb39b..2705dd54840 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getFilterChanges" +title: Ethereum eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Ethereum logs since last poll. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx" +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx" +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx" +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx" +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' ### Request -import Request from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx" +import Request from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx" +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx index 5614086feab..7f79e87e703 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getFilterLogs" +title: Ethereum eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx" +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx" +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx" +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx" +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' ### Request -import Request from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx" +import Request from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx" +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx index b741d3c3bde..981e1d9c0ae 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_newBlockFilter" +title: Ethereum eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx" +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx" +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx" +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx" +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' ### Request -import Request from "/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx" +import Request from '/services/reference/_partials/filter-methods/_eth_newblockfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx" +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx index b9d2cbc9223..a5119354778 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_newFilter" +title: Ethereum eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx" +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx" +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx" +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx" +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' ### Request -import Request from "/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx" +import Request from '/services/reference/_partials/filter-methods/_eth_newfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx" +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx deleted file mode 100644 index 2ea55a1da1c..00000000000 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_newpendingtransactionfilter.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_newPendingTransactionFilter" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/filter-methods/_eth_newpendingtransactionfilter-description.mdx" - - diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx index 14222097cd8..8f7a1b1556c 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -1,40 +1,44 @@ --- -title: "eth_uninstallFilter" +title: Ethereum eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx" +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` ## Parameters -import Params from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx" +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx" +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' ## Example -import Example from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx" +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' ### Request -import Request from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx" +import Request from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-request.mdx' ### Response -import Response from "/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx" +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/filter-methods/index.md b/services/reference/ethereum/json-rpc-methods/filter-methods/index.md index 3bec3f1075f..4c54ef764bc 100644 --- a/services/reference/ethereum/json-rpc-methods/filter-methods/index.md +++ b/services/reference/ethereum/json-rpc-methods/filter-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Filter methods" +title: Ethereum filter methods +sidebar_label: Filter methods +sidebar_key: ethereum-filter-methods +description: Ethereum filter methods --- -# Filter Methods +# Ethereum filter methods Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs can be shared by any connection using the same API key. diff --git a/services/reference/ethereum/json-rpc-methods/index.md b/services/reference/ethereum/json-rpc-methods/index.md index fd84efd7a61..8389f760ede 100644 --- a/services/reference/ethereum/json-rpc-methods/index.md +++ b/services/reference/ethereum/json-rpc-methods/index.md @@ -1,147 +1,9 @@ -# JSON-RPC methods +--- +title: Ethereum JSON-RPC API +sidebar_label: JSON-RPC API +sidebar_key: ethereum-json-rpc-api +--- -Here you can find the JSON-RPC API endpoints. You [can call these APIs using a variety of tools](../quickstart.md). +import ErrorCodes from "../../\_partials/error-codes.mdx"; -## Error codes - -You may encounter various errors when interacting with a network: - -- [**JSON-RPC errors**](#json-rpc-errors) - operations on the blockchain network. It means the server has successfully received the JSON-RPC - request but encountered an issue processing it. Causes might include invalid parameters, a method not - found, or execution errors related to the requested operation. - -- [**HTTP errors**](#http-errors): These happen at the transport layer during data transmission to the blockchain - network. They could stem from Infura-related issues like rate limits, API key problems, or - service availability issues. - -- [**Smart contract errors**](#smart-contract-errors): These arise during attempts to execute transactions in the EVM - involving smart contracts. - -### JSON-RPC errors - -Error codes returned by Infura’s RPC service network APIs can vary slightly between implementations, but -they generally follow the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#error_object) -and Ethereum-specific conventions. - -Below is a table listing the error codes, their messages, and meanings. The "Standard" category includes -common JSON-RPC errors, while the "Non-standard" category encompasses server errors defined by the -implementation. - -| Code | Message | Meaning | Category | -|---------|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------| -| -32700 | Parse error | The JSON request is invalid, this can be due to syntax errors. | Standard | -| -32600 | Invalid request | The JSON request is possibly malformed. | Standard | -| -32601 | Method not found | The method does not exist, often due to a typo in the method name or the method not being supported. | Standard | -| -32602 | Invalid argument | Invalid method parameters. For example, `"error":{"code":-32602,"message":"invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go value of type common.Hash"}` indicates the `0x` prefix is missing from the hexadecimal address. | Standard | -| -32603 | Internal error | An internal JSON-RPC error, often caused by a bad or invalid payload. | Standard | -| -32000 | Invalid input | Missing or invalid parameters, possibly due to server issues or a block not being processed yet. | Non-standard | -| -32001 | Resource not found | The requested resource cannot be found, possibly when calling an unsupported method. | Non-standard | -| -32002 | Resource unavailable | The requested resource is not available. | Non-standard | -| -32003 | Transaction rejected | The transaction could not be created. | Non-standard | -| -32004 | Method not supported | The requested method is not implemented. | Non-standard | -| -32005 | Limit exceeded | The request exceeds your request limit. For more information, refer to [Avoid rate limiting](../../../how-to/avoid-rate-limiting). | Non-standard | -| -32006 | JSON-RPC version not supported | The version of the JSON-RPC protocol is not supported. | Non-standard | - -Example error response: - -```json -{ - "id": 1337 - "jsonrpc": "2.0", - "error": { - "code": -32003, - "message": "Transaction rejected" - } -} -``` - -### HTTP errors - -Infura-specific error codes or messages could include errors for rate limits, API key issues, or -service availability problems. - -| Code | Message | Meaning | -| ---- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 400 | Bad request | Incorrect HTTP Request type or invalid characters, ensure that your request body and format is correct. | -| 401 | Unauthorized | This can happen when one or multiple security requirements are not met. Example responses: `project id required in the url`, `invalid project id`, `invalid project id or project secret`, `invalid JWT`. | -| 403 | Forbidden | The request was intentionally refused due to specific settings mismatch, check your key settings. Example response: `"error":{"code":-32002,"message":"rejected due to project ID settings"}`. | -| 429 | Too Many Requests | The daily request total or request per second are higher than your plan allows. Refer to the [Avoid rate limiting](https://docs.infura.io/api/networks/ethereum/how-to/avoid-rate-limiting) topic for more information. Example responses: `"error": {"code": -32005, "message": "daily request count exceeded, request rate limited"}`, `"error": {"code": -32005, "message": "project ID request rate exceeded"}`. | -| 500 | Internal Server Error | Error while processing the request on the server side. | -| 502 | Bad Gateway | Indicates a communication error which can have various causes, from networking issues to invalid response received from the server. | -| 503 | Service Unavailable | Indicates that the server is not ready to handle the request. | -| 504 | Gateway Timeout | The request ended with a timeout, it can indicate a networking issue or a delayed or missing response from the server. | - -### Smart contract errors - -When interacting with smart contracts, you might also encounter errors related to the execution of -transactions in the EVM: - -- **Out of gas**: The transaction does not have enough gas to complete. -- **Revert**: The transaction was reverted by the EVM, often due to a condition in the smart contract code. -- **Bad instruction**: The transaction tried to execute an invalid operation. -- **Bad jump destination**: A jump was made to an invalid location in the smart contract code. - -## Value encoding - -Specific types of values passed to and returned from Ethereum RPC methods require special encoding: - -### Quantity - -A `Quantity` (integer, number) must: - -- Be hex-encoded. -- Be "0x"-prefixed. -- Be expressed using the fewest possible hex digits per byte. -- Express zero as "0x0". - -Examples `Quantity` values: - -| Value | Validity | Reason | -| ------ | --------- | --------------------------------- | -| 0x | `invalid` | empty not a valid quantity | -| 0x0 | `valid` | interpreted as a quantity of zero | -| 0x00 | `invalid` | leading zeroes not allowed | -| 0x41 | `valid` | interpreted as a quantity of 65 | -| 0x400 | `valid` | interpreted as a quantity of 1024 | -| 0x0400 | `invalid` | leading zeroes not allowed | -| ff | `invalid` | values must be prefixed | - -### Block identifier - -The RPC methods below take a default block identifier as a parameter. - -- `eth_getBalance` -- `eth_getStorageAt` -- `eth_getTransactionCount` -- `eth_getCode` -- `eth_call` -- `eth_getProof` - -Since there is no way to clearly distinguish between a `Data` parameter and a `Quantity` parameter, [EIP-1898](https://eips.ethereum.org/EIPS/eip-1898) provides a format to specify a block either using the block hash or block number. The block identifier is a JSON `object` with the following fields: - -| Property | Type | Description | -| ------------------ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `[blockNumber]` | \{[`Quantity`](eth_blocknumber.mdx)\} | The block in the canonical chain with this number | -| OR `[blockHash]` | \{[`Data`](eth_getblockbyhash.mdx)\} | The block uniquely identified by this hash. The `blockNumber` and `blockHash` properties are mutually exclusive; exactly one of them must be set. | -| `requireCanonical` | \{`boolean`}\ | (optional) Whether or not to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the `blockHash` tag. Defaults to `false`. | - -### Data - -A `Data` value (for example, byte arrays, account addresses, hashes, and bytecode arrays) must: - -- Be hex-encoded. -- Be "0x"-prefixed. -- Be expressed using two hex digits per byte. - -Examples `Data` values: - -| Value | Valid | Reason | -| -------- | --------- | -------------------------------------------------- | -| 0x | `valid` | interpreted as empty data | -| 0x0 | `invalid` | each byte must be represented using two hex digits | -| 0x00 | `valid` | interpreted as a single zero byte | -| 0x41 | `true` | interpreted as a data value of 65 | -| 0x004200 | `true` | interpreted as a data value of 16896 | -| 0xf0f0f | `false` | bytes require two hex digits | -| 004200 | `false` | values must be prefixed | + diff --git a/services/reference/ethereum/json-rpc-methods/net_listening.mdx b/services/reference/ethereum/json-rpc-methods/net_listening.mdx index 11339481a73..63813d7d297 100644 --- a/services/reference/ethereum/json-rpc-methods/net_listening.mdx +++ b/services/reference/ethereum/json-rpc-methods/net_listening.mdx @@ -1,40 +1,44 @@ --- -title: "net_listening" +title: Ethereum net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_listening-description.mdx" +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx" +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx" +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx" +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "/services/reference/_partials/_net_listening-request.mdx" +import Request from '/services/reference/_partials/_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx" +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/net_peercount.mdx b/services/reference/ethereum/json-rpc-methods/net_peercount.mdx index 6de822b594e..4efc9dd09a0 100644 --- a/services/reference/ethereum/json-rpc-methods/net_peercount.mdx +++ b/services/reference/ethereum/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Ethereum net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "/services/reference/_partials/_net_peercount-request.mdx" +import Request from '/services/reference/_partials/_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/net_version.mdx b/services/reference/ethereum/json-rpc-methods/net_version.mdx index 224baca1a6c..abbe24abc8b 100644 --- a/services/reference/ethereum/json-rpc-methods/net_version.mdx +++ b/services/reference/ethereum/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Ethereum net_version +sidebar_label: net_version +description: Returns network ID on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "/services/reference/_partials/_net_version-request.mdx" +import Request from '/services/reference/_partials/_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 8af1c927dfa..3f103576925 100644 --- a/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: Ethereum eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx" +import Request from '/services/reference/_partials/subscription-methods/_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 9410e8902e6..dabcd1689c7 100644 --- a/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/ethereum/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: Ethereum eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx" +import Request from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/subscription-methods/index.md b/services/reference/ethereum/json-rpc-methods/subscription-methods/index.md index 33a8804d49c..a6d8061e5ac 100644 --- a/services/reference/ethereum/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/ethereum/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: Ethereum subscription methods +sidebar_label: Subscription methods +sidebar_key: ethereum-subscription-methods +description: Ethereum subscription methods --- -# Subscription methods +# Ethereum subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/index.md b/services/reference/ethereum/json-rpc-methods/trace-methods/index.md index 9f22369477c..c9334a9b500 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/index.md +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/index.md @@ -1,10 +1,18 @@ --- -title: "Trace methods" +title: Ethereum trace methods +sidebar_label: Trace methods +sidebar_key: ethereum-trace-methods +description: Ethereum trace methods --- -# Trace methods +# Ethereum trace methods -Infura provides access to the following trace API methods to allow users to gain insights into the execution of smart contracts and transactions: +:::info + +Trace API is an open beta feature, available to paying Infura customers. +::: + +Infura provides access to the following trace API methods that provide insights into the execution of smart contracts and transactions. - [`trace_block`](trace_block.mdx) - [`trace_call`](trace_call.mdx) @@ -12,19 +20,13 @@ Infura provides access to the following trace API methods to allow users to gain - [`trace_transaction`](trace_transaction.mdx) - [`trace_filter`](trace_filter.mdx) -:::info - -Trace API is currently an open beta feature, available to paying Infura customers. - -::: - -When tracing transactions, the trace diagnostic options are [`trace`](#trace) and [`stateDiff`](#statediff). - -:::info - -`trace_block, trace_filter`, and `trace_transaction` returns `trace` information, whereas `trace_call` and `trace_callMany` -allow you to use the `trace` or `stateDiff` diagnostic options when tracing calls or transactions. +`trace_block`, `trace_filter`, and `trace_transaction` return [`trace`](#trace) information, while +`trace_call` and `trace_callMany` +allow you to use the [`trace`](#trace) or [`stateDiff`](#statediff) diagnostic options when tracing calls or transactions. +:::caution +Trace responses are handled generically to enable support of additional fields beyond +those documented here. This requires graceful handling. ::: ## `trace` @@ -55,31 +57,36 @@ smart contract transaction. Excludes precompiled contracts. ] ``` -| Key | Value | -|-----------------------|-----------------------------------------------------------------------------------------------------------------| -| `action` | Transaction details. | -| `callType` | Whether the transaction is `call` or `create`. | -| `from` | Address of the transaction sender. | -| `gas` | Gas provided by sender. | -| `input` | Transaction data. | -| `to` | Target of the transaction. | -| `value` | Value transferred in the transaction. | -| `result` | Transaction result. | -| `gasUsed` | Gas used by the transaction. Includes any refunds of unused gas. | -| `output` | Return value of the contract call. Contains only the actual value sent by a `RETURN` operation. If a `RETURN` was not executed, the output is empty bytes. | -| `subTraces` | Traces of contract calls made by the transaction. | -| `traceAddress` | Tree list address of where the call occurred, address of the parents, and order of the current sub call. | -| `transactionHash` | Hash of the transaction. | -| `transactionPosition` | Transaction position. | -| `type` | Whether the transaction is a `CALL` or `CREATE` series operation. | - +| Key | Value | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `action` | Transaction details. | +|   - `creationMethod` | Opcode used during contract creation: `create` or `create2`. Returned for `create` operations. | +|   - `callType` | Whether the transaction is `call`, `staticcall`, or `delegatecall`. Returned for `call` operations. | +|   - `from` | Address of the transaction sender. | +|   - `gas` | Gas provided by sender. | +|   - `input` | Transaction data. Returned for `call` operations. | +|   - `init` | Contract initialization code. Returned for `create` operations. | +|   - `to` | Target of the transaction. Returned for `call` operations. | +|   - `value` | Value transferred in the transaction. | +| `blockHash` | Hash of the block containing this trace. | +| `blockNumber` | Block number containing this trace. | +| `result` | Transaction result. | +|   - `address` | Address of the newly created contract. Returned for `create` operations. | +|   - `code` | Bytecode of the newly created contract. Returned for `create` operations. | +|   - `gasUsed` | Gas used by the transaction. Includes any refunds of unused gas. | +|   - `output` | Return value of the contract call. Contains only the actual value sent by a `RETURN` operation. If a `RETURN` was not executed, the output is empty bytes. Returned for `call` operations. | +| `subtraces` | Number of sub-traces (nested contract calls) made by the transaction. | +| `traceAddress` | Tree list address of where the call occurred, address of the parents, and order of the current sub call. | +| `transactionHash` | Hash of the transaction. | +| `transactionPosition` | Transaction position within the block. | +| `type` | Whether the transaction is a `call` or `create` operation. | ## `stateDiff` Displays state changes in the requested block for each transaction, represented as a map of accounts to an object. Lists the balance, code, nonce, and storage changes from immediately before the transaction to after the transaction. For the `key:value` pairs: -- `+` indicates the field didn’t exist before and now has the specified value. +- `+` indicates the field didn't exist before and now has the specified value. - `-` indicates a deleted value. - `*` has a `from` and a `to` value. @@ -107,13 +114,13 @@ An absent value is distinct from zero when creating accounts or clearing storage } ``` -| Key | Value | -|-------------------------|------------------------------------------| -| `balance` | Change of balance event. | -| `balance.from` | Balance before the transaction. | -| `balance.to` | Balance after the transaction. | -| `code` | Changes to code. None in this example. | -| `nonce` | Change of nonce. | -| `nonce.from` | Nonce before the transaction. | -| `nonce.to` | Nonce after the transaction. | -| `storage` | Changes to storage. None in this example.| +| Key | Value | +| -------------- | ----------------------------------------- | +| `balance` | Change of balance event. | +| `balance.from` | Balance before the transaction. | +| `balance.to` | Balance after the transaction. | +| `code` | Changes to code. None in this example. | +| `nonce` | Change of nonce. | +| `nonce.from` | Nonce before the transaction. | +| `nonce.to` | Nonce after the transaction. | +| `storage` | Changes to storage. None in this example. | diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_block.mdx b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_block.mdx index ae99ef2bbe0..1feb81bb78f 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_block.mdx +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_block.mdx @@ -1,40 +1,44 @@ --- -title: "trace_block" +title: Ethereum trace_block +sidebar_label: trace_block +description: Gets trace information for transactions in a block on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_block-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_block-description.mdx' + +# `trace_block` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_block-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_block-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_block-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_block-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_block-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_block-example.mdx' ### Request -import Request from "/services/reference/_partials/trace-methods/_trace_block-request.mdx" +import Request from '/services/reference/_partials/trace-methods/_trace_block-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_block-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_block-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_call.mdx b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_call.mdx index 9a66bc81b1f..2a382be60a4 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_call.mdx +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_call.mdx @@ -1,40 +1,44 @@ --- -title: "trace_call" +title: Ethereum trace_call +sidebar_label: trace_call +description: Executes a call on Ethereum and returns possible traces. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_call-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_call-description.mdx' + +# `trace_call` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_call-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_call-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_call-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_call-example.mdx' ### Request -import Request from "/services/reference/_partials/trace-methods/_trace_call-request.mdx" +import Request from '/services/reference/_partials/trace-methods/_trace_call-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_call-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_call-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_callmany.mdx b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_callmany.mdx index ec746ed540d..c979bc69acf 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_callmany.mdx +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_callmany.mdx @@ -1,40 +1,44 @@ --- -title: "trace_callMany" +title: Ethereum trace_callMany +sidebar_label: trace_callMany +description: Executes multiple calls on Ethereum and returns possible traces. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_callmany-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_callmany-description.mdx' + +# `trace_callMany` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_callmany-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_callmany-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_callmany-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_callmany-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_callmany-example.mdx' ### Request -import Request from "/services/reference/_partials/trace-methods/_trace_callmany-request.mdx" +import Request from '/services/reference/_partials/trace-methods/_trace_callmany-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_callmany-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_callmany-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_filter.mdx b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_filter.mdx index 6861b9a3e8f..23cbe894bdc 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_filter.mdx +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_filter.mdx @@ -1,40 +1,44 @@ --- -title: "trace_filter" +title: Ethereum trace_filter +sidebar_label: trace_filter +description: Returns filtered traces on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_filter-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_filter-description.mdx' + +# `trace_filter` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_filter-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_filter-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_filter-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_filter-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_filter-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_filter-example.mdx' ### Request -import Request from "/services/reference/_partials/trace-methods/_trace_filter-request.mdx" +import Request from '/services/reference/_partials/trace-methods/_trace_filter-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_filter-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_filter-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_transaction.mdx b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_transaction.mdx index f7c8a254ad9..c5a14c4c1c3 100644 --- a/services/reference/ethereum/json-rpc-methods/trace-methods/trace_transaction.mdx +++ b/services/reference/ethereum/json-rpc-methods/trace-methods/trace_transaction.mdx @@ -1,40 +1,44 @@ --- -title: "trace_transaction" +title: Ethereum trace_transaction +sidebar_label: trace_transaction +description: Returns traces for a transaction on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_transaction-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_transaction-description.mdx' + +# `trace_transaction` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_transaction-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_transaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_transaction-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_transaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_transaction-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_transaction-example.mdx' ### Request -import Request from "/services/reference/_partials/trace-methods/_trace_transaction-request.mdx" +import Request from '/services/reference/_partials/trace-methods/_trace_transaction-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_transaction-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_transaction-response.mdx' diff --git a/services/reference/ethereum/json-rpc-methods/web3_clientversion.mdx b/services/reference/ethereum/json-rpc-methods/web3_clientversion.mdx index dfb0270603d..72ac5b1e906 100644 --- a/services/reference/ethereum/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/ethereum/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Ethereum web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Ethereum. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "/services/reference/_partials/_web3_clientversion-request.mdx" +import Request from '/services/reference/_partials/_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/ethereum/quickstart.md b/services/reference/ethereum/quickstart.md index 981e77da0af..f657c32b521 100644 --- a/services/reference/ethereum/quickstart.md +++ b/services/reference/ethereum/quickstart.md @@ -1,11 +1,12 @@ --- description: Ethereum quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Ethereum quickstart This quickstart guide will help you set up and make calls on the Ethereum network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Ethe ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Ethereum network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Ethereum network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -56,7 +57,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -67,25 +68,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://mainnet.infura.io.infura.io/v3/", { - method: "POST", + fetch('https://mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -109,19 +110,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://mainnet.infura.io.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -145,18 +146,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://mainnet.infura.io.infura.io/v3/" + 'https://mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -176,13 +177,13 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - var { Web3 } = require("web3") - var provider = "https://mainnet.infura.io/v3/" + var { Web3 } = require('web3') + var provider = 'https://mainnet.infura.io/v3/' var web3Provider = new Web3.providers.HttpProvider(provider) var web3 = new Web3(web3Provider) - web3.eth.getBlockNumber().then((result) => { - console.log("Latest Ethereum Block is ", result) + web3.eth.getBlockNumber().then(result => { + console.log('Latest Ethereum Block is ', result) }) ``` @@ -240,7 +241,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/gas-api/api-reference/basefeehistory.md b/services/reference/gas-api/api-reference/basefeehistory.md index 94022165e6b..fccf11466a0 100644 --- a/services/reference/gas-api/api-reference/basefeehistory.md +++ b/services/reference/gas-api/api-reference/basefeehistory.md @@ -2,12 +2,13 @@ description: Get the base fee history. --- +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js'; import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; # Get the base fee history -Returns the base fee history of the specified blockchain network for the previous 500 blocks. +Returns the base fee history of the specified blockchain network for the previous 500 blocks. The base fee is a part of the EIP-1559 upgrade to the Ethereum network, and it represents the minimum price a user must pay for their transaction to be included in a block. @@ -21,7 +22,8 @@ data for a specific blockchain network. **Path**: -- `chainId`: `string` - ID of the chain to query +- `chainId`: `string` - ID of the chain to query. + See the [list of supported chain IDs](../../../get-started/endpoints.md#gas-api). ## Returns @@ -31,39 +33,39 @@ Array of historical base fees. ### Request -Include your [API key](../../../../../developer-tools/dashboard/get-started/create-api) -and optional [API key secret](../../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/) +Include your [API key](/developer-tools/dashboard/get-started/create-api) +and optional [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) to authorize your account to use the APIs. :::tip You can call the API with only an API key, and [include it as a path parameter](../api-reference/index.md#supported-api-request-formats) -instead of using the cURL authentication option (`-u`). +instead of using the curl authentication option (`-u`). ::: - + ```bash curl -X "GET" \ - -u : \ + -u : \ "https://gas.api.infura.io/networks/1/baseFeeHistory" ``` - + ```javascript -const axios = require("axios") +const axios = require('axios') -const apiKey = "" // Replace with your API key. -const apiKeySecret = "" // Replace with your API key secret. +const apiKey = '' // Replace with your API key. +const apiKeySecret = '' // Replace with your API key secret. -const Auth = Buffer.from(apiKey + ":" + apiKeySecret).toString("base64") +const Auth = Buffer.from(apiKey + ':' + apiKeySecret).toString('base64') // The chain ID of the supported network. -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/networks/${chainId}/baseFeeHistory`, @@ -72,12 +74,12 @@ const chainId = 1; Authorization: `Basic ${Auth}`, }, } - ); - console.log("Base fee history:", data); + ) + console.log('Base fee history:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` diff --git a/services/reference/gas-api/api-reference/basefeepercentile.md b/services/reference/gas-api/api-reference/basefeepercentile.md index 108965faddb..325dd61798d 100644 --- a/services/reference/gas-api/api-reference/basefeepercentile.md +++ b/services/reference/gas-api/api-reference/basefeepercentile.md @@ -2,12 +2,13 @@ description: Get the base fee percentile for a chain. --- +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js'; import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; # Get the base fee percentile -Returns the base fee percentile (50th percentile) of the specified blockchain network. +Returns the base fee percentile (50th percentile) of the specified blockchain network. For example, if the API returns a value of `20` Gwei, it means that 50% of the historical base fees are less than or equal to `20` Gwei. @@ -22,6 +23,7 @@ based on historical data. **Path**: - `chainId`: `string` - ID of the chain to query. + See the [list of supported chain IDs](../../../get-started/endpoints.md#gas-api). ## Returns @@ -32,38 +34,39 @@ less than or equal to the provided amount. ### Request -Include your [API key](../../../../../developer-tools/dashboard/get-started/create-api) -and optional [API key secret](../../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/) +Include your [API key](/developer-tools/dashboard/get-started/create-api) +and optional [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) to authorize your account to use the APIs. :::tip You can call the API with only an API key, and [include it as a path parameter](../api-reference/index.md#supported-api-request-formats) -instead of using the cURL authentication option (`-u`). +instead of using the curl authentication option (`-u`). ::: - + + ```bash curl -X "GET" \ - -u : \ - "https://gas.api.infura.io/networks/1/baseFeeHistory" + -u : \ + "https://gas.api.infura.io/networks/1/baseFeePercentile" ``` ```javascript -const axios = require("axios"); +const axios = require('axios') -const apiKey = ""; // Replace with your API key. -const apiKeySecret = ""; // Replace with your API key secret. +const apiKey = '' // Replace with your API key. +const apiKeySecret = '' // Replace with your API key secret. -const Auth = Buffer.from(apiKey + ":" + apiKeySecret).toString("base64"); +const Auth = Buffer.from(apiKey + ':' + apiKeySecret).toString('base64') // The chain ID of the supported network. -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/networks/${chainId}/baseFeePercentile`, @@ -72,12 +75,12 @@ const chainId = 1; Authorization: `Basic ${Auth}`, }, } - ); - console.log("Base fee history:", data); + ) + console.log('Base fee percentile:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` diff --git a/services/reference/gas-api/api-reference/busythreshold.md b/services/reference/gas-api/api-reference/busythreshold.md index f9aa2fec4c0..8dc61387844 100644 --- a/services/reference/gas-api/api-reference/busythreshold.md +++ b/services/reference/gas-api/api-reference/busythreshold.md @@ -2,12 +2,13 @@ description: Get the busy threshold. --- +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js'; import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; # Get the busy threshold -Returns the busy threshold for the specified blockchain network. +Returns the busy threshold for the specified blockchain network. For example, a `busyThreshold` value of `30` Gwei indicates that 90% of the historical base fees on the network have been below `30` Gwei. @@ -21,6 +22,7 @@ likely due to a high volume of transactions. **Path**: - `chainId`: `string` - ID of the chain to query. + See the [list of supported chain IDs](../../../get-started/endpoints.md#gas-api). ## Returns @@ -31,21 +33,21 @@ have been below this threshold, serving as a marker of network congestion when c ### Request -Include your [API key](../../../../../developer-tools/dashboard/get-started/create-api) -and optional [API key secret](../../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/) +Include your [API key](/developer-tools/dashboard/get-started/create-api) +and optional [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) to authorize your account to use the APIs. :::tip You can call the API with only an API key, and [include it as a path parameter](../api-reference/index.md#supported-api-request-formats) -instead of using the cURL authentication option (`-u`). +instead of using the curl authentication option (`-u`). ::: - + ```bash curl -X "GET" \ - -u : \ + -u : \ "https://gas.api.infura.io/networks/1/busyThreshold" ``` @@ -53,17 +55,17 @@ curl -X "GET" \ ```javascript -const axios = require("axios"); +const axios = require('axios') -const apiKey = ""; // Replace with your API key. -const apiKeySecret = ""; // Replace with your API key secret. +const apiKey = '' // Replace with your API key. +const apiKeySecret = '' // Replace with your API key secret. -const Auth = Buffer.from(apiKey + ":" + apiKeySecret).toString("base64"); +const Auth = Buffer.from(apiKey + ':' + apiKeySecret).toString('base64') // The chain ID of the supported network. -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/networks/${chainId}/busyThreshold`, @@ -72,12 +74,12 @@ const chainId = 1; Authorization: `Basic ${Auth}`, }, } - ); - console.log("Busy threshold:", data); + ) + console.log('Busy threshold:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` diff --git a/services/reference/gas-api/api-reference/gasprices-type2.md b/services/reference/gas-api/api-reference/gasprices-type2.md index 400aa3a438d..bd20621ca33 100644 --- a/services/reference/gas-api/api-reference/gasprices-type2.md +++ b/services/reference/gas-api/api-reference/gasprices-type2.md @@ -2,13 +2,14 @@ description: Get the estimated gas prices for a chain. --- +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js'; import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; # Get EIP-1559 gas prices Returns the estimated [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) gas fees for the specified -blockchain network. +blockchain network. **GET** `https://gas.api.infura.io/networks/${chainId}/suggestedGasFees` @@ -17,6 +18,7 @@ blockchain network. **Path**: - `chainId`: `string` - ID of the chain to query. + See the [list of supported chain IDs](../../../get-started/endpoints.md#gas-api). ## Returns @@ -40,17 +42,17 @@ Recommended gas price details based of the level of urgency: ### Request -Include your [API key](../../../../../developer-tools/dashboard/get-started/create-api) -and optional [API key secret](../../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/) +Include your [API key](/developer-tools/dashboard/get-started/create-api) +and optional [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) to authorize your account to use the APIs. :::tip You can call the API with only an API key, and [include it as a path parameter](../api-reference/index.md#supported-api-request-formats) -instead of using the cURL authentication option (`-u`). +instead of using the curl authentication option (`-u`). ::: - + ```bash curl -X "GET" \ @@ -62,17 +64,17 @@ curl -X "GET" \ ```javascript -const axios = require("axios"); +const axios = require('axios') -const apiKey = ""; // Replace with your API key. -const apiKeySecret = ""; // Replace with your API key secret. +const apiKey = '' // Replace with your API key. +const apiKeySecret = '' // Replace with your API key secret. -const Auth = Buffer.from(apiKey + ":" + apiKeySecret).toString("base64"); +const Auth = Buffer.from(apiKey + ':' + apiKeySecret).toString('base64') // The chain ID of the supported network. -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/networks/${chainId}/suggestedGasFees`, @@ -81,12 +83,12 @@ const chainId = 1; Authorization: `Basic ${Auth}`, }, } - ); - console.log("Suggested gas fees:", data); + ) + console.log('Suggested gas fees:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` diff --git a/services/reference/gas-api/api-reference/index.md b/services/reference/gas-api/api-reference/index.md index d8a0737791e..5f134ef58ca 100644 --- a/services/reference/gas-api/api-reference/index.md +++ b/services/reference/gas-api/api-reference/index.md @@ -1,13 +1,14 @@ --- description: Reference content for the Gas API. +sidebar_label: API reference --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# API reference +# Gas API reference -This section provides reference information for the various Gas REST APIs. +This section provides reference information for the Gas REST APIs. Use the APIs to: - [Get EIP-1559 gas prices.](./gasprices-type2.md) @@ -15,27 +16,31 @@ Use the APIs to: - [Get the base fee percentile (in Gwei).](./basefeepercentile.md) - [Get the busy threshold for a network.](./busythreshold.md) +:::info +See the [list of supported Gas API networks](../../../get-started/endpoints.md#gas-api). +::: + ## Supported API request formats You can call the Gas APIs in two ways: -- **Using the API key only** - Add your [API key](../../../../developer-tools/dashboard/get-started/create-api) +- **Using the API key only** - Add your [API key](/developer-tools/dashboard/get-started/create-api) as a path option. - **Using the API key and API key secret** - Use basic authentication and specify the API key - and [API key secret](../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/). + and [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret). ```bash -curl -X "GET" "https://gas.api.infura.io/v3//networks/1/suggestedGasFees" +curl -X "GET" "https://gas.api.infura.io/v3//networks/1/suggestedGasFees" ``` ```bash -curl -X "GET" -u : "https://gas.api.infura.io/networks/1/suggestedGasFees" +curl -X "GET" -u : "https://gas.api.infura.io/networks/1/suggestedGasFees" ``` diff --git a/services/reference/gas-api/index.md b/services/reference/gas-api/index.md index fb5dab6bcb8..feba3ee10e8 100644 --- a/services/reference/gas-api/index.md +++ b/services/reference/gas-api/index.md @@ -8,22 +8,26 @@ import CardList from '@site/src/components/CardList' The Gas API is a tool that delivers real-time [gas prices](../../concepts/gas.md) for supported networks, enabling users to identify the best times to execute transactions based on current rates and intricacies introduced by [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). +:::info +See the [list of supported Gas API networks](../../get-started/endpoints.md#gas-api). +::: + diff --git a/services/reference/gas-api/quickstart.md b/services/reference/gas-api/quickstart.md index 76c7e7711e8..cd206f1ced3 100644 --- a/services/reference/gas-api/quickstart.md +++ b/services/reference/gas-api/quickstart.md @@ -1,12 +1,13 @@ --- description: Get started with the Gas APIs. +sidebar_label: Quickstart sidebar_position: 1 --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# Quickstart +# Gas API quickstart This quickstart shows you how to call the Gas API using JavaScript. You can also use a tool such as [curl](https://curl.se/) or [Postman](https://www.postman.com/) to @@ -18,8 +19,8 @@ View the [API reference content](api-reference/index.md) to view the `curl` comm ## Prerequisites -- A valid [Web3 API key](../../../../developer-tools/dashboard/get-started/create-api) - and optional [API key secret](../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/). +- A valid [Web3 API key](/developer-tools/dashboard/get-started/create-api) + and optional [API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret). - [Node.js and npm installed](https://nodejs.org/en/download). ## Initialize a new project directory @@ -50,8 +51,7 @@ Create a `.env` file at the project root and add the following data: :::caution warning Do not commit the `.env` file to your repository if it contains sensitive data. -You can [create a `.gitignore` -file](https://docs.infura.io/tutorials/developer-tools/javascript-dotenv#create-a-.gitignore-file) +You can [create a `.gitignore` file](../../how-to/javascript-dotenv.md#create-a-gitignore-file) to prevent accidentally committing the file. ::: @@ -64,7 +64,7 @@ Replace the Infura project credential placeholders with your own. :::note The `INFURA_API_KEY_SECRET` is optional and only necessary if you are using an -[API key secret](https://docs.infura.io/dashboard/secure-an-api/api-key-secret) to authenticate requests. +[API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) to authenticate requests. ::: ## Create your script @@ -89,39 +89,39 @@ alternate [supported network](../../get-started/endpoints.md#gas-api). ```javascript title="index.js" -const axios = require("axios"); -require("dotenv").config(); +const axios = require('axios') +require('dotenv').config() // The chain ID of the supported network -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/v3/${process.env.INFURA_API_KEY}/networks/${chainId}/suggestedGasFees` - ); - console.log("Suggested gas fees:", data); + ) + console.log('Suggested gas fees:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` ```javascript title="index.js" -const axios = require("axios"); -require("dotenv").config(); +const axios = require('axios') +require('dotenv').config() const Auth = Buffer.from( - process.env.INFURA_API_KEY + ":" + process.env.INFURA_API_KEY_SECRET -).toString("base64"); + process.env.INFURA_API_KEY + ':' + process.env.INFURA_API_KEY_SECRET +).toString('base64') // The chain ID of the supported network -const chainId = 1; +const chainId = 1 -(async () => { +;(async () => { try { const { data } = await axios.get( `https://gas.api.infura.io/networks/${chainId}/suggestedGasFees`, @@ -130,12 +130,12 @@ const chainId = 1; Authorization: `Basic ${Auth}`, }, } - ); - console.log("Suggested gas fees:", data); + ) + console.log('Suggested gas fees:', data) } catch (error) { - console.log("Server responded with:", error); + console.log('Server responded with:', error) } -})(); +})() ``` diff --git a/services/reference/hemi/index.md b/services/reference/hemi/index.md new file mode 100644 index 00000000000..6b39c1edd78 --- /dev/null +++ b/services/reference/hemi/index.md @@ -0,0 +1,60 @@ +--- +description: Hemi network documentation. +--- + +import CardList from '@site/src/components/CardList' + +# Hemi + +:::note Decentralized Infrastructure Network (DIN) + +Hemi is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +::: + +Hemi network brings together the security of Bitcoin and the programmability of Ethereum. Built using Bitcoin as a security layer, Hemi enables developers to build decentralized applications that benefit from Bitcoin's security while leveraging Ethereum's rich ecosystem and tooling. + +Smart contracts can directly access Bitcoin state and verify Bitcoin transactions, all while using standard Ethereum development frameworks. + +:::info See also + +- The [official Hemi documentation](https://docs.hemi.xyz/) for more information. +- Build Bitcoin-aware dapps on the EVM using the + [Hemi Bitcoin Kit (hBK)](https://docs.hemi.xyz/building-bitcoin-apps/hemi-bitcoin-kit-hbk). + +::: + +Select an option below to get started with the Hemi network. + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + +The following partners provide access to the Hemi network: + + + +- Infstones ([Privacy Policy](https://infstones.com/terms/privacy-notice)) +- Simply Staking ([Privacy Policy](https://simplystaking.com/privacy-policy)) + diff --git a/services/reference/hemi/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_accounts-request.mdx new file mode 100644 index 00000000000..fe87f663a88 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_accounts-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..ca8ec9168c2 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_call-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..83d4f740164 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..53994ac775d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..0dfe737c582 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..d4e15a222a3 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]] }' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]]}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..6ddd9da3a33 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..09ef1f9848d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0","method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..9cb10791b4d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..060a9c069c2 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..d35049583ff --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..2306d77b793 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..dc0475880a8 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..0b42fcb40ce --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..811221a57cb --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getproof-request.mdx new file mode 100644 index 00000000000..895dcaeb00d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getproof-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getProof", "id": 1, "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"]}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getProof", "id": 1, "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"]}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..fef9a2f96a9 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..52423d89304 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..3a6808e861b --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..040dcb2dc8c --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..5e690d38298 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..54a68aba84f --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx new file mode 100644 index 00000000000..c9b1d69d0de --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..f86ffbefa16 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockNumberAndIndex", "params": ["0x29c", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockNumberAndIndex", "params": ["0x29c", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx new file mode 100644 index 00000000000..049d02ba110 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx new file mode 100644 index 00000000000..ebf0f4fa017 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockNumber", "params": ["0x5bad55"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockNumber", "params": ["0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..ecdc8c1aa57 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_protocolversion-request.mdx new file mode 100644 index 00000000000..117d01277ea --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_protocolversion-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_protocolVersion", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_protocolVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..84b8732b8ad --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_submitwork-request.mdx new file mode 100644 index 00000000000..9fb6261b2c2 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_submitwork-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_submitWork", "params": ["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_submitWork", "params": ["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/hemi/json-rpc-methods/_eth_syncing-request.mdx new file mode 100644 index 00000000000..e0d9e0014cc --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_eth_syncing-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_net_listening-request.mdx b/services/reference/hemi/json-rpc-methods/_net_listening-request.mdx new file mode 100644 index 00000000000..82a0f4a0a12 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_net_listening-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_net_peercount-request.mdx b/services/reference/hemi/json-rpc-methods/_net_peercount-request.mdx new file mode 100644 index 00000000000..14685f1d4ec --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_net_peercount-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_net_version-request.mdx b/services/reference/hemi/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..e05d01409e5 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/hemi/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..1bd8b803a56 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hemi-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hemi-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hemi/json-rpc-methods/eth_accounts.mdx b/services/reference/hemi/json-rpc-methods/eth_accounts.mdx new file mode 100644 index 00000000000..2127df32eba --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_accounts.mdx @@ -0,0 +1,44 @@ +--- +title: Hemi Network eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Hemi Network accounts. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' + + + +### Request + +import Request from './_eth_accounts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_blocknumber.mdx b/services/reference/hemi/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..6d48220f739 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Hemi Network eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the number of the most recent block on the Hemi Network. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_call.mdx b/services/reference/hemi/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..2801bc3a56a --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_call.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_call +sidebar_label: eth_call +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_chainid.mdx b/services/reference/hemi/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..349184d185d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_chainId +sidebar_label: eth_chainId +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_estimategas.mdx b/services/reference/hemi/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..af1dde4dafb --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_estimateGas +sidebar_label: eth_estimateGas +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_feehistory.mdx b/services/reference/hemi/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..e551b09e9e6 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_feeHistory +sidebar_label: eth_feeHistory +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gasprice.mdx b/services/reference/hemi/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..0d005f1d7c6 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_gasPrice +sidebar_label: eth_gasPrice +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getbalance.mdx b/services/reference/hemi/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..9bfee99ccc9 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBalance +sidebar_label: eth_getBalance +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/hemi/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..c83c8de1815 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBlockByHash +sidebar_label: eth_getBlockByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/hemi/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..f90ad43661d --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/hemi/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..aeb0e22e6d5 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from '/services/reference/hemi/json-rpc-methods/_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..6a309dcbcc9 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..6e574969baa --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getcode.mdx b/services/reference/hemi/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..e4c0ce2244c --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getCode +sidebar_label: eth_getCode +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getlogs.mdx b/services/reference/hemi/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..8b5a1026f0c --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getLogs +sidebar_label: eth_getLogs +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getproof.mdx b/services/reference/hemi/json-rpc-methods/eth_getproof.mdx new file mode 100644 index 00000000000..9b19d16e3a4 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getproof.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getProof +sidebar_label: eth_getProof +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' + + + +### Request + +import Request from './_eth_getproof-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getstorageat.mdx b/services/reference/hemi/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..9dbfa70dea4 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getStorageAt +sidebar_label: eth_getStorageAt +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..93f82dd3ce4 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..b2491a2b6e3 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..1ba38e109e9 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/hemi/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..bdbed12af46 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getTransactionCount +sidebar_label: eth_getTransactionCount +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/hemi/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..786e9bcb770 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/hemi/json-rpc-methods/eth_getunclebyblockhashandindex.mdx new file mode 100644 index 00000000000..293284a9d56 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/hemi/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx new file mode 100644 index 00000000000..d6358a59869 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblockhash.mdx new file mode 100644 index 00000000000..1f26d9ccf48 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblockhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblocknumber.mdx new file mode 100644 index 00000000000..e8856f23fa7 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/hemi/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..c1d90ea8860 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_protocolversion.mdx b/services/reference/hemi/json-rpc-methods/eth_protocolversion.mdx new file mode 100644 index 00000000000..53572aaed24 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_protocolversion.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_protocolVersion +sidebar_label: eth_protocolVersion +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' + + + +### Request + +import Request from './_eth_protocolversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/hemi/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..d5e0c2194c3 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_submitwork.mdx b/services/reference/hemi/json-rpc-methods/eth_submitwork.mdx new file mode 100644 index 00000000000..01c9c6cf3f2 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_submitwork.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_submitWork +sidebar_label: eth_submitWork +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' + + + +### Request + +import Request from './_eth_submitwork-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/eth_syncing.mdx b/services/reference/hemi/json-rpc-methods/eth_syncing.mdx new file mode 100644 index 00000000000..ab0f7c034e8 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/eth_syncing.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi eth_syncing +sidebar_label: eth_syncing +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/index.md b/services/reference/hemi/json-rpc-methods/index.md new file mode 100644 index 00000000000..78f30d3dbfd --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/index.md @@ -0,0 +1,13 @@ +--- +description: Hemi Network JSON-RPC API +sidebar_position: 3 +sidebar_key: hemi-json-rpc-api +--- + +# JSON-RPC API + +Interact with the Hemi network using the standard Ethereum JSON-RPC API methods. + +:::info +To use these methods, you need an API key. If you don't have one, sign up for our [free plan](https://app.infura.io/register). +::: diff --git a/services/reference/hemi/json-rpc-methods/net_peercount.mdx b/services/reference/hemi/json-rpc-methods/net_peercount.mdx new file mode 100644 index 00000000000..67b53175f47 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/net_peercount.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi net_peerCount +sidebar_label: net_peerCount +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_peercount-example.mdx' + + + +### Request + +import Request from './_net_peercount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_peercount-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/net_version.mdx b/services/reference/hemi/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..11e5d7a6d26 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/net_version.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi net_version +sidebar_label: net_version +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/hemi/json-rpc-methods/web3_clientversion.mdx b/services/reference/hemi/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..f70d99369f2 --- /dev/null +++ b/services/reference/hemi/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,43 @@ +--- +title: Hemi web3_clientVersion +sidebar_label: web3_clientVersion +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/hemi/quickstart.md b/services/reference/hemi/quickstart.md new file mode 100644 index 00000000000..00a86957245 --- /dev/null +++ b/services/reference/hemi/quickstart.md @@ -0,0 +1,206 @@ +--- +description: Hemi quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from '@site/src/components/Banner' + +# Hemi quickstart + +This quickstart guide will help you set up and make JSON-RPC API calls on the Hemi network using the Infura endpoints. + +:::info +Use the [Hemi Bitcoin Kit (hBK)](https://docs.hemi.xyz/building-bitcoin-apps/hemi-bitcoin-kit-hbk) +to build Bitcoin-aware smart contracts. The Hemi Bitcoin Kit smart contract provides utilities for interacting with Bitcoin data on the Hemi network. +::: + + +Don't have an Infura account? Sign up for our free plan and start using the Hemi network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Hemi network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://hemi-testnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://hemi-testnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://hemi-testnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://hemi-testnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://hemi-testnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {"content-type": "application/json"} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the Hemi network, you can explore more functionalities and APIs provided by Infura. Here are some suggestions: + +- **Explore other Hemi APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/hyperevm/index.md b/services/reference/hyperevm/index.md new file mode 100644 index 00000000000..168725d0321 --- /dev/null +++ b/services/reference/hyperevm/index.md @@ -0,0 +1,51 @@ +--- +description: HyperEVM network documentation. +--- + +import CardList from '@site/src/components/CardList' + +# HyperEVM + +:::note Decentralized Infrastructure Network (DIN) +HyperEVM is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). +::: + +HyperEVM is the EVM execution environment on the Hyperliquid blockchain, secured by the same consensus as HyperCore. + +::::info See also +The [official HyperEVM documentation](https://hyperliquid.gitbook.io/hyperliquid-docs/hyperevm) for more information. +:::: + +Select an option below to get started with HyperEVM. + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + +The following partner provides access to the HyperEVM network: + +- Alchemy ([Terms of Service](https://legal.alchemy.com/#contract-hjjoqzsvlx), + [Privacy Policy](https://legal.alchemy.com/#contract-sblyf8eub)) +- Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) +- Nodies DLB ([Terms of Use](https://www.nodies.app/tos.txt), [Privacy Policy](https://www.nodies.app/privacy.txt)) diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..4683dbbd0b2 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_call-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..58507089aad --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..0eaa4b49e94 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..9faa16ab708 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"from":"0xb60e8dd61c5d32be8058bb8eb970870f07233155","to":"0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas":"0x76c0","gasPrice":"0x9184e72a000","value":"0x9184e72a","data":"0x"}],"id":1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"from":"0xb60e8dd61c5d32be8058bb8eb970870f07233155","to":"0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas":"0x76c0","gasPrice":"0x9184e72a000","value":"0x9184e72a","data":"0x"}],"id":1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..7ffb612b989 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [25, 75]], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [25, 75]], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..52ff2d0da8b --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..dcd81c20354 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..3a4fdff8e4a --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b2061d85c877b0f607789c50b8b76a241ad30ca7c3dce2b62b07c452e52c9c", true], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b2061d85c877b0f607789c50b8b76a241ad30ca7c3dce2b62b07c452e52c9c", true], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..1aaed38bb86 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["latest", true], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["latest", true], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..7531e982e88 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..2fa1bf02e53 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b2061d85c877b0f607789c50b8b76a241ad30ca7c3dce2b62b07c452e52c9c"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b2061d85c877b0f607789c50b8b76a241ad30ca7c3dce2b62b07c452e52c9c"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..c9ab822bd67 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..0b0f624165d --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0xd46e8dd67c5d32be8058bb8eb970870f07244567", "latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0xd46e8dd67c5d32be8058bb8eb970870f07244567", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..4c60986d4e5 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"fromBlock": "latest", "toBlock": "latest", "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"fromBlock": "latest", "toBlock": "latest", "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..8e462840dcd --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0xd46e8dd67c5d32be8058bb8eb970870f07244567", "0x0", "latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0xd46e8dd67c5d32be8058bb8eb970870f07244567", "0x0", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..2d8b2b1e238 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..b3bd296b839 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["latest", "0x0"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["latest", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..e426c54b891 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..400f1f092b1 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..94821c0d652 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..87cb26528a2 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/hyperevm/json-rpc-methods/_eth_syncing-request.mdx new file mode 100644 index 00000000000..0c10d577db9 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_eth_syncing-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_net_version-request.mdx b/services/reference/hyperevm/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..ed54062ee57 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/hyperevm/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..21173893358 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-parameters.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-parameters.mdx new file mode 100644 index 00000000000..3d2fb6b9102 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-parameters.mdx @@ -0,0 +1,3 @@ +- `blockHash`: (string) [_required_] The block hash to trace. On HyperEVM, this must be the hash of the **latest** block. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer`. diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx new file mode 100644 index 00000000000..cbad95be02a --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"debug_traceBlockByHash","params":["0xb3b2061d85c877b0f607789c50b8b76a241ad30ca7c3dce2b62b07c452e52c9c",{"tracer":"callTracer"}],"id":1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-parameters.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-parameters.mdx new file mode 100644 index 00000000000..f49386bd0c8 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-parameters.mdx @@ -0,0 +1,3 @@ +- `blockParameter`: (string) [_required_] must be `latest` on HyperEVM. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer` and `flatCallTracer`. diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx new file mode 100644 index 00000000000..2783d75837c --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"debug_traceBlockByNumber","params":["latest",{"tracer":"callTracer"}],"id":1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-returns.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-returns.mdx new file mode 100644 index 00000000000..a70a05357c0 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_traceblockbynumber-returns.mdx @@ -0,0 +1,2 @@ +Depending on the specified tracer type, returns a `callTracer` object or +`flatCallTracer` object. diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-parameters.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-parameters.mdx new file mode 100644 index 00000000000..b3bed805555 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-parameters.mdx @@ -0,0 +1,12 @@ +- Transaction object with the following fields: + - `from`: (string) address (20 bytes) the transaction is sent from. + - `to`: (string) _[required]_ address (20 bytes) the transaction is directed to. + - `gas`: (string) hexadecimal value of the gas provided for the transaction execution. + - `gasPrice`: (string) hexadecimal value of the `gasPrice` used for each paid gas. + - `maxPriorityFeePerGas`: (string) maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `maxFeePerGas`: (string) maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. + - `value`: (string) hexadecimal of the value sent with this transaction. + - `data`: (string) hash of the method signature and encoded parameters. +- `block parameter`: (string) [_required_] must be `latest` on HyperEVM. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer`. diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-request.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-request.mdx new file mode 100644 index 00000000000..0af6d2b74fd --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracecall-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-parameters.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-parameters.mdx new file mode 100644 index 00000000000..c5e2f9d4b12 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-parameters.mdx @@ -0,0 +1,3 @@ +- `transactionHash`: (string) [_required_] The transaction hash to trace. On HyperEVM, this must refer to a transaction in the **latest** block. +- Optional tracing options object with the following fields: + - `tracer`: (string) _[optional]_ type of tracer. Supports `callTracer`. diff --git a/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-request.mdx b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-request.mdx new file mode 100644 index 00000000000..4c78b1877a7 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/_debug_tracetransaction-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0",{"tracer":"callTracer"}],"id":1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbyhash.mdx b/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbyhash.mdx new file mode 100644 index 00000000000..5db6d520641 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbyhash.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM debug_traceBlockByHash +sidebar_label: debug_traceBlockByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx' + +# `debug_traceBlockByHash` + + + +## Parameters + +import Params from './_debug_traceblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbynumber.mdx b/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbynumber.mdx new file mode 100644 index 00000000000..2da9b936cc2 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/debug_traceblockbynumber.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM debug_traceBlockByNumber +sidebar_label: debug_traceBlockByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx' + +# `debug_traceBlockByNumber` + + + +## Parameters + +import Params from './_debug_traceblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from './_debug_traceblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/debug_tracecall.mdx b/services/reference/hyperevm/json-rpc-methods/debug/debug_tracecall.mdx new file mode 100644 index 00000000000..ed983242283 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/debug_tracecall.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM debug_traceCall +sidebar_label: debug_traceCall +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx' + +# `debug_traceCall` + + + +## Parameters + +import Params from './_debug_tracecall-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx' + + + +### Request + +import Request from './_debug_tracecall-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/debug_tracetransaction.mdx b/services/reference/hyperevm/json-rpc-methods/debug/debug_tracetransaction.mdx new file mode 100644 index 00000000000..c9a6773afed --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/debug_tracetransaction.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM debug_traceTransaction +sidebar_label: debug_traceTransaction +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx' + +# `debug_traceTransaction` + + + +## Parameters + +import Params from './_debug_tracetransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx' + + + +### Request + +import Request from './_debug_tracetransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/debug/index.md b/services/reference/hyperevm/json-rpc-methods/debug/index.md new file mode 100644 index 00000000000..65af578a829 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/debug/index.md @@ -0,0 +1,18 @@ +--- +description: HyperEVM debug methods. +sidebar_label: Debug methods +sidebar_key: hyperevm-debug-methods +--- + +# HyperEVM debug methods + +The debug API methods allow you to inspect and debug the network. Infura supports the following debug methods on the HyperEVM mainnet: + +- [`debug_traceCall`](debug_tracecall.mdx) +- [`debug_traceBlockByHash`](debug_traceblockbyhash.mdx) +- [`debug_traceBlockByNumber`](debug_traceblockbynumber.mdx) +- [`debug_traceTransaction`](debug_tracetransaction.mdx) + +::::info +HyperEVM only supports the **latest block** view. In practice, block parameters must be `latest` and block hashes must refer to the latest block. +:::: diff --git a/services/reference/hyperevm/json-rpc-methods/eth_bigblockgasprice.mdx b/services/reference/hyperevm/json-rpc-methods/eth_bigblockgasprice.mdx new file mode 100644 index 00000000000..2dcbf0dfb0d --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_bigblockgasprice.mdx @@ -0,0 +1,57 @@ +--- +title: HyperEVM eth_bigBlockGasPrice +sidebar_label: eth_bigBlockGasPrice +description: Returns the base fee for the next big block on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `eth_bigBlockGasPrice` + +Returns the base fee for the next big block. + +## Parameters + +None. + +## Returns + +The hexadecimal value of the base fee for the next big block. + +## Example + +Replace `` with an API key from your [Infura dashboard](/developer-tools/dashboard). + +### Request + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_bigBlockGasPrice", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_bigBlockGasPrice", "params": [], "id": 1}' +``` + + + + +### Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x2540be400" +} +``` diff --git a/services/reference/hyperevm/json-rpc-methods/eth_blocknumber.mdx b/services/reference/hyperevm/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..f5bff307d2f --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest HyperEVM block number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_call.mdx b/services/reference/hyperevm/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..3badb7bff1c --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_call.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_call +sidebar_label: eth_call +description: Executes a HyperEVM call without creating a transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_chainid.mdx b/services/reference/hyperevm/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..4d3b3af9cf0 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_chainId +sidebar_label: eth_chainId +description: Returns the HyperEVM chain ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_estimategas.mdx b/services/reference/hyperevm/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..9e61da26292 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas for a HyperEVM transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_feehistory.mdx b/services/reference/hyperevm/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..4ff9cfeb61b --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical fee data on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gasprice.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..69bdf287fe8 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current HyperEVM gas price. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getbalance.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..be47962faea --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a HyperEVM address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..e2addb01928 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns information about a HyperEVM block by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..9df865cb50e --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns information about a HyperEVM block by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..766c1082081 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a HyperEVM block. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from './_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..e6cb6cea17b --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns the number of transactions in a HyperEVM block by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..0064b83f7bb --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns the number of transactions in a HyperEVM block by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getcode.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..74d3b08800d --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getCode +sidebar_label: eth_getCode +description: Returns code at a HyperEVM address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getlogs.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..3db3e6e55ee --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getstorageat.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..5771c5345d7 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Returns the value from a storage position at a given address on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblockhash.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblockhash.mdx new file mode 100644 index 00000000000..1e2923ccfe7 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblockhash.mdx @@ -0,0 +1,95 @@ +--- +title: HyperEVM eth_getSystemTxsByBlockHash +sidebar_label: eth_getSystemTxsByBlockHash +description: Returns system transactions for a specified block hash on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `eth_getSystemTxsByBlockHash` + +Returns system transactions for a specified block hash on HyperEVM. This Hyperliquid-specific method +retrieves internal system transactions using the block hash, ensuring accurate block identification +even in the event of chain reorganizations. + +## Parameters + +- `hash`: (string) _[required]_ - The hash (32 bytes) of the block. + +## Returns + +An array of system transaction objects included in the block: + +- `type`: (string) - The transaction type. +- `chainId`: (string) - The chain ID encoded as hexadecimal. +- `nonce`: (string) - The transaction count of the sender. +- `gasPrice`: (string) - Gas price in wei, encoded as hexadecimal. +- `gas`: (string) - Gas limit provided by the sender. +- `to`: (string) - Recipient address (null for contract creation). +- `value`: (string) - Value transferred in wei, encoded as hexadecimal. +- `input`: (string) - Input data of the transaction. +- `r`: (string) - ECDSA signature r. +- `s`: (string) - ECDSA signature s. +- `v`: (string) - ECDSA recovery id. +- `hash`: (string) - Transaction hash. +- `blockHash`: (string) - Block hash. +- `blockNumber`: (string) - Block number in hexadecimal. +- `transactionIndex`: (string) - Index of the transaction in the block. +- `from`: (string) - Sender address. + +## Example + +Replace `` with an API key from your [Infura dashboard](/developer-tools/dashboard). + +### Request + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getSystemTxsByBlockHash", "params": ["0x6c8e2e3fde20bc805fe9775ee65cdc9df6b9be70cfe1b473dc27c555a77425d9"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getSystemTxsByBlockHash", "params": ["0x6c8e2e3fde20bc805fe9775ee65cdc9df6b9be70cfe1b473dc27c555a77425d9"], "id": 1}' +``` + + + + +### Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "type": "0x0", + "chainId": "0x1", + "nonce": "0x0", + "gasPrice": "0x2540be400", + "gas": "0x5208", + "to": "0x0000000000000000000000000000000000000000", + "value": "0x0", + "input": "0x", + "r": "0x0", + "s": "0x0", + "v": "0x0", + "hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6c8e2e3fde20bc805fe9775ee65cdc9df6b9be70cfe1b473dc27c555a77425d9", + "blockNumber": "0xcc901c", + "transactionIndex": "0x0", + "from": "0x0000000000000000000000000000000000000000" + } + ] +} +``` diff --git a/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblocknumber.mdx b/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblocknumber.mdx new file mode 100644 index 00000000000..df5c160f90b --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_getsystemtxsbyblocknumber.mdx @@ -0,0 +1,92 @@ +--- +title: HyperEVM eth_getSystemTxsByBlockNumber +sidebar_label: eth_getSystemTxsByBlockNumber +description: Returns system transactions for a specified block number on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `eth_getSystemTxsByBlockNumber` + +Returns system transactions for a specified block number on HyperEVM. This Hyperliquid-specific method exposes internal system transactions responsible for protocol operations, network maintenance, and other system-level activities. + +## Parameters + +- `blockNumber`: (string) _[required]_ - The block number in hexadecimal format, or the tag `latest`, `pending`, `safe`, or `finalized`. + +## Returns + +- `result`: (array) - An array of system transaction objects included in the block. + - `type`: (string) - The transaction type. + - `chainId`: (string) - The chain ID encoded as hexadecimal. + - `nonce`: (string) - The transaction count of the sender. + - `gasPrice`: (string) - Gas price in wei, encoded as hexadecimal. + - `gas`: (string) - Gas limit provided by the sender. + - `to`: (string) - Recipient address (null for contract creation). + - `value`: (string) - Value transferred in wei, encoded as hexadecimal. + - `input`: (string) - Input data of the transaction. + - `r`: (string) - ECDSA signature r. + - `s`: (string) - ECDSA signature s. + - `v`: (string) - ECDSA recovery id. + - `hash`: (string) - Transaction hash. + - `blockHash`: (string) - Block hash. + - `blockNumber`: (string) - Block number in hexadecimal. + - `transactionIndex`: (string) - Index of the transaction in the block. + - `from`: (string) - Sender address. + +## Example + +Replace `` with an API key from your [Infura dashboard](/developer-tools/dashboard). + +### Request + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getSystemTxsByBlockNumber", "params": ["0xcc901c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getSystemTxsByBlockNumber", "params": ["0xcc901c"], "id": 1}' +``` + + + + +### Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "type": "0x0", + "chainId": "0x1", + "nonce": "0x0", + "gasPrice": "0x2540be400", + "gas": "0x5208", + "to": "0x0000000000000000000000000000000000000000", + "value": "0x0", + "input": "0x", + "r": "0x0", + "s": "0x0", + "v": "0x0", + "hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockNumber": "0xcc901c", + "transactionIndex": "0x0", + "from": "0x0000000000000000000000000000000000000000" + } + ] +} +``` diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..623c25a59af --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..897b3d09783 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..bc4980bd895 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..45ec077ea4f --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Returns the number of transactions sent from an address on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..edbc3ba907d --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/hyperevm/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..e53a45b0c96 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Returns the recommended priority fee per gas on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_syncing.mdx b/services/reference/hyperevm/json-rpc-methods/eth_syncing.mdx new file mode 100644 index 00000000000..0e80bb0c817 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_syncing.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM eth_syncing +sidebar_label: eth_syncing +description: Returns the HyperEVM node synchronization status. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/eth_usingbigblocks.mdx b/services/reference/hyperevm/json-rpc-methods/eth_usingbigblocks.mdx new file mode 100644 index 00000000000..63b5319a6ab --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/eth_usingbigblocks.mdx @@ -0,0 +1,58 @@ +--- +title: HyperEVM eth_usingBigBlocks +sidebar_label: eth_usingBigBlocks +description: Returns whether an address is using big blocks on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `eth_usingBigBlocks` + +Returns whether an address is using big blocks on HyperEVM. This Hyperliquid-specific method helps +determine if an address can use enhanced transaction processing capabilities. + +## Parameters + +- `address`: (string) _[required]_ - The address to check for big blocks usage. + +## Returns + +`true` if the address is using big blocks, otherwise false. + +## Example + +Replace `` with an API key from your [Infura dashboard](/developer-tools/dashboard). + +### Request + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_usingBigBlocks", "params": ["0xFC1286EeddF81d6955eDAd5C8D99B8Aa32F3D2AA"], "id": 1}' +``` + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_usingBigBlocks", "params": ["0xFC1286EeddF81d6955eDAd5C8D99B8Aa32F3D2AA"], "id": 1}' +``` + + + + +### Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": true +} +``` diff --git a/services/reference/hyperevm/json-rpc-methods/index.md b/services/reference/hyperevm/json-rpc-methods/index.md new file mode 100644 index 00000000000..673c601bc0e --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/index.md @@ -0,0 +1,53 @@ +--- +title: HyperEVM JSON-RPC API +description: Supported standard Ethereum methods on HyperEVM mainnet. +sidebar_label: JSON-RPC API +sidebar_key: hyperevm-json-rpc-api +--- + +Infura supports a subset of standard EVM-compatible JSON-RPC methods on HyperEVM. + +::::info + +WebSockets are supported on HyperEVM mainnet and can be used to set up bidirectional +stateful [subscriptions](subscription-methods/index.md). + +:::: + +## Standard methods + +- [`eth_blockNumber`](eth_blocknumber.mdx) +- [`eth_call`](eth_call.mdx) +- [`eth_chainId`](eth_chainid.mdx) +- [`eth_estimateGas`](eth_estimategas.mdx) +- [`eth_feeHistory`](eth_feehistory.mdx) +- [`eth_gasPrice`](eth_gasprice.mdx) +- [`eth_getBalance`](eth_getbalance.mdx) +- [`eth_getBlockByHash`](eth_getblockbyhash.mdx) +- [`eth_getBlockByNumber`](eth_getblockbynumber.mdx) +- [`eth_getBlockReceipts`](eth_getblockreceipts.mdx) +- [`eth_getBlockTransactionCountByHash`](eth_getblocktransactioncountbyhash.mdx) +- [`eth_getBlockTransactionCountByNumber`](eth_getblocktransactioncountbynumber.mdx) +- [`eth_getCode`](eth_getcode.mdx) +- [`eth_getLogs`](eth_getlogs.mdx) +- [`eth_getStorageAt`](eth_getstorageat.mdx) +- [`eth_getTransactionByBlockHashAndIndex`](eth_gettransactionbyblockhashandindex.mdx) +- [`eth_getTransactionByBlockNumberAndIndex`](eth_gettransactionbyblocknumberandindex.mdx) +- [`eth_getTransactionByHash`](eth_gettransactionbyhash.mdx) +- [`eth_getTransactionCount`](eth_gettransactioncount.mdx) +- [`eth_getTransactionReceipt`](eth_gettransactionreceipt.mdx) +- [`eth_maxPriorityFeePerGas`](eth_maxpriorityfeepergas.mdx) +- [`eth_syncing`](eth_syncing.mdx) +- [`net_version`](net_version.mdx) +- [`web3_clientVersion`](web3_clientversion.mdx) + +## HyperEVM-specific methods + +- [`eth_bigBlockGasPrice`](eth_bigblockgasprice.mdx) +- [`eth_usingBigBlocks`](eth_usingbigblocks.mdx) +- [`eth_getSystemTxsByBlockNumber`](eth_getsystemtxsbyblocknumber.mdx) +- [`eth_getSystemTxsByBlockHash`](eth_getsystemtxsbyblockhash.mdx) + +## Other methods + +[Debug methods](debug/index.md), [trace methods](trace-methods/index.md), and [subscription methods](subscription-methods/index.md) are also supported. diff --git a/services/reference/hyperevm/json-rpc-methods/net_version.mdx b/services/reference/hyperevm/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..ba3595516e5 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/net_version.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM net_version +sidebar_label: net_version +description: Returns network ID on HyperEVM. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx new file mode 100644 index 00000000000..01b3bdcf502 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -0,0 +1,27 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}' +``` + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}' +``` + + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx new file mode 100644 index 00000000000..c0e68dc83ab --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -0,0 +1,13 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://hyperevm-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' +``` + + + + diff --git a/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_subscribe.mdx new file mode 100644 index 00000000000..a1a63dfa52e --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM eth_subscribe +sidebar_label: eth_subscribe +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' + + + +### Request + +import Request from './_eth_subscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx new file mode 100644 index 00000000000..1bd4256efc6 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM eth_unsubscribe +sidebar_label: eth_unsubscribe +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' + + + +### Request + +import Request from './_eth_unsubscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/subscription-methods/index.md b/services/reference/hyperevm/json-rpc-methods/subscription-methods/index.md new file mode 100644 index 00000000000..960e432a036 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/subscription-methods/index.md @@ -0,0 +1,21 @@ +--- +title: HyperEVM subscription methods +sidebar_label: Subscription methods +sidebar_key: hyperevm-subscription-methods +--- + +# HyperEVM subscription methods + +Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. + +The following subscription methods are available: + +- [`eth_subscribe`](eth_subscribe.mdx) - Create a subscription to a particular event +- [`eth_unsubscribe`](eth_unsubscribe.mdx) - Cancel an active subscription + +::::info + +We recommend you use the WSS protocol to set up bidirectional stateful subscriptions. Stateless HTTP WebSockets are also +supported. + +:::: diff --git a/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-parameters.mdx b/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-parameters.mdx new file mode 100644 index 00000000000..c129e8f44d8 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-parameters.mdx @@ -0,0 +1 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or the tag `latest`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). diff --git a/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-request.mdx b/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-request.mdx new file mode 100644 index 00000000000..cd86aef1ea6 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/trace-methods/_trace_block-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"trace_block","params":["latest"],"id":1}' +``` + + + diff --git a/services/reference/hyperevm/json-rpc-methods/trace-methods/index.md b/services/reference/hyperevm/json-rpc-methods/trace-methods/index.md new file mode 100644 index 00000000000..5fc428787ee --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/trace-methods/index.md @@ -0,0 +1,15 @@ +--- +title: HyperEVM trace methods +sidebar_label: Trace methods +sidebar_key: hyperevm-trace-methods +--- + +# HyperEVM trace methods + +Infura provides access to the following trace API method on HyperEVM mainnet: + +- [`trace_block`](trace_block.mdx) + +::::info +Trace API is an open beta feature, available to paying Infura customers. +:::: diff --git a/services/reference/hyperevm/json-rpc-methods/trace-methods/trace_block.mdx b/services/reference/hyperevm/json-rpc-methods/trace-methods/trace_block.mdx new file mode 100644 index 00000000000..01355db5087 --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/trace-methods/trace_block.mdx @@ -0,0 +1,43 @@ +--- +title: HyperEVM trace_block +sidebar_label: trace_block +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/trace-methods/_trace_block-description.mdx' + +# `trace_block` + + + +## Parameters + +import Params from './_trace_block-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/trace-methods/_trace_block-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/trace-methods/_trace_block-example.mdx' + + + +### Request + +import Request from './_trace_block-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/trace-methods/_trace_block-response.mdx' + + diff --git a/services/reference/hyperevm/json-rpc-methods/web3_clientversion.mdx b/services/reference/hyperevm/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..4d458272fec --- /dev/null +++ b/services/reference/hyperevm/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,44 @@ +--- +title: HyperEVM web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns the HyperEVM client version. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/hyperevm/quickstart.md b/services/reference/hyperevm/quickstart.md new file mode 100644 index 00000000000..b20d617d28b --- /dev/null +++ b/services/reference/hyperevm/quickstart.md @@ -0,0 +1,157 @@ +--- +description: HyperEVM quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from '@site/src/components/Banner' + +# HyperEVM quickstart + +This quickstart guide will help you set up and make calls on HyperEVM using the Infura endpoint. + + +Don't have an Infura account? Sign up for our free plan and start using HyperEVM! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the HyperEVM network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://hyperevm-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://hyperevm-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://hyperevm-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://hyperevm-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {"content-type": "application/json"} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to HyperEVM mainnet, you can explore more JSON-RPC methods in the +[HyperEVM JSON-RPC API documentation](json-rpc-methods/index.md). diff --git a/services/reference/ipfs/http-api-methods/add.md b/services/reference/ipfs/http-api-methods/add.md index 98b9456aeb0..ac3de2f9fed 100644 --- a/services/reference/ipfs/http-api-methods/add.md +++ b/services/reference/ipfs/http-api-methods/add.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# add +# `add` -## /api/v0/add +## `/api/v0/add` Add a file or directory to IPFS. -### REQUEST +### Request @@ -15,7 +15,7 @@ Add a file or directory to IPFS. ```bash curl "https://ipfs.infura.io:5001/api/v0/add?recursive=false&quiet=&quieter=&silent=&progress=&trickle=&only-hash=&wrap-with-directory=&hidden=&chunker=&pin=true&raw-leaves=&nocopy=&fscache=&cid-version=0&hash=sha2-256" \ -X POST \ - -u ":" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"" ``` @@ -26,7 +26,7 @@ curl "https://ipfs.infura.io:5001/api/v0/add?recursive=false&quiet=&quiet ```bash curl "https://ipfs.infura.io:5001/api/v0/add?pin=false" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"/sample-result.json" ``` @@ -34,7 +34,7 @@ curl "https://ipfs.infura.io:5001/api/v0/add?pin=false" \ -#### REQUEST PARAMS +#### Request parameters - `file` _\[Required]_ - The path to a file to be added to IPFS. - `quiet` _\[Optional]_ - Write minimal output. @@ -51,11 +51,11 @@ curl "https://ipfs.infura.io:5001/api/v0/add?pin=false" \ - `cid-version` _\[Optional]_: Cid version. Non-zero value changes the default of `raw-leaves` to `true`. The default is `0`. (Experimental) - `hash` _\[Optional]_: Hash function to use. Sets `cid-version` to `1` if used. The default is `sha2-256`. (Experimental) -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ```json { @@ -65,8 +65,8 @@ On success, the call to this endpoint will return with 200 and the following bod } ``` -#### RESULT FIELDS +#### Result fields - `Name` - Name of the object. - `Hash` - Hash of the uploaded object. -- `Size` - Integer indication size in bytes. +- `Size` - Integer indicating size in bytes. diff --git a/services/reference/ipfs/http-api-methods/block_get.md b/services/reference/ipfs/http-api-methods/block_get.md index 15ad7639bbe..1b6f78ca32c 100644 --- a/services/reference/ipfs/http-api-methods/block_get.md +++ b/services/reference/ipfs/http-api-methods/block_get.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# block_get +# `block_get` -## /api/v0/block/get +## `/api/v0/block/get` Get a raw IPFS block. -### REQUEST +### Request @@ -15,7 +15,7 @@ Get a raw IPFS block. ```bash curl "https://ipfs.infura.io:5001/api/v0/block/get?arg=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,21 +24,21 @@ curl "https://ipfs.infura.io:5001/api/v0/block/get?arg=" \ ```bash curl "https://ipfs.infura.io:5001/api/v0/block/get?arg=QmaYL7E4gDTPNfLxrCEEEcNJgcHBJ55NxxTnxpDKWqMtJ3" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[Required]_ - The base58 multihash of an existing block to get. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ``` This endpoint returns a `text/plain` response body. diff --git a/services/reference/ipfs/http-api-methods/block_put.md b/services/reference/ipfs/http-api-methods/block_put.md index 065f40aff35..39edbf5fe0d 100644 --- a/services/reference/ipfs/http-api-methods/block_put.md +++ b/services/reference/ipfs/http-api-methods/block_put.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# block_put +# `block_put` -## /api/v0/block/put +## `/api/v0/block/put` Store input as an IPFS block. -### REQUEST +### Request @@ -15,7 +15,7 @@ Store input as an IPFS block. ```bash curl "https://ipfs.infura.io:5001/api/v0/block/put?format=v0&mhtype=sha2-256&mhlen=-1" \ -X POST \ - -u ":" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"" ``` @@ -26,7 +26,7 @@ curl "https://ipfs.infura.io:5001/api/v0/block/put?format=v0&mhtype=sha2-256&mhl ```bash curl "https://ipfs.infura.io:5001/api/v0/block/put" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"/purpink.jpeg" ``` @@ -34,18 +34,18 @@ curl "https://ipfs.infura.io:5001/api/v0/block/put" \ -#### REQUEST PARAMS +#### Request parameters - `file` _\[Required]_ - The path to a file to be added to IPFS. - `format` _\[Optional]_ - Content ID format for blocks to be created with. The default is `v0`. - `mhtype` _\[Optional]_ - Multihash hash function. The default is `sha2-256`. - `mhlen` _\[Optional]_ - Multihash hash length. The default is `-1`. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ```json { @@ -54,7 +54,7 @@ On success, the call to this endpoint will return with 200 and the following bod } ``` -#### RESULT FIELDS +#### Result fields - `Key` - Key of the block. - `Size` - Integer indication size in bytes. diff --git a/services/reference/ipfs/http-api-methods/block_stat.md b/services/reference/ipfs/http-api-methods/block_stat.md index 560b78d6827..98c2f4e5103 100644 --- a/services/reference/ipfs/http-api-methods/block_stat.md +++ b/services/reference/ipfs/http-api-methods/block_stat.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# block_stat +# `block_stat` -## /api/v0/block/stat +## `/api/v0/block/stat` Print information of a raw IPFS block. -### REQUEST +### Request @@ -15,7 +15,7 @@ Print information of a raw IPFS block. ```bash curl "https://ipfs.infura.io:5001/api/v0/block/stat?arg=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,30 +24,30 @@ curl "https://ipfs.infura.io:5001/api/v0/block/stat?arg=" \ ```bash curl "https://ipfs.infura.io:5001/api/v0/block/stat?arg=QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[Required]_ - The base58 multihash of an existing block to stat. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ```js { - Key: "QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM", - Size: 18 + "Key": "QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM", + "Size": 18 } ``` -#### RESULT FIELDS +#### Result fields - `Key` - The base58 multihash string of the block. - `Size` - An integer representing the size in bytes. diff --git a/services/reference/ipfs/http-api-methods/cat.md b/services/reference/ipfs/http-api-methods/cat.md index 6745aa21025..6f86e456603 100644 --- a/services/reference/ipfs/http-api-methods/cat.md +++ b/services/reference/ipfs/http-api-methods/cat.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# cat +# `cat` -## /api/v0/cat +## `/api/v0/cat` Show IPFS object data. -### REQUEST +### Request @@ -15,7 +15,7 @@ Show IPFS object data. ```bash curl "https://ipfs.infura.io:5001/api/v0/cat?arg=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,22 +24,20 @@ curl "https://ipfs.infura.io:5001/api/v0/cat?arg=" \ ```bash curl "https://ipfs.infura.io:5001/api/v0/cat?arg=QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[required]_ - The IPFS object hash. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY - ``` This endpoint returns a `text/plain` response body. ``` diff --git a/services/reference/ipfs/http-api-methods/dag_get.md b/services/reference/ipfs/http-api-methods/dag_get.md index f9d36c6a847..1b57759d0a3 100644 --- a/services/reference/ipfs/http-api-methods/dag_get.md +++ b/services/reference/ipfs/http-api-methods/dag_get.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# dag_get +# `dag_get` -## /api/v0/dag/get +## `/api/v0/dag/get` Get a DAG node from IPFS. -### REQUEST +### Request @@ -15,7 +15,7 @@ Get a DAG node from IPFS. ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/get?arg=&output-codec=dag-json" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,18 +24,18 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/get?arg=&output-codec=dag-json ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/get?arg=QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[Required]_: The object to get. - `output-codec` _\[Optional]_: Format the object will be decoded in. The default is `dag-json`. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: diff --git a/services/reference/ipfs/http-api-methods/dag_import.md b/services/reference/ipfs/http-api-methods/dag_import.md index 369d75003b3..077619f60c1 100644 --- a/services/reference/ipfs/http-api-methods/dag_import.md +++ b/services/reference/ipfs/http-api-methods/dag_import.md @@ -1,9 +1,9 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# dag_import +# `dag_import` -## /api/v0/dag/import +## `/api/v0/dag/import` Imports all blocks present in supplied [Content Address aRchive (CAR) files](https://ipld.io/specs/transport/car/). The command recursively pins the root specified in the `.car` file headers, unless `pin-roots` is set to `false`. @@ -13,7 +13,7 @@ You can't pin multiple DAG roots using this endpoint. For example, if supplying ::: -### REQUEST +### Request @@ -21,7 +21,7 @@ You can't pin multiple DAG roots using this endpoint. For example, if supplying ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/import?pin-roots=false&allow-big-block=false" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"" ``` @@ -32,7 +32,7 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/import?pin-roots=false&allow-b ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/import?pin-roots=true&silent=&stats=&allow-big-block=false" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"/sample.car" ``` @@ -40,19 +40,19 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/import?pin-roots=true&silent= -#### REQUEST PARAMS +#### Request parameters - `file` : _string_ - path to the `.car` file. -- `pin-roots:` _boolean_ - pin the root listed in the .car headers after importing. The default is `true`. Only one DAG root can be pinned per request. -- `silent` : _boolean -_ no output. -- `stats`: _boolean -_ output statistics. +- `pin-roots` : _boolean_ - pin the root listed in the .car headers after importing. The default is `true`. Only one DAG root can be pinned per request. +- `silent` : _boolean_ - no output. +- `stats`: _boolean_ - output statistics. - `allow-big-block`: _boolean_ - disable the block size check and allow the creation of blocks bigger than 1 MiB. The default is `false`. Bigger blocks won't be transferable over the standard bitswap. -### RESPONSE +### Response On success, the call to this endpoint returns a `200` response with the following body: -#### BODY +#### Body ```json { diff --git a/services/reference/ipfs/http-api-methods/dag_put.md b/services/reference/ipfs/http-api-methods/dag_put.md index eb5fc7f6438..50c89d13d90 100644 --- a/services/reference/ipfs/http-api-methods/dag_put.md +++ b/services/reference/ipfs/http-api-methods/dag_put.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# dag_put +# `dag_put` -## /api/v0/dag/put +## `/api/v0/dag/put` Add a DAG node to IPFS. -### REQUEST +### Request @@ -26,7 +26,7 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/put?store-codec=dag-cbor&input ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/put" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" \ + -u ":" \ -H "Content-Type: multipart/form-data" \ -F file=@"/sample-result.json" ``` @@ -34,18 +34,18 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/put" \ -#### REQUEST PARAMS +#### Request parameters - `store-codec` _\[Optional]_: Codec that the stored object will be encoded with. The default is `dag-cbor`. - `input-codec` _\[Optional]_: Codec that the input object is encoded in. The default is `dag-json`. - `pin` _\[Optional]_: Set to `true` to pin this object when adding. - `hash` _\[Optional]_: Hash function to use. The default is `sha2-256`. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ```json { @@ -55,6 +55,6 @@ On success, the call to this endpoint will return with 200 and the following bod } ``` -#### RESULT FIELDS +#### Result fields - `Cid` - [Content ID](https://github.com/multiformats/cid). diff --git a/services/reference/ipfs/http-api-methods/dag_resolve.md b/services/reference/ipfs/http-api-methods/dag_resolve.md index 2554c626a0c..5331a8593cc 100644 --- a/services/reference/ipfs/http-api-methods/dag_resolve.md +++ b/services/reference/ipfs/http-api-methods/dag_resolve.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# dag_resolve +# `dag_resolve` -## /api/v0/dag/resolve +## `/api/v0/dag/resolve` Resolve IPLD block. -### REQUEST +### Request @@ -15,7 +15,7 @@ Resolve IPLD block. ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/resolve?arg=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,21 +24,21 @@ curl "https://ipfs.infura.io:5001/api/v0/dag/resolve?arg=" \ ```bash curl "https://ipfs.infura.io:5001/api/v0/dag/resolve?arg=QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _[Required]_ - The IPFS object hash; the path to resolve. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY +#### Body ```js { @@ -49,7 +49,7 @@ On success, the call to this endpoint will return with 200 and the following bod } ``` -#### RESULT FIELDS +#### Result fields - `Cid` - [Content ID](https://github.com/multiformats/cid). - `RemPath` diff --git a/services/reference/ipfs/http-api-methods/get.md b/services/reference/ipfs/http-api-methods/get.md index 6865f32475a..0e06c36453d 100644 --- a/services/reference/ipfs/http-api-methods/get.md +++ b/services/reference/ipfs/http-api-methods/get.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# get +# `get` -## /api/v0/get +## `/api/v0/get` Download IPFS objects. -### REQUEST +### Request @@ -15,7 +15,7 @@ Download IPFS objects. ```bash curl "https://ipfs.infura.io:5001/api/v0/get?arg=&output=&archive=false&compress=false&compression-level=-1" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,26 +24,24 @@ curl "https://ipfs.infura.io:5001/api/v0/get?arg=&output=&arch ```bash curl "https://ipfs.infura.io:5001/api/v0/get?arg=QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy&archive=true" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[Required]_ - The IPFS object hash. - `output` _\[Optional]_ - The path where the output should be stored. - `archive` _\[Optional]_ - Output a TAR archive. The default is `false`. -- `compress` _\[\_O_ptional]_ - Compress the output with GZIP compression. The default is `false`. -- `compression-level` _\[\_O_ptional]_ - The level of compression (1-9). The default is `-1`. +- `compress` _\[Optional]_ - Compress the output with GZIP compression. The default is `false`. +- `compression-level` _\[Optional]_ - The level of compression (1-9). The default is `-1`. -### RESPONSE +### Response On success, the call to this endpoint will return with 200 and the following body: -#### BODY - ``` This endpoint returns a `text/plain` response body. ``` diff --git a/services/reference/ipfs/http-api-methods/index.md b/services/reference/ipfs/http-api-methods/index.md index 70f463ad58e..08f530dc347 100644 --- a/services/reference/ipfs/http-api-methods/index.md +++ b/services/reference/ipfs/http-api-methods/index.md @@ -1,4 +1,8 @@ -# HTTP API methods +--- +sidebar_label: HTTP API +--- + +# IPFS HTTP API The IPFS documentation lists the [IPFS HTTP API methods](https://docs.ipfs.io/reference/http/api/). @@ -6,8 +10,8 @@ Infura supports a subset of these which are detailed in this section. :::info -All Infura IPFS methods require including your [API key](../../../../../developer-tools/dashboard/get-started/create-api/) and -[API key secret](../../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret) in the request. +All Infura IPFS methods require including your [API key](/developer-tools/dashboard/get-started/create-api) and +[API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret) in the request. ::: @@ -16,7 +20,7 @@ All Infura IPFS methods require including your [API key](../../../../../develope Arguments are added through the special query string key `arg`: ```bash -curl -X POST -u ":" "https://ipfs.infura.io:5001/api/v0/cat?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn" +curl -X POST -u ":" "https://ipfs.infura.io:5001/api/v0/cat?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn" ``` Note that `arg` can be used multiple times to signify multiple arguments. @@ -26,7 +30,7 @@ Note that `arg` can be used multiple times to signify multiple arguments. Flags commonly used with the IPFS CLI are added through the query string. For example, the `--encoding=json` flag is the `&encoding=json` query parameter below: ```bash -> curl -X POST -u ":" "https://ipfs.infura.io:5001/api/v0/object/get?arg=QmaaqrHyAQm7gALkRW8DcfGX3u8q9rWKnxEMmf7m9z515w&encoding=json" +> curl -X POST -u ":" "https://ipfs.infura.io:5001/api/v0/object/get?arg=QmaaqrHyAQm7gALkRW8DcfGX3u8q9rWKnxEMmf7m9z515w&encoding=json" { "Links": [ { @@ -65,7 +69,7 @@ Status code `500` means that the requested RPC function _does_ exist, but IPFS w Streaming endpoints fail as above, unless they have started streaming. That means they will have sent a `200` status code already. If an error happens during the stream, it will be included in a `Trailer` response header (some endpoints may additionally include an error in the last streamed object). -A `405`error may mean that you are using the wrong HTTP method (i.e. GET instead of POST), or that you are not allowed to call that method (i.e. due to CORS restrictions when making a request from a browser). +A `405` error may mean that you are using the wrong HTTP method (for example, GET instead of POST), or that you are not allowed to call that method (for example, due to CORS restrictions when making a request from a browser). ## NDJSON responses diff --git a/services/reference/ipfs/http-api-methods/pin_add.md b/services/reference/ipfs/http-api-methods/pin_add.md index 9a1cd3391d7..1b32e5e1230 100644 --- a/services/reference/ipfs/http-api-methods/pin_add.md +++ b/services/reference/ipfs/http-api-methods/pin_add.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# pin_add +# `pin_add` -## /api/v0/pin/add +## `/api/v0/pin/add` Pin objects to local storage. -### REQUEST +### Request @@ -15,30 +15,32 @@ Pin objects to local storage. ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/add?arg=&recursive=true&progress=" \ -X POST \ - -u ":" + -u ":" ``` + ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/add?arg=QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` + -#### REQUEST PARAMS +#### Request parameters -- `arg` _\[Required]_ - Path to object(s) to be pinned. -- `recursive` _\[Optional]_ - Recursively pin the object linked to by the specified object(s). The default is `true`. +- `arg` _\[Required]_ - Path to objects to be pinned. +- `recursive` _\[Optional]_ - Recursively pin the object linked to by the specified objects. The default is `true`. - `progress` _\[Optional]_ - Show progress. -### RESPONSE +### Response On success, the call to this endpoint returns with 200 and the following body: -#### BODY +#### Body ```json { @@ -46,6 +48,6 @@ On success, the call to this endpoint returns with 200 and the following body: } ``` -#### RESULT FIELDS +#### Result fields - `Pins` - An array of Pin hashes. diff --git a/services/reference/ipfs/http-api-methods/pin_ls.md b/services/reference/ipfs/http-api-methods/pin_ls.md index a730c787005..d6c64c3190a 100644 --- a/services/reference/ipfs/http-api-methods/pin_ls.md +++ b/services/reference/ipfs/http-api-methods/pin_ls.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# pin_ls +# `pin_ls` -## /api/v0/pin/ls +## `/api/v0/pin/ls` Lists objects pinned to local storage. -### REQUEST +### Request @@ -15,7 +15,7 @@ Lists objects pinned to local storage. ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/ls?arg=&type=all&quiet=&stream=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,24 +24,24 @@ curl "https://ipfs.infura.io:5001/api/v0/pin/ls?arg=&type=all&quiet=< ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/ls?arg=QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM" \ -X POST \ - -u ":" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters -- `arg` _[Optional]_ - Path to object(s) to be listed. +- `arg` _[Optional]_ - Path to objects to be listed. - `type` _[Optional]_ - The type of pinned keys to list. Can be `direct`, `indirect`, `recursive`, or `all`. The default is `all`. - `quiet` _[Optional]_ - Write just hashes of objects. - `stream` _[Optional]_ - Enable streaming of pins as they are discovered. -### RESPONSE +### Response On success, the call to this endpoint returns with 200 and the following body: -#### BODY +#### Body ``` { diff --git a/services/reference/ipfs/http-api-methods/pin_rm.md b/services/reference/ipfs/http-api-methods/pin_rm.md index 95a5ea6b8e1..df0396cde7c 100644 --- a/services/reference/ipfs/http-api-methods/pin_rm.md +++ b/services/reference/ipfs/http-api-methods/pin_rm.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# pin_rm +# `pin_rm` -## /api/v0/pin/rm +## `/api/v0/pin/rm` Remove pinned objects from local storage. -### REQUEST +### Request @@ -15,7 +15,7 @@ Remove pinned objects from local storage. ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/rm?arg=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,21 +24,21 @@ curl "https://ipfs.infura.io:5001/api/v0/pin/rm?arg=" \ ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/rm?arg=QmfQ5QAjvg4GtA3wg3adpnDJug8ktA1BxurVqBD8rtgVjM" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters -- `arg` _\[Required]_ - Path to object(s) to be unpinned. +- `arg` _\[Required]_ - Path to objects to be unpinned. -### RESPONSE +### Response On success, the call to this endpoint returns with 200 and the following body: -#### BODY +#### Body ``` { diff --git a/services/reference/ipfs/http-api-methods/pin_update.md b/services/reference/ipfs/http-api-methods/pin_update.md index b356c4966b4..ffb323c60f3 100644 --- a/services/reference/ipfs/http-api-methods/pin_update.md +++ b/services/reference/ipfs/http-api-methods/pin_update.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# pin_update +# `pin_update` -## /api/v0/pin/update +## `/api/v0/pin/update` Update a recursive pin. -### REQUEST +### Request @@ -15,7 +15,7 @@ Update a recursive pin. ```bash curl "https://ipfs.infura.io:5001/api/v0/pin/update?arg=&arg=&unpin=true" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,23 +24,23 @@ curl "https://ipfs.infura.io:5001/api/v0/pin/update?arg=&arg=:" ``` -#### REQUEST PARAMS +#### Request parameters - `arg` _\[Required]_ - Path to old object. - `arg` _\[Required]_ - Path to a new object to be pinned. - `unpin` _\[Optional]_ - Remove the old pin. The default is `true.` -### RESPONSE +### Response On success, the call to this endpoint returns with 200 and the following body: -#### BODY +#### Body ``` { diff --git a/services/reference/ipfs/http-api-methods/version.md b/services/reference/ipfs/http-api-methods/version.md index 7cfa61825ed..d2195ea5497 100644 --- a/services/reference/ipfs/http-api-methods/version.md +++ b/services/reference/ipfs/http-api-methods/version.md @@ -1,13 +1,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# version +# `version` -## /api/v0/pin/version +## `/api/v0/pin/version` Show IPFS version information. -### REQUEST +### Request @@ -15,7 +15,7 @@ Show IPFS version information. ```bash curl "https://ipfs.infura.io:5001/api/v0/version?number=&commit=&repo=&all=" \ -X POST \ - -u ":" + -u ":" ``` @@ -24,24 +24,24 @@ curl "https://ipfs.infura.io:5001/api/v0/version?number=&commit=&r ```bash curl "https://ipfs.infura.io:5001/api/v0/version" \ -X POST \ - -u "PROJECT_ID:PROJECT_SECRET" + -u ":" ``` -#### REQUEST PARAMS +#### Request parameters - `number` _[Optional]_ - Only show the version number. - `commit` _[Optional]_ - Show the commit hash. - `repo` _[Optional]_ - Show repo version. - `all` _[Optional]_ - Show all version information. -### RESPONSE +### Response On success, the call to this endpoint returns with 200 and the following body: -#### BODY +#### Body ``` { diff --git a/services/reference/ipfs/index.md b/services/reference/ipfs/index.md index 7f731009203..e46e5bbf5fe 100644 --- a/services/reference/ipfs/index.md +++ b/services/reference/ipfs/index.md @@ -8,15 +8,16 @@ import CardList from '@site/src/components/CardList' The [Interplanetary File System (IPFS)](../../how-to/use-ipfs/migrate-to-infuras-ipfs-service.md) is a distributed, [peer-to-peer (p2p)](https://en.wikipedia.org/wiki/Peer-to-peer) storage network used for storing and accessing files, websites, applications, and data. -:::caution Limited access +:::caution Restricted access -Infura restricts its IPFS service to a select set of qualified customers. Please [contact the Infura support team](https://support.infura.io/ipfs) for next steps. New IPFS key creation is disabled for all users, but existing IPFS customers can continue to use the IPFS service with their existing keys. +New IPFS key creation is disabled for all users. Only IPFS keys that were active in late 2024 continue +to have access to the IPFS network. ::: Content is accessible from peer nodes located anywhere in the world. These nodes relay information, store it, or both. -To integrate your IPFS project with Infura, create an [Infura API key](../../get-started/infura.md#2-create-an-api-key). +To integrate your IPFS project with Infura, create an [Infura API key](../../get-started/infura.md#2-view-your-api-key). :::info See also @@ -25,21 +26,21 @@ See the [official IPFS documentation](https://docs.ipfs.io) for more information ::: diff --git a/services/reference/ipfs/quickstart.md b/services/reference/ipfs/quickstart.md index 730c7f580f4..b9e8c252659 100644 --- a/services/reference/ipfs/quickstart.md +++ b/services/reference/ipfs/quickstart.md @@ -1,36 +1,37 @@ --- description: IPFS quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# IPFS quickstart This quickstart guide will help you set up and make calls on the IPFS network using the Infura endpoints. -:::info +:::caution Restricted access -To access the IPFS network through Infura, you'll need to add a billing card to your account, even if you're using a free account. Refer -to the [billing details](../../how-to/use-ipfs/access-ipfs-content/dedicated-gateways.md#stats-and-billing) for more information. +New IPFS key creation is disabled for all users. Only IPFS keys that were active in late 2024 continue +to have access to the IPFS network. ::: ## Prerequisites -Before you begin, ensure you have a valid [API key](../../../../developer-tools/dashboard/get-started/create-api) and -[API key secret](../../../../developer-tools/dashboard/how-to/secure-an-api/api-key-secret/). +Before you begin, ensure you have a valid [API key](/developer-tools/dashboard/get-started/create-api) and +[API key secret](/developer-tools/dashboard/how-to/secure-an-api/api-key-secret). ## Make calls -### cURL +### curl -cURL generates the auth header and encodes your credentials behind the scenes. +curl generates the auth header and encodes your credentials behind the scenes. Include the `-u` flag with the authentication information. ```bash -curl -X POST -F file=@myfile -u ":" "https://ipfs.infura.io:5001/api/v0/add" +curl -X POST -F file=@myfile -u ":" "https://ipfs.infura.io:5001/api/v0/add" ``` ### JavaScript @@ -38,44 +39,43 @@ curl -X POST -F file=@myfile -u ":" "https://ipfs.infur Wrap JavaScript calls to IPFS with the Infura `Authorization` header. ```javascript -xhr.setRequestHeader("Authorization", "Basic " + btoa( + ":" + )); +xhr.setRequestHeader("Authorization", "Basic " + btoa( + ":" + )); ``` -### NodeJS +### Node.js -Change the `` and `` in the NodeJS example code below. +Replace `` and `` in the Node.js example code below. -Save the following script to a file, e.g. `index.js`. +Save the following script to a file, for example, `index.js`. -```javascript -const https = require("https") +```javascript title="index.js" +const https = require('https') -const projectId = "" -const projectSecret = "" +const projectId = '' +const projectSecret = '' const options = { - host: "ipfs.infura.io", + host: 'ipfs.infura.io', port: 5001, - path: "/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn", - method: "POST", - auth: projectId + ":" + projectSecret, + path: '/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn', + method: 'POST', + auth: projectId + ':' + projectSecret, } -let req = https.request(options, (res) => { - let body = "" - res.on("data", function (chunk) { +let req = https.request(options, res => { + let body = '' + res.on('data', function (chunk) { body += chunk }) - res.on("end", function () { + res.on('end', function () { console.log(body) }) }) req.end() ``` -In a terminal window, run the script with `node index.js` - -Output something like: +In a terminal window, run the script using `node index.js`. +This outputs something like the following: ``` {"Pins":["QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn"]} @@ -83,15 +83,15 @@ Output something like: ### Python -Change the `projectId` and `projectSecret` in the Python example code below. +Replace `` and `` in the Python example code below. -Save the following script to a file, e.g. `index.py`. +Save the following script to a file, for example, `index.py`. -```python +```python title="index.py" import requests -projectId = "" -projectSecret = "" +projectId = "" +projectSecret = "" endpoint = "https://ipfs.infura.io:5001" ### CREATE AN ARRAY OF TEST FILES ### @@ -103,7 +103,7 @@ files = { response1 = requests.post(endpoint + "/api/v0/add", files=files, auth=(projectId, projectSecret)) print(response1) hash = response1.text.split(",")[1].split(":")[1].replace('"','') -print(hash +print(hash) ### READ FILE WITH HASH ### params = { @@ -114,13 +114,12 @@ print(response2) print(response2.text) ### REMOVE OBJECT WITH PIN/RM ### -response3 = requests.post(endpoint + "api/v0/pin/rm", params=params, auth=(projectId, projectSecret)) +response3 = requests.post(endpoint + "/api/v0/pin/rm", params=params, auth=(projectId, projectSecret)) print(response3.json()) ``` -Run the script with `python index.py`. - -Output something like: +Run the script using `python index.py`. +This outputs something like the following: ```bash @@ -136,33 +135,31 @@ Use the official [`kubo-rpc-client`](https://github.com/ipfs/js-kubo-rpc-client) Install the library with `npm install --save kubo-rpc-client`. -Save the following script to a file, e.g. `index.mjs`. +Save the following script to a file, for example, `index.mjs`. -```javascript -import { create } from "kubo-rpc-client" +```javascript title="index.mjs" +import { create } from 'kubo-rpc-client' -const projectId = ""; -const projectSecret = ""; -const auth - "Basic " + Buffer.from(projectId + ":" + projectSecret).toString("base64"); +const projectId = '' +const projectSecret = '' +const auth = 'Basic ' + Buffer.from(projectId + ':' + projectSecret).toString('base64') const client = create({ - host: "ipfs.infura.io", + host: 'ipfs.infura.io', port: 5001, - protocol: "https", + protocol: 'https', headers: { authorization: auth, }, -}); +}) -client.pin.add("QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn").then((res) => { - console.log(res); -}); +client.pin.add('QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn').then(res => { + console.log(res) +}) ``` -Run with `node index.mjs`. - -Output something like: +Run the script using `node index.mjs`. +This outputs something like the following: ```bash CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn) @@ -173,7 +170,7 @@ CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn) - Use the official IPFS [`go-ipfs-api`](https://github.com/ipfs/go-ipfs-api) GoLang API. - Install with `go get -u github.com/ipfs/go-ipfs-api`. - Create a go module with `go mod init infura`. -- Save the following script to a file, e.g. `index.go`, and include the Infura `auth` header with the `http.RoundTripper` wrapper. +- Save the following script to a file, for example, `index.go`, and include the Infura `auth` header with the `http.RoundTripper` wrapper. ```go package main @@ -188,8 +185,8 @@ import ( ) func main() { - projectId := "" - projectSecret := "" + projectId := "" + projectSecret := "" shell := ipfsApi.NewShellWithClient("https://ipfs.infura.io:5001", NewClient(projectId, projectSecret)) cid, err := shell.Add(strings.NewReader("Infura IPFS - Getting started demo.")) @@ -225,9 +222,8 @@ func (t authTransport) RoundTrip(r *http.Request) (*http.Response, error) { } ``` -Run with `go run index.go`. - -Output something like: +Run the script using `go run index.go`. +This outputs something like the following: ```bash CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn) @@ -238,7 +234,7 @@ CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn) - Use the official IPFS [`go-ipfs-http-client`](https://github.com/ipfs/go-ipfs-http-client) GoLang API. - Install with `go get github.com/ipfs/go-ipfs-http-client`. - Create a go module with `go mod init infura`. -- Save the following script to a file, e.g. `index.go`, and include the Infura `auth` header with the `http.RoundTripper` wrapper. +- Save the following script to a file, for example, `index.go`, and include the Infura `auth` header with the `http.RoundTripper` wrapper. ```go package main @@ -256,8 +252,8 @@ import ( ) func main() { - projectId := "" - projectSecret := "" + projectId := "" + projectSecret := "" httpClient := &http.Client{} httpApi, err := ipfsApi.NewURLApiWithClient("https://ipfs.infura.io:5001", httpClient) @@ -283,9 +279,8 @@ func basicAuth(projectId, projectSecret string) string { } ``` -Run with `go run index.go`. - -Example output: +Run the script using `go run index.go`. +This outputs something like the following: ```bash Data successfully stored in IPFS: QmTHr95iiwSTA2USxx4g5kKnhqsNRixqohhwxjvdXmSrWn @@ -297,11 +292,11 @@ Now that you have successfully made a call to the IPFS network, you can explore by Infura. Here are some suggestions: - **Explore other IPFS APIs**: Infura supports a wide range of APIs. You can find more information in the - [HTTP API methods documentation](../http-api-methods/). + [HTTP API methods documentation](http-api-methods/index.md). - **Try out different networks**: Infura supports multiple networks including Arbitrum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/linea/index.md b/services/reference/linea/index.md index 1cd59d11dfc..78e36e7965c 100644 --- a/services/reference/linea/index.md +++ b/services/reference/linea/index.md @@ -18,21 +18,21 @@ See the [official Linea documentation](https://docs.linea.build/) for more infor ::: diff --git a/services/reference/linea/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/linea/json-rpc-methods/_eth_accounts-request.mdx index 23dc588e189..71c0ea489ab 100644 --- a/services/reference/linea/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_block-address.mdx b/services/reference/linea/json-rpc-methods/_eth_block-address.mdx index 086a01ece58..30ebf143019 100644 --- a/services/reference/linea/json-rpc-methods/_eth_block-address.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_block-address.mdx @@ -1,7 +1,6 @@ - `address`: [_required_] A string representing the address (20 bytes) to check for balance. - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - diff --git a/services/reference/linea/json-rpc-methods/_eth_block-parameter.mdx b/services/reference/linea/json-rpc-methods/_eth_block-parameter.mdx index 9e894d7ce0e..51f61592763 100644 --- a/services/reference/linea/json-rpc-methods/_eth_block-parameter.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_block-parameter.mdx @@ -1,6 +1,5 @@ - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - diff --git a/services/reference/linea/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/linea/json-rpc-methods/_eth_blocknumber-request.mdx index 55b58fc3fa8..3a70a845262 100644 --- a/services/reference/linea/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_call-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_call-parameters.mdx index 0a39434d3b3..b10056de90f 100644 --- a/services/reference/linea/json-rpc-methods/_eth_call-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_call-parameters.mdx @@ -2,12 +2,12 @@ - `to`: 20 bytes - Address the transaction is directed to. - `gas`: Hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero gas, but this parameter may be needed by some executions. - `gasPrice`: Hexadecimal value of the `gasPrice` used for each paid gas. -- `maxPriorityFeePerGas`: Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../ethereum/concepts/transaction-types.md#eip-1559-transactions). -- `maxFeePerGas`: Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../ethereum/concepts/transaction-types.md#eip-1559-transactions). +- `maxPriorityFeePerGas`: Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). - `value`: Hexadecimal of the value sent with this transaction. - `data`: Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). -- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: diff --git a/services/reference/linea/json-rpc-methods/_eth_call-request.mdx b/services/reference/linea/json-rpc-methods/_eth_call-request.mdx index 54dd4279ce2..1c15a124609 100644 --- a/services/reference/linea/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/linea/json-rpc-methods/_eth_chainid-request.mdx index ca90962aadd..8ec72c191a2 100644 --- a/services/reference/linea/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_estimategas-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_estimategas-parameters.mdx index 7d3e8f28d7c..3110552c3ee 100644 --- a/services/reference/linea/json-rpc-methods/_eth_estimategas-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_estimategas-parameters.mdx @@ -2,26 +2,24 @@ - `from`: _\[optional]_ 20 Bytes - The address the transaction is sent from. - `to`: 20 Bytes - The address the transaction is directed to. - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `eth_estimateGas` consumes - zero gas, but this parameter may be needed by some executions. + zero gas, but this parameter may be needed by some executions. - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. - - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in Wei, the sender is willing to pay per gas - above the base fee. - See [EIP-1559 transactions](../../ethereum/concepts/transaction-types.md#eip-1559-transactions). - - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in Wei, the sender is - willing to pay per gas. - See [EIP-1559 transactions](../../ethereum/concepts/transaction-types.md#eip-1559-transactions). + - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas + above the base fee. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). + - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is + willing to pay per gas. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the - [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). - - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, - `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, + `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). + `safe` isn't supported. Use `finalized` instead. + Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - -If no gas limit is specified, geth uses the block gas limit from the pending block as an upper bound. -As a result the returned estimate might not be enough to executed the call/transaction when the amount +If no gas limit is specified, geth uses the block gas limit from the pending block as an upper bound. +As a result the returned estimate might not be enough to executed the call/transaction when the amount of gas is higher than the pending block gas limit. - diff --git a/services/reference/linea/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/linea/json-rpc-methods/_eth_estimategas-request.mdx index 9176ad43d74..26ca80ae37a 100644 --- a/services/reference/linea/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/linea/json-rpc-methods/_eth_feehistory-request.mdx index 28e2b5b1bfb..83afa2465ee 100644 --- a/services/reference/linea/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gasprice-request.mdx index 4053bc457b3..0032eaf928a 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getbalance-request.mdx index 57bd8e453ae..1c86d700661 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockbyhash-request.mdx index c0817e22f3e..e701109c233 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-parameters.mdx index 9de12a4aed1..811a218c605 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-parameters.mdx @@ -1,6 +1,6 @@ - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - `show transaction details flag`: [_required_] If set to `true`, returns the full transaction objects. If `false` returns only the hashes of the transactions. diff --git a/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-request.mdx index f5403bc552b..17b02144a1f 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getblockreceipts-request.mdx index 771e5ffe8ff..ffdb1ab2f93 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index ef87eebe5a6..006ff936494 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index cbaf1fd9c23..13f67e60a5a 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getcode-request.mdx index d0929d35f51..f958e687f26 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getlogs-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_getlogs-parameters.mdx index cf55229aa4e..0126be9cc49 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getlogs-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getlogs-parameters.mdx @@ -2,11 +2,10 @@ A filter object containing the following: - `address`: [_optional_] Contract address (20 bytes) or a list of addresses from which logs should originate. - `fromBlock`: (string) _[optional, default is "latest"]_ A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). -- `toBlock`: (string) _[optional, default is "latest"]_ A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +- `toBlock`: (string) _[optional, default is "latest"]_ A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). + `safe` isn't supported. Use `finalized` instead. + Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - `topics`: _[optional]_ Array of 32 bytes DATA topics. Topics are order-dependent. -- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. - +- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. diff --git a/services/reference/linea/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getlogs-request.mdx index dffa5c433e3..056ca666afe 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getproof-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_getproof-parameters.mdx index 82fbc6a299e..c91db635555 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getproof-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getproof-parameters.mdx @@ -2,6 +2,6 @@ - `storageKeys`: An array of 32-byte storage keys to be proofed and included. - `blockParameter`: (string) A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). + `safe` isn't supported. Use `finalized` instead. + Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: diff --git a/services/reference/linea/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getproof-request.mdx index a5fe9af95e7..baf53c60107 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getstorageat-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_getstorageat-parameters.mdx index c1d8b6d4cf7..cc0a3bcacb0 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getstorageat-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getstorageat-parameters.mdx @@ -1,7 +1,7 @@ - `address`: [_required_] A string representing the address (20 bytes) to check for balance. - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: -- `storage position`: [_required_] A hexadecimal code of the position in the storage. \ No newline at end of file +- `storage position`: [_required_] A hexadecimal code of the position in the storage. diff --git a/services/reference/linea/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getstorageat-request.mdx index c686ad8f385..6e68cad7940 100644 --- a/services/reference/linea/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 42c4e7d0506..b0065aa1723 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-parameters.mdx index 495d31d3c1b..a40aeaaad1b 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-parameters.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-parameters.mdx @@ -1,6 +1,6 @@ - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). :::warning - `safe` isn't supported, use `finalized`. + `safe` isn't supported. Use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). ::: - `transaction index position`: [_required_] A hexadecimal of the integer representing the position in the block. diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index ec53ed239dc..f92d5d945af 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 670f8f3187b..b811c713dd1 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactioncount-request.mdx index 43c682c8b10..5aa54298866 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index bb19bbbaa6d..efbfbbed8bf 100644 --- a/services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx deleted file mode 100644 index 363cb69dae7..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35","0x0"],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35","0x0"],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-parameters.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-parameters.mdx deleted file mode 100644 index 716efca0b40..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-parameters.mdx +++ /dev/null @@ -1,6 +0,0 @@ -- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). - ::: -- `uncle index position`: [_required_] A hexadecimal equivalent of the integer indicating the uncle's index position. diff --git a/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx deleted file mode 100644 index 58d37ee7e5b..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params": ["0x29c","0x0"],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params": ["0x29c","0x0"],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx deleted file mode 100644 index 957ad4ea454..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx deleted file mode 100644 index 112159ff357..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params": ["0x5bad55"],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params": ["0x5bad55"],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_getwork-request.mdx b/services/reference/linea/json-rpc-methods/_eth_getwork-request.mdx deleted file mode 100644 index 903c16edea5..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_getwork-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_getWork","params": [],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getWork","params": [],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_hashrate-request.mdx b/services/reference/linea/json-rpc-methods/_eth_hashrate-request.mdx deleted file mode 100644 index 42fa9e76a57..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_hashrate-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_hashrate","params": [],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_hashrate","params": [],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 94a80433edf..29bf9fc2184 100644 --- a/services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://linea-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc":"2.0","method":"eth_maxPriorityFeePerGas","params": [],"id":1}' +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_maxPriorityFeePerGas","params": [],"id":1}' ``` diff --git a/services/reference/linea/json-rpc-methods/_eth_mining-request.mdx b/services/reference/linea/json-rpc-methods/_eth_mining-request.mdx deleted file mode 100644 index 2f6d0fbb3c0..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_mining-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_mining","params": [],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_mining","params": [],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/linea/json-rpc-methods/_eth_protocolversion-request.mdx deleted file mode 100644 index 1858eb6b1ff..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_protocolversion-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_protocolVersion","params": [],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_protocolVersion","params": [],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/linea/json-rpc-methods/_eth_sendrawtransaction-request.mdx index b6d2d92aa74..e5b953a03e5 100644 --- a/services/reference/linea/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/linea/json-rpc-methods/_eth_submitwork-request.mdx deleted file mode 100644 index 25268c7c4cc..00000000000 --- a/services/reference/linea/json-rpc-methods/_eth_submitwork-request.mdx +++ /dev/null @@ -1,22 +0,0 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"eth_submitWork","params": ["0x0000000000000001","0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef","0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"],"id":1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_submitWork","params": ["0x0000000000000001","0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef","0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"],"id":1}' -``` - - - diff --git a/services/reference/linea/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/linea/json-rpc-methods/_eth_syncing-request.mdx index 8b4f919b387..4cd1308d34c 100644 --- a/services/reference/linea/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/linea/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_net_listening-request.mdx b/services/reference/linea/json-rpc-methods/_net_listening-request.mdx index 245093af72e..11057036e18 100644 --- a/services/reference/linea/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/linea/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_net_peercount-request.mdx b/services/reference/linea/json-rpc-methods/_net_peercount-request.mdx index 596716759e6..99a7245251c 100644 --- a/services/reference/linea/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/linea/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_net_version-request.mdx b/services/reference/linea/json-rpc-methods/_net_version-request.mdx index dbad91be8ea..fa60cf1e487 100644 --- a/services/reference/linea/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/linea/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/linea/json-rpc-methods/_web3_clientversion-request.mdx index 99c4f0120be..7e15f81227a 100644 --- a/services/reference/linea/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/linea/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/linea/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..c2faf05f1b4 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..1530e381827 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..648b666bf67 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/linea/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..e3f4a844cd5 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/linea/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..04f3e00318a --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/index.md b/services/reference/linea/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..11a5232642d --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Linea bundler methods +sidebar_label: Bundler methods +sidebar_key: linea-bundler-methods +description: Linea bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Linea mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..935445120b2 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..a9ba5137b39 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/linea/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..2e5f63916f8 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/linea/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx b/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx new file mode 100644 index 00000000000..dc2c78d5b9a --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash","params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx b/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx new file mode 100644 index 00000000000..be0124d6445 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ \ +-x '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/debug/_debug_tracetransaction-request.mdx b/services/reference/linea/json-rpc-methods/debug/_debug_tracetransaction-request.mdx new file mode 100644 index 00000000000..8b9d6d93f52 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/_debug_tracetransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.md b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.md deleted file mode 100644 index 664740b3cbd..00000000000 --- a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -description: debug_traceBlockByHash API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceBlockByHash - -Returns tracing results by executing all transactions in the block specified by the block hash. - -## Parameters - -- `blockHash`: (string) _[required]_ hash of the block to trace. -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](../debug/index.md#calltracer) or - [`prestateTracer`](../debug/index.md#prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](../debug/index.md##calltracer) object or -[`prestateTracer`](../debug/index.md#prestatetracer) object. - -## Example - -### Request - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash","params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "result": { - "calls": [ - { - "from": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", - "gas": "0x1feac", - "gasUsed": "0x9d5", - "input": "0x0902f1ac", - "output": "0x0000000000000000000000000000000000000000000000025aa314728293841e00000000000000000000000000000000000000000000000000000007a5cc7a260000000000000000000000000000000000000000000000000000000064b8c380", - "to": "0x75a97d88ff19e07da99023ef0e35e35f51869de0", - "type": "STATICCALL" - }, - { - "calls": [ - { - "from": "0xf56dc6695cf1f5c364edebc7dc7077ac9b586068", - "gas": "0x1bc78", - "gasUsed": "0x6c8f", - "input": "0x23b872dd000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f00000000000000000000000075a97d88ff19e07da99023ef0e35e35f51869de00000000000000000000000000000000000000000000000000000000002faf080", - "output": "0x0000000000000000000000000000000000000000000000000000000000000001", - "to": "0x1c92ff898f7c34fc6ed884aec3859fd6c655c1f0", - "type": "DELEGATECALL", - "value": "0x0" - } - ], - "from": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", - "gas": "0x1dfd5", - "gasUsed": "0x8907", - "input": "0x23b872dd000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f00000000000000000000000075a97d88ff19e07da99023ef0e35e35f51869de00000000000000000000000000000000000000000000000000000000002faf080", - "output": "0x0000000000000000000000000000000000000000000000000000000000000001", - "to": "0xf56dc6695cf1f5c364edebc7dc7077ac9b586068", - "type": "CALL", - "value": "0x0" - } - ], - "from": "0xc2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f", - "gas": "0x273bd", - "gasUsed": "0x22499", - "input": "0x38ed17390000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000e8291f2bdfeff000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c2aa3359b78bd4223f3434bcf6b0f3b5f5d71c8f0000000000000000000000000000000000000000000000000000000064b8cdb80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f56dc6695cf1f5c364edebc7dc7077ac9b586068000000000000000000000000ed4ccdd10b8b97ba9555a6767613bfb98aaf72c4", - "output": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002faf08000000000000000000000000000000000000000000000000000e9c8a628b94ade", - "to": "0xa0013f511c70f01c077a8f809e36b905a0d16c95", - "type": "CALL", - "value": "0x0" - } - } - ... - ] -} -``` diff --git a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.mdx b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.mdx new file mode 100644 index 00000000000..40986cd30ac --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the block specified by the block hash. +title: Mantle debug_traceBlockByHash +sidebar_label: debug_traceBlockByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByHash` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.md b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.md deleted file mode 100644 index 440bb5b8b86..00000000000 --- a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -description: debug_traceBlockByNumber API method ---- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# debug_traceBlockByNumber - -Returns tracing results by executing all transactions in the specified block number. - -## Parameters - -- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - - :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). - ::: - -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](../debug/index.md#calltracer) or - [`prestateTracer`](../debug/index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](../debug/index.md##calltracer) object or -[`prestateTracer`](../debug/index.md#prestatetracer) object. - -## Example - -### Request - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' -``` - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ \ --x '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "result": { - "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", - "gas": "0x5208", - "gasUsed": "0x5208", - "input": "0x", - "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", - "type": "CALL", - "value": "0x2ca186f5fda8004" - } - }, - { - "result": { - "from": "0x25f2650cc9e8ad863bf5da6a7598e24271574e29", - "gas": "0xfe0e", - "gasUsed": "0xafee", - "input": "0xd0e30db0", - "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", - "type": "CALL", - "value": "0x2386f26fc10000" - } - }, - ... - ] -} -``` diff --git a/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.mdx b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.mdx new file mode 100644 index 00000000000..dd23dfcb7c4 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/debug_traceblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the specified block number. +title: Mantle debug_traceBlockByNumber +sidebar_label: debug_traceBlockByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByNumber` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.md b/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.md deleted file mode 100644 index b85b6284d51..00000000000 --- a/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -description: debug_traceTransaction API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceTransaction - -Returns tracing results for the specified transaction. - -## Parameters - -- `transactionHash`: (string) _[required]_ hash of the block to trace. -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - - `timeout`: (string) _[optional]_ string of decimals numbers to set the timeout. The default is 5 seconds. The maximum - timeout is 10 seconds. Valid units are `ns`, `us`, `ms`, `s`. For example, `3s30ms`. - -# Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -### Request - - - - -```bash -curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", - "gas": "0x5208", - "gasUsed": "0x5208", - "input": "0x", - "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", - "type": "CALL", - "value": "0x2ca186f5fda8004" - } -} -``` diff --git a/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.mdx b/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.mdx new file mode 100644 index 00000000000..2f2df98f1cc --- /dev/null +++ b/services/reference/linea/json-rpc-methods/debug/debug_tracetransaction.mdx @@ -0,0 +1,44 @@ +--- +description: Returns tracing results for the specified transaction. +title: Mantle debug_traceTransaction +sidebar_label: debug_traceTransaction +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceTransaction` + +import Description from '/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_tracetransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx' + + + +### Request + +import Request from './_debug_tracetransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/debug/index.md b/services/reference/linea/json-rpc-methods/debug/index.md index 7b70ce1c01e..6353ec967d9 100644 --- a/services/reference/linea/json-rpc-methods/debug/index.md +++ b/services/reference/linea/json-rpc-methods/debug/index.md @@ -1,15 +1,17 @@ --- description: Linea debug methods. +sidebar_label: Debug methods +sidebar_key: linea-debug-methods --- -# Debug methods +# Linea debug methods The debug API methods allow you to inspect and debug the network. Infura supports the following debug methods on the Linea network: -- [`debug_traceBlockByHash`](debug_traceblockbyhash.md) -- [`debug_traceBlockByNumber`](debug_traceblockbynumber.md) -- [`debug_traceTransaction`](debug_tracetransaction.md) +- [`debug_traceBlockByHash`](debug_traceblockbyhash.mdx) +- [`debug_traceBlockByNumber`](debug_traceblockbynumber.mdx) +- [`debug_traceTransaction`](debug_tracetransaction.mdx) ## Debug tracing types diff --git a/services/reference/linea/json-rpc-methods/eth_accounts.mdx b/services/reference/linea/json-rpc-methods/eth_accounts.mdx index 529e7f38fb9..9c9eba2eb69 100644 --- a/services/reference/linea/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/linea/json-rpc-methods/eth_accounts.mdx @@ -1,13 +1,41 @@ --- -title: "eth_accounts" -hide_title: true -hide_table_of_contents: true +title: Linea eth_accounts +sidebar_label: eth_accounts +description: Returns a null value on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_accounts` - +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_accounts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' + + + +### Request + +import Request from './_eth_accounts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/eth_blocknumber.mdx b/services/reference/linea/json-rpc-methods/eth_blocknumber.mdx index 9c02f2a5339..fcd6dd019a9 100644 --- a/services/reference/linea/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/linea/json-rpc-methods/eth_blocknumber.mdx @@ -1,13 +1,41 @@ --- -title: "eth_blockNumber" -hide_title: true -hide_table_of_contents: true +title: Linea eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest block number on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_blockNumber` - +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/eth_call.mdx b/services/reference/linea/json-rpc-methods/eth_call.mdx index fdbfa391e3c..035657ca868 100644 --- a/services/reference/linea/json-rpc-methods/eth_call.mdx +++ b/services/reference/linea/json-rpc-methods/eth_call.mdx @@ -1,40 +1,41 @@ --- -title: "eth_call" +title: Linea eth_call +sidebar_label: eth_call +description: Executes a new message call without creating a transaction on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_call` -import Description from "/services/reference/_partials/_eth_call-description.mdx"; +import Description from '/services/reference/_partials/_eth_call-description.mdx' ## Parameters -import Params from "./_eth_call-parameters.mdx"; +import Parameters from '/services/reference/_partials/_eth_call-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx"; +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx"; +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx"; +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_chainid.mdx b/services/reference/linea/json-rpc-methods/eth_chainid.mdx index f0dd180f23d..12b647b24fa 100644 --- a/services/reference/linea/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/linea/json-rpc-methods/eth_chainid.mdx @@ -1,13 +1,41 @@ --- -title: "eth_chainId" -hide_title: true -hide_table_of_contents: true +title: Linea eth_chainId +sidebar_label: eth_chainId +description: Returns the chainId on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_chainId` - +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/eth_coinbase.mdx b/services/reference/linea/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_estimategas.mdx b/services/reference/linea/json-rpc-methods/eth_estimategas.mdx index 90cbfd5be94..66ccdafdfa0 100644 --- a/services/reference/linea/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/linea/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,43 @@ --- -title: "eth_estimateGas" +title: Linea eth_estimateGas +sidebar_label: eth_estimateGas --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx"; +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "./_eth_estimategas-parameters.mdx"; +import Params from './_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx"; +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx"; +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx"; +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_feehistory.mdx b/services/reference/linea/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..4c1f3ea51d4 100644 --- a/services/reference/linea/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/linea/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,41 @@ --- -title: "eth_feeHistory" +title: Linea eth_feeHistory +sidebar_label: eth_feeHistory +description: Get transaction fee history on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_feeHistory` -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_feehistory-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gasprice.mdx b/services/reference/linea/json-rpc-methods/eth_gasprice.mdx index abe151ba1a1..14466e8da79 100644 --- a/services/reference/linea/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gasprice.mdx @@ -1,13 +1,41 @@ --- -title: "eth_gasPrice" -hide_title: true -hide_table_of_contents: true +title: Linea eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current price per gas on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_gasPrice` - +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/eth_getbalance.mdx b/services/reference/linea/json-rpc-methods/eth_getbalance.mdx index c6e92d7d71d..1b99907c542 100644 --- a/services/reference/linea/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBalance" +title: Linea eth_getBalance +sidebar_label: eth_getBalance +description: Get balance of an account on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getBalance` -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx"; +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' ## Parameters -import Params from "./_eth_block-address.mdx"; +import Parameters from '/services/reference/_partials/_eth_getbalance-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx"; +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx"; +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx"; +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..5a7337b8b40 100644 --- a/services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBlockByHash" +title: Linea eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Get block by block hash on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_getBlockByHash` -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx index 28303823c29..328f04c5384 100644 --- a/services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBlockByNumber" +title: Linea eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Get block by block number on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getBlockByNumber` -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' ## Parameters -import Params from "./_eth_getblockbynumber-parameters.mdx"; +import Parameters from './_eth_getblockbynumber-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx"; +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx index bb1756ff173..25217fa0e9c 100644 --- a/services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBlockReceipts" +title: Linea eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Get block receipts by block number on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getBlockReceipts` -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' ## Parameters -import Params from "./_eth_block-parameter.mdx"; +import Parameters from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..9c4a873fa20 100644 --- a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Linea eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Get number of transactions by hash on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_getBlockTransactionCountByHash` -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index 83249857d0f..2d4a35a6be7 100644 --- a/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Linea eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Get number of transactions by block number on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getBlockTransactionCountByNumber` -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' ## Parameters -import Params from "./_eth_block-parameter.mdx"; +import Parameters from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx"; +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getcode.mdx b/services/reference/linea/json-rpc-methods/eth_getcode.mdx index e793e175188..101a65421f5 100644 --- a/services/reference/linea/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getCode" +title: Linea eth_getCode +sidebar_label: eth_getCode +description: Get smart contract code on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getCode` -import Description from "/services/reference/_partials/_eth_getcode-description.mdx"; +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' ## Parameters -import Params from "./_eth_block-address.mdx"; +import Parameters from '/services/reference/_partials/_eth_getcode-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx"; +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx"; +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx"; +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getlogs.mdx b/services/reference/linea/json-rpc-methods/eth_getlogs.mdx index 6a7d5ecc04e..1504b0c6bd5 100644 --- a/services/reference/linea/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getLogs" +title: Linea eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getLogs` -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx"; +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' ## Parameters -import Params from "./_eth_getlogs-parameters.mdx"; +import Parameters from './_eth_getlogs-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx"; +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx"; +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx"; +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getproof.mdx b/services/reference/linea/json-rpc-methods/eth_getproof.mdx index b23755750a3..db07013eb8b 100644 --- a/services/reference/linea/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getProof" +title: Linea eth_getProof +sidebar_label: eth_getProof +description: Get Merkle proof on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getProof` -import Description from "/services/reference/_partials/_eth_getproof-description.mdx"; +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' ## Parameters -import Params from "./_eth_getproof-parameters.mdx"; +import Parameters from './_eth_getproof-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx"; +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx"; +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx"; +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getstorageat.mdx b/services/reference/linea/json-rpc-methods/eth_getstorageat.mdx index e649c38b9ce..6757e33caaf 100644 --- a/services/reference/linea/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/linea/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getStorageAt" +title: Linea eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Get value from storage on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getStorageAt` -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx"; +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' ## Parameters -import Params from "./_eth_getstorageat-parameters.mdx"; +import Parameters from './_eth_getstorageat-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx"; +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx"; +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx"; +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..c4702518072 100644 --- a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Linea eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Get transaction by block hash and index on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_getTransactionByBlockHashAndIndex` -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index fc0453d96ec..399abbf7282 100644 --- a/services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Linea eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Get transaction by block identifier and index on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getTransactionByBlockNumberAndIndex` -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' ## Parameters -import Params from "./_eth_gettransactionbyblocknumberandindex-parameters.mdx"; +import Parameters from './_eth_gettransactionbyblocknumberandindex-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx"; +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..5bcbe0265a4 100644 --- a/services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getTransactionByHash" +title: Linea eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Get transaction by transaction hash on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_getTransactionByHash` -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx index c53ef5b53a7..b2b1366abbc 100644 --- a/services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getTransactionCount" +title: Linea eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Get transaction count on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +# `eth_getTransactionCount` -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' ## Parameters -import Params from "./_eth_block-address.mdx"; +import Parameters from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx"; +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..95bc2b83c86 100644 --- a/services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/linea/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,41 @@ --- -title: "eth_getTransactionReceipt" +title: Linea eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Get transaction receipt by hash on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_getTransactionReceipt` -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/linea/json-rpc-methods/eth_getunclebyblockhashandindex.mdx deleted file mode 100644 index d6a9a959a37..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_getUncleByBlockHashAndIndex" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" - - - -### Request - -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/linea/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx deleted file mode 100644 index c3fa6f8206d..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_getUncleByBlockNumberAndIndex" ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx"; - - - -## Parameters - -import Params from "./_eth_getunclebyblocknumberandindex-parameters.mdx"; - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx"; - - - -## Example - -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx"; - - - -### Request - -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx"; - - - -### Response - -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx"; - - diff --git a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/linea/json-rpc-methods/eth_getunclecountbyblockhash.mdx deleted file mode 100644 index 298b5c520e8..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_getUncleCountByBlockHash" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" - - - -### Request - -import Request from "./_eth_getunclecountbyblockhash-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/linea/json-rpc-methods/eth_getunclecountbyblocknumber.mdx deleted file mode 100644 index d4a09b5783a..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_getUncleCountByBlockNumber" ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx"; - - - -## Parameters - -import Params from "./_eth_block-parameter.mdx"; - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx"; - - - -## Example - -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx"; - - - -### Request - -import Request from "./_eth_getunclecountbyblocknumber-request.mdx"; - - - -### Response - -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx"; - - diff --git a/services/reference/linea/json-rpc-methods/eth_getwork.mdx b/services/reference/linea/json-rpc-methods/eth_getwork.mdx deleted file mode 100644 index 31dd81816b7..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_getwork.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_getWork" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_getwork-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_getwork-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_getwork-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_getwork-example.mdx" - - - -### Request - -import Request from "./_eth_getwork-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_getwork-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_hashrate.mdx b/services/reference/linea/json-rpc-methods/eth_hashrate.mdx deleted file mode 100644 index 21ba47abdef..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_hashrate.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_hashrate" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_hashrate-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_hashrate-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_hashrate-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_hashrate-example.mdx" - - - -### Request - -import Request from "./_eth_hashrate-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_hashrate-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 58cede5ca07..a3f1b7e2623 100644 --- a/services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/linea/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,13 +1,41 @@ --- -title: "eth_maxPriorityFeePerGas" -hide_title: true -hide_table_of_contents: true +title: Linea eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Returns the current max priority fee per gas on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_maxPriorityFeePerGas` - +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/eth_mining.mdx b/services/reference/linea/json-rpc-methods/eth_mining.mdx deleted file mode 100644 index 3e755d68509..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_mining.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_mining" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_mining-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_mining-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_mining-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_mining-example.mdx" - - - -### Request - -import Request from "./_eth_mining-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_mining-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_protocolversion.mdx b/services/reference/linea/json-rpc-methods/eth_protocolversion.mdx deleted file mode 100644 index 02b5da95bff..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_protocolversion.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_protocolVersion" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" - - - -### Request - -import Request from "./_eth_protocolversion-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..df88d1995a3 100644 --- a/services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/linea/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,41 @@ --- -title: "eth_sendRawTransaction" +title: Linea eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `eth_sendRawTransaction` -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Parameters from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/linea/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_sign.mdx b/services/reference/linea/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_submitwork.mdx b/services/reference/linea/json-rpc-methods/eth_submitwork.mdx deleted file mode 100644 index 3e302cecfe3..00000000000 --- a/services/reference/linea/json-rpc-methods/eth_submitwork.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "eth_submitWork" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" - - - -## Parameters - -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" - - - -## Returns - -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" - - - -## Example - -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" - - - -### Request - -import Request from "./_eth_submitwork-request.mdx" - - - -### Response - -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" - - diff --git a/services/reference/linea/json-rpc-methods/eth_syncing.mdx b/services/reference/linea/json-rpc-methods/eth_syncing.mdx index 0abb7fd5cf8..9f328372afd 100644 --- a/services/reference/linea/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/linea/json-rpc-methods/eth_syncing.mdx @@ -1,13 +1,41 @@ --- -title: "eth_syncing" -hide_title: true -hide_table_of_contents: true +title: Linea eth_syncing +sidebar_label: eth_syncing +description: Returns sync status on Linea. --- -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" +# `eth_syncing` - +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + + + +## Parameters + +import Parameters from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..9af4061a899 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..cf5eca05646 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/linea/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..53f465e9746 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/linea/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..b6cf785f297 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/linea/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..618d87b42f6 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..2a67b199e52 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,43 @@ +--- +title: Linea eth_getFilterChanges +sidebar_label: eth_getFilterChanges +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..e49a8794954 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,43 @@ +--- +title: Linea eth_getFilterLogs +sidebar_label: eth_getFilterLogs +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/linea/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..1bd3f1ac8db --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,43 @@ +--- +title: Linea eth_newBlockFilter +sidebar_label: eth_newBlockFilter +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/linea/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..490f0ef6743 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,43 @@ +--- +title: Linea eth_newFilter +sidebar_label: eth_newFilter +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/linea/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..f05f1e5241f --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,43 @@ +--- +title: Linea eth_uninstallFilter +sidebar_label: eth_uninstallFilter +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/linea/json-rpc-methods/filter-methods/index.md b/services/reference/linea/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..cacd38a6ba8 --- /dev/null +++ b/services/reference/linea/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Linea filter methods +sidebar_label: Filter methods +sidebar_key: linea-filter-methods +description: Linea filter methods +--- + +# Linea filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/linea/json-rpc-methods/index.md b/services/reference/linea/json-rpc-methods/index.md index b6c4694a8b4..0ed7f4acd84 100644 --- a/services/reference/linea/json-rpc-methods/index.md +++ b/services/reference/linea/json-rpc-methods/index.md @@ -1,6 +1,11 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: linea-json-rpc-api +--- -Linea supports the standard [Ethereum JSON-RPC-APIs](../../ethereum/json-rpc-methods/index.md) and additional +# Linea JSON-RPC API + +Linea supports the standard [Ethereum JSON-RPC APIs](../../ethereum/json-rpc-methods/index.md) and additional [debug methods](debug/index.md) not supported on Ethereum by Infura. :::info diff --git a/services/reference/linea/json-rpc-methods/linea_estimategas.mdx b/services/reference/linea/json-rpc-methods/linea_estimategas.mdx index 68949b92b44..de22dd7001b 100644 --- a/services/reference/linea/json-rpc-methods/linea_estimategas.mdx +++ b/services/reference/linea/json-rpc-methods/linea_estimategas.mdx @@ -1,14 +1,16 @@ --- -title: "linea_estimateGas" +title: linea_estimateGas +sidebar_label: linea_estimateGas --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' # `linea_estimateGas` Generates and returns the estimated amount of gas required to allow the transaction to complete and be -published on Ethereum. The method does not submit the transaction to the blockchain. +published on Ethereum. The method does not submit the transaction to the blockchain. The `priorityFeePerGas` returned by this method includes the cost of submitting the transaction to Ethereum, which can vary based on the size of the `calldata`. @@ -30,22 +32,23 @@ We recommend using `linea_estimateGas` for more accurate results. ## Parameters -- `TRANSACTION CALL OBJECT` _\[required]_ +- `call`: _\[required]_ Transaction call object: - `from`: _\[optional]_ 20 bytes - The address the transaction is sent from. - `to`: _\[optional]_ 20 bytes - The address the transaction is directed to. - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `linea_estimateGas` consumes - zero gas, but this parameter may be needed by some executions. + zero gas, but this parameter may be needed by some executions. - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the - [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). -- `blockParameter`: (string) [_optional_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). - :::warning - `safe` isn't supported, use `finalized`. - Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block). - ::: + [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). +- `stateOverride`: _\[optional]_ Object that contains the address-to-state mapping to [override state values](#override-state-values). + Each entry specifies a state that will be temporarily overridden before executing the call: + - `balance`: _\[optional]_ Hexadecimal value of the temporary account balance for the call execution. + - `nonce`: _\[optional]_ Hexadecimal value of the temporary nonce for the call execution. + - `code` : _\[optional]_ Bytecode to inject into the account. + - `stateDiff`: `key:value` pairs to override individual slots in the account storage. ## Returns @@ -53,26 +56,26 @@ Hexadecimal values representing the recommended gas limit, the base fee per gas, ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + - ```bash - curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0","method":"linea_estimateGas","params":[{"from":"0x42c27251C710864Cf76f1b9918Ace3E585e6E21b","value":"0x1","gasPrice":"0x100000000","gas":"0x21000"}],"id":53}' - ``` +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"linea_estimateGas","params":[{"from":"0x42c27251C710864Cf76f1b9918Ace3E585e6E21b","value":"0x1","gasPrice":"0x100000000","gas":"0x21000"}],"id":53}' +``` - ```bash - wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"linea_estimateGas","params":[{"from":"0x42c27251C710864Cf76f1b9918Ace3E585e6E21b","value":"0x1","gasPrice":"0x100000000","gas":"0x21000"}],"id":53}' - ``` +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"linea_estimateGas","params":[{"from":"0x42c27251C710864Cf76f1b9918Ace3E585e6E21b","value":"0x1","gasPrice":"0x100000000","gas":"0x21000"}],"id":53}' +``` @@ -93,5 +96,45 @@ Replace `` with an API key from your [Infura dashboard](https://in } } ``` + + +## Override state values + +You can override an account with temporary state values before making the call. This allows you to +make temporary state changes without affecting the actual blockchain state. + +The following example estimates the cost for transferring an ERC-20 token for an account which does not +have the required assets onchain. + +The example sets a custom ETH balance for the sender (to cover gas costs) and modifies the account's +balance within the ERC-20 contract's storage for the duration of the call. + +```json +curl https://linea-mainnet.infura.io/v3/ \ +-X POST \ +-H "Content-Type: application/json" \ +-d '{ + "jsonrpc":"2.0", + "method":"linea_estimateGas", + "params":[ + { + "from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", + "to":"0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + "data":"0xa9059cbb000000000000000000000000627306090abaB3A6e1400e9345bC60c78a8BEf570000000000000000000000000000000000000000000000001bc16d674ec80000" + }, + { + "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { + "balance": "0x16345785d8a0000" + }, + "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f": { + "stateDiff": { + "0x2d206e5210c119b1cbed144f517f1f1dfd586eed26793a233e6afc261f4cf97f":"0x0000000000000000000000000000000000000000000000001bc16d674ec80000" + } + } + } + ], + "id":53 +}' +``` diff --git a/services/reference/linea/json-rpc-methods/linea_gettransactionexclusionstatusv1.mdx b/services/reference/linea/json-rpc-methods/linea_gettransactionexclusionstatusv1.mdx index 649ea2ae7a3..bc17071e2da 100644 --- a/services/reference/linea/json-rpc-methods/linea_gettransactionexclusionstatusv1.mdx +++ b/services/reference/linea/json-rpc-methods/linea_gettransactionexclusionstatusv1.mdx @@ -1,62 +1,48 @@ --- -title: "linea_getTransactionExclusionStatusV1" +title: Linea linea_getTransactionExclusionStatusV1 +sidebar_label: linea_getTransactionExclusionStatusV1 +description: Verify if a transaction exceeded data line limits on Linea. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -Checks if a transaction was rejected for exceeding data line limits, preventing the prover from generating -a proof to be included in a block. +# `linea_getTransactionExclusionStatusV1` -:::warning +Checks if a transaction was rejected for exceeding data line limits, preventing the prover from generating a proof to be included in a block. -You can only check for rejected transactions within seven days of the transaction attempt. Querying -transactions older than this returns a `null` response. - -::: - -The API call provides the rejection reason if the transaction fails. -It returns `null` if the transaction succeeds. +Rejected transaction data is only available within seven days of the transaction attempt. Querying older transactions returns a null response. ## Parameters -`transaction hash`: _\[Required]_ A string representing the hash (32 bytes) of a transaction. +- `transactionHash`: [_Required_] A string representing the hash (32 bytes) of a transaction. ## Returns -- `txHash`: The hash of the transaction. -- `from`: The address of the sender. -- `nonce`: Number of transactions made by the sender. -- `txRejectionStage`: The point at which the transaction was rejected. One of: - - `SEQUENCER`: Rejected by the sequencer. - - `RPC`: Rejected by an RPC node. - - `P2P`: Rejected by a P2P-connected node. -- `reasonMessage`: The reason the transaction was rejected. -- `blockNumber`: The block that the transaction was rejected from, in hexadecimal format. - Only returned for transactions rejected by the sequencer. -- `timestamp`: Time of rejection, in ISO 8601 format. +A transaction exclusion object, or `null` if the transaction was not excluded or the data has been purged. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://linea-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": "1", "method": "linea_getTransactionExclusionStatusV1", "params": ["0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7"]}' - ``` + + +```bash +curl https://linea-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "linea_getTransactionExclusionStatusV1", "params": ["0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7"], "id": 1}' +``` + - ```bash - wscat -c wss://linea-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "linea_getTransactionExclusionStatusV1", "params": ["0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7"], "id": 1}' - ``` +```bash +wscat -c wss://linea-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "linea_getTransactionExclusionStatusV1", "params": ["0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7"], "id": 1}' +``` @@ -64,32 +50,23 @@ Replace `` with an API key from your [Infura dashboard](https://in ### Response - - ```json - { - "jsonrpc": "2.0", - "id": "1", - "result": { - "txHash": "0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7", - "from": "0x4d144d7b9c96b26361d6ac74dd1d8267edca4fc2", - "nonce": "0x64", - "txRejectionStage": "SEQUENCER", - "reasonMessage": "Transaction line count for module ADD=402 is above the limit 70", - "blockNumber": "0x3039", - "timestamp": "2024-08-22T09:18:51Z" - } - } - ``` - - - -The API returns a `null` result if the transaction does not exceed line limits or is older than seven days. -In these cases, the database does not contain the transaction. For example: + -```json +```JSON { "jsonrpc": "2.0", "id": 1, - "result": null + "result": { + "txHash": "0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7", + "from": "0x4d144d7b9c96b26361d6ac74dd1d8267edca4fc2", + "nonce": "0x64", + "txRejectionStage": "SEQUENCER", + "reasonMessage": "Transaction line count for module ADD=402 is above the limit 70", + "blockNumber": "0x3039", + "timestamp": "2024-08-22T09:18:51Z" + } } ``` + + + diff --git a/services/reference/linea/json-rpc-methods/net_listening.mdx b/services/reference/linea/json-rpc-methods/net_listening.mdx index b10ffc556cf..f7e15c066e2 100644 --- a/services/reference/linea/json-rpc-methods/net_listening.mdx +++ b/services/reference/linea/json-rpc-methods/net_listening.mdx @@ -1,40 +1,41 @@ --- -title: "net_listening" +title: Linea net_listening +sidebar_label: net_listening +description: Returns true if the client is actively listening for network connections on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `net_listening` -import Description from "/services/reference/_partials/_net_listening-description.mdx" +import Description from '/services/reference/_partials/_net_listening-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx" +import Parameters from '/services/reference/_partials/_net_listening-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx" +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx" +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "./_net_listening-request.mdx" +import Request from './_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx" +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/net_peercount.mdx b/services/reference/linea/json-rpc-methods/net_peercount.mdx index c0246b44d39..357314d8099 100644 --- a/services/reference/linea/json-rpc-methods/net_peercount.mdx +++ b/services/reference/linea/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,41 @@ --- -title: "net_peerCount" +title: Linea net_peerCount +sidebar_label: net_peerCount +description: Returns the number of peers currently connected to the client on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `net_peerCount` -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Parameters from '/services/reference/_partials/_net_peercount-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/net_version.mdx b/services/reference/linea/json-rpc-methods/net_version.mdx index 1d6c0080c60..c8e1f98ecbc 100644 --- a/services/reference/linea/json-rpc-methods/net_version.mdx +++ b/services/reference/linea/json-rpc-methods/net_version.mdx @@ -1,40 +1,41 @@ --- -title: "net_version" +title: Linea net_version +sidebar_label: net_version +description: Returns the chainId as a decimal on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `net_version` -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Parameters from '/services/reference/_partials/_net_version-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/linea/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index ab59c7e9658..c2bf3b7f1df 100644 --- a/services/reference/linea/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/linea/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/linea/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/linea/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index 1f212c0501d..a67b58bf61f 100644 --- a/services/reference/linea/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/linea/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/linea/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/linea/json-rpc-methods/subscription-methods/eth_subscribe.mdx index cf6545937b8..74c457f3a0d 100644 --- a/services/reference/linea/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/linea/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,17 +1,20 @@ --- -title: "eth_subscribe" +title: Linea eth_subscribe +sidebar_label: eth_subscribe --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx' @@ -21,24 +24,24 @@ The `newPendingTransactions` event is only available on Linea Sepolia. ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx" +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/linea/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 6fe9ca4660e..d5ce98cab89 100644 --- a/services/reference/linea/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/linea/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,43 @@ --- -title: "eth_unsubscribe" +title: Linea eth_unsubscribe +sidebar_label: eth_unsubscribe --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx" +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/subscription-methods/index.md b/services/reference/linea/json-rpc-methods/subscription-methods/index.md index 33a8804d49c..51e19dfbb9a 100644 --- a/services/reference/linea/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/linea/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,10 @@ --- -title: "Subscription methods" +title: Linea subscription methods +sidebar_label: Subscription methods +sidebar_key: linea-subscription-methods --- -# Subscription methods +# Linea subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/linea/json-rpc-methods/trace-methods/_trace_block-request.mdx b/services/reference/linea/json-rpc-methods/trace-methods/_trace_block-request.mdx index 64cb8379b31..63748532f78 100644 --- a/services/reference/linea/json-rpc-methods/trace-methods/_trace_block-request.mdx +++ b/services/reference/linea/json-rpc-methods/trace-methods/_trace_block-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/trace-methods/_trace_transaction-request.mdx b/services/reference/linea/json-rpc-methods/trace-methods/_trace_transaction-request.mdx index 539fdc69c0c..4dc9bb66bd9 100644 --- a/services/reference/linea/json-rpc-methods/trace-methods/_trace_transaction-request.mdx +++ b/services/reference/linea/json-rpc-methods/trace-methods/_trace_transaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://linea-mainnet.infura.io/v3/ \ diff --git a/services/reference/linea/json-rpc-methods/trace-methods/index.md b/services/reference/linea/json-rpc-methods/trace-methods/index.md index 2c93b9a5953..702b78c1ebd 100644 --- a/services/reference/linea/json-rpc-methods/trace-methods/index.md +++ b/services/reference/linea/json-rpc-methods/trace-methods/index.md @@ -1,8 +1,10 @@ --- -title: "Trace methods" +title: Linea trace methods +sidebar_label: Trace methods +sidebar_key: linea-trace-methods --- -# Trace methods +# Linea trace methods Infura provides access to the following trace API methods to allow users to gain insights into the execution of smart contracts and transactions: @@ -44,20 +46,20 @@ smart contract transaction. Excludes precompiled contracts. ] ``` -| Key |Value | -|---------------------|-----------------------------------------------------------------------------------------------------------| -| `action` | Transaction details. | -| `callType` | Whether the transaction is `call` or `create`. | -| `from` | Address of the transaction sender. | -| `gas` | Gas provided by sender. | -| `input` | Transaction data. | -| `to` | Target of the transaction. | -| `value` | Value transferred in the transaction. | -| `result` | Transaction result. | -| `gasUsed` | Gas used by the transaction. Includes any refunds of unused gas. | -| `output` | Return value of the contract call. Contains only the actual value sent by a `RETURN` operation. If a `RETURN` was not executed, the output is empty bytes. | -| `subTraces` | Traces of contract calls made by the transaction. | -| `traceAddress` | Tree list address of where the call occurred, address of the parents, and order of the current sub call. | -| `transactionHash` | Hash of the transaction. | -| `transactionPosition`| Transaction position. | -| `type` | Whether the transaction is a `CALL` or `CREATE` series operation. | +| Key | Value | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `action` | Transaction details. | +| `callType` | Whether the transaction is `call` or `create`. | +| `from` | Address of the transaction sender. | +| `gas` | Gas provided by sender. | +| `input` | Transaction data. | +| `to` | Target of the transaction. | +| `value` | Value transferred in the transaction. | +| `result` | Transaction result. | +| `gasUsed` | Gas used by the transaction. Includes any refunds of unused gas. | +| `output` | Return value of the contract call. Contains only the actual value sent by a `RETURN` operation. If a `RETURN` was not executed, the output is empty bytes. | +| `subtraces` | Traces of contract calls made by the transaction. | +| `traceAddress` | Tree list address of where the call occurred, address of the parents, and order of the current sub call. | +| `transactionHash` | Hash of the transaction. | +| `transactionPosition` | Transaction position. | +| `type` | Whether the transaction is a `CALL` or `CREATE` series operation. | diff --git a/services/reference/linea/json-rpc-methods/trace-methods/trace_block.mdx b/services/reference/linea/json-rpc-methods/trace-methods/trace_block.mdx index bbad00b8800..c57e5c6e09b 100644 --- a/services/reference/linea/json-rpc-methods/trace-methods/trace_block.mdx +++ b/services/reference/linea/json-rpc-methods/trace-methods/trace_block.mdx @@ -1,40 +1,43 @@ --- -title: "trace_block" +title: Linea trace_block +sidebar_label: trace_block --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_block-description.mdx"; +import Description from '/services/reference/_partials/trace-methods/_trace_block-description.mdx' + +# `trace_block` ## Parameters -import Params from "../_eth_block-parameter.mdx"; +import Params from '../_eth_block-parameter.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_block-returns.mdx"; +import Returns from '/services/reference/_partials/trace-methods/_trace_block-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_block-example.mdx"; +import Example from '/services/reference/_partials/trace-methods/_trace_block-example.mdx' ### Request -import Request from "./_trace_block-request.mdx"; +import Request from './_trace_block-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_block-response.mdx"; +import Response from '/services/reference/_partials/trace-methods/_trace_block-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/trace-methods/trace_transaction.mdx b/services/reference/linea/json-rpc-methods/trace-methods/trace_transaction.mdx index f043c2b194f..5d8df87196f 100644 --- a/services/reference/linea/json-rpc-methods/trace-methods/trace_transaction.mdx +++ b/services/reference/linea/json-rpc-methods/trace-methods/trace_transaction.mdx @@ -1,40 +1,43 @@ --- -title: "trace_transaction" +title: Linea trace_transaction +sidebar_label: trace_transaction --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/trace-methods/_trace_transaction-description.mdx" +import Description from '/services/reference/_partials/trace-methods/_trace_transaction-description.mdx' + +# `trace_transaction` ## Parameters -import Params from "/services/reference/_partials/trace-methods/_trace_transaction-parameters.mdx" +import Params from '/services/reference/_partials/trace-methods/_trace_transaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/trace-methods/_trace_transaction-returns.mdx" +import Returns from '/services/reference/_partials/trace-methods/_trace_transaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/trace-methods/_trace_transaction-example.mdx" +import Example from '/services/reference/_partials/trace-methods/_trace_transaction-example.mdx' ### Request -import Request from "./_trace_transaction-request.mdx" +import Request from './_trace_transaction-request.mdx' ### Response -import Response from "/services/reference/_partials/trace-methods/_trace_transaction-response.mdx" +import Response from '/services/reference/_partials/trace-methods/_trace_transaction-response.mdx' diff --git a/services/reference/linea/json-rpc-methods/web3_clientversion.mdx b/services/reference/linea/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..af4cb76e0a3 100644 --- a/services/reference/linea/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/linea/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,41 @@ --- -title: "web3_clientVersion" +title: Linea web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns the current client version on Linea. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +# `web3_clientVersion` -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Parameters from '/services/reference/_partials/_web3_clientversion-parameters.mdx' - + ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/linea/quickstart.md b/services/reference/linea/quickstart.md index 6e41331fdcb..2e61d9b8e71 100644 --- a/services/reference/linea/quickstart.md +++ b/services/reference/linea/quickstart.md @@ -1,11 +1,12 @@ --- description: Linea quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Linea quickstart This quickstart guide will help you set up and make calls on the Linea network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Line ## Prerequisites -- Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Linea network enabled. +- Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Linea network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://linea-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://linea-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://linea-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://linea-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://linea-mainnet.infura.io/v3/" + 'https://linea-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,8 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Polygon, Optimism, IPFS, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. - -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/mantle/index.md b/services/reference/mantle/index.md index a8c150a8c15..d51dce4301a 100644 --- a/services/reference/mantle/index.md +++ b/services/reference/mantle/index.md @@ -32,27 +32,30 @@ See also the [official Mantle documentation](https://docs-v2.mantle.xyz/) for mo Select one of the following options to get started with the Mantle network: ## Partners and privacy policies -The following partner provides access to Mantle network: +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. -- 0xFury ([Privacy policy](https://0xfury.com/privacy.php)) +The following partner provides access to the Mantle network: + +- 0xFury ([Privacy policy](https://0xfury.com/privacy)) +- Bware Labs ([Terms of Use](https://bwarelabs.com/terms), [Privacy Policy](https://bwarelabs.com/privacy)) diff --git a/services/reference/mantle/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_accounts-request.mdx index 5fa63ac4b5a..e7d62c8c1a0 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_blocknumber-request.mdx index 1df1b447c31..1c8cff412a3 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_call-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_call-request.mdx index 2048eddec18..9df3373ed12 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_chainid-request.mdx index 9ffe3427280..89560b70907 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_estimategas-request.mdx index 74f9f44851d..5a098f1b000 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_feehistory-request.mdx index c638aa884d0..d7ec1b270a2 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gasprice-request.mdx index d31a5f4dad6..aac7ecedfdb 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getbalance-request.mdx index e7ecee338ff..43971953a25 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getblockbyhash-request.mdx index 916bce9d593..41dcd2ba114 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getblockbynumber-request.mdx index a392646c776..f2cbfec1723 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 0573b9a196f..9d7d2ace8ea 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 9e94a2a216f..f08cec6c198 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getcode-request.mdx index 8863a82a427..c935b7a68a4 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getlogs-request.mdx index 1ca4396a10f..b5d2db2fd23 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getproof-request.mdx index dbef6a37fda..d970a44e7c3 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getstorageat-request.mdx index 11803ad70fc..8b40b60a2b5 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index bfc3009f78e..27ee1530e34 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 1f3706d6baf..3291ea76179 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index e2a78ebdefa..23c1108a5c1 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gettransactioncount-request.mdx index d2f05341d9b..bfc308c16ca 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 95371568ed5..dfabe77f99c 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index 76a1a743312..fbb51d9d474 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index 2814c1cb30d..f25f587ba91 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index f925683168a..94db48b6119 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 8f7b44196ab..3fd975d161a 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 70f989a0400..ba590f39798 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://mantle-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/mantle/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_protocolversion-request.mdx index 6c729ff8771..3988137d13c 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_sendrawtransaction-request.mdx index f5129d02a20..f32d71069d2 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_submitwork-request.mdx index f2c699eab4f..676282ee574 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/mantle/json-rpc-methods/_eth_syncing-request.mdx index ccf02866778..febb5682229 100644 --- a/services/reference/mantle/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_net_listening-request.mdx b/services/reference/mantle/json-rpc-methods/_net_listening-request.mdx index e65fb29f253..10a9ce21460 100644 --- a/services/reference/mantle/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_net_peercount-request.mdx b/services/reference/mantle/json-rpc-methods/_net_peercount-request.mdx index 5e222a71e5c..c5de1a53ba0 100644 --- a/services/reference/mantle/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_net_version-request.mdx b/services/reference/mantle/json-rpc-methods/_net_version-request.mdx index 00ac38df250..f9bf7c701a1 100644 --- a/services/reference/mantle/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/mantle/json-rpc-methods/_web3_clientversion-request.mdx index 79e39c8ed29..517e63ef94e 100644 --- a/services/reference/mantle/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/mantle/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ diff --git a/services/reference/mantle/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/mantle/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..14feecfad79 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..eec6ff9af96 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..0a6d7bc8bfa --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/mantle/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..126ee487d24 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/mantle/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..a1d244e145b --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/index.md b/services/reference/mantle/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..167825de357 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Mantle bundler methods +sidebar_label: Bundler methods +sidebar_key: mantle-bundler-methods +description: Mantle bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Mantle mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..e23f2f9f6e0 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..dfb24c91dfa --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/mantle/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..a4b855fb2fd --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/mantle/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_storagerangeat-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_storagerangeat-request.mdx new file mode 100644 index 00000000000..c1d3cb568cb --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_storagerangeat-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x'{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_traceblock-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblock-request.mdx new file mode 100644 index 00000000000..01a400151f0 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblock-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x'{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx new file mode 100644 index 00000000000..8c4a66ae0f1 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash","params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx new file mode 100644 index 00000000000..1c1ea3ab924 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ \ +-x '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_tracecall-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_tracecall-request.mdx new file mode 100644 index 00000000000..8a317257343 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_tracecall-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/_debug_tracetransaction-request.mdx b/services/reference/mantle/json-rpc-methods/debug/_debug_tracetransaction-request.mdx new file mode 100644 index 00000000000..d93bbb55779 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/_debug_tracetransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://mantle-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.md b/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.md deleted file mode 100644 index ab902813796..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -description: debug_storageRangeAt API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_storageRangeAt - -Returns the contract storage for the specified range. - -## Parameters - -- `blockHash` : (string) _[required]_ hash of the block to trace. -- `txIndex`: (number) _[required]_ transaction index from which to start. -- `address`: (string) _[required]_ contract address. -- `startKey`: (string) _[required]_ - hash of the storage key at which to start. -- `limit`: (number) _[required]_ number of storage entries to return. - -## Returns - -An object with the storage hash values, and for each of them the key and value it represents: - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x'{"jsonrpc": "2.0", "method": "debug_storageRangeAt", "params": ["0x7aaff18735842066baee6a2eb53961a69e67f5e012072c81c05a0fd793069a6c", 0, "0x371c7ec6D8039ff7933a2AA28EB827Ffe1F52f07", "0x0000000000000000000000000000000000000000000000000000000000000000", 1], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "storage": { - "0x0001187ffafb4707176f1c510f173cdcc2a48cb15bdc894c424897555968a831": { - "key": "0x85929f3b98e0d49f6ba064139f82d0fa9b5cf0eaf629d07b9a7301e222a63173", - "value": "0x00000000000000000000000000000000000000000000000000000000b478ed24" - } - }, - "nextKey": "0x000b5c2024e6480c554272610fdfb9437f2aee44f6f04d396469e6adbcedc03b" - } -} -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.mdx new file mode 100644 index 00000000000..6e0b3f5a3b4 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_storagerangeat.mdx @@ -0,0 +1,44 @@ +--- +description: Return the contract storage for the specified range. +title: Mantle debug_storageRangeAt +sidebar_label: debug_storageRangeAt +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_storageRangeAt` + +import Description from '/services/reference/_partials/debug-methods/_debug_storagerangeat-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_storagerangeat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_storagerangeat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_storagerangeat-example.mdx' + + + +### Request + +import Request from './_debug_storagerangeat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_storagerangeat-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.md b/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.md deleted file mode 100644 index e78ee5b54d7..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: debug_traceBlock API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceBlock - -Returns full trace of all invoked opcodes of all transactions included in the block. - -## Parameters - -- `block`: (string) RLP of the block -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x'{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "id": 1, - "jsonrpc": "2.0", - "result": [ - { - "result": { - "from": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3", - "gas": "0x2d48c", - "gasUsed": "0xc7ab", - "to": "0x55d398326f99059ff775485246999027b3197955", - "input": "0xa9059cbb0000000000000000000000003b9f33b3a9d382fa60283c555bde8f78855957be00000000000000000000000000000000000000000000000d4e7f4f79da7c0000", - "output": "0x0000000000000000000000000000000000000000000000000000000000000001", - "value": "0x0", - "type": "CALL" - } - } - ] -} -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.mdx new file mode 100644 index 00000000000..2f58b8e0219 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_traceblock.mdx @@ -0,0 +1,44 @@ +--- +description: Return a full trace of all invoked opcodes of all transactions included in the block. +title: Mantle debug_traceBlock +sidebar_label: debug_traceBlock +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlock` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblock-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblock-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblock-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblock-example.mdx' + + + +### Request + +import Request from './_debug_traceblock-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblock-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.md b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.md deleted file mode 100644 index ac5f46934bf..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -description: debug_traceBlockByHash API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceBlockByHash - -Returns tracing results by executing all transactions in the block specified by the block hash. - -## Parameters - -- `blockHash`: (string) _[required]_ hash of the block to trace. -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xec8cb29209d9170b31008738ec9e80acc22257249cfd0f4bce19590cd09834c8", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantlemainnet.infura.io/ws/v3/YOUR-API-KEY -x'{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xec8cb29209d9170b31008738ec9e80acc22257249cfd0f4bce19590cd09834c8", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "result": { - "from": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0001", - "gas": "0xee8c8", - "gasUsed": "0xd7f9", - "to": "0x4200000000000000000000000000000000000015", - "input": "0x015d8eb900000000000000000000000000000000000000000000000000000000012c62af000000000000000000000000000000000000000000000000000000006621c18b00000000000000000000000000000000000000000000000000000001de9ff92bbca330c2c309ce531df6a0861dfbb166848c5634054dc1552c9b54e6f98a83b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f40d796917ffb642bd2e2bdd2c762a5e40fd74900000000000000000000000000000000000000000000000000000000000000bc0000000000000000000000000000000000000000000000000000000000002710", - "calls": [ - { - "from": "0x4200000000000000000000000000000000000015", - "gas": "0xe9a0d", - "gasUsed": "0x6af8", - "to": "0xc0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d3c0d30015", - "input": "0x015d8eb900000000000000000000000000000000000000000000000000000000012c62af000000000000000000000000000000000000000000000000000000006621c18b00000000000000000000000000000000000000000000000000000001de9ff92bbca330c2c309ce531df6a0861dfbb166848c5634054dc1552c9b54e6f98a83b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f40d796917ffb642bd2e2bdd2c762a5e40fd74900000000000000000000000000000000000000000000000000000000000000bc0000000000000000000000000000000000000000000000000000000000002710", - "value": "0x0", - "type": "DELEGATECALL" - } - ], - "value": "0x0", - "type": "CALL" - } - } -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.mdx new file mode 100644 index 00000000000..40986cd30ac --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the block specified by the block hash. +title: Mantle debug_traceBlockByHash +sidebar_label: debug_traceBlockByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByHash` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.md b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.md deleted file mode 100644 index 27876e4bd98..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -description: debug_traceBlockByNumber API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceBlockByNumber - -Returns tracing results by executing all transactions in the specified block number. - -## Parameters - -- `blockNumber`: (string) _[required]_ block number as a hexidecimal string, or one of the string tags `latest`, `earliest` - , or `pending`, as [described in the default block parameters](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByNumber", "params": ["0x4d0c", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByNumber", "params": ["0x4d0c", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "result": { - "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", - "gas": "0x5208", - "gasUsed": "0x5208", - "input": "0x", - "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", - "type": "CALL", - "value": "0x2ca186f5fda8004" - } - }, - { - "result": { - "from": "0x25f2650cc9e8ad863bf5da6a7598e24271574e29", - "gas": "0xfe0e", - "gasUsed": "0xafee", - "input": "0xd0e30db0", - "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", - "type": "CALL", - "value": "0x2386f26fc10000" - } - } - ... - ] -} -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.mdx new file mode 100644 index 00000000000..dd23dfcb7c4 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_traceblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the specified block number. +title: Mantle debug_traceBlockByNumber +sidebar_label: debug_traceBlockByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByNumber` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.md b/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.md deleted file mode 100644 index 856786a7b00..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -description: debug_traceCall API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceCall - -Returns the number of possible tracing result by executing an `eth_call` within the context of the -given block execution. - -## Parameters - -- Transaction object with the following fields: - - `from`: (string) address (20 bytes) the transaction is sent from. - - `to`: (string) _[required]_ address (20 bytes) the transaction is directed to. - - `gas`: (string) hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero - gas, but this parameter may be needed by some executions. - - `gasPrice`: (string) hexadecimal value of the `gasPrice` used for each paid gas. - - `maxPriorityFeePerGas`: (string) maximum fee, in Wei, the sender is willing to pay per gas above the base fee. - See [EIP-1559 transactions](../../../../concepts/transaction-types.md#eip-1559-transactions). - - `maxFeePerGas`: (string) maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. - See [EIP-1559 transactions](../../../../concepts/transaction-types.md#eip-1559-transactions). - - `value`: (string) hexadecimal of the value sent with this transaction. - - `data`: (string) hash of the method signature and encoded parameters. - See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). -- `block parameter`: [_Required_] hexadecimal block number, or one of the string tags - `latest`, `earliest`, `pending`, `safe`, or `finalized`. - See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - -## Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "from": "0x0000000000000000000000000000000000000000", - "gas": "0x28cc0", - "gasUsed": "0x3635000", - "to": "0x6b175474e89094c44da98b954eedeac495271d0f", - "input": "0x70a082310000000000000000000000006e0d01a76c3cf4288372a29124a26d4353ee51be", - "value": "0x0", - "type": "CALL" - } -} -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.mdx new file mode 100644 index 00000000000..1ad1ff45320 --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_tracecall.mdx @@ -0,0 +1,44 @@ +--- +description: Returns the number of possible tracing results in the context of the given block execution. +title: Mantle debug_traceCall +sidebar_label: debug_traceCall +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceCall` + +import Description from '/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_tracecall-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx' + + + +### Request + +import Request from './_debug_tracecall-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.md b/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.md deleted file mode 100644 index 31158944c6e..00000000000 --- a/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -description: debug_traceTransaction API method ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# debug_traceTransaction - -Returns tracing results for the specified transaction. - -## Parameters - -- `transactionHash`: (string) _[required]_ hash of the block to trace. -- Optional tracing options object with the following fields: - - `tracer`: (string) _[optional]_ type of tracer. Supports [`callTracer`](index.md#calltracer) or - [`prestateTracer`](index.md##prestatetracer). - - `tracerConfig`: (object) _[optional]_ tracer configuration options: - - `onlyTopCall`: (boolean) _[optional]_ when `true`, will only trace the primary (top-level) call and not any - sub-calls. It eliminates the additional processing for each call frame. - - `timeout`: (string) _[optional]_ string of decimals numbers to set the timeout. The default is 5 seconds. The maximum - timeout is 10 seconds. Valid units are `ns`, `us`, `ms`, `s`. For example, `3s30ms`. - -# Returns - -Depending on the specified tracer type, returns a [`callTracer`](index.md##calltracer) object or -[`prestateTracer`](index.md#prestatetracer) object. - -## Example - -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). - -### Request - - - - -```bash -curl https://mantle-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0xdcecf3f9fc68c92276d6c4b40c17b185f8a3fcb9d1a959a495d38d480782404b", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "debug_traceTransaction", "params": ["0xdcecf3f9fc68c92276d6c4b40c17b185f8a3fcb9d1a959a495d38d480782404b", {"tracer": "callTracer"}], "id": 1}' -``` - - - - -### Result - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "from": "0x3e9bde7e023b4f9de05975b566cd41c771f3fb49", - "gas": "0x3fdd6", - "gasUsed": "0xd418142", - "to": "0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9", - "input": "0x095ea7b30000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "output": "0x0000000000000000000000000000000000000000000000000000000000000001", - "calls": [ - { - "from": "0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9", - "gas": "0x3d278", - "gasUsed": "0x79be", - "to": "0x9aff718f2a4ed4c310d6d2da0d2fb30a5f6a9ddc", - "input": "0x095ea7b30000000000000000000000002f6f07cdcf3588944bf4c42ac74ff24bf56e7590ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "output": "0x0000000000000000000000000000000000000000000000000000000000000001", - "value": "0x0", - "type": "DELEGATECALL" - } - ], - "value": "0x0", - "type": "CALL" - } -} -``` diff --git a/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.mdx b/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.mdx new file mode 100644 index 00000000000..2f2df98f1cc --- /dev/null +++ b/services/reference/mantle/json-rpc-methods/debug/debug_tracetransaction.mdx @@ -0,0 +1,44 @@ +--- +description: Returns tracing results for the specified transaction. +title: Mantle debug_traceTransaction +sidebar_label: debug_traceTransaction +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceTransaction` + +import Description from '/services/reference/_partials/debug-methods/_debug_tracetransaction-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_tracetransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracetransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracetransaction-example.mdx' + + + +### Request + +import Request from './_debug_tracetransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracetransaction-response.mdx' + + diff --git a/services/reference/mantle/json-rpc-methods/debug/index.md b/services/reference/mantle/json-rpc-methods/debug/index.md index f210730d4e5..7f855e0d601 100644 --- a/services/reference/mantle/json-rpc-methods/debug/index.md +++ b/services/reference/mantle/json-rpc-methods/debug/index.md @@ -1,18 +1,20 @@ --- description: Mantle debug methods. +sidebar_label: Debug methods +sidebar_key: mantle-debug-methods --- -# Debug methods +# Mantle debug methods The debug API methods allow you to inspect and debug the network. Infura supports the following debug methods on the Mantle network: -- [`debug_storageRangeAt`](debug_storagerangeat.md) -- [`debug_traceBlock`](debug_traceblock.md) -- [`debug_traceBlockByHash`](debug_traceblockbyhash.md) -- [`debug_traceBlockByNumber`](debug_traceblockbynumber.md) -- [`debug_traceTransaction`](debug_tracetransaction.md) -- [`debug_traceCall`](debug_tracecall.md) +- [`debug_storageRangeAt`](debug_storagerangeat.mdx) +- [`debug_traceBlock`](debug_traceblock.mdx) +- [`debug_traceBlockByHash`](debug_traceblockbyhash.mdx) +- [`debug_traceBlockByNumber`](debug_traceblockbynumber.mdx) +- [`debug_traceTransaction`](debug_tracetransaction.mdx) +- [`debug_traceCall`](debug_tracecall.mdx) ## Debug tracing types diff --git a/services/reference/mantle/json-rpc-methods/eth_accounts.mdx b/services/reference/mantle/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..0668bb47e78 100644 --- a/services/reference/mantle/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Mantle eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Mantle accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_blocknumber.mdx b/services/reference/mantle/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..1392013156b 100644 --- a/services/reference/mantle/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Mantle eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Mantle block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_call.mdx b/services/reference/mantle/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..585df4ebb60 100644 --- a/services/reference/mantle/json-rpc-methods/eth_call.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Mantle eth_call +sidebar_label: eth_call +description: Executes a Mantle call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_chainid.mdx b/services/reference/mantle/json-rpc-methods/eth_chainid.mdx index a6f446ad268..5e18012a3d7 100644 --- a/services/reference/mantle/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Mantle eth_chainId +sidebar_label: eth_chainId +description: Returns the Mantle chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_coinbase.mdx b/services/reference/mantle/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/mantle/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/mantle/json-rpc-methods/eth_estimategas.mdx b/services/reference/mantle/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..18bdcf68bc3 100644 --- a/services/reference/mantle/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Mantle eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Mantle transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_feehistory.mdx b/services/reference/mantle/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..150290775eb 100644 --- a/services/reference/mantle/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Mantle eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Mantle gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gasprice.mdx b/services/reference/mantle/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..b2c5ee284ac 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Mantle eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Mantle gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getbalance.mdx b/services/reference/mantle/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..479cd5517bc 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Mantle eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Mantle address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getbalancevalues.mdx b/services/reference/mantle/json-rpc-methods/eth_getbalancevalues.mdx index 1eab1ed18aa..efd22ad3718 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getbalancevalues.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getbalancevalues.mdx @@ -1,9 +1,12 @@ --- -title: "eth_getBalanceValues" +title: Mantle eth_getBalanceValues +sidebar_label: eth_getBalanceValues --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `eth_getBalanceValues` Returns the parameters that control an accounts rebasing ETH balance. @@ -31,12 +34,12 @@ Object with the following fields: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ @@ -49,7 +52,7 @@ curl https://mantle-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "eth_getBalanceValues", "params": ["0xd071acb641553a2e205181a42aa3a8ace97dae6d", "latest"], "id": 1}' +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBalanceValues", "params": ["0xd071acb641553a2e205181a42aa3a8ace97dae6d", "latest"], "id": 1}' ``` diff --git a/services/reference/mantle/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/mantle/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..0dcb2ec8b44 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Mantle eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Mantle block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/mantle/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..4eb74386df8 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Mantle eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Mantle block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getblockrange.md b/services/reference/mantle/json-rpc-methods/eth_getblockrange.md index b3fbb40b66a..96dacbd2888 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getblockrange.md +++ b/services/reference/mantle/json-rpc-methods/eth_getblockrange.md @@ -5,7 +5,7 @@ description: eth_getBlockRange API method import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# eth_getBlockRange +# `eth_getBlockRange` Returns the block information for blocks within a specified range. @@ -46,12 +46,12 @@ Array of block objects: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ @@ -95,9 +95,7 @@ wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. "stateRoot": "0xd3ac40854cd2ac17d8effeae6065cea990b04be714f7061544973feeb2f1c95f", "timestamp": "0x618d4769", "totalDifficulty": "0x3", - "transactions": [ - "0x5e77a04531c7c107af1882d76cbff9486d0a9aa53701c30888509d4f5f2b003a" - ], + "transactions": ["0x5e77a04531c7c107af1882d76cbff9486d0a9aa53701c30888509d4f5f2b003a"], "transactionsRoot": "0x19f5efd0d94386e72fcb3f296f1cb2936d017c37487982f76f09c591129f561f", "uncles": [] }, @@ -119,9 +117,7 @@ wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. "stateRoot": "0x87026f3a614318ae24bcef6bc8f7564479afbbbe2b1fb189bc133a5de5a2b0f8", "timestamp": "0x618d8837", "totalDifficulty": "0x5", - "transactions": [ - "0xaf6ed8a6864d44989adc47c84f6fe0aeb1819817505c42cde6cbbcd5e14dd317" - ], + "transactions": ["0xaf6ed8a6864d44989adc47c84f6fe0aeb1819817505c42cde6cbbcd5e14dd317"], "transactionsRoot": "0xa39c4d0d2397f8fcb1683ba833d4ab935cd2f4c5ca6f56a7d9a45b9904ea1c69", "uncles": [] } diff --git a/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..9373e55aafd 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Mantle eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..3f5dcc873ce 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Mantle eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getcode.mdx b/services/reference/mantle/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..dd659e575db 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Mantle eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getlogs.mdx b/services/reference/mantle/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..08eecfad403 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Mantle eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getproof.mdx b/services/reference/mantle/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..4c3d20c6c3a 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Mantle eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getstorageat.mdx b/services/reference/mantle/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..2b275190cdd 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Mantle eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..aa5bef245de 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Mantle eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..333fd9e1dca 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Mantle eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..27e270310c9 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Mantle eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/mantle/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..18d5d7eba3f 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Mantle eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/mantle/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..d43d629efd6 100644 --- a/services/reference/mantle/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Mantle eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/mantle/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..4d4704cb7bc 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Mantle eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/mantle/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..14371a24bd3 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Mantle eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..268ab135d66 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Mantle eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..c81b74fafc1 100644 --- a/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Mantle eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/mantle/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..c404eb07677 100644 --- a/services/reference/mantle/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Mantle eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_protocolversion.mdx b/services/reference/mantle/json-rpc-methods/eth_protocolversion.mdx index 02b5da95bff..157e3079add 100644 --- a/services/reference/mantle/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: Mantle eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/mantle/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..31fcff66382 100644 --- a/services/reference/mantle/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Mantle eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/mantle/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/mantle/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/mantle/json-rpc-methods/eth_sign.mdx b/services/reference/mantle/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/mantle/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/mantle/json-rpc-methods/eth_submitwork.mdx b/services/reference/mantle/json-rpc-methods/eth_submitwork.mdx index 3e302cecfe3..640d5fd36e0 100644 --- a/services/reference/mantle/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: Mantle eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx" +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/eth_syncing.mdx b/services/reference/mantle/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..00549be4c73 100644 --- a/services/reference/mantle/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/mantle/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Mantle eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/index.md b/services/reference/mantle/json-rpc-methods/index.md index 548f086c03d..1a7741abec9 100644 --- a/services/reference/mantle/json-rpc-methods/index.md +++ b/services/reference/mantle/json-rpc-methods/index.md @@ -1,3 +1,8 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: mantle-json-rpc-api +--- + +# Mantle JSON-RPC API Mantle supports a subset [Ethereum JSON-RPC methods](../../ethereum/json-rpc-methods/index.md). diff --git a/services/reference/mantle/json-rpc-methods/net_peercount.mdx b/services/reference/mantle/json-rpc-methods/net_peercount.mdx index c0246b44d39..689b99c4ae1 100644 --- a/services/reference/mantle/json-rpc-methods/net_peercount.mdx +++ b/services/reference/mantle/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Mantle net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/net_version.mdx b/services/reference/mantle/json-rpc-methods/net_version.mdx index 1d6c0080c60..1c6b6c671ad 100644 --- a/services/reference/mantle/json-rpc-methods/net_version.mdx +++ b/services/reference/mantle/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Mantle net_version +sidebar_label: net_version +description: Returns network ID on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/mantle/json-rpc-methods/rollup_gasprices.md b/services/reference/mantle/json-rpc-methods/rollup_gasprices.md index 27dfb534a55..a035c32c49c 100644 --- a/services/reference/mantle/json-rpc-methods/rollup_gasprices.md +++ b/services/reference/mantle/json-rpc-methods/rollup_gasprices.md @@ -1,11 +1,11 @@ --- -description: rollup_gasPrices API method +description: Returns the current layer 1 (L1) and layer 2 (L2) gas prices. --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# rollup_gasPrices +# `rollup_gasPrices` Returns the current layer 1 (L1) and layer 2 (L2) gas prices. @@ -22,12 +22,12 @@ Gas price object: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ @@ -40,7 +40,7 @@ curl https://mantle-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "rollup_gasPrices", "params": [], "id": 1}' +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "rollup_gasPrices", "params": [], "id": 1}' ``` diff --git a/services/reference/mantle/json-rpc-methods/rollup_getinfo.md b/services/reference/mantle/json-rpc-methods/rollup_getinfo.md index 8d9f3807ab2..ceecdedd4d6 100644 --- a/services/reference/mantle/json-rpc-methods/rollup_getinfo.md +++ b/services/reference/mantle/json-rpc-methods/rollup_getinfo.md @@ -1,11 +1,11 @@ --- -description: rollup_getInfo API method +description: Returns the information about a node. --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# rollup_getInfo +# `rollup_getInfo` Returns the information about a node. @@ -24,16 +24,16 @@ Node information object: - `queueIndex`: Index in the canonical transaction chain of the last L1 to L2 message ingested. - `index`: Index of the last L2 transaction processed. - `verifiedIndex`: Index of the last transaction that was ingested from a batch that was posted - the to L1. + to L1. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://mantle-mainnet.infura.io/v3/ \ @@ -46,7 +46,7 @@ curl https://mantle-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0", "method": "rollup_getInfo", "params": [], "id": 1}' +wscat -c wss://mantle-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "rollup_getInfo", "params": [], "id": 1}' ``` @@ -77,9 +77,7 @@ wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0" "stateRoot": "0xd3ac40854cd2ac17d8effeae6065cea990b04be714f7061544973feeb2f1c95f", "timestamp": "0x618d4769", "totalDifficulty": "0x3", - "transactions": [ - "0x5e77a04531c7c107af1882d76cbff9486d0a9aa53701c30888509d4f5f2b003a" - ], + "transactions": ["0x5e77a04531c7c107af1882d76cbff9486d0a9aa53701c30888509d4f5f2b003a"], "transactionsRoot": "0x19f5efd0d94386e72fcb3f296f1cb2936d017c37487982f76f09c591129f561f", "uncles": [] }, @@ -101,9 +99,7 @@ wscat -c wss://mantle-mainnet.infura.io/ws/v3/YOUR-API-KEY -x '{"jsonrpc": "2.0" "stateRoot": "0x87026f3a614318ae24bcef6bc8f7564479afbbbe2b1fb189bc133a5de5a2b0f8", "timestamp": "0x618d8837", "totalDifficulty": "0x5", - "transactions": [ - "0xaf6ed8a6864d44989adc47c84f6fe0aeb1819817505c42cde6cbbcd5e14dd317" - ], + "transactions": ["0xaf6ed8a6864d44989adc47c84f6fe0aeb1819817505c42cde6cbbcd5e14dd317"], "transactionsRoot": "0xa39c4d0d2397f8fcb1683ba833d4ab935cd2f4c5ca6f56a7d9a45b9904ea1c69", "uncles": [] } diff --git a/services/reference/mantle/json-rpc-methods/web3_clientversion.mdx b/services/reference/mantle/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..0dcdce305b6 100644 --- a/services/reference/mantle/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/mantle/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Mantle web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Mantle. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/mantle/quickstart.md b/services/reference/mantle/quickstart.md index 8fc3000e590..c9e78f964d7 100644 --- a/services/reference/mantle/quickstart.md +++ b/services/reference/mantle/quickstart.md @@ -1,11 +1,12 @@ --- -description: Celo quickstart guide. +description: Mantle quickstart guide. sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Mantle quickstart This quickstart guide will help you set up and make calls on the Mantle network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Mant ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Mantle network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Mantle network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -32,7 +33,7 @@ curl https://mantle-mainnet.infura.io/v3/ \ ### Node (JavaScript) -In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. #### Node Fetch @@ -47,25 +48,25 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://mantle-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://mantle-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://mantle-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://mantle-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [NPM](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://mantle-mainnet.infura.io/v3/" + 'https://mantle-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,8 +196,8 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/megaeth/index.md b/services/reference/megaeth/index.md new file mode 100644 index 00000000000..9dd1fc8753b --- /dev/null +++ b/services/reference/megaeth/index.md @@ -0,0 +1,40 @@ +--- +description: MegaETH network documentation. +--- + +import CardList from "@site/src/components/CardList" + +# MegaETH + +::::note Decentralized Infrastructure Network (DIN) +MegaETH is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service. +:::: + +MegaETH is an Ethereum Layer 2 network designed for real-time execution with EVM equivalence. +For developers, EVM equivalence means existing Ethereum smart contracts and tooling work without code changes. + +::::info See also +The [official MegaETH documentation](https://docs.megaeth.com/) for more information. +:::: + +Select an option below to get started with the MegaETH network. + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..0cc434e7c82 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_call-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..4a9bc35cf6c --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_callmany-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_callmany-request.mdx new file mode 100644 index 00000000000..abe6130aaa0 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_callmany-request.mdx @@ -0,0 +1,45 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc":"2.0", + "id":1, + "method":"eth_callMany", + "params":[ + [ + { + "transactions":[ + { + "to":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "data":"0x70a08231000000000000000000000000bc0e63965946815d105e7591407704e6e1964e59" + }, + { + "to":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "data":"0x313ce567" + } + ] + } + ], + { + "blockNumber":"latest" + } + ] + }' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","id":1,"method":"eth_callMany","params":[[{"transactions":[{"to":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","data":"0x70a08231000000000000000000000000bc0e63965946815d105e7591407704e6e1964e59"},{"to":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","data":"0x313ce567"}]}],{"blockNumber":"latest"}]}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..aa9a950176b --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..09e5a57d925 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..741783f2250 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getaccount-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getaccount-request.mdx new file mode 100644 index 00000000000..8e8c0bbfeb1 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getaccount-request.mdx @@ -0,0 +1,30 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getAccount", + "params": [ + "0xA887dCB9D5f39Ef79272801d05Abdf707CFBbD1d", + "latest" + ], + "id": 1 +}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getAccount","params":["0xA887dCB9D5f39Ef79272801d05Abdf707CFBbD1d","latest"],"id":1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..77372ca9b1f --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..b692aab4ec4 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..50ac3ef67c7 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55",false], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..b9bdff9f6dc --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..e1adda416a3 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..bf931d520f0 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..3887fcfbfb8 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id":1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getrawtransactionbyhash-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getrawtransactionbyhash-request.mdx new file mode 100644 index 00000000000..34f1999e4ec --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getrawtransactionbyhash-request.mdx @@ -0,0 +1,29 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "method": "eth_getRawTransactionByHash", + "params": [ + "0x691455c4cec43d76d15af9734556efec72b4c44b557254db1bbbfeea86d103fd" + ], + "id": 1 +}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0","method":"eth_getRawTransactionByHash","params":["0x691455c4cec43d76d15af9734556efec72b4c44b557254db1bbbfeea86d103fd"],"id":1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..7218e850ef6 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..cdba9666141 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..6f2d77cf668 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..2537cbf35af --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..998646aa048 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..e232465eaad --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..98b3a07d060 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/megaeth/json-rpc-methods/_eth_submitwork-request.mdx new file mode 100644 index 00000000000..0b3420507fc --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_eth_submitwork-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_submitWork", "params": ["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_submitWork", "params": ["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_net_version-request.mdx b/services/reference/megaeth/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..3061e39a25b --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/megaeth/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..052638cdb56 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_blocknumber.mdx b/services/reference/megaeth/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..d9de2d1fd18 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest MegaETH block number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_call.mdx b/services/reference/megaeth/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..f115ef947fb --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_call.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_call +sidebar_label: eth_call +description: Executes a MegaETH call without creating a transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_callmany.mdx b/services/reference/megaeth/json-rpc-methods/eth_callmany.mdx new file mode 100644 index 00000000000..9772d985cd2 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_callmany.mdx @@ -0,0 +1,41 @@ +--- +title: MegaETH eth_callMany +sidebar_label: eth_callMany +description: Executes multiple call messages on MegaETH. +--- + +import Description from '/services/reference/_partials/_eth_callmany-description.mdx' + +# `eth_callMany` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_callmany-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_callmany-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_callmany-example.mdx' + + + +### Request + +import Request from './_eth_callmany-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_callmany-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_chainid.mdx b/services/reference/megaeth/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..4d389b02250 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_chainId +sidebar_label: eth_chainId +description: Returns the MegaETH chain ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_estimategas.mdx b/services/reference/megaeth/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..268f66a4b1e --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a MegaETH transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gasprice.mdx b/services/reference/megaeth/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..95759de6941 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current MegaETH gas price. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getaccount.mdx b/services/reference/megaeth/json-rpc-methods/eth_getaccount.mdx new file mode 100644 index 00000000000..c0fa164343c --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getaccount.mdx @@ -0,0 +1,41 @@ +--- +title: MegaETH eth_getAccount +sidebar_label: eth_getAccount +description: Returns account data for an address on MegaETH. +--- + +import Description from '/services/reference/_partials/_eth_getaccount-description.mdx' + +# `eth_getAccount` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getaccount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getaccount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getaccount-example.mdx' + + + +### Request + +import Request from './_eth_getaccount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getaccount-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getbalance.mdx b/services/reference/megaeth/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..41a8e648935 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a MegaETH address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/megaeth/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..0bc7c1965d2 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns MegaETH block information by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/megaeth/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..6cab013121e --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns MegaETH block information by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..35d8e74f01c --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..c67079bd1c2 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getcode.mdx b/services/reference/megaeth/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..b97787e0324 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getlogs.mdx b/services/reference/megaeth/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..eb6e692935d --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getrawtransactionbyhash.mdx b/services/reference/megaeth/json-rpc-methods/eth_getrawtransactionbyhash.mdx new file mode 100644 index 00000000000..6605fd67fb3 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getrawtransactionbyhash.mdx @@ -0,0 +1,41 @@ +--- +title: MegaETH eth_getRawTransactionByHash +sidebar_label: eth_getRawTransactionByHash +description: Returns the raw transaction data by hash on MegaETH. +--- + +import Description from '/services/reference/_partials/_eth_getrawtransactionbyhash-description.mdx' + +# `eth_getRawTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getrawtransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getrawtransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getrawtransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getrawtransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getrawtransactionbyhash-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_getstorageat.mdx b/services/reference/megaeth/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..c63f8bf70de --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..502571cb677 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..7d8a6f89d10 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..1ee67d8e1d1 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/megaeth/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..442287e0096 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/megaeth/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..3d8a3e489e4 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/megaeth/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..b763fac64ac --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..735edc02cfc --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..37b23905771 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..a65a2951d4c --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..f05a6c977dc --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..bf10b476af7 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..6abd0962bee --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns MegaETH logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..c030c607c9c --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..bc3dcae9af6 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..47f78f73582 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..a1fc940a9fe --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/filter-methods/index.md b/services/reference/megaeth/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..4bb3aa3bfb3 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: MegaETH filter methods +sidebar_label: Filter methods +sidebar_key: megaeth-filter-methods +description: MegaETH filter methods +--- + +# MegaETH filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/megaeth/json-rpc-methods/index.md b/services/reference/megaeth/json-rpc-methods/index.md new file mode 100644 index 00000000000..68f40045452 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/index.md @@ -0,0 +1,14 @@ +--- +title: MegaETH JSON-RPC API +description: Supported standard Ethereum methods on MegaETH. +sidebar_label: JSON-RPC API +sidebar_key: megaeth-json-rpc-api +--- + +Infura supports MegaETH Mainnet and MegaETH Testnet. + +::::info +WebSockets are supported on MegaETH Mainnet only. +:::: + +MegaETH supports the standard Ethereum JSON-RPC methods. diff --git a/services/reference/megaeth/json-rpc-methods/net_version.mdx b/services/reference/megaeth/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..9d40e6300f7 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/net_version.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH net_version +sidebar_label: net_version +description: Returns network ID on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx new file mode 100644 index 00000000000..e1449622349 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -0,0 +1,19 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx new file mode 100644 index 00000000000..c6f108d92b9 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -0,0 +1,12 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' +``` + + + diff --git a/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_subscribe.mdx new file mode 100644 index 00000000000..28949eb919d --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' + + + +### Request + +import Request from './_eth_subscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx new file mode 100644 index 00000000000..22340f1e935 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' + + + +### Request + +import Request from './_eth_unsubscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/subscription-methods/index.md b/services/reference/megaeth/json-rpc-methods/subscription-methods/index.md new file mode 100644 index 00000000000..9b0709ff942 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/subscription-methods/index.md @@ -0,0 +1,22 @@ +--- +title: MegaETH subscription methods +sidebar_label: Subscription methods +sidebar_key: megaeth-subscription-methods +description: MegaETH subscription methods +--- + +# MegaETH subscription methods + +Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. + +The following subscription methods are available: + +- [`eth_subscribe`](eth_subscribe.mdx) - Create a subscription to a particular event +- [`eth_unsubscribe`](eth_unsubscribe.mdx) - Cancel an active subscription + +:::info + +We recommend you use the WSS protocol to set up bidirectional stateful subscriptions. Stateless HTTP WebSockets are also +supported. + +::: diff --git a/services/reference/megaeth/json-rpc-methods/web3_clientversion.mdx b/services/reference/megaeth/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..cdbb6a4bbc1 --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,44 @@ +--- +title: MegaETH web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on MegaETH. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/megaeth/json-rpc-methods/web3_sha3.mdx b/services/reference/megaeth/json-rpc-methods/web3_sha3.mdx new file mode 100644 index 00000000000..8784ad99d4a --- /dev/null +++ b/services/reference/megaeth/json-rpc-methods/web3_sha3.mdx @@ -0,0 +1,53 @@ +--- +title: MegaETH web3_sha3 +sidebar_label: web3_sha3 +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `web3_sha3` + +Returns a [SHA3](https://en.wikipedia.org/wiki/SHA-3) hash of the specified data. The result value is a [Keccak-256](https://keccak.team/keccak.html) hash, not the standardized SHA3-256. + +## Parameters + +`data`: [Required] _string_ - data to convert to a SHA3 hash. + +## Returns + +`result`: _string_ - SHA3 result of the input data. + +## Example + +### Request + + + + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_sha3", "params":["0x68656c6c6f20776f726c00"], "id": 1}' +``` + + + + +```bash +wscat -c wss://megaeth-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method":"web3_sha3", "params":["0x68656c6c6f20776f726c00"], "id": 1}' +``` + + + + +### Response + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f" +} +``` diff --git a/services/reference/megaeth/quickstart.md b/services/reference/megaeth/quickstart.md new file mode 100644 index 00000000000..9df418e59d7 --- /dev/null +++ b/services/reference/megaeth/quickstart.md @@ -0,0 +1,202 @@ +--- +description: MegaETH quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from "@site/src/components/Banner" + +# MegaETH quickstart + +This quickstart guide will help you set up and make calls on the MegaETH network using the Infura endpoints. + + +Don't have an Infura account? Sign up for our free plan and start using the MegaETH network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the MegaETH network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing the endpoint with your MegaETH Mainnet endpoint from the Infura dashboard: + +```bash +curl https://megaeth-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace the endpoint with your MegaETH Mainnet endpoint from the Infura dashboard. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://megaeth-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace the endpoint with your MegaETH Mainnet endpoint from the Infura dashboard. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://megaeth-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace the endpoint with your MegaETH Mainnet endpoint from the Infura dashboard. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://megaeth-mainnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace the endpoint with your MegaETH Mainnet endpoint from the Infura dashboard. + + ```python title="index.py" + import requests + import json + + url = "https://megaeth-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {"content-type": "application/json"} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the MegaETH network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other MegaETH APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. + +Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the +[Infura community](https://community.infura.io/) for help and answers to common questions. diff --git a/services/reference/monad/index.md b/services/reference/monad/index.md new file mode 100644 index 00000000000..6bc17effc94 --- /dev/null +++ b/services/reference/monad/index.md @@ -0,0 +1,60 @@ +--- +description: Monad network documentation. +--- + +import CardList from '@site/src/components/CardList' + +# Monad + +:::note Decentralized Infrastructure Network (DIN) + +Monad is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, meaning calls to the network are routed to +[partner infrastructure providers](#partners-and-privacy-policies). + +::: + +Monad is a high-performance Ethereum-compatible L1 blockchain with a throughput of over 10,000 +transactions per second. + +Monad offers full bytecode compatibility for the Ethereum Virtual Machine (EVM), so that applications +built for Ethereum can be ported to Monad without code changes, and full Ethereum RPC compatibility, so +that infrastructure like Etherscan or The Graph can be used seamlessly. + +:::info See also +The [official Monad documentation](https://docs.monad.xyz/) for more information. +::: + +Select an option below to get started with the Monad network. + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + +The following partners provide access to the Monad network: + + + +- 0xFury ([Privacy policy](https://0xfury.com/privacy.php)) +- Alchemy ([Privacy Policy](https://legal.alchemy.com/#contract-sblyf8eub)) +- Monad foundation ([Privacy policy](https://www.monad.xyz/privacy-policy)) + diff --git a/services/reference/monad/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/monad/json-rpc-methods/_eth_accounts-request.mdx new file mode 100644 index 00000000000..39261665e8d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_accounts-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/monad/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..5a697362ab2 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_call-request.mdx b/services/reference/monad/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..cdb3aed6966 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/monad/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..6f28133741d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/monad/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..5171337a511 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/monad/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..87751082045 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]] }' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..c3d34ac2884 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..b8063de7e7a --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..0c1c1747c6d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..f9f550e68bd --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55",false], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..3d6a54ae012 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..53395589632 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..74b53b7e864 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..b4e6d922595 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..2be1785618f --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getproof-request.mdx new file mode 100644 index 00000000000..e428d0af72e --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getproof-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getProof", "id": 1, "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"]}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/monad/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..834e9f3f957 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..fe97e8017c7 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..54e5673e247 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..64684d62174 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..a79bb4f13be --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/monad/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..f550a4633f8 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_hashrate-request.mdx b/services/reference/monad/json-rpc-methods/_eth_hashrate-request.mdx new file mode 100644 index 00000000000..253680117c2 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_hashrate-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_hashrate", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/monad/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..87ffdea509e --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_mining-request.mdx b/services/reference/monad/json-rpc-methods/_eth_mining-request.mdx new file mode 100644 index 00000000000..fc07bd5bd50 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_mining-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_mining", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/monad/json-rpc-methods/_eth_protocolversion-request.mdx new file mode 100644 index 00000000000..1a9bdc2611f --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_protocolversion-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_protocolVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/monad/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..4a5128ac0b9 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/monad/json-rpc-methods/_eth_submitwork-request.mdx new file mode 100644 index 00000000000..f08add714aa --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_submitwork-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_submitWork", "params": ["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000"], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/monad/json-rpc-methods/_eth_syncing-request.mdx new file mode 100644 index 00000000000..d87880d4ca9 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_eth_syncing-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_net_listening-request.mdx b/services/reference/monad/json-rpc-methods/_net_listening-request.mdx new file mode 100644 index 00000000000..b10dca57c50 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_net_listening-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_net_peercount-request.mdx b/services/reference/monad/json-rpc-methods/_net_peercount-request.mdx new file mode 100644 index 00000000000..0f1ded066f0 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_net_peercount-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_net_version-request.mdx b/services/reference/monad/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..f1e1ae93e6f --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/monad/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..e73421643bd --- /dev/null +++ b/services/reference/monad/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/monad/json-rpc-methods/eth_accounts.mdx b/services/reference/monad/json-rpc-methods/eth_accounts.mdx new file mode 100644 index 00000000000..e2be03a83fe --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_accounts.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Monad accounts. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' + + + +### Request + +import Request from './_eth_accounts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_blocknumber.mdx b/services/reference/monad/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..262c8a1c668 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Monad block number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_call.mdx b/services/reference/monad/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..525811a0bc9 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_call.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_call +sidebar_label: eth_call +description: Executes a Monad call without creating a transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_chainid.mdx b/services/reference/monad/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..4ef19871830 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_chainId +sidebar_label: eth_chainId +description: Returns the Monad chain ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_estimategas.mdx b/services/reference/monad/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..9c51744530d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Monad transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_feehistory.mdx b/services/reference/monad/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..ecffbc86770 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Monad gas information. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gasprice.mdx b/services/reference/monad/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..5fb3aa7aad9 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Monad gas price. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getbalance.mdx b/services/reference/monad/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..4a38b7ec716 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Monad address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/monad/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..63b79c4aeb5 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Monad block information by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/monad/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..f35a1f74a8c --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Monad block information by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/monad/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..4287deff1c4 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from './_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..8283ab6695d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..317b582c204 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getcode.mdx b/services/reference/monad/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..79958d42521 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getlogs.mdx b/services/reference/monad/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..148ec2806dc --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getproof.mdx b/services/reference/monad/json-rpc-methods/eth_getproof.mdx new file mode 100644 index 00000000000..804c92e78cf --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getproof.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' + + + +### Request + +import Request from './_eth_getproof-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_getstorageat.mdx b/services/reference/monad/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..f210d8e789f --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/monad/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..ed072967451 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/monad/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..f85d3eb671d --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/monad/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..6948d6fa558 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/monad/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..e8441208814 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/monad/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..4af39ecb5d6 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/monad/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..42ee50facd5 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_protocolversion.mdx b/services/reference/monad/json-rpc-methods/eth_protocolversion.mdx new file mode 100644 index 00000000000..c363fc4f4ec --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_protocolversion.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' + + + +### Request + +import Request from './_eth_protocolversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/monad/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..384cea4c002 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/eth_syncing.mdx b/services/reference/monad/json-rpc-methods/eth_syncing.mdx new file mode 100644 index 00000000000..226545f4c8a --- /dev/null +++ b/services/reference/monad/json-rpc-methods/eth_syncing.mdx @@ -0,0 +1,44 @@ +--- +title: Monad eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/index.md b/services/reference/monad/json-rpc-methods/index.md new file mode 100644 index 00000000000..7500d271b5f --- /dev/null +++ b/services/reference/monad/json-rpc-methods/index.md @@ -0,0 +1,12 @@ +--- +title: Monad JSON-RPC API +description: Supported standard Ethereum methods on Monad network. +sidebar_label: JSON-RPC API +--- + +# Monad JSON-RPC API + +Infura supports the standard EVM-compatible JSON-RPC methods on the Monad network. + +For differences between Monad and standard Ethereum RPC behavior, refer to the +[official Monad RPC differences](https://docs.monad.xyz/reference/rpc-differences). diff --git a/services/reference/monad/json-rpc-methods/net_peercount.mdx b/services/reference/monad/json-rpc-methods/net_peercount.mdx new file mode 100644 index 00000000000..99dbe359250 --- /dev/null +++ b/services/reference/monad/json-rpc-methods/net_peercount.mdx @@ -0,0 +1,44 @@ +--- +title: Monad net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_peercount-example.mdx' + + + +### Request + +import Request from './_net_peercount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_peercount-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/net_version.mdx b/services/reference/monad/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..9ac3a7a5d7b --- /dev/null +++ b/services/reference/monad/json-rpc-methods/net_version.mdx @@ -0,0 +1,44 @@ +--- +title: Monad net_version +sidebar_label: net_version +description: Returns network ID on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/monad/json-rpc-methods/web3_clientversion.mdx b/services/reference/monad/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..1f83ace8e6c --- /dev/null +++ b/services/reference/monad/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,44 @@ +--- +title: Monad web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Monad. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/monad/quickstart.md b/services/reference/monad/quickstart.md new file mode 100644 index 00000000000..a20ee3a0929 --- /dev/null +++ b/services/reference/monad/quickstart.md @@ -0,0 +1,202 @@ +--- +description: Monad quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from '@site/src/components/Banner' + +# Monad quickstart + +This quickstart guide will help you set up and make calls on the Monad network using the Infura endpoints. + + +Don't have an Infura account? Sign up for our free plan and start using the Monad network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the Monad network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://monad-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://monad-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://monad-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://monad-mainnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://monad-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {"content-type": "application/json"} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the Monad network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other Monad APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. + +Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the +[Infura community](https://community.infura.io/) for help and answers to common questions. diff --git a/services/reference/opbnb/index.md b/services/reference/opbnb/index.md index aa97bfcef9d..c3a2cd1eb74 100644 --- a/services/reference/opbnb/index.md +++ b/services/reference/opbnb/index.md @@ -11,7 +11,7 @@ import CardList from "@site/src/components/CardList" opBNB is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). -Infura provides open beta access to the layer 2 opBNB and its layer 1 [BNB Smart Chain (BSC)](../bnb-smart-chain/index.md). During this period, there might be [feature limitations](json-rpc-methods/index.md#partner-supported-methods). +Infura provides open beta access to the layer 2 opBNB and its layer 1 [BNB Smart Chain (BSC)](../bnb-smart-chain/index.md). During this period, there might be feature limitations. Performance issues are not expected, but they are possible as we optimize and stabilize the service. Archive requests are not currently supported for opBNB: only near head requests (the last 128 blocks) are supported. Be aware of this limitation when making calls @@ -32,29 +32,33 @@ For more information, refer to the official [opBNB documentation](https://docs.b Select an option below to get started with the opBNB network. ## Partners and privacy policies +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + The following partners provide access to the opBNB network: + + - Infstones ([Privacy Policy](https://infstones.com/terms/privacy-notice)) -- NodeReal ([Privacy Policy](https://nodereal.io/privacy-policy)) +- Validation Cloud ([Terms of Use](https://www.validationcloud.io/terms), [Privacy Policy](https://www.validationcloud.io/privacy)) diff --git a/services/reference/opbnb/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_accounts-request.mdx index 238ece819ab..5007c7edea9 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_blocknumber-request.mdx index ca9eb503c68..0ca52f4e307 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_call-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_call-request.mdx index cc8bbc158e8..5a55e42117d 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_chainid-request.mdx index dc14de31ded..6511b29d005 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_estimategas-request.mdx index 11b46c91aa8..173ab72ef15 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_feehistory-request.mdx index 290ef9c18c7..6e16815354b 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gasprice-request.mdx index 3ad4cb1e40c..e63fd515da7 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getbalance-request.mdx index c3d6f40e983..2003367f52c 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getblockbyhash-request.mdx index 049138278c9..a43638afa3d 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getblockbynumber-request.mdx index fe5fc2d8f76..ab097c5911f 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 440066b1206..61487c82b72 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 237483107e3..2e290d60800 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getcode-request.mdx index 3658a280302..d53834d8c48 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getlogs-request.mdx index 780a1ff71f1..b0b252f318c 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getproof-request.mdx index eed945955ad..3531c5debe2 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getstorageat-request.mdx index a072d68c70c..24f7e408f3d 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index f8121b57737..4bd4342cb7b 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index e131698347a..7b1839e0e02 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-description.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-description.mdx index 2e0ce979e77..939b0b3fbb1 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-description.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-description.mdx @@ -5,4 +5,4 @@ Returns information about a transaction for a given hash. Currently, the opBNB network service supports only near head requests (the latest 128 blocks). Archive requests are not available at this time. -::: \ No newline at end of file +::: diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 09eb6cc27d1..c129b5a9d86 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactioncount-request.mdx index 0ae5437b2bc..043621f4e7f 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-description.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-description.mdx index 80c706610ff..0a2e7c89bac 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-description.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-description.mdx @@ -5,4 +5,4 @@ Returns the receipt of a transaction given transaction hash. Note that the recei Currently, the opBNB network service supports only near head requests (the latest 128 blocks). Archive requests are not available at this time. -::: \ No newline at end of file +::: diff --git a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index b4cbfec97ea..e229bc3e5c4 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index e8e93be586a..481e6cd827d 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 5442ca4894f..7c92ed9ca02 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index e8b7cfacc32..400d3da7a43 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://opbnb-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://opbnb-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://opbnb-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/opbnb/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 0abe837fc5f..6c5ea669f00 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/opbnb/json-rpc-methods/_eth_syncing-request.mdx index f03abf3b11c..0d8434adaf2 100644 --- a/services/reference/opbnb/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_net_peercount-request.mdx b/services/reference/opbnb/json-rpc-methods/_net_peercount-request.mdx index 60a2c3ef4fa..78cfcb7c5ff 100644 --- a/services/reference/opbnb/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_net_version-request.mdx b/services/reference/opbnb/json-rpc-methods/_net_version-request.mdx index f3ac0c20fb5..d7e58b1ddc3 100644 --- a/services/reference/opbnb/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/opbnb/json-rpc-methods/_web3_clientversion-request.mdx index c1fd3102c85..bd6bbcbd5f8 100644 --- a/services/reference/opbnb/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://opbnb-mainnet.infura.io/v3/ \ diff --git a/services/reference/opbnb/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/opbnb/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..2b6027ed2f1 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..b23ecfe8c22 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..b52cd3d568e --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/opbnb/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..712c22e7fd4 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/opbnb/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..b226493bcc0 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/index.md b/services/reference/opbnb/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..aaefa607122 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/index.md @@ -0,0 +1,28 @@ +--- +title: opBNB bundler methods +sidebar_label: Bundler methods +sidebar_key: opbnb-bundler-methods +description: opBNB bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on opBNB mainnet: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..5a3da310fbb --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..22de56c7d2f --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..6ab7df4beb2 --- /dev/null +++ b/services/reference/opbnb/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/opbnb/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/opbnb/json-rpc-methods/eth_accounts.mdx b/services/reference/opbnb/json-rpc-methods/eth_accounts.mdx index 0c5088b9560..ead693bf2d4 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: opBNB eth_accounts +sidebar_label: eth_accounts +description: Returns a list of opBNB accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx"; +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx"; +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx"; +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx"; +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_blocknumber.mdx b/services/reference/opbnb/json-rpc-methods/eth_blocknumber.mdx index f10357f32e3..64fa1da7488 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: opBNB eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest opBNB block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx"; +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_call.mdx b/services/reference/opbnb/json-rpc-methods/eth_call.mdx index d4c9cf9a095..2d3e871fa61 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_call.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: opBNB eth_call +sidebar_label: eth_call +description: Executes a opBNB call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx"; +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx"; +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx"; +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx"; +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_chainid.mdx b/services/reference/opbnb/json-rpc-methods/eth_chainid.mdx index c385efc1ed1..ff29522904e 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: opBNB eth_chainId +sidebar_label: eth_chainId +description: Returns the opBNB chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx"; +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx"; +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx"; +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx"; +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_estimategas.mdx b/services/reference/opbnb/json-rpc-methods/eth_estimategas.mdx index fcf752d84b3..c965a547d9a 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: opBNB eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a opBNB transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx"; +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx"; +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx"; +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx"; +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_feehistory.mdx b/services/reference/opbnb/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..cf5e9a052a3 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: opBNB eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical opBNB gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gasprice.mdx b/services/reference/opbnb/json-rpc-methods/eth_gasprice.mdx index f5ce241a9ae..869d37aebcd 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: opBNB eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current opBNB gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx"; +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx"; +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx"; +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx"; +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getbalance.mdx b/services/reference/opbnb/json-rpc-methods/eth_getbalance.mdx index 814f2e5a8bf..bcdd26ab472 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: opBNB eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a opBNB address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx"; +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx"; +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx"; +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx"; +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/opbnb/json-rpc-methods/eth_getblockbyhash.mdx index 435c47dd6d2..1c49aab9512 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: opBNB eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns opBNB block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx"; +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/opbnb/json-rpc-methods/eth_getblockbynumber.mdx index 2a4855cfb5d..be1d69c4341 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: opBNB eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns opBNB block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx"; +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 30ece4724b3..1fe36df9012 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: opBNB eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx"; +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index 2cc69dd469e..dd902ee10a1 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: opBNB eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx"; +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getcode.mdx b/services/reference/opbnb/json-rpc-methods/eth_getcode.mdx index 906f21a6d9e..0b7a9c5d878 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: opBNB eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx"; +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx"; +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx"; +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx"; +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getlogs.mdx b/services/reference/opbnb/json-rpc-methods/eth_getlogs.mdx index 860d7568027..3dd4bd83bec 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: opBNB eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx"; +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx"; +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx"; +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx"; +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getproof.mdx b/services/reference/opbnb/json-rpc-methods/eth_getproof.mdx index c80a278d835..24321d736db 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: opBNB eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx"; +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx"; +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx"; +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx"; +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getstorageat.mdx b/services/reference/opbnb/json-rpc-methods/eth_getstorageat.mdx index e55efec5a0c..22aad817f8b 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: opBNB eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_getstorageat-description.mdx"; +import Description from './_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx"; +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx"; +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx"; +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index 0a240af37d2..681967314b5 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: opBNB eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx"; +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index e31108b277a..564dc74e9af 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: opBNB eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx"; +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyhash.mdx index 38ff25005b8..7874af32fcf 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: opBNB eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_gettransactionbyhash-description.mdx"; +import Description from './_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx"; +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/opbnb/json-rpc-methods/eth_gettransactioncount.mdx index 28ec372d1e1..037d2d7979e 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: opBNB eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx"; +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/opbnb/json-rpc-methods/eth_gettransactionreceipt.mdx index 2aba9413dba..36b01995a95 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: opBNB eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "./_eth_gettransactionreceipt-description.mdx"; +import Description from './_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx"; +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/opbnb/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index dda3bcea3a6..d91157387cf 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: opBNB eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx"; +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/opbnb/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 6b5a5f068ae..e9a279f7497 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: opBNB eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx"; +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/opbnb/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 89d1421df00..ba48a1b8a89 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: opBNB eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx"; +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx"; +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx"; +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx"; +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/opbnb/json-rpc-methods/eth_sendrawtransaction.mdx index 007139c8a82..cb27d18c299 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: opBNB eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx"; +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx"; +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx"; +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx"; +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/opbnb/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 915363a6184..00000000000 --- a/services/reference/opbnb/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx"; - - - diff --git a/services/reference/opbnb/json-rpc-methods/eth_syncing.mdx b/services/reference/opbnb/json-rpc-methods/eth_syncing.mdx index 4dd0c0a0803..64caccf9460 100644 --- a/services/reference/opbnb/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/opbnb/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: opBNB eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx"; +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx"; +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx"; +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx"; +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/index.md b/services/reference/opbnb/json-rpc-methods/index.md index faa971d397e..48cd7fdc1e7 100644 --- a/services/reference/opbnb/json-rpc-methods/index.md +++ b/services/reference/opbnb/json-rpc-methods/index.md @@ -1,5 +1,9 @@ +--- +sidebar_label: JSON-RPC API +sidebar_key: opbnb-json-rpc-api +--- -# JSON-RPC methods +# opBNB JSON-RPC API The standard Ethereum methods documented here are supported by Infura on the opBNB layer 2 network. diff --git a/services/reference/opbnb/json-rpc-methods/net_peercount.mdx b/services/reference/opbnb/json-rpc-methods/net_peercount.mdx index c15460a96e3..f4049d38d7e 100644 --- a/services/reference/opbnb/json-rpc-methods/net_peercount.mdx +++ b/services/reference/opbnb/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: opBNB net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx"; +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx"; +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx"; +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx"; +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx"; +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx"; +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/net_version.mdx b/services/reference/opbnb/json-rpc-methods/net_version.mdx index b594ac81c6e..65d7b705859 100644 --- a/services/reference/opbnb/json-rpc-methods/net_version.mdx +++ b/services/reference/opbnb/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: opBNB net_version +sidebar_label: net_version +description: Returns network ID on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx"; +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx"; +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx"; +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx"; +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx"; +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx"; +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 06edd51441d..2c6aa747942 100644 --- a/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -16,5 +16,12 @@ wscat -c wss://opbnb-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0 ``` - + + +```bash +wscat -c wss://opbnb-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}' +``` + + + diff --git a/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index 4cea6225da2..5f033b969d5 100644 --- a/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/opbnb/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -11,4 +11,3 @@ wscat -c wss://opbnb-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0 - diff --git a/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 3962e2ef0cb..8cbd850cdca 100644 --- a/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,48 @@ --- -title: "eth_subscribe" +title: opBNB eth_subscribe +sidebar_label: eth_subscribe +todo: Is newPendingTransactions` event only mainnet supported? --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' +:::note +The `newPendingTransactions` event is only available on mainnet. +::: + ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx"; +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index fd4aedad7ad..13a5c3ce217 100644 --- a/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/opbnb/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: opBNB eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx"; +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/opbnb/json-rpc-methods/subscription-methods/index.md b/services/reference/opbnb/json-rpc-methods/subscription-methods/index.md index c37f4ff0c12..b35ba1c7143 100644 --- a/services/reference/opbnb/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/opbnb/json-rpc-methods/subscription-methods/index.md @@ -1,10 +1,13 @@ --- -title: "Subscription methods" +title: opBNB subscription methods +sidebar_label: Subscription methods +sidebar_key: opbnb-subscription-methods +description: opBNB subscription methods --- -# Subscription methods +# opBNB subscription methods -Subscription methods are available for [WebSocket](../../../../learn/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. +Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. The following subscription methods are available on mainnet: diff --git a/services/reference/opbnb/json-rpc-methods/web3_clientversion.mdx b/services/reference/opbnb/json-rpc-methods/web3_clientversion.mdx index 0576523fc98..a87b7769b61 100644 --- a/services/reference/opbnb/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/opbnb/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: opBNB web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on opBNB. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx"; +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx"; +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx"; +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx"; +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx"; +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx"; +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/opbnb/quickstart.md b/services/reference/opbnb/quickstart.md index ff1f2b0e8c4..efd19522adc 100644 --- a/services/reference/opbnb/quickstart.md +++ b/services/reference/opbnb/quickstart.md @@ -1,25 +1,26 @@ --- description: opBNB Smart Chain quickstart guide +sidebar_label: Quickstart sidebar_position: 2 --- import Banner from "@site/src/components/Banner" -# Quickstart +# opBNB quickstart This quickstart guide will help you set up and make calls on the opBNB network using the Infura endpoints. -Don't have an Infura account? Sign up for our free plan and start using the BNB Smart Chain network! +Don't have an Infura account? Sign up for our free plan and start using the opBNB Smart Chain network! ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the opBNB network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the opBNB network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal. Replace `` with your actual Infura API key. @@ -38,142 +39,144 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta 1. In your project folder, install the Node Fetch package using npm: - ```bash - npm i node-fetch - `````` + ```bash + npm i node-fetch + ``` -1. Create your Javascript file and copy the following code: +1. Create your JavaScript file and copy the following code: Replace `` with your actual Infura API key. - ```javascript title="index.js" - import fetch from 'node-fetch'; - fetch("https://opbnb-mainnet.infura.io/v3/", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", - params: [], - id: 1 - }) - }) - .then(response => - response.json() - ) - .then(data => { - console.log(data); - }) - .catch(error => { - console.error(error); - }); - ``` + ```javascript title="index.js" + import fetch from 'node-fetch' + fetch('https://opbnb-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` 1. Run the code using the following command: - ```bash - node index.js - ``` + ```bash + node index.js + ``` #### Axios 1. In your project folder, install the Axios package using npm: - ```bash - npm i axios - ``` + ```bash + npm i axios + ``` -1. Create your Javascript file and copy the following code: +1. Create your JavaScript file and copy the following code: Replace `` with your actual Infura API key. - ```javascript title="index.js" - const axios = require("axios); - - axios.post("https://opbnb-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", - params: [], - id: 1 - }) - .then(response => { - console.log(response.data); - }) - .catch(error => { - console.error(error); - }); - ``` - + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://opbnb-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + 1. Run the code using the following command: - ```bash - node index.js - ``` - + ```bash + node index.js + ``` + #### Ethers 1. In your project folder, install the ethers package using npm: - ```bash - npm install ethers - ``` - -1. Create your Javascript file and copy the following code: + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: Replace `` with your actual Infura API key. - ```javascript title="index.js" - const ethers = require("ethers"); - const provider = new ethers.providers.JsonRpcProvider("https://opbnb-mainnet.infura.io/v3/"); - provider.getBlockNumber() - .then(blockNumber => { - console.log(blockNumber); - }) - .catch(error => { - console.error(error); - }); - ``` - + ```javascript title="index.js" + const ethers = require('ethers') + const provider = new ethers.providers.JsonRpcProvider( + 'https://opbnb-mainnet.infura.io/v3/' + ) + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + 1. Run the code using the following command: - ```bash - node index.js - ``` + ```bash + node index.js + ``` ### Python 1. In your project folder, install the `requests` library: - ```bash - pip install requests - ``` + ```bash + pip install requests + ``` 1. Create your Python file and copy the following code: Replace `` with your actual Infura API key. - ```python title="index.py" - import requests - import json - url = "https://opbnb-mainnet.infura.io/v3/" - payload = { - "jsonrpc": "2.0", - "method": "eth_blockNumber", - "params": [], - "id": 1 - } - headers = {"content-type": "application/json"} - response = requests.post(url, data=json.dumps(payload), headers=headers).json() - print(response) - ``` - + ```python title="index.py" + import requests + import json + url = "https://opbnb-mainnet.infura.io/v3/" + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + headers = {"content-type": "application/json"} + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + print(response) + ``` + 1. Run the code using the following command: - ```bash - python index.py - ``` - + ```bash + python index.py + ``` + ## Next steps Now that you have successfully made a call to the opBNB network, you can explore more functionalities and APIs provided by Infura. Here are some suggestions: @@ -183,7 +186,7 @@ Now that you have successfully made a call to the opBNB network, you can explore - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. - -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. \ No newline at end of file +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/optimism/index.md b/services/reference/optimism/index.md index cc5c3cfd1c5..24a8b081ead 100644 --- a/services/reference/optimism/index.md +++ b/services/reference/optimism/index.md @@ -22,36 +22,34 @@ occur on Optimism are posted and validated on Ethereum mainnet using Optimistic - For more information on the Optimism network, please see the [official Optimism developer documentation](https://docs.optimism.io/). - See the [differences between the behavior of Ethereum and Optimism](https://docs.optimism.io/stack/differences). -- See the [JSON-RPC methods specific to Optimism Bedrock](https://docs.optimism.io/builders/node-operators/json-rpc). +- See the [JSON-RPC methods specific to Optimism Bedrock](https://docs.optimism.io/node-operators/reference/op-node-json-rpc). ::: ## Partners and privacy policies No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. -For any parameters required in an RPC request, these could be the type that describe the method, addresses, gas, and session. - Bware Labs ([Terms of Service](https://bwarelabs.com/terms), [Privacy Policy](https://bwarelabs.com/privacy)) is Infura's failover-protection partner. While Bware Labs supports most Infura methods, it does not yet support the following methods: - `eth_accounts` diff --git a/services/reference/optimism/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_accounts-request.mdx index 2dc55a4876c..ac45e36a05d 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_blocknumber-request.mdx index fbaf6659c56..93380ae0964 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_call-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_call-request.mdx index ea223e566c5..5bc3407efeb 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_chainid-request.mdx index 82fe0fa552f..4b51c190f29 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_estimategas-request.mdx index 956fc6ae856..ea0e560b1ae 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_feehistory-request.mdx index 743c5c98b0e..fcbe47f5ee4 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gasprice-request.mdx index 33772ea4752..7a4c1cf8761 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getbalance-request.mdx index 69850f62f2e..e95a9668e4b 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getblockbyhash-request.mdx index ecaf8292ecc..092a29e1af8 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getblockbynumber-request.mdx index f53a1dbd267..a4ef5276d19 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getblockreceipts-request.mdx index 7b65d2ec02e..9ebf02eebea 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index a71458e513c..bbb6d23af8c 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 5d041e18139..3ae3b5a5ee0 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getcode-request.mdx index f725fc71149..60eeceaa138 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getlogs-request.mdx index 1d9c82dd2fd..7289202f56e 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getproof-request.mdx index a7c7f6b3826..655bef96d74 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getstorageat-request.mdx index f6da64d0c2b..5dbeee01578 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 0da9c038f93..dd9fd79ad87 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 2feb749b57b..00424e8a72b 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index c53a15b5607..de97d564f32 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gettransactioncount-request.mdx index 345163ad32e..b4d75ea0937 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index f2cc28ff69c..bf6daed2ea4 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index eaeb0598aba..cd8fdbadf49 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index 097456394de..6def9d686db 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index 429a0f448c4..5904b007d49 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 046c1f4244a..43267658c64 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 38d8827473b..806811cf069 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://optimism-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://optimism-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/optimism/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_protocolversion-request.mdx index ff49b227940..09666559247 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 3b7958ece3c..95ebd23a59d 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_submitwork-request.mdx index 63acde5a3d1..84ee748d154 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/optimism/json-rpc-methods/_eth_syncing-request.mdx index 947adf0b99a..4d787ead7a5 100644 --- a/services/reference/optimism/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_net_listening-request.mdx b/services/reference/optimism/json-rpc-methods/_net_listening-request.mdx index 9f99bd456e1..e2b46b33753 100644 --- a/services/reference/optimism/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-sepolia.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_net_peercount-request.mdx b/services/reference/optimism/json-rpc-methods/_net_peercount-request.mdx index b2482d3eb70..1f815569e58 100644 --- a/services/reference/optimism/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_net_version-request.mdx b/services/reference/optimism/json-rpc-methods/_net_version-request.mdx index 8db8850cc4a..0e3acab9ffe 100644 --- a/services/reference/optimism/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/optimism/json-rpc-methods/_web3_clientversion-request.mdx index 250fddfd108..2fbe53501c5 100644 --- a/services/reference/optimism/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/optimism/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://optimism-mainnet.infura.io/v3/ \ diff --git a/services/reference/optimism/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/optimism/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..00037a22747 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..897faed123a --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..55d7db0a0cd --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/optimism/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..be7e0371fa5 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/optimism/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..809b037cd74 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/index.md b/services/reference/optimism/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..b5140fa3b02 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Optimism bundler methods +sidebar_label: Bundler methods +sidebar_key: optimism-bundler-methods +description: Optimism bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Optimism mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..5824049eec1 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..72b92bc4248 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/optimism/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..77a2c61136e --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/optimism/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/eth_accounts.mdx b/services/reference/optimism/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..5627dc22481 100644 --- a/services/reference/optimism/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Optimism eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Optimism accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_blocknumber.mdx b/services/reference/optimism/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..03cd17b42ab 100644 --- a/services/reference/optimism/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Optimism eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Optimism block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_call.mdx b/services/reference/optimism/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..d3807e6fa71 100644 --- a/services/reference/optimism/json-rpc-methods/eth_call.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Optimism eth_call +sidebar_label: eth_call +description: Executes a Optimism call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_chainid.mdx b/services/reference/optimism/json-rpc-methods/eth_chainid.mdx index a6f446ad268..364218f4e55 100644 --- a/services/reference/optimism/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Optimism eth_chainId +sidebar_label: eth_chainId +description: Returns the Optimism chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_coinbase.mdx b/services/reference/optimism/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/optimism/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/optimism/json-rpc-methods/eth_estimategas.mdx b/services/reference/optimism/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..cff64ff343e 100644 --- a/services/reference/optimism/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Optimism eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Optimism transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_feehistory.mdx b/services/reference/optimism/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..b67d9ae19f1 100644 --- a/services/reference/optimism/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Optimism eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Optimism gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gasprice.mdx b/services/reference/optimism/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..8f48c6fdae4 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Optimism eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Optimism gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getbalance.mdx b/services/reference/optimism/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..911a60d96ca 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Optimism eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Optimism address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/optimism/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..a7c15c58244 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Optimism eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Optimism block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/optimism/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..81ffb0fb327 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Optimism eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Optimism block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/optimism/json-rpc-methods/eth_getblockreceipts.mdx index d8cab295159..df991666592 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: Optimism eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Optimism. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' - \ No newline at end of file + diff --git a/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 36944d31e1f..6d4d7688198 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Optimism eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..900a81e0d4d 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Optimism eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getcode.mdx b/services/reference/optimism/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..b2fe464b776 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Optimism eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getlogs.mdx b/services/reference/optimism/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..0a9f44a2608 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Optimism eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getproof.mdx b/services/reference/optimism/json-rpc-methods/eth_getproof.mdx index 0d7b5743dc4..4721dece081 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: Optimism eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getstorageat.mdx b/services/reference/optimism/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..23228c38906 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Optimism eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index e04f9c75a5c..2901afaccba 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Optimism eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index 28ba85246a2..738ef7f0e22 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Optimism eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..0d13c0e6d87 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Optimism eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/optimism/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..185b982e178 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Optimism eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/optimism/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..bc6f2a9e675 100644 --- a/services/reference/optimism/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Optimism eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/optimism/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index d6a9a959a37..d7871fac04c 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Optimism eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/optimism/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..031c003b34d 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Optimism eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 298b5c520e8..7b905c4a1e6 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Optimism eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 2cc5dbbf753..aff8d8e3ee3 100644 --- a/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Optimism eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/optimism/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..c229f9613ff 100644 --- a/services/reference/optimism/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Optimism eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_protocolversion.mdx b/services/reference/optimism/json-rpc-methods/eth_protocolversion.mdx index 02b5da95bff..526f450bbe6 100644 --- a/services/reference/optimism/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: Optimism eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/optimism/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..5ccd6c1afc6 100644 --- a/services/reference/optimism/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Optimism eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/optimism/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/optimism/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/optimism/json-rpc-methods/eth_sign.mdx b/services/reference/optimism/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/optimism/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/optimism/json-rpc-methods/eth_submitwork.mdx b/services/reference/optimism/json-rpc-methods/eth_submitwork.mdx index 3e302cecfe3..d756f50394b 100644 --- a/services/reference/optimism/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: Optimism eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx" +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/eth_syncing.mdx b/services/reference/optimism/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..89699de164e 100644 --- a/services/reference/optimism/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/optimism/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Optimism eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..7edd08637d1 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..458b8655e71 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..e2fd8b52703 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..ac40fe8f0ef --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..bf48c413a66 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://optimism-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://optimism-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..8a3956ab76e --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Optimism eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Optimism logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..67ece79b2a2 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Optimism eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Optimism. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..2893b2d828d --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Optimism eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Optimism. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..46d00f1e6c4 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Optimism eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Optimism. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/optimism/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..71155bfd7d8 --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Optimism eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Optimism. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/optimism/json-rpc-methods/filter-methods/index.md b/services/reference/optimism/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..551d2317bad --- /dev/null +++ b/services/reference/optimism/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Optimism filter methods +sidebar_label: Filter methods +sidebar_key: optimism-filter-methods +description: Optimism filter methods +--- + +# Optimism filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/optimism/json-rpc-methods/index.md b/services/reference/optimism/json-rpc-methods/index.md index 2d22f777edf..c41e2d085bb 100644 --- a/services/reference/optimism/json-rpc-methods/index.md +++ b/services/reference/optimism/json-rpc-methods/index.md @@ -1,12 +1,14 @@ --- -title: "JSON-RPC methods" +title: Optimism JSON-RPC API description: Supported standard Ethereum methods on Optimism network. +sidebar_label: JSON-RPC API +sidebar_key: optimism-json-rpc-api --- -# JSON-RPC methods +# Optimism JSON-RPC API The standard Ethereum methods documented here are supported by Infura on the Optimism network. For custom Optimism -methods, see [Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/builders/node-operators/json-rpc) (Bedrock release). +methods, see [Optimism Ethereum JSON-RPC API documentation](https://docs.optimism.io/node-operators/reference/op-node-json-rpc) (Bedrock release). You need to be aware of the [differences between the behavior of Ethereum and Optimism](https://docs.optimism.io/chain/differences). For example, there are differences related to: diff --git a/services/reference/optimism/json-rpc-methods/net_peercount.mdx b/services/reference/optimism/json-rpc-methods/net_peercount.mdx index c0246b44d39..e34edeae7f1 100644 --- a/services/reference/optimism/json-rpc-methods/net_peercount.mdx +++ b/services/reference/optimism/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Optimism net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/net_version.mdx b/services/reference/optimism/json-rpc-methods/net_version.mdx index 1d6c0080c60..3363ef682fb 100644 --- a/services/reference/optimism/json-rpc-methods/net_version.mdx +++ b/services/reference/optimism/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Optimism net_version +sidebar_label: net_version +description: Returns network ID on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 05d70dea5ea..db2aad09b64 100644 --- a/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index e5938cbc6ba..a3ffb3017bc 100644 --- a/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/optimism/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/optimism/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/optimism/json-rpc-methods/subscription-methods/eth_subscribe.mdx index d79d2a15bb3..58cc5a1527d 100644 --- a/services/reference/optimism/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/optimism/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: Optimism eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx" +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/optimism/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/optimism/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 6fe9ca4660e..790aa1b4d00 100644 --- a/services/reference/optimism/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/optimism/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: Optimism eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx" +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/optimism/json-rpc-methods/subscription-methods/index.md b/services/reference/optimism/json-rpc-methods/subscription-methods/index.md index 33a8804d49c..bc14abb054c 100644 --- a/services/reference/optimism/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/optimism/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: Optimism subscription methods +sidebar_label: Subscription methods +sidebar_key: optimism-subscription-methods +description: Optimism subscription methods --- -# Subscription methods +# Optimism subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/optimism/json-rpc-methods/web3_clientversion.mdx b/services/reference/optimism/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..ac13ee8b87f 100644 --- a/services/reference/optimism/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/optimism/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Optimism web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Optimism. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/optimism/quickstart.md b/services/reference/optimism/quickstart.md index d4548088dc9..792a803b957 100644 --- a/services/reference/optimism/quickstart.md +++ b/services/reference/optimism/quickstart.md @@ -1,11 +1,12 @@ --- description: Optimism quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Optimism quickstart This quickstart guide will help you set up and make calls on the Optimism network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Opti ## Prerequisites -- Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Optimism network enabled. +- Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Optimism network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://optimism-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://optimism-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://optimism-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://optimism-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://optimism-mainnet.infura.io/v3/" + 'https://optimism-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/palm/index.md b/services/reference/palm/index.md index 8885c8e12dc..a69a9877672 100644 --- a/services/reference/palm/index.md +++ b/services/reference/palm/index.md @@ -6,33 +6,33 @@ import CardList from '@site/src/components/CardList' # Palm -The [Palm Network](https://palm.io/) is an Ethereum Virtual Machine-compatible Polygon Supernet. The Palm Network is for +The [Palm network](https://palm.network/) is an Ethereum Virtual Machine-compatible Polygon Supernet. The Palm network is for creators, fans, and leaders in various industries such as art, technology, sports, and entertainment. The network -provides support to developers in their quest to build new and user-friendly tools that contributes to the growth of +provides support to developers in their quest to build new and user-friendly tools that contribute to the growth of the Web3 ecosystem. -:::info See also +:::important -The [official Palm documentation](https://docs.palm.io/) for more information about using the Palm network. +Support for Palm testnet is deprecated; Mainnet support remains. ::: diff --git a/services/reference/palm/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/palm/json-rpc-methods/_eth_blocknumber-request.mdx index 8665f9dd7c1..277e7bd9d4c 100644 --- a/services/reference/palm/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_call-request.mdx b/services/reference/palm/json-rpc-methods/_eth_call-request.mdx index 9fe3e5afebf..011f1102197 100644 --- a/services/reference/palm/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/palm/json-rpc-methods/_eth_chainid-request.mdx index adf2d87652a..76f4e2fd674 100644 --- a/services/reference/palm/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/palm/json-rpc-methods/_eth_estimategas-request.mdx index e4bf629d75b..a1196298101 100644 --- a/services/reference/palm/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/palm/json-rpc-methods/_eth_feehistory-request.mdx index ca02856877c..55490432a7d 100644 --- a/services/reference/palm/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/palm/json-rpc-methods/_eth_gasprice-request.mdx index b181368282f..6dbe866803e 100644 --- a/services/reference/palm/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getbalance-request.mdx index 9715a97c1f7..20986b1eedb 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getblockbyhash-request.mdx index 74d252117e9..552a0e2aa00 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getblockbynumber-request.mdx index 2c33757e525..19f41b05eca 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index 720a473d04f..084437053a3 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getcode-request.mdx index db9f0a9ad10..9a2384e0183 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getlogs-request.mdx index 756228a54a2..e5442a7e757 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/palm/json-rpc-methods/_eth_getstorageat-request.mdx index a01a09bb2d9..8da12540187 100644 --- a/services/reference/palm/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/palm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index bd69f80daba..66ae1db8ae0 100644 --- a/services/reference/palm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/palm/json-rpc-methods/_eth_gettransactioncount-request.mdx index 80498ad621a..d46023f604c 100644 --- a/services/reference/palm/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/palm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 9bed1da2f94..07f0735e88b 100644 --- a/services/reference/palm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/palm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 258e5f63df2..1744e576b16 100644 --- a/services/reference/palm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/palm/json-rpc-methods/_eth_protocolversion-request.mdx index cf9fe387743..3d31375d422 100644 --- a/services/reference/palm/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/palm/json-rpc-methods/_eth_sendrawtransaction-request.mdx index 1bd63ae34ea..93df0df31ef 100644 --- a/services/reference/palm/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/palm/json-rpc-methods/_eth_submitwork-request.mdx index 5bbc8d4a338..7e2534f9c4b 100644 --- a/services/reference/palm/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/palm/json-rpc-methods/_eth_syncing-request.mdx index f48b0395511..be7ce8715a8 100644 --- a/services/reference/palm/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/palm/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_net_listening-request.mdx b/services/reference/palm/json-rpc-methods/_net_listening-request.mdx index 0523877ccbe..e2ce9db2661 100644 --- a/services/reference/palm/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/palm/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_net_peercount-request.mdx b/services/reference/palm/json-rpc-methods/_net_peercount-request.mdx index 997b1f39e4c..acb753ac3e0 100644 --- a/services/reference/palm/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/palm/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_net_version-request.mdx b/services/reference/palm/json-rpc-methods/_net_version-request.mdx index e1d75aa6326..1bd8db3680e 100644 --- a/services/reference/palm/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/palm/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/palm/json-rpc-methods/_web3_clientversion-request.mdx index c676a9c7c79..8048163712e 100644 --- a/services/reference/palm/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/palm/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://palm-mainnet.infura.io/v3/ \ diff --git a/services/reference/palm/json-rpc-methods/eth_blocknumber.mdx b/services/reference/palm/json-rpc-methods/eth_blocknumber.mdx index 076b45d83ce..0293e92b41e 100644 --- a/services/reference/palm/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/palm/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: Palm eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Palm block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_call.mdx b/services/reference/palm/json-rpc-methods/eth_call.mdx index 5c6ebee7de3..97318d7ed8b 100644 --- a/services/reference/palm/json-rpc-methods/eth_call.mdx +++ b/services/reference/palm/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: Palm eth_call +sidebar_label: eth_call +description: Executes a Palm call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_chainid.mdx b/services/reference/palm/json-rpc-methods/eth_chainid.mdx index a6f446ad268..6eccf5c426a 100644 --- a/services/reference/palm/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/palm/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: Palm eth_chainId +sidebar_label: eth_chainId +description: Returns the Palm chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_estimategas.mdx b/services/reference/palm/json-rpc-methods/eth_estimategas.mdx index 47c6b01804e..f54300acc38 100644 --- a/services/reference/palm/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/palm/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: Palm eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Palm transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_feehistory.mdx b/services/reference/palm/json-rpc-methods/eth_feehistory.mdx index 9aafc564c46..8a1e4211e9d 100644 --- a/services/reference/palm/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/palm/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: Palm eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Palm gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_gasprice.mdx b/services/reference/palm/json-rpc-methods/eth_gasprice.mdx index 8980dcc8a39..4fdeceede18 100644 --- a/services/reference/palm/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/palm/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: Palm eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Palm gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getbalance.mdx b/services/reference/palm/json-rpc-methods/eth_getbalance.mdx index 1ff5a0d31c8..52812201726 100644 --- a/services/reference/palm/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: Palm eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Palm address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/palm/json-rpc-methods/eth_getblockbyhash.mdx index 970e6c27704..7343b1b4dff 100644 --- a/services/reference/palm/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: Palm eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Palm block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/palm/json-rpc-methods/eth_getblockbynumber.mdx index f14e34f1531..7035c74ef8d 100644 --- a/services/reference/palm/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: Palm eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Palm block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/palm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index c355e33cb53..405ff62703a 100644 --- a/services/reference/palm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Palm eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getcode.mdx b/services/reference/palm/json-rpc-methods/eth_getcode.mdx index ace0da8cb26..82211f6c10c 100644 --- a/services/reference/palm/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: Palm eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getlogs.mdx b/services/reference/palm/json-rpc-methods/eth_getlogs.mdx index 4a1c1a031c4..64954ab4e6c 100644 --- a/services/reference/palm/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: Palm eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_getstorageat.mdx b/services/reference/palm/json-rpc-methods/eth_getstorageat.mdx index d91e20b3979..7c35c670505 100644 --- a/services/reference/palm/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/palm/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: Palm eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/palm/json-rpc-methods/eth_gettransactionbyhash.mdx index 28548a1fd58..0243f744b1f 100644 --- a/services/reference/palm/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/palm/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: Palm eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/palm/json-rpc-methods/eth_gettransactioncount.mdx index 9cf5c71e500..095749645e6 100644 --- a/services/reference/palm/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/palm/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: Palm eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/palm/json-rpc-methods/eth_gettransactionreceipt.mdx index 1ab2ba12676..40d6893f0bc 100644 --- a/services/reference/palm/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/palm/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: Palm eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/palm/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 6f818052ae7..af06bdf329f 100644 --- a/services/reference/palm/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/palm/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Palm eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_protocolversion.mdx b/services/reference/palm/json-rpc-methods/eth_protocolversion.mdx index 02b5da95bff..2f04df096b1 100644 --- a/services/reference/palm/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/palm/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: Palm eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/palm/json-rpc-methods/eth_sendrawtransaction.mdx index dd39a5bafd4..3fc827e9a65 100644 --- a/services/reference/palm/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/palm/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: Palm eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/palm/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/palm/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/palm/json-rpc-methods/eth_sign.mdx b/services/reference/palm/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/palm/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/palm/json-rpc-methods/eth_submitwork.mdx b/services/reference/palm/json-rpc-methods/eth_submitwork.mdx index 3e302cecfe3..5677b2f7745 100644 --- a/services/reference/palm/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/palm/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: Palm eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx" +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx" +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx" +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx" +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/eth_syncing.mdx b/services/reference/palm/json-rpc-methods/eth_syncing.mdx index 7ffbcd44560..5f820af4aab 100644 --- a/services/reference/palm/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/palm/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: Palm eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/index.md b/services/reference/palm/json-rpc-methods/index.md index bf00bd17f06..a74c77cccea 100644 --- a/services/reference/palm/json-rpc-methods/index.md +++ b/services/reference/palm/json-rpc-methods/index.md @@ -1,12 +1,13 @@ --- -title: "JSON-RPC methods" +title: Palm JSON-RPC API description: Supported standard Ethereum methods on Palm network. +sidebar_label: JSON-RPC API +sidebar_key: palm-json-rpc-api --- -# JSON-RPC methods +# Palm JSON-RPC API -The standard Ethereum methods documented in this section are supported by Infura on the Palm network. Refer to the -[official Palm documentation regarding API differences](https://docs.palm.io/json-rpc-api-changes#d9IEH). +The standard Ethereum methods documented in this section are supported by Infura on the Palm network. :::info WebSocket calls not supported diff --git a/services/reference/palm/json-rpc-methods/net_listening.mdx b/services/reference/palm/json-rpc-methods/net_listening.mdx index b10ffc556cf..09f2e43df7c 100644 --- a/services/reference/palm/json-rpc-methods/net_listening.mdx +++ b/services/reference/palm/json-rpc-methods/net_listening.mdx @@ -1,40 +1,44 @@ --- -title: "net_listening" +title: Palm net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_listening-description.mdx" +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx" +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx" +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx" +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "./_net_listening-request.mdx" +import Request from './_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx" +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/net_peercount.mdx b/services/reference/palm/json-rpc-methods/net_peercount.mdx index c0246b44d39..5faa491b765 100644 --- a/services/reference/palm/json-rpc-methods/net_peercount.mdx +++ b/services/reference/palm/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: Palm net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/net_version.mdx b/services/reference/palm/json-rpc-methods/net_version.mdx index 1d6c0080c60..c8315289f9c 100644 --- a/services/reference/palm/json-rpc-methods/net_version.mdx +++ b/services/reference/palm/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: Palm net_version +sidebar_label: net_version +description: Returns network ID on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/palm/json-rpc-methods/web3_clientversion.mdx b/services/reference/palm/json-rpc-methods/web3_clientversion.mdx index c5ee316d699..431e4e887cf 100644 --- a/services/reference/palm/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/palm/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: Palm web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Palm. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/palm/quickstart.md b/services/reference/palm/quickstart.md index 48991d8215a..5c489507ded 100644 --- a/services/reference/palm/quickstart.md +++ b/services/reference/palm/quickstart.md @@ -1,11 +1,12 @@ --- description: Palm quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Palm quickstart This quickstart guide will help you set up and make calls on the Palm network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Palm ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Palm network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Palm network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://palm-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://palm-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://palm-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://palm-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://palm-mainnet.infura.io/v3/" + 'https://palm-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Polygon, Optimism, IPFS, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/polygon-pos/index.md b/services/reference/polygon-pos/index.md index f514add446e..3bced9e0e5c 100644 --- a/services/reference/polygon-pos/index.md +++ b/services/reference/polygon-pos/index.md @@ -17,7 +17,7 @@ The Polygon PoS network is a hybrid Plasma Proof of Stake side-chain to Ethereum virtual machine (EVM) which allows developers to leverage Infura, MetaMask, and other tools they use for Ethereum when developing and deploying smart contracts to the Polygon network. -The Polygon Bor node API is based on go-ethereum's JSON-RPC implementation, you can also use WebSockets to call JSON-RPCs +The Polygon Bor node API is based on Geth's JSON-RPC implementation, you can also use WebSockets to call JSON-RPCs and [create subscriptions](../../how-to/subscribe-to-events.md). :::info see also @@ -27,38 +27,40 @@ The [official Polygon documentation](https://docs.polygon.technology) for more i ::: ## Partners and privacy policies No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. -For any parameters required in an RPC request, these could be the type that describe the method, addresses, gas, and session. +The following partners provide failover support: -Rivet.Cloud ([Terms of Service](https://rivet.cloud/terms), [Privacy Policy](https://rivet.cloud/privacy-policy)) is Infura's failover-protection partner. While Rivet.Cloud supports most Infura methods, -it does not yet support the following methods: - +- Infstones ([Privacy Policy](https://infstones.com/terms/privacy-notice)) +- Bware Labs ([Terms of Use](https://bwarelabs.com/terms), [Privacy Policy](https://bwarelabs.com/privacy)) +- Rivet.cloud ([Terms of Service](https://rivet.cloud/terms), [Privacy Policy](https://rivet.cloud/privacy-policy)) +While Rivet.cloud supports most Infura methods, it does not yet support the following methods: + - `eth_accounts` - `eth_coinbase` - `eth_getRootHash` diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_accounts-request.mdx index e5a240d78e4..0f9644fd908 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-request.mdx index fdff2d0b8b2..a18e38ea3cd 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-requestfop.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-requestfop.mdx index 5749e4c5fba..c2bd1ba5ac1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-requestfop.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_blocknumber-requestfop.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ @@ -46,7 +46,6 @@ class InfuraJsonRpcProvider extends JsonRpcProvider { }; } } -``` provider = new InfuraJsonRpcProvider( "https://polygon-mainnet.infura.io/v3/" diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_call-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_call-request.mdx index e06f689ecc6..4a05c13f2fa 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_call-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_chainid-request.mdx index 4e291aaab38..64073613c43 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_createaccesslist-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_createaccesslist-request.mdx index 2dc167c4410..a773a6cb12d 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_createaccesslist-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_createaccesslist-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_estimategas-request.mdx index 3cab768abe8..a4b24a79352 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_feehistory-request.mdx index 048bf0033ab..d4de7a38fac 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gasprice-request.mdx index 96acd6e4478..bbf274d3fb7 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getbalance-request.mdx index 21e47d0acaf..fe1d6a34a35 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbyhash-request.mdx index 640353aa3b5..601265c0627 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbynumber-request.mdx index 7a2112ae30a..864dde07bf1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockreceipts-request.mdx index e0a9412db2f..b5898cab78e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getblockreceipts-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index 535e0cfe2b1..150f90ccb42 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index b33fd77334d..e4e9dda0ce8 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getcode-request.mdx index 6d332bbc837..1ca05f9bd19 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getlogs-request.mdx index a28189447e2..94158784882 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getproof-request.mdx index 7709ec88a22..607710142a1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getstorageat-request.mdx index 2510719c41e..5510dc84278 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 3c0528f5bd0..5fb9a056675 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 7c4586059f0..60e3fcd28d6 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 9a08b6ffe07..a7dd2859001 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactioncount-request.mdx index c0e99872686..cc85d4bcfff 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index c7136584a8e..935cc9f38a7 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index 95edba040ab..33156006ca0 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index ae9a63b9daa..0039e64dd5a 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index d4fedbcb735..722a4602bd1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index bcca4158af5..7b2526836df 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_getwork-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_getwork-request.mdx index c82693beeea..8651b23de9e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_getwork-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_getwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_hashrate-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_hashrate-request.mdx index 201469610c4..63f0ed38e7e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_hashrate-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_hashrate-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 0fdf1d0713b..c0710a00b4d 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ @@ -15,7 +15,7 @@ curl https://polygon-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://polygon-mainnet.infura.io/ws/v3/d23391e03c6d40738530a1b4b679e66e -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' ``` diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_mining-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_mining-request.mdx index 053ce959a35..26650754e68 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_mining-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_mining-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_protocolversion-request.mdx index 6b02909fd74..7405648dbe0 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_sendrawtransaction-request.mdx index f6a325ebddc..5bfafe14c4e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_eth_syncing-request.mdx index 07170815d7d..a4bd6c03db1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_net_listening-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_net_listening-request.mdx index 2c3c389bcd0..dc69a5569cf 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_net_peercount-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_net_peercount-request.mdx index e62701b2718..0bb3c805064 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_net_version-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_net_version-request.mdx index 7b0599d184a..64de1c207ed 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/polygon-pos/json-rpc-methods/_web3_clientversion-request.mdx index df0a6a8c413..7cbdcfc6fb5 100644 --- a/services/reference/polygon-pos/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bor_getauthor.md b/services/reference/polygon-pos/json-rpc-methods/bor_getauthor.md index 21709fa8242..3c802f60799 100644 --- a/services/reference/polygon-pos/json-rpc-methods/bor_getauthor.md +++ b/services/reference/polygon-pos/json-rpc-methods/bor_getauthor.md @@ -1,7 +1,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# bor_getAuthor +# `bor_getAuthor` Returns the author of the specified block. @@ -27,12 +27,12 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentproposer.md b/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentproposer.md index e6edbe2cebd..b5512c84f3b 100644 --- a/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentproposer.md +++ b/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentproposer.md @@ -1,9 +1,9 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# bor_getCurrentProposer +# `bor_getCurrentProposer` -Returns the the current proposer's address. +Returns the current proposer's address. :::info For Growth and Custom service plans @@ -27,12 +27,12 @@ None ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentvalidators.md b/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentvalidators.md index ca0fe3c1ea0..14e33cbd6a8 100644 --- a/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentvalidators.md +++ b/services/reference/polygon-pos/json-rpc-methods/bor_getcurrentvalidators.md @@ -1,7 +1,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# bor_getCurrentValidators +# `bor_getCurrentValidators` Returns the current list of validators. The [Bor documentation](https://wiki.polygon.technology/docs/pos/design/bor/overview) contains more information about Polygon Bor architecture and how validators participate in the consensus process. @@ -32,12 +32,12 @@ Array of validator objects with the following fields: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bor_getroothash.md b/services/reference/polygon-pos/json-rpc-methods/bor_getroothash.md index 99d61b8f423..687f7ef9b17 100644 --- a/services/reference/polygon-pos/json-rpc-methods/bor_getroothash.md +++ b/services/reference/polygon-pos/json-rpc-methods/bor_getroothash.md @@ -1,7 +1,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# bor_getRootHash +# `bor_getRootHash` Returns the root hash of a specified block range. @@ -34,12 +34,12 @@ The maximum difference between the specified block range can be 32767. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bor_getsignersathash.md b/services/reference/polygon-pos/json-rpc-methods/bor_getsignersathash.md index 9d97ec8dcbe..b4fcd1fb3b5 100644 --- a/services/reference/polygon-pos/json-rpc-methods/bor_getsignersathash.md +++ b/services/reference/polygon-pos/json-rpc-methods/bor_getsignersathash.md @@ -1,7 +1,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# bor_getSignersAtHash +# `bor_getSignersAtHash` Returns all the signers of the block matching the specified block hash. @@ -27,12 +27,12 @@ Array of signers for the specified block hash ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..614bc711dce --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..01716377f61 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..518f7ebdb46 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..2ecbafe440c --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..be42dcaa61e --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/index.md b/services/reference/polygon-pos/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..7bc72d9242f --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Polygon PoS bundler methods +sidebar_label: Bundler methods +sidebar_key: polygon-pos-bundler-methods +description: Polygon PoS bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Polygon mainnet +and Amoy: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..e1ad04e0344 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..ff4e2c7b861 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..cd3d73f60e5 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/polygon/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_accounts.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_accounts.mdx index 0dafbcb7389..d4e1f85d199 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: Polygon PoS eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Polygon PoS accounts. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx" +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx" +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx" +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx" +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx" +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx" +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_blocknumber.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_blocknumber.mdx index bd9a02c2311..abace842534 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_blocknumber.mdx @@ -1,11 +1,15 @@ --- -title: "eth_blockNumber" +title: Polygon PoS eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Polygon PoS block number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx" +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_call.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_call.mdx index f0e5b6ea176..06f7947cfd8 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_call.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_call.mdx @@ -1,11 +1,15 @@ --- -title: "eth_call" +title: Polygon PoS eth_call +sidebar_label: eth_call +description: Executes a Polygon PoS call without creating a transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx" +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx" +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx" +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx" +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx" +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx" +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_chainid.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_chainid.mdx index 799efdf20d2..a26f8edf1ae 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_chainid.mdx @@ -1,11 +1,15 @@ --- -title: "eth_chainId" +title: Polygon PoS eth_chainId +sidebar_label: eth_chainId +description: Returns the Polygon PoS chain ID. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx" +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx" +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx" +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx" +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx" +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx" +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_coinbase.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index 8957df7e522..00000000000 --- a/services/reference/polygon-pos/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx" - - diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_createaccesslist.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_createaccesslist.mdx index 0aef291b632..1209a106ece 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_createaccesslist.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_createaccesslist.mdx @@ -1,11 +1,15 @@ --- -title: "eth_createAccessList" +title: Polygon PoS eth_createAccessList +sidebar_label: eth_createAccessList +description: Creates an access list to include in a Polygon PoS transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_createaccesslist-description.mdx" +import Description from '/services/reference/_partials/_eth_createaccesslist-description.mdx' + +# `eth_createAccessList` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_createaccesslist-parameters.mdx" +import Params from '/services/reference/_partials/_eth_createaccesslist-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_createaccesslist-returns.mdx" +import Returns from '/services/reference/_partials/_eth_createaccesslist-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_createaccesslist-example.mdx" +import Example from '/services/reference/_partials/_eth_createaccesslist-example.mdx' ### Request -import Request from "./_eth_createaccesslist-request.mdx" +import Request from './_eth_createaccesslist-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_createaccesslist-response.mdx" +import Response from '/services/reference/_partials/_eth_createaccesslist-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_estimategas.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_estimategas.mdx index 8b8a5fd9d82..569c665e7a9 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_estimategas.mdx @@ -1,11 +1,15 @@ --- -title: "eth_estimateGas" +title: Polygon PoS eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Polygon PoS transaction. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx" +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx" +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx" +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx" +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_feehistory.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_feehistory.mdx index 549cf6cd962..a1401492519 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_feehistory.mdx @@ -1,11 +1,15 @@ --- -title: "eth_feeHistory" +title: Polygon PoS eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Polygon PoS gas information. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx" +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx" +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx" +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx" +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx" +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx" +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gasprice.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gasprice.mdx index 65c6516d81c..a8c04d1a769 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gasprice.mdx @@ -1,11 +1,15 @@ --- -title: "eth_gasPrice" +title: Polygon PoS eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Polygon PoS gas price. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx" +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx" +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx" +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx" +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getbalance.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getbalance.mdx index ee59217d1fe..75cc255248d 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getbalance.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getBalance" +title: Polygon PoS eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Polygon PoS address. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx" +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx" +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx" +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx" +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getblockbyhash.mdx index 3ea45a032d8..8ceb0fd6aa5 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getBlockByHash" +title: Polygon PoS eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Polygon PoS block information by hash. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx" +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getblockbynumber.mdx index da6f586bcb7..107e44f4ba5 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getBlockByNumber" +title: Polygon PoS eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Polygon PoS block information by number. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx" +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getblockreceipts.mdx index fa1700a5a4f..9b734aa5f7d 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getblockreceipts.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getblockreceipts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockReceipts" +title: Polygon PoS eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Polygon PoS. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockreceipts-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockreceipts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockreceipts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockreceipts-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' ### Request -import Request from "./_eth_getblockreceipts-request.mdx"; +import Request from './_eth_getblockreceipts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockreceipts-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 7fc5b999d4d..2e37f6f568c 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: Polygon PoS eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx" +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index 6bdaca1fad4..8d1af808e66 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: Polygon PoS eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx" +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getcode.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getcode.mdx index 9ffd4be0a39..696f6bdbd86 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getcode.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getCode" +title: Polygon PoS eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx" +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx" +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx" +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx" +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getlogs.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getlogs.mdx index 462e55f18e1..b191a7d2e6a 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getlogs.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getLogs" +title: Polygon PoS eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx" +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx" +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx" +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx" +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getproof.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getproof.mdx index 8e29ae8a1db..bb8bf034632 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getproof.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getProof" +title: Polygon PoS eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx" +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx" +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx" +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx" +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getroothash.md b/services/reference/polygon-pos/json-rpc-methods/eth_getroothash.md index a85737601d1..c21dd226ab1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getroothash.md +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getroothash.md @@ -1,7 +1,7 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# eth_getRootHash +# `eth_getRootHash` Returns the root hash of a specified block range. @@ -25,7 +25,7 @@ The maximum difference between the specified block range can be 32767. ### Request - + ```bash curl https://polygon-mainnet.infura.io/v3/ \ diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getstorageat.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getstorageat.mdx index 83b7304628e..cd3fbbac0c0 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getstorageat.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getStorageAt" +title: Polygon PoS eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx" +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx" +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx" +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx" +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index 3c67412fed9..185c490bbad 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: Polygon PoS eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx" +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index a76b6541f9c..969171ac76e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: Polygon PoS eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx" +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyhash.mdx index 2ccc4643541..a0b9bef86a7 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getTransactionByHash" +title: Polygon PoS eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx" +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactioncount.mdx index 920423d11e3..54f8b839283 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getTransactionCount" +title: Polygon PoS eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx" +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionreceipt.mdx index 6b59d7a2b41..4317b6c13eb 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getTransactionReceipt" +title: Polygon PoS eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx" +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx" +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx" +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx" +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx" +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx" +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index 87621afb216..e8ecf345f8f 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: Polygon PoS eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx" +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index 07c458cb7ad..b45075d8b6a 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: Polygon PoS eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx" +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblockhash.mdx index f09966e73a3..8116b013b6e 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getUncleCountByBlockHash" +title: Polygon PoS eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx" +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index 8c8553361f8..8638ef254f0 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,11 +1,15 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: Polygon PoS eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx" +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx" +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx" +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx" +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_getwork.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_getwork.mdx index 31dd81816b7..99561ebc966 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_getwork.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_getwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getWork" +title: Polygon PoS eth_getWork +sidebar_label: eth_getWork +description: Return current block and seed hash on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getwork-description.mdx" +import Description from '/services/reference/_partials/_eth_getwork-description.mdx' + +# `eth_getWork` ## Parameters -import Params from "/services/reference/_partials/_eth_getwork-parameters.mdx" +import Params from '/services/reference/_partials/_eth_getwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getwork-returns.mdx" +import Returns from '/services/reference/_partials/_eth_getwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getwork-example.mdx" +import Example from '/services/reference/_partials/_eth_getwork-example.mdx' ### Request -import Request from "./_eth_getwork-request.mdx" +import Request from './_eth_getwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getwork-response.mdx" +import Response from '/services/reference/_partials/_eth_getwork-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_hashrate.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_hashrate.mdx index 21ba47abdef..c25478fb5b4 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_hashrate.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_hashrate.mdx @@ -1,40 +1,44 @@ --- -title: "eth_hashrate" +title: Polygon PoS eth_hashrate +sidebar_label: eth_hashrate +description: Return hashes per second on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_hashrate-description.mdx" +import Description from '/services/reference/_partials/_eth_hashrate-description.mdx' + +# `eth_hashrate` ## Parameters -import Params from "/services/reference/_partials/_eth_hashrate-parameters.mdx" +import Params from '/services/reference/_partials/_eth_hashrate-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_hashrate-returns.mdx" +import Returns from '/services/reference/_partials/_eth_hashrate-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_hashrate-example.mdx" +import Example from '/services/reference/_partials/_eth_hashrate-example.mdx' ### Request -import Request from "./_eth_hashrate-request.mdx" +import Request from './_eth_hashrate-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_hashrate-response.mdx" +import Response from '/services/reference/_partials/_eth_hashrate-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_maxpriorityfeepergas.mdx index fa1c7b43afb..95465f871d3 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,11 +1,15 @@ --- -title: "eth_maxPriorityFeePerGas" +title: Polygon PoS eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx" +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx" +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx" +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx" +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx" +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx" +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_mining.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_mining.mdx index 3e755d68509..054673c702b 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_mining.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_mining.mdx @@ -1,40 +1,44 @@ --- -title: "eth_mining" +title: Polygon PoS eth_mining +sidebar_label: eth_mining +description: Indicates whether client is mining on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_mining-description.mdx" +import Description from '/services/reference/_partials/_eth_mining-description.mdx' + +# `eth_mining` ## Parameters -import Params from "/services/reference/_partials/_eth_mining-parameters.mdx" +import Params from '/services/reference/_partials/_eth_mining-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_mining-returns.mdx" +import Returns from '/services/reference/_partials/_eth_mining-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_mining-example.mdx" +import Example from '/services/reference/_partials/_eth_mining-example.mdx' ### Request -import Request from "./_eth_mining-request.mdx" +import Request from './_eth_mining-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_mining-response.mdx" +import Response from '/services/reference/_partials/_eth_mining-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_protocolversion.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_protocolversion.mdx index 65249812128..1759e652217 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_protocolversion.mdx @@ -1,11 +1,15 @@ --- -title: "eth_protocolVersion" +title: Polygon PoS eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx" +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx" +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx" +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx" +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx" +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx" +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_sendrawtransaction.mdx index b1fa56808e9..9201cc7dac2 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,11 +1,15 @@ --- -title: "eth_sendRawTransaction" +title: Polygon PoS eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx" +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx" +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx" +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx" +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx" +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx" +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 5c13a1d5c8f..00000000000 --- a/services/reference/polygon-pos/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx" - - diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_sign.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index f8c6a17df92..00000000000 --- a/services/reference/polygon-pos/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" - -import Description from "/services/reference/_partials/_eth_sign-description.mdx" - - diff --git a/services/reference/polygon-pos/json-rpc-methods/eth_syncing.mdx b/services/reference/polygon-pos/json-rpc-methods/eth_syncing.mdx index 325d4975286..8bae21e52d1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/eth_syncing.mdx @@ -1,11 +1,15 @@ --- -title: "eth_syncing" +title: Polygon PoS eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx" +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx" +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx" +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx" +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx" +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx" +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..007c7cb3abe --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..9d89ac9233c --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..79d7213fbf4 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..a1984ceeedd --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..256b34b2bc5 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://polygon-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://polygon-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..28fa5a6c464 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Polygon PoS eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Polygon PoS logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..a592e69bac0 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Polygon PoS eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Polygon PoS. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..e65b98f70e4 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Polygon PoS eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Polygon PoS. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..9b05341f8df --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Polygon PoS eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Polygon PoS. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..84084f430c9 --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Polygon PoS eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Polygon PoS. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/polygon-pos/json-rpc-methods/filter-methods/index.md b/services/reference/polygon-pos/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..1310ebf742e --- /dev/null +++ b/services/reference/polygon-pos/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,20 @@ +--- +title: Polygon PoS filter methods +sidebar_label: Filter methods +sidebar_key: polygon-pos-filter-methods +description: Polygon PoS filter methods +--- + +# Polygon PoS filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs +can be shared by any connection using the same API key. + +- [`eth_getFilterChanges`](eth_getfilterchanges.mdx) +- [`eth_getFilterLogs`](eth_getfilterlogs.mdx) +- [`eth_newBlockFilter`](eth_newblockfilter.mdx) +- [`eth_newFilter`](eth_newfilter.mdx) +- [`eth_uninstallFilter`](eth_uninstallfilter.mdx) + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) automatically +expires after fifteen minutes of inactivity. diff --git a/services/reference/polygon-pos/json-rpc-methods/index.md b/services/reference/polygon-pos/json-rpc-methods/index.md index 280b409cb98..e6a28373d97 100644 --- a/services/reference/polygon-pos/json-rpc-methods/index.md +++ b/services/reference/polygon-pos/json-rpc-methods/index.md @@ -1,4 +1,9 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: polygon-pos-json-rpc-api +--- + +# Polygon PoS JSON-RPC API Polygon's Bor node API is based on Go Ethereum (Geth). diff --git a/services/reference/polygon-pos/json-rpc-methods/net_listening.mdx b/services/reference/polygon-pos/json-rpc-methods/net_listening.mdx index e7b5d831294..5d3b56d53cb 100644 --- a/services/reference/polygon-pos/json-rpc-methods/net_listening.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/net_listening.mdx @@ -1,11 +1,15 @@ --- -title: "net_listening" +title: Polygon PoS net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_listening-description.mdx" +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx" +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx" +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx" +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "./_net_listening-request.mdx" +import Request from './_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx" +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/net_peercount.mdx b/services/reference/polygon-pos/json-rpc-methods/net_peercount.mdx index 3e468ebcbe4..7a469ebb9b8 100644 --- a/services/reference/polygon-pos/json-rpc-methods/net_peercount.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/net_peercount.mdx @@ -1,11 +1,15 @@ --- -title: "net_peerCount" +title: Polygon PoS net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx" +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx" +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx" +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx" +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx" +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx" +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/net_version.mdx b/services/reference/polygon-pos/json-rpc-methods/net_version.mdx index 14c08b796b6..19e2705640d 100644 --- a/services/reference/polygon-pos/json-rpc-methods/net_version.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/net_version.mdx @@ -1,11 +1,15 @@ --- -title: "net_version" +title: Polygon PoS net_version +sidebar_label: net_version +description: Returns network ID on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx" +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx" +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx" +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx" +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx" +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx" +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index b02b2951e2d..33fd7e39154 100644 --- a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index c4efb4c73d6..5e6f02fab88 100644 --- a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' diff --git a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 97cda659788..88f9f4697ad 100644 --- a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,11 +1,15 @@ --- -title: "eth_subscribe" +title: Polygon PoS eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx" +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index 708989cae29..00b4f378896 100644 --- a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,11 +1,15 @@ --- -title: "eth_unsubscribe" +title: Polygon PoS eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx" +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx" +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx" +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx" +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx" +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx" +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/index.md b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/index.md index 2bbfccdadf5..daa585d4367 100644 --- a/services/reference/polygon-pos/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/polygon-pos/json-rpc-methods/subscription-methods/index.md @@ -1,11 +1,14 @@ --- -title: "Subscription methods" +title: Polygon PoS subscription methods +sidebar_label: Subscription methods +sidebar_key: polygon-pos-subscription-methods +description: Polygon PoS subscription methods --- import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -# Subscription methods +# Polygon PoS subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/polygon-pos/json-rpc-methods/web3_clientversion.mdx b/services/reference/polygon-pos/json-rpc-methods/web3_clientversion.mdx index 559db78ccf4..3b6ec10e7b1 100644 --- a/services/reference/polygon-pos/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/polygon-pos/json-rpc-methods/web3_clientversion.mdx @@ -1,11 +1,15 @@ --- -title: "web3_clientVersion" +title: Polygon PoS web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Polygon PoS. --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx" +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` @@ -23,30 +27,30 @@ self-upgrade to the Growth plan or contact a sales representative to upgrade to ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx" +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx" +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx" +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx" +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx" +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/polygon-pos/quickstart.md b/services/reference/polygon-pos/quickstart.md index 48e62b104b7..7811b330f70 100644 --- a/services/reference/polygon-pos/quickstart.md +++ b/services/reference/polygon-pos/quickstart.md @@ -1,11 +1,12 @@ --- description: Polygon quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Polygon PoS quickstart This quickstart guide will help you set up and make calls on the Polygon network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Poly ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Polygon network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Polygon network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://polygon-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://polygon-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://polygon-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://polygon-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://polygon-mainnet.infura.io/v3/" + 'https://polygon-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Ethereum, Optimism, IPFS and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/scroll/index.md b/services/reference/scroll/index.md new file mode 100644 index 00000000000..e39c9fbf0d3 --- /dev/null +++ b/services/reference/scroll/index.md @@ -0,0 +1,63 @@ +--- +description: Scroll network information. +--- + +import CardList from '@site/src/components/CardList' + +# Scroll + +:::note Decentralized Infrastructure Network (DIN) + +Scroll is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +Infura provides Open Beta access to Scroll. During this period, there might be feature limitations. +Performance issues are not expected, but they are possible as we optimize and stabilize the service. + +::: + +Scroll is a general-purpose zero knowledge Ethereum Virtual Machine (zkEVM) rollup that uses the EVM for offchain computations. +This allows Scroll to scale the experience of Ethereum, ensuring cheaper and more accessible data while maintaining the robust security +inherent to Ethereum. + +Infura provides access to the [Scroll JSON-RPC API](json-rpc-methods/index.md) method library that interacts with the +Scroll blockchain. Methods include functionality for reading and writing data to the network, and executing smart contracts. + +:::info See also + +See the [official Scroll documentation](https://docs.scroll.io/en/home/) for more information. + +::: + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + +The following partners provide access to the Scroll network: + + + +- Everstake ([Terms of Use](https://everstake.one/terms-of-use), [Privacy Notice](https://everstake.one/privacy-notice)) +- Nodies ([Terms of Service](https://www.nodies.app/tos.txt), [Privacy Policy](https://www.nodies.app/privacy.txt)) +- Chainstack ([Terms of Service](https://chainstack.com/tos/), [Privacy Policy](https://chainstack.com/privacy/)) + diff --git a/services/reference/scroll/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_accounts-request.mdx new file mode 100644 index 00000000000..66bf52da3da --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_accounts-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..fce4bb32090 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_call-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..831ea53eb07 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..50ab9a800d3 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..31ac3706870 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..9a8ccc39560 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]]}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", []], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..daabb2201c9 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..df21cd90889 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..178eb566b1b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..7f99af30fca --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..dd602d9b31f --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..4ca4b83324e --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..5f02b110215 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..5f126b9b877 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"],"id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..41b62d669bc --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getLogs", "params":[{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}],"id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getproof-request.mdx new file mode 100644 index 00000000000..d9ab24c1a7b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getproof-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getProof", "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getProof", "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"],"id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..fd469dd6dcc --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..2abe8e7e94a --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..b1d6014d436 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55","0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55","0x0"],"id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..1d4fc1d4d8d --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"],"id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..5a902e1d550 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f","0x5bad55"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f","0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..9ed5f0de36f --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx new file mode 100644 index 00000000000..a6b13157ab5 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35","0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35","0x0"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..5634b561526 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockNumberAndIndex", "params": ["0x29c","0x0"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockNumberAndIndex", "params": ["0x29c","0x0"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx new file mode 100644 index 00000000000..c13e313ad8b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx new file mode 100644 index 00000000000..459139be22d --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockNumber", "params": ["0x5bad55"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockNumber", "params": ["0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..6622a21218e --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-call-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-call-parameters.mdx new file mode 100644 index 00000000000..38638909773 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-call-parameters.mdx @@ -0,0 +1,12 @@ +- `from`: 20 bytes [_required_] Address the transaction is sent from. +- `to`: 20 bytes - Address the transaction is directed to. +- `gas`: Hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero gas, but this parameter may be needed by some executions. +- `gasPrice`: Hexadecimal value of the `gasPrice` used for each paid gas. +- `maxPriorityFeePerGas`: Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). +- `value`: Hexadecimal of the value sent with this transaction. +- `data`: Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-estimategas-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-estimategas-parameters.mdx new file mode 100644 index 00000000000..8b12a59ea44 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-estimategas-parameters.mdx @@ -0,0 +1,24 @@ +- `TRANSACTION CALL OBJECT` _\[required]_ + - `from`: _\[optional]_ 20 Bytes - The address the transaction is sent from. + - `to`: 20 Bytes - The address the transaction is directed to. + - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `eth_estimateGas` consumes + zero gas, but this parameter may be needed by some executions. + - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. + - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas + above the base fee. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). + - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is + willing to pay per gas. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). + - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. + - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the + [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, + `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +If no gas limit is specified, geth uses the block gas limit from the pending block as an upper bound. +As a result the returned estimate might not be enough to executed the call/transaction when the amount +of gas is higher than the pending block gas limit. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getbalance-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getbalance-parameters.mdx new file mode 100644 index 00000000000..b95a578d543 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getbalance-parameters.mdx @@ -0,0 +1,5 @@ +- `address`: [_Required_] A string representing the address (20 bytes) to check for balance. +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getblockbynumber-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getblockbynumber-parameters.mdx new file mode 100644 index 00000000000..80255d945b7 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getblockbynumber-parameters.mdx @@ -0,0 +1,5 @@ +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: +- `show transaction details flag`: [_Required_] If set to `true`, returns the full transaction objects. If `false` returns only the hashes of the transactions. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getblocktransactioncountbynumber-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getblocktransactioncountbynumber-parameters.mdx new file mode 100644 index 00000000000..ab4a0d91ebb --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getblocktransactioncountbynumber-parameters.mdx @@ -0,0 +1,4 @@ +`block number`:[_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +:::warning +`safe` isn't supported. Use `finalized` instead. +::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getcode-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getcode-parameters.mdx new file mode 100644 index 00000000000..020e1a822c5 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getcode-parameters.mdx @@ -0,0 +1,5 @@ +- `address`: [_Required_] A string representing the address (20 bytes) of the smart contract, from which the compiled byte code will be obtained. +- `block number`:[_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getlogs-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getlogs-parameters.mdx new file mode 100644 index 00000000000..aa9d323ce4f --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getlogs-parameters.mdx @@ -0,0 +1,10 @@ +A filter object containing the following: + +- `address`: [_optional_] Contract address (20 bytes) or a list of addresses from which logs should originate. +- `fromBlock`: _[optional, default is `latest`]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: +- `toBlock`: _[optional, default is `latest`]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +- `topics`: _[optional]_ Array of 32 bytes DATA topics. Topics are order-dependent. +- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getproof-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getproof-parameters.mdx new file mode 100644 index 00000000000..0d286cbc09b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getproof-parameters.mdx @@ -0,0 +1,6 @@ +- `address`: A string representing the address (20 bytes) to check for balance. +- `storageKeys`: An array of 32-byte storage keys to be proofed and included. +- `blockParameter`: (string) A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getstorageat-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getstorageat-parameters.mdx new file mode 100644 index 00000000000..5aa4b9494a4 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getstorageat-parameters.mdx @@ -0,0 +1,6 @@ +- `address`: [_required_] A string representing the address (20 bytes) to check for balance. +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: +- `storage position`: [_required_] A hexadecimal code of the position in the storage. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactionbyblocknumberandindex-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactionbyblocknumberandindex-parameters.mdx new file mode 100644 index 00000000000..57657cd40c5 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactionbyblocknumberandindex-parameters.mdx @@ -0,0 +1,5 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: +- `transaction index position`: [_required_] A hexadecimal of the integer representing the position in the block. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactioncount-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactioncount-parameters.mdx new file mode 100644 index 00000000000..fb2df3a1d2c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-gettransactioncount-parameters.mdx @@ -0,0 +1,5 @@ +- `address`: [_Required_] A string representing the address (20 bytes). +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclebyblocknumberandindex-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclebyblocknumberandindex-parameters.mdx new file mode 100644 index 00000000000..9e969bf2033 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclebyblocknumberandindex-parameters.mdx @@ -0,0 +1,5 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: +- `uncle index position`: [_required_] A hexadecimal equivalent of the integer indicating the uncle's index position. diff --git a/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclecountbyblocknumber-parameters.mdx b/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclecountbyblocknumber-parameters.mdx new file mode 100644 index 00000000000..440503c7e7b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_scroll-getunclecountbyblocknumber-parameters.mdx @@ -0,0 +1,4 @@ +`block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +:::warning +`safe` isn't supported. Use `finalized` instead. +::: diff --git a/services/reference/scroll/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..e538964524a --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params":["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/scroll/json-rpc-methods/_eth_syncing-request.mdx new file mode 100644 index 00000000000..f97d5eb8e9b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_eth_syncing-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_net_listening-request.mdx b/services/reference/scroll/json-rpc-methods/_net_listening-request.mdx new file mode 100644 index 00000000000..b3da10e7b86 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_net_listening-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_net_peercount-request.mdx b/services/reference/scroll/json-rpc-methods/_net_peercount-request.mdx new file mode 100644 index 00000000000..63789071566 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_net_peercount-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_net_version-request.mdx b/services/reference/scroll/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..14481b09aed --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/scroll/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..2d09d3af904 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/scroll/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..8ac2670c623 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..426bdc8f3fb --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..1d384f95cd6 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/scroll/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..d566365d798 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/scroll/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..7335d3b0ce3 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/index.md b/services/reference/scroll/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..f0c8ae18ba6 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Scroll bundler methods +sidebar_label: Bundler methods +sidebar_key: scroll-bundler-methods +description: Scroll bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Scroll mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..4ee2faf03d3 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..cf0f0c21876 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/scroll/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..fc3bfbaef45 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/scroll/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/debug/_debug_traceblock-request.mdx b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblock-request.mdx new file mode 100644 index 00000000000..da834892de3 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblock-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x'{"jsonrpc": "2.0", "method": "debug_traceBlock", "params": ["0xf90277f90208a05a41d0e66b4120775176c09fcf39e7c0520517a13d2b57b18d33d342df038bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794e6a7a1d47ff21b6321162aea7c6cb457d5476bcaa00e0df2706b0a4fb8bd08c9246d472abbe850af446405d9eba1db41db18b4a169a04513310fcb9f6f616972a3b948dc5d547f280849a87ebb5af0191f98b87be598a0fe2bf2a941abf41d72637e5b91750332a30283efd40c424dc522b77e6f0ed8c4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000860153886c1bbd82b44382520b8252088455c426598b657468706f6f6c2e6f7267a0b48c515a9dde8d346c3337ea520aa995a4738bb595495506125449c1149d6cf488ba4f8ecd18aab215f869f86780862d79883d2000825208945df9b87991262f6ba471f09758cde1c0fc1de734827a69801ca088ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0a045e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33ac0", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx new file mode 100644 index 00000000000..fe99b222aa0 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbyhash-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash", "params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceBlockByHash","params": ["0xcc4e47e5f5e82c12ccd511e97f6994b4c4f95808778323ed5cf0a56640b0a815", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx new file mode 100644 index 00000000000..442745050ee --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/_debug_traceblockbynumber-request.mdx @@ -0,0 +1,23 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ \ +-x '{"method":"debug_traceBlockByNumber","params":["0x4d0c", {"tracer": "callTracer"}],"id":1,"jsonrpc":"2.0"}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/debug/_debug_tracecall-request.mdx b/services/reference/scroll/json-rpc-methods/debug/_debug_tracecall-request.mdx new file mode 100644 index 00000000000..048c457f8eb --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/_debug_tracecall-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "debug_traceCall", "params": [{"to": "0x6b175474e89094c44da98b954eedeac495271d0f", "data": "0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE"}, "latest", {"tracer": "callTracer"}], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/debug/debug_traceblock.mdx b/services/reference/scroll/json-rpc-methods/debug/debug_traceblock.mdx new file mode 100644 index 00000000000..2f58b8e0219 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/debug_traceblock.mdx @@ -0,0 +1,44 @@ +--- +description: Return a full trace of all invoked opcodes of all transactions included in the block. +title: Mantle debug_traceBlock +sidebar_label: debug_traceBlock +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlock` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblock-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblock-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblock-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblock-example.mdx' + + + +### Request + +import Request from './_debug_traceblock-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblock-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbyhash.mdx b/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbyhash.mdx new file mode 100644 index 00000000000..40986cd30ac --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the block specified by the block hash. +title: Mantle debug_traceBlockByHash +sidebar_label: debug_traceBlockByHash +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByHash` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbyhash-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbynumber.mdx b/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbynumber.mdx new file mode 100644 index 00000000000..dd23dfcb7c4 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/debug_traceblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +description: Return tracing results by executing all transactions in the specified block number. +title: Mantle debug_traceBlockByNumber +sidebar_label: debug_traceBlockByNumber +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceBlockByNumber` + +import Description from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-example.mdx' + + + +### Request + +import Request from './_debug_traceblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_traceblockbynumber-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/debug/debug_tracecall.mdx b/services/reference/scroll/json-rpc-methods/debug/debug_tracecall.mdx new file mode 100644 index 00000000000..1ad1ff45320 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/debug_tracecall.mdx @@ -0,0 +1,44 @@ +--- +description: Returns the number of possible tracing results in the context of the given block execution. +title: Mantle debug_traceCall +sidebar_label: debug_traceCall +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `debug_traceCall` + +import Description from '/services/reference/_partials/debug-methods/_debug_tracecall-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/debug-methods/_debug_tracecall-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/debug-methods/_debug_tracecall-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/debug-methods/_debug_tracecall-example.mdx' + + + +### Request + +import Request from './_debug_tracecall-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/debug-methods/_debug_tracecall-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/debug/index.md b/services/reference/scroll/json-rpc-methods/debug/index.md new file mode 100644 index 00000000000..66fff5771ab --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/debug/index.md @@ -0,0 +1,56 @@ +--- +description: Scroll debug methods. +sidebar_label: Debug methods +sidebar_key: scroll-debug-methods +--- + +# Scroll debug methods + +The debug API methods allow you to inspect and debug the network. Infura supports the following debug +methods on the Scroll network: + +- [`debug_traceBlock`](debug_traceblock.mdx) +- [`debug_traceBlockByHash`](debug_traceblockbyhash.mdx) +- [`debug_traceBlockByNumber`](debug_traceblockbynumber.mdx) +- [`debug_traceCall`](debug_tracecall.mdx) + +## Debug tracing types + +The debug methods support the `callTracer` and `prestateTracer` tracing types, which return different +results when specified in the supported debug methods. + +### `callTracer` + +The `callTracer` tracing type tracks all the call frames executed during a transaction, including the +initial call. It returns a nested list of call frames, resembling how the EVM works. They form a tree +with the top-level call at the root and sub-calls as children of the higher levels. + +The `callTracer` type returns an object with the following results: + +| Field | Type | Description | +| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------- | +| `type` | string | The type of call. | +| `from` | string | The address the transaction is sent from. | +| `to` | string | The address the transaction is directed to. | +| `value` | string | The amount transferred in the call (hex-encoded). | +| `gas` | string | The amount of gas provided for the call (hex-encoded). | +| `gasUsed` | string | The amount of gas used by the call (hex-encoded). | +| `input` | string | The call data. | +| `output` | string | The return data. | +| `error` | string | If an error occurred during the call, this field will contain the error message. | +| `revertReason` | string | If the contract execution was reverted, this field will contain the reason for the revert (if provided by Solidity). | +| `calls` | array | Sub-calls made by the contract during the execution of the transaction. | + +### `prestateTracer` + +The `prestateTracer` tracing type records and tracks every change made to the state during the execution +of transactions. It generates an object that contains keys representing the addresses of the accounts +involved in the transactions. The corresponding values are objects that include specific fields related +to the state changes made during the transaction: + +| Field | Type | Description | +| --------- | ------ | ------------------------------------ | +| `balance` | string | The account balance. | +| `nonce` | uint64 | The nonce value for the transaction. | +| `code` | string | The hex-encoded bytecode. | +| `storage` | map | The storage slots of the contract. | diff --git a/services/reference/scroll/json-rpc-methods/eth_accounts.mdx b/services/reference/scroll/json-rpc-methods/eth_accounts.mdx new file mode 100644 index 00000000000..bcea2a8e989 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_accounts.mdx @@ -0,0 +1,41 @@ +--- +title: Scroll eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Scroll accounts. +--- + +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' + + + +### Request + +import Request from './_eth_accounts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_blocknumber.mdx b/services/reference/scroll/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..78212d68f4b --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Scroll block number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_call.mdx b/services/reference/scroll/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..0f6c526af82 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_call.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_call +sidebar_label: eth_call +description: Executes a Scroll call without creating a transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from './_eth_scroll-call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_chainid.mdx b/services/reference/scroll/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..f41741ad9c0 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_chainId +sidebar_label: eth_chainId +description: Returns the Scroll chain ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_estimategas.mdx b/services/reference/scroll/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..1d1b4bec727 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Scroll transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from './_eth_scroll-estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_feehistory.mdx b/services/reference/scroll/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..03e2c8fbee8 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Scroll gas information. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gasprice.mdx b/services/reference/scroll/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..823b5fb4a35 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Scroll gas price. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getbalance.mdx b/services/reference/scroll/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..01b645d0c4c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Scroll address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from './_eth_scroll-getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/scroll/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..e24a323ec34 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Scroll block information by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/scroll/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..dbc498c8e91 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Scroll block information by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from './_eth_scroll-getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/scroll/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..016f4df7890 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from './_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..0f7873bd02c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..d5560b800af --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from './_eth_scroll-getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getcode.mdx b/services/reference/scroll/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..97505b80184 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from './_eth_scroll-getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getlogs.mdx b/services/reference/scroll/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..1f3cba90d42 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from './_eth_scroll-getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getproof.mdx b/services/reference/scroll/json-rpc-methods/eth_getproof.mdx new file mode 100644 index 00000000000..1e433f7172f --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getproof.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` + + + +## Parameters + +import Params from './_eth_scroll-getproof-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' + + + +### Request + +import Request from './_eth_getproof-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getstorageat.mdx b/services/reference/scroll/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..a1e0dfffb24 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from './_eth_scroll-getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..981dcbfc2cc --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..6230fe24c84 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from './_eth_scroll-gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..309ef73cd14 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/scroll/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..9765f5e601c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from './_eth_scroll-gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/scroll/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..12dae101f9a --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/scroll/json-rpc-methods/eth_getunclebyblockhashandindex.mdx new file mode 100644 index 00000000000..266be73ded0 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/scroll/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx new file mode 100644 index 00000000000..6215310a8b1 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` + + + +## Parameters + +import Params from './_eth_scroll-getunclebyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblockhash.mdx new file mode 100644 index 00000000000..8acbc6fb133 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblockhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblocknumber.mdx new file mode 100644 index 00000000000..0b5c9be9df7 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` + + + +## Parameters + +import Params from './_eth_scroll-getunclecountbyblocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/scroll/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..9c2f0cb3836 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/scroll/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..c1f1e082f10 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/eth_syncing.mdx b/services/reference/scroll/json-rpc-methods/eth_syncing.mdx new file mode 100644 index 00000000000..52a7d2b35da --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/eth_syncing.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx new file mode 100644 index 00000000000..3850bda46c1 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterchanges-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterChanges", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx new file mode 100644 index 00000000000..fe86242318c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_getfilterlogs-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getFilterLogs", "params": ["0x10ff0bfbedb01f0dbd4106d14eb719ec38b6eb5b821c"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx new file mode 100644 index 00000000000..66b1527a6d1 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newblockfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newBlockFilter", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx new file mode 100644 index 00000000000..6731dadd5c0 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_newfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_newFilter", "params": [{"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx new file mode 100644 index 00000000000..f89bd9c049d --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/_eth_uninstallfilter-request.mdx @@ -0,0 +1,22 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_uninstallFilter", "params": ["0x10ff0bfba9472c87932c56632eef8f5cc70910e8e71d"], "id": 1}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx new file mode 100644 index 00000000000..c53098fd847 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterchanges.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getFilterChanges +sidebar_label: eth_getFilterChanges +description: Returns Scroll logs since last poll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-description.mdx' + +# `eth_getFilterChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-example.mdx' + + + +### Request + +import Request from './_eth_getfilterchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterchanges-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx new file mode 100644 index 00000000000..4df29bc0839 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/eth_getfilterlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_getFilterLogs +sidebar_label: eth_getFilterLogs +description: Returns logs by filter ID on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-description.mdx' + +# `eth_getFilterLogs` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-example.mdx' + + + +### Request + +import Request from './_eth_getfilterlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_getfilterlogs-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/eth_newblockfilter.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/eth_newblockfilter.mdx new file mode 100644 index 00000000000..f1705f56d4a --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/eth_newblockfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_newBlockFilter +sidebar_label: eth_newBlockFilter +description: Creates filter to notify of new blocks on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newblockfilter-description.mdx' + +# `eth_newBlockFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newblockfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newblockfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newblockfilter-example.mdx' + + + +### Request + +import Request from './_eth_newblockfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newblockfilter-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/eth_newfilter.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/eth_newfilter.mdx new file mode 100644 index 00000000000..d86fdc11ad7 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/eth_newfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_newFilter +sidebar_label: eth_newFilter +description: Creates filter to notify of state changes on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_newfilter-description.mdx' + +# `eth_newFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_newfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_newfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_newfilter-example.mdx' + + + +### Request + +import Request from './_eth_newfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_newfilter-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx b/services/reference/scroll/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx new file mode 100644 index 00000000000..70159bae71e --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/eth_uninstallfilter.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_uninstallFilter +sidebar_label: eth_uninstallFilter +description: Uninstalls filter on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-description.mdx' + +# `eth_uninstallFilter` + + + +## Parameters + +import Params from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-example.mdx' + + + +### Request + +import Request from './_eth_uninstallfilter-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/filter-methods/_eth_uninstallfilter-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/filter-methods/index.md b/services/reference/scroll/json-rpc-methods/filter-methods/index.md new file mode 100644 index 00000000000..04c646841bf --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/filter-methods/index.md @@ -0,0 +1,12 @@ +--- +title: Scroll filter methods +sidebar_label: Filter methods +sidebar_key: scroll-filter-methods +description: Scroll filter methods +--- + +# Scroll filter methods + +Infura supports the following filter methods over both HTTP and WebSocket. In both cases, the filter IDs can be shared by any connection using the same API key. + +Filters that are not polled using [`eth_getFilterChanges`](eth_getfilterchanges.mdx) will be automatically expired after fifteen minutes of inactivity. diff --git a/services/reference/scroll/json-rpc-methods/index.md b/services/reference/scroll/json-rpc-methods/index.md new file mode 100644 index 00000000000..a975df58f8a --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/index.md @@ -0,0 +1,152 @@ +--- +sidebar_label: JSON-RPC API +sidebar_key: scroll-json-rpc-api +--- + +# Scroll JSON-RPC API + +Here you can find the JSON-RPC API endpoints. You [can call these APIs using a variety of tools](../quickstart.md). + +## Error codes + +You may encounter various errors when interacting with a network: + +- [**JSON-RPC errors**](#json-rpc-errors) + operations on the blockchain network. It means the server has successfully received the JSON-RPC + request but encountered an issue processing it. Causes might include invalid parameters, a method not + found, or execution errors related to the requested operation. + +- [**HTTP errors**](#http-errors): These happen at the transport layer during data transmission to the blockchain + network. They could stem from Infura-related issues like rate limits, API key problems, or + service availability issues. + +- [**Smart contract errors**](#smart-contract-errors): These arise during attempts to execute transactions in the EVM + involving smart contracts. + +### JSON-RPC errors + +Error codes returned by Infura's RPC service network APIs can vary slightly between implementations, but +they generally follow the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#error_object) +and Ethereum-specific conventions. + +Below is a table listing the error codes, their messages, and meanings. The "Standard" category includes +common JSON-RPC errors, while the "Non-standard" category encompasses server errors defined by the +implementation. + +| Code | Message | Meaning | Category | +| ------ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| -32700 | Parse error | The JSON request is invalid, this can be due to syntax errors. | Standard | +| -32600 | Invalid request | The JSON request is possibly malformed. | Standard | +| -32601 | Method not found | The method does not exist, often due to a typo in the method name or the method not being supported. | Standard | +| -32602 | Invalid argument | Invalid method parameters. For example, `"error":{"code":-32602,"message":"invalid argument 0: json: cannot unmarshal hex string without 0x prefix into Go value of type common.Hash"}` indicates the `0x` prefix is missing from the hexadecimal address. | Standard | +| -32603 | Internal error | An internal JSON-RPC error, often caused by a bad or invalid payload. | Standard | +| -32000 | Invalid input | Missing or invalid parameters, possibly due to server issues or a block not being processed yet. | Non-standard | +| -32001 | Resource not found | The requested resource cannot be found, possibly when calling an unsupported method. | Non-standard | +| -32002 | Resource unavailable | The requested resource is not available. | Non-standard | +| -32003 | Transaction rejected | The transaction could not be created. | Non-standard | +| -32004 | Method not supported | The requested method is not implemented. | Non-standard | +| -32005 | Limit exceeded | The request exceeds your request limit. | Non-standard | +| -32006 | JSON-RPC version not supported | The version of the JSON-RPC protocol is not supported. | Non-standard | + +Example error response: + +```json +{ + "id": 1337 + "jsonrpc": "2.0", + "error": { + "code": -32003, + "message": "Transaction rejected" + } +} +``` + +### HTTP errors + +Infura-specific error codes or messages could include errors for rate limits, API key issues, or +service availability problems. + +| Code | Message | Meaning | +| ---- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 400 | Bad request | Incorrect HTTP Request type or invalid characters, ensure that your request body and format is correct. | +| 401 | Unauthorized | This can happen when one or multiple security requirements are not met. Example responses: `project id required in the url`, `invalid project id`, `invalid project id or project secret`, `invalid JWT`. | +| 403 | Forbidden | The request was intentionally refused due to specific settings mismatch, check your key settings. Example response: `"error":{"code":-32002,"message":"rejected due to project ID settings"}`. | +| 429 | Too Many Requests | The daily request total or request per second are higher than your plan allows. Refer to the [Avoid rate limiting](../../../how-to/avoid-rate-limiting.md) topic for more information. Example responses: `"error": {"code": -32005, "message": "daily request count exceeded, request rate limited"}`, `"error": {"code": -32005, "message": "project ID request rate exceeded"}`. | +| 500 | Internal Server Error | Error while processing the request on the server side. | +| 502 | Bad Gateway | Indicates a communication error which can have various causes, from networking issues to invalid response received from the server. | +| 503 | Service Unavailable | Indicates that the server is not ready to handle the request. | +| 504 | Gateway Timeout | The request ended with a timeout, it can indicate a networking issue or a delayed or missing response from the server. | + +### Smart contract errors + +When interacting with smart contracts, you might also encounter errors related to the execution of +transactions in the EVM: + +- **Out of gas**: The transaction does not have enough gas to complete. +- **Revert**: The transaction was reverted by the EVM, often due to a condition in the smart contract code. +- **Bad instruction**: The transaction tried to execute an invalid operation. +- **Bad jump destination**: A jump was made to an invalid location in the smart contract code. + +## Value encoding + +Specific types of values passed to and returned from Ethereum RPC methods require special encoding: + +### Quantity + +A `Quantity` (integer, number) must: + +- Be hex-encoded. +- Be `0x`-prefixed. +- Be expressed using the fewest possible hex digits per byte. +- Express zero as `0x0`. + +Examples `Quantity` values: + +| Value | Validity | Reason | +| -------- | --------- | ---------------------------------- | +| `0x` | `invalid` | Empty not a valid quantity. | +| `0x0` | `valid` | Interpreted as a quantity of zero. | +| `0x00` | `invalid` | Leading zeroes not allowed. | +| `0x41` | `valid` | Interpreted as a quantity of 65. | +| `0x400` | `valid` | Interpreted as a quantity of 1024. | +| `0x0400` | `invalid` | Leading zeroes not allowed. | +| `ff` | `invalid` | Values must be prefixed. | + +### Block identifier + +The RPC methods below take a default block identifier as a parameter. + +- `eth_getBalance` +- `eth_getStorageAt` +- `eth_getTransactionCount` +- `eth_getCode` +- `eth_call` +- `eth_getProof` + +Since there is no way to clearly distinguish between a `Data` parameter and a `Quantity` parameter, [EIP-1898](https://eips.ethereum.org/EIPS/eip-1898) provides a format to specify a block either using the block hash or block number. The block identifier is a JSON `object` with the following fields: + +| Property | Type | Description | +| ------------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `[blockNumber]` | \{[`Quantity`](eth_blocknumber.mdx)\} | The block in the canonical chain with this number | +| OR `[blockHash]` | \{[`Data`](eth_getblockbyhash.mdx)\} | The block uniquely identified by this hash. The `blockNumber` and `blockHash` properties are mutually exclusive; exactly one of them must be set. | +| `requireCanonical` | \{`boolean`\} | (Optional) Whether or not to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the `blockHash` tag. The default is `false`. | + +### Data + +A `Data` value (for example, byte arrays, account addresses, hashes, and bytecode arrays) must: + +- Be hex-encoded. +- Be "0x"-prefixed. +- Be expressed using two hex digits per byte. + +Examples `Data` values: + +| Value | Valid | Reason | +| ---------- | --------- | --------------------------------------------------- | +| `0x` | `valid` | Interpreted as empty data. | +| `0x0` | `invalid` | Each byte must be represented using two hex digits. | +| `0x00` | `valid` | Interpreted as a single zero byte. | +| `0x41` | `true` | Interpreted as a data value of 65. | +| `0x004200` | `true` | Interpreted as a data value of 16896. | +| `0xf0f0f` | `false` | Bytes require two hex digits. | +| `004200` | `false` | Values must be prefixed. | diff --git a/services/reference/scroll/json-rpc-methods/net_listening.mdx b/services/reference/scroll/json-rpc-methods/net_listening.mdx new file mode 100644 index 00000000000..77c70a81470 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/net_listening.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_listening-example.mdx' + + + +### Request + +import Request from './_net_listening-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_listening-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/net_peercount.mdx b/services/reference/scroll/json-rpc-methods/net_peercount.mdx new file mode 100644 index 00000000000..97796e4f9d2 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/net_peercount.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_peercount-example.mdx' + + + +### Request + +import Request from './_net_peercount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_peercount-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/net_version.mdx b/services/reference/scroll/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..09cc2d2cb1c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/net_version.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll net_version +sidebar_label: net_version +description: Returns network ID on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-parameters-no-pending.mdx b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-parameters-no-pending.mdx new file mode 100644 index 00000000000..d8232c44c22 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-parameters-no-pending.mdx @@ -0,0 +1,9 @@ +Specify one of the following subscription events: + +- `newHeads`: Subscribing to this returns a notification each time a new header is appended to the chain, including chain reorganizations. In a chain reorganization, the subscription emits all new headers for the new chain. Therefore the subscription can emit multiple headers at the same height. +- `logs`: Returns logs that are included in new imported blocks and match the given filter criteria. In case of a chain reorganization, previously sent logs that are on the old chain are resent with the removed property set to `true`. Logs from transactions that ended up in the new chain are emitted. Therefore a subscription can emit logs for the same transaction multiple times. This parameter has the following fields: + - `address`: (_optional_) Either an address or an array of addresses. Only logs that are created from these addresses are returned. + - `topics`: (_optional_) Only logs that match these specified topics are returned. + :::tip Infura Recommendation + We strongly recommend specifying a filter (`address` or `topics` or both) when subscribing to the `logs` event. + ::: diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx new file mode 100644 index 00000000000..9aadec43568 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -0,0 +1,19 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}' +``` + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}' +``` + + + diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx new file mode 100644 index 00000000000..6ed85b057d4 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -0,0 +1,13 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}' +``` + + + + diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/scroll/json-rpc-methods/subscription-methods/eth_subscribe.mdx new file mode 100644 index 00000000000..71d5dcc900c --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` + + + +## Parameters + +import Params from './_eth_subscribe-parameters-no-pending.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' + + + +### Request + +import Request from './_eth_subscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/scroll/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx new file mode 100644 index 00000000000..a6d3e62324f --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` + + + +## Parameters + +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' + + + +### Request + +import Request from './_eth_unsubscribe-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/subscription-methods/index.md b/services/reference/scroll/json-rpc-methods/subscription-methods/index.md new file mode 100644 index 00000000000..cff5a0d81c9 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/subscription-methods/index.md @@ -0,0 +1,24 @@ +--- +title: Scroll subscription methods +sidebar_label: Subscription methods +sidebar_key: scroll-subscription-methods +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Scroll subscription methods + +Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. + +The following subscription methods are available: + +- [`eth_subscribe`](eth_subscribe.mdx) - Create a subscription to a particular event +- [`eth_unsubscribe`](eth_unsubscribe.mdx) - Cancel an active subscription + +:::info + +We recommend you use the WSS protocol to set up bidirectional stateful subscriptions. Stateless HTTP WebSockets are also +supported. + +::: diff --git a/services/reference/scroll/json-rpc-methods/web3_clientversion.mdx b/services/reference/scroll/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..9032f87cde4 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,44 @@ +--- +title: Scroll web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Scroll. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/scroll/json-rpc-methods/web3_sha3.mdx b/services/reference/scroll/json-rpc-methods/web3_sha3.mdx new file mode 100644 index 00000000000..bee3d072558 --- /dev/null +++ b/services/reference/scroll/json-rpc-methods/web3_sha3.mdx @@ -0,0 +1,66 @@ +--- +title: Scroll web3_sha3 +sidebar_label: web3_sha3 +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `web3_sha3` + +Returns a [SHA3](https://en.wikipedia.org/wiki/SHA-3) hash of the specified data. The result value is a [Keccak-256](https://keccak.team/keccak.html) hash, not the standardized SHA3-256. + +## Parameters + +`data`: [Required] _string_ - data to convert to a SHA3 hash. + +## Returns + +`result`: _string_ - SHA3 result of the input data. + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + + + + + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_sha3", "params":["0x68656c6c6f20776f726c00"], "id": 1}' +``` + + + + +```bash + wscat -c wss://scroll-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method":web3_sha3", "params":["0x68656c6c6f20776f726c00"], "id": 1}' +``` + + + + + +### Response + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f" +} +``` + + + + diff --git a/services/reference/scroll/quickstart.md b/services/reference/scroll/quickstart.md new file mode 100644 index 00000000000..86cedffc3e5 --- /dev/null +++ b/services/reference/scroll/quickstart.md @@ -0,0 +1,247 @@ +--- +description: Scroll quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from '@site/src/components/Banner' + +# Scroll quickstart + +This quickstart guide will help you set up and make calls on the Scroll network using the Infura endpoints. + + +Don't have an Infura account? Sign up for our free plan and start using the Scroll network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the Scroll network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://scroll-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +:::note + +In Windows Powershell, quotations in `curl` commands can behave differently than expected. We recommend using Postman on Windows systems. + +::: + +### Postman + +Call the JSON-RPC methods using [Postman](https://learning.postman.com/docs/getting-started/introduction/). + +Click **Run in Postman** to fork the collection and make requests. + +[![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/8171681-49bfbc10-85ae-466c-8cf0-91eba9298b12?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D8171681-49bfbc10-85ae-466c-8cf0-91eba9298b12%26entityType%3Dcollection%26workspaceId%3Db8156083-f4da-481f-84fa-72dcc26cb146) + +:::info + +Set the correct [variables](https://learning.postman.com/docs/sending-requests/variables/#understanding-variables) for your API key and network before running requests. + +::: + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://scroll-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://scroll-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://scroll-mainnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Web3.js + +1. In your project folder, [install the latest version of the web3.js library](https://www.npmjs.com/package/web3?activeTab=versions) + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + var { Web3 } = require('web3') + var provider = 'https://scroll-mainnet.infura.io/v3/' + var web3Provider = new Web3.providers.HttpProvider(provider) + var web3 = new Web3(web3Provider) + + web3.eth.getBlockNumber().then(result => { + console.log('Latest Scroll Block is ', result) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://scroll-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {'content-type': 'application/json'} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the Scroll network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other Scroll APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Arbitrum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/sei/index.md b/services/reference/sei/index.md new file mode 100644 index 00000000000..6f0de48d791 --- /dev/null +++ b/services/reference/sei/index.md @@ -0,0 +1,59 @@ +--- +description: Sei network documentation. +--- + +import CardList from '@site/src/components/CardList' + +# Sei + +:::note Decentralized Infrastructure Network (DIN) + +Sei is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +::: + +Sei is a Layer 1 blockchain designed for trading and exchange-focused applications. It features a +parallelized EVM architecture, native order matching, and subsystems that address latency and scalability +limitations while maintaining Ethereum compatibility. + +:::info See also +Refer to the [official Sei documentation](https://docs.sei.io/) for more information. +::: + +Select an option below to get started with the Sei network. + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill +your API request. This means that Infura's partner service provider can service your request, but not +store the content of your request. + +The following partners provide access to the Sei network: + + + +- BlockPI ([Terms of Use](https://blockpi.io/terms-of-use), [Privacy Policy](https://blockpi.io/privacy-policy)) +- Nodefleet ([Privacy Policy](https://nodefleet.org/#/privacy-policy)) +- Nodies ([Terms of Service](https://www.nodies.app/tos.txt), [Privacy Policy](https://www.nodies.app/privacy.txt)) + diff --git a/services/reference/sei/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/sei/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..b8e6bb6dc68 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_call-request.mdx b/services/reference/sei/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..e2e2fb28989 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xBEFcda6d33bC7876827Dd8EC11719cFED9b1a113", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/sei/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..c45a463c618 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/sei/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..dcb29456548 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0xBEFcda6d33bC7876827Dd8EC11719cFED9b1a113", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/sei/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..7f74a9f5ca4 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]] }' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..8079d6261bc --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..023e021eeb3 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..f227322d5c0 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0x196C64BD2E8E4E3C17EDCB61ABEFEF613E59C2F00E99FDCE4CDBBA164FC591D7", false], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..200c7b4d8d6 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55",false], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..9d48c71c7ab --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..e1a450616a5 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0x196C64BD2E8E4E3C17EDCB61ABEFEF613E59C2F00E99FDCE4CDBBA164FC591D7"], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..e0ef82ad7ca --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,16 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..3b21482fef5 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x6cAfAD6AAf5F3EAB6a7a31472A8B577d5eCF8777", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..56065f606c6 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"address": "0x6cAfAD6AAf5F3EAB6a7a31472A8B577d5eCF8777", "blockhash": "0x39f66b313cec316249c2933702bbca771d85845896d794008e482ca63bc045b1"}], "id":1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/sei/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..24a586459a2 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..5b71aab92da --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..9ac452ab91f --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..4ff293f24d1 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..6f542d2833a --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/sei/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..21238b1b7e8 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/sei/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..d8b2df3252a --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/sei/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..2c20fcd71d1 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_net_version-request.mdx b/services/reference/sei/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..7f71ca40a4e --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/sei/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..11c8bffac3c --- /dev/null +++ b/services/reference/sei/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/sei/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/sei/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..a3529cd9545 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..d7d1f926600 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..78ecc687371 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/sei/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..65777c2f7db --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/sei/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..fef2a004233 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/index.md b/services/reference/sei/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..81744b3b449 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Sei bundler methods +sidebar_label: Bundler methods +sidebar_key: sei-bundler-methods +description: Sei bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Sei mainnet +and testnet: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..c544831c7e4 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..b4c5b7d39e6 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/sei/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..119ee298880 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/sei/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_blocknumber.mdx b/services/reference/sei/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..738de43c354 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_blockNumber' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_call.mdx b/services/reference/sei/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..eca77bd3ab5 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_call.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_call' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_chainid.mdx b/services/reference/sei/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..e3e172b4a83 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_chainId' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_estimategas.mdx b/services/reference/sei/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..ae2ab2ed2c2 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_estimateGas' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_feehistory.mdx b/services/reference/sei/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..f62323cded8 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_feeHistory' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gasprice.mdx b/services/reference/sei/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..4435c3e3234 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_gasPrice' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getbalance.mdx b/services/reference/sei/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..87b1b0c1342 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getBalance' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/sei/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..6cb8323c2b8 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getBlockByHash' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/sei/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..0acdc53ca2f --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getBlockByNumber' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/sei/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..45def3acf0a --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,44 @@ +--- +title: Arbitrum eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for an Arbitrum block. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from './_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..98218c967ce --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getBlockTransactionCountByHash' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..5b1c731e607 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getBlockTransactionCountByNumber' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getcode.mdx b/services/reference/sei/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..930209786b0 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getCode' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getlogs.mdx b/services/reference/sei/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..e7f73969fee --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getLogs' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_getstorageat.mdx b/services/reference/sei/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..74c220778de --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getStorageAt' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/sei/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..0bfe127b19d --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getTransactionByBlockHashAndIndex' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/sei/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..7857c3387fa --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getTransactionByBlockNumberAndIndex' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/sei/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..476921e8974 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getTransactionByHash' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/sei/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..25804a79952 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getTransactionCount' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/sei/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..90f3791e5df --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_getTransactionReceipt' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/sei/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..f532dca2571 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_maxPriorityFeePerGas' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/sei/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..4f2dc92e6d4 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,40 @@ +--- +title: 'eth_sendRawTransaction' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/index.md b/services/reference/sei/json-rpc-methods/index.md new file mode 100644 index 00000000000..9c22e755c84 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/index.md @@ -0,0 +1,13 @@ +--- +title: 'JSON-RPC methods' +description: Supported standard Ethereum methods on Sei network. +sidebar_key: sei-json-rpc-api +--- + +# JSON-RPC API + +The standard Ethereum methods documented in this section are supported by Infura on the Sei network. + +:::info See also +Refer to the [official Sei documentation](https://docs.sei.io/) for more information. +::: diff --git a/services/reference/sei/json-rpc-methods/net_version.mdx b/services/reference/sei/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..5710fccf752 --- /dev/null +++ b/services/reference/sei/json-rpc-methods/net_version.mdx @@ -0,0 +1,40 @@ +--- +title: 'net_version' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/sei/json-rpc-methods/web3_clientversion.mdx b/services/reference/sei/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..83762388ebb --- /dev/null +++ b/services/reference/sei/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,40 @@ +--- +title: 'web3_clientVersion' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/sei/quickstart.md b/services/reference/sei/quickstart.md new file mode 100644 index 00000000000..8f3cdba12c2 --- /dev/null +++ b/services/reference/sei/quickstart.md @@ -0,0 +1,201 @@ +--- +description: Sei quickstart guide +sidebar_position: 2 +--- + +import Banner from '@site/src/components/Banner' + +# Quickstart + +This quickstart guide will help you set up and make calls on the Sei network using the Infura endpoints. + + +Don't have an Infura account? Sign up for our free plan and start using the Sei network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Sei network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://sei-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://sei-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://sei-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://sei-mainnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://sei-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {"content-type": "application/json"} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the Sei network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other Sei APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/solana/index.md b/services/reference/solana/index.md new file mode 100644 index 00000000000..fae6c79a465 --- /dev/null +++ b/services/reference/solana/index.md @@ -0,0 +1,53 @@ +--- +description: Solana network documentation. +--- + +import CardList from '@site/src/components/CardList' + +# Solana + +:::note Decentralized Infrastructure Network (DIN) + +Solana is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +::: + +Solana provides a high-performance network that is utilized for a range of use cases, including finance, NFTs, payments, and gaming. +Solana operates as a single global state machine and is open and interoperable. + +:::info See also + +- See the [official Solana documentation](https://solana.com/docs) for more information. + ::: + +Select an option below to get started with the Solana network. + + + +## Partners and privacy policies + +The following partners provide access to the Solana network: + + + +- Everstake ([Terms of Use](https://everstake.one/terms-of-use), [Privacy Notice](https://everstake.one/privacy-notice)) +- Triton One ([Terms of Service and Privacy Policy](https://triton.one/policies)) + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getasset.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getasset.mdx new file mode 100644 index 00000000000..4e6eb7a7ec8 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getasset.mdx @@ -0,0 +1,257 @@ +--- +title: 'getAsset' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAsset` + +Returns the metadata information of a compressed or standard asset. + +## Parameters + +- `id`: (string) _[required]_ - The `base58` encoded public key of the asset to query. +- `config`: (object) _[optional]_ - Optional flags to return additional information about the asset: + - `showFungible`: (boolean) - Whether to return the `token_info` object about the asset. + - `showUnverifiedCollections`: (boolean) - Whether to return an asset from an unverified collection. + - `showCollectionMetadata`: (boolean) - Whether to return the collection metadata. + +## Returns + +`result` - An object with the following fields: + +- `interface` - The interface type of the asset. Return types + include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. +- `id` - The ID of the asset. +- `content` - Metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - Metadata fields: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. +- `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. +- `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. +- `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. +- `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. +- `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. +- `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. +- `supply` - Supply details: + - `print_max_supply` - The maximum supply for prints. + - `print_current_supply` - The current supply for prints. + - `edition_nonce` - The edition nonce. +- `mutable` - Whether the asset is mutable. +- `burnt` - Whether the asset is burnt. +- `token_info` - Additional token info which is returned via the `showFungible` parameter: + - `supply` - The supply of the asset. + - `decimals` - The decimals supported by the asset. + - `token_program` - The token program of the asset. + - `mint_authority` - The mint authority of the asset. + - `freeze_authority` - The freeze authority of the asset. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAsset", "params": ["GEciJX32EwG7DeHrXgosvpDAgjiuPo3uSEUAfJPLoSBD"]}' +``` + + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "interface": "Custom", + "id": "GEciJX32EwG7DeHrXgosvpDAgjiuPo3uSEUAfJPLoSBD", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://arweave.net/I657C0VaPHIN7G4iL8Lr_8nctJhoIecFIyzlMCVF6IQ", + "files": [ + { + "uri": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es", + "mime": "image/png" + }, + { + "uri": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es?ext=png", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Green", + "trait_type": "Background" + }, + { + "value": "Green / Green", + "trait_type": "Fur / Skin" + }, + { + "value": "Policeman's Cap", + "trait_type": "Head" + }, + { + "value": "Sandwich", + "trait_type": "Mouth" + }, + { + "value": "No Traits", + "trait_type": "Teeth" + }, + { + "value": "Police Uniform", + "trait_type": "Clothing" + }, + { + "value": "No Traits", + "trait_type": "Eyewear" + }, + { + "value": 1, + "trait_type": "generation", + "display_type": "number" + }, + { + "value": 2463, + "trait_type": "sequence", + "display_type": "number" + } + ], + "description": "Deep in the heart of Dingus Forest echoes the sleepless cries of a troop of 10,000 apes. These aren't just regular apes, however. These are degenerate apes.", + "name": "Degen Ape #2463", + "symbol": "DAPE" + }, + "links": { + "external_url": "", + "image": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es" + } + }, + "authorities": [ + { + "address": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "DSwfRF1jhhu6HpSuzaig1G19kzP73PfLZBPLofkw6fLD" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.042, + "basis_points": 420, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L", + "share": 39, + "verified": false + }, + { + "address": "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9", + "share": 25, + "verified": false + }, + { + "address": "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM", + "share": 25, + "verified": false + }, + { + "address": "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu", + "share": 10, + "verified": false + }, + { + "address": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX", + "share": 1, + "verified": true + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 255 + }, + "mutable": false, + "burnt": false + }, + "id": 0 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproof.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproof.mdx new file mode 100644 index 00000000000..1d50f17c4c7 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproof.mdx @@ -0,0 +1,82 @@ +--- +title: 'getAssetProof' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetProof` + +Returns the Merkle tree proof information for a compressed asset. + +## Parameters + +- `id`: (string) _[required]_ - The `base58` encoded public key of the asset to query. + +## Returns + +`result` - An object containing the following fields: + +- `root` - The root hash of the Merkle tree. +- `proof` - An array of hashes representing the Merkle proof. +- `node_index` - The index of the node in the Merkle tree. +- `leaf` - The hash of the leaf node. +- `tree_id` - The ID of the Merkle tree. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetProof", "params": ["Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss"]}' +``` + + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "root": "2o6Y6EiY3WXhoaEpei2pHmHLYnHDcEQVhgD89GrGHDBH", + "proof": [ + "EmJXiXEAhEN3FfNQtBa5hwR8LC5kHvdLsaGCoERosZjK", + "7NEfhcNPAwbw3L87fjsPqTz2fQdd1CjoLE138SD58FDQ", + "6dM3VyeQoYkRFZ74G53EwvUPbQC6LsMZge6c7S1Ds4ks", + "A9AACJ5m7UtaVz4HxzhDxGjYaY88rc2XPoFvnoTvgYBj", + "2VG5cKeBZdqozwhHGGzs13b9tzy9TXt9kPfN8MzSJ1Sm", + "3E1uFze4pi6BnTZXMsQbeh3jQCeDi966Zax9aMbYgg2D", + "Bx9PdctdWCeC1WfU6dwP49idsXCYhqyxbRLyLwwGhr61", + "HSbJ8quT4vuXFgf5FnjzeUuFfAtLKsq6W1Frj8y1qrif", + "GJMLzL4F4hY9yFHY1EY6XRmW4wpuNGeBZTiv7vM2mYra", + "FYPtEiqmRx6JprHQvWeEWEuVp3WA7DPRCE4VbhFRVuAj", + "6MJKrpnK1GbYsnEzwMRWStNGkTjAZF23NhzTQSQVXsD3", + "HjnrJn5vBUUzpCxzjjM9ZnCPuXei2cXKJjX468B9yWD7", + "4YCF1CSyTXm1Yi9W9JeYevawupkomdgy2dLxEBHL9euq", + "E3oMtCuPEauftdZLX8EZ8YX7BbFzpBCVRYEiLxwPJLY2" + ], + "node_index": 16384, + "leaf": "6YdZXw49M97mfFTwgQb6kxM2c6eqZkHSaW9XhhoZXtzv", + "tree_id": "2kuTFCcjbV22wvUmtmgsFR7cas7eZUzAu96jzJUvUcb7" + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproofbatch.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproofbatch.mdx new file mode 100644 index 00000000000..bb34e54d0d2 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetproofbatch.mdx @@ -0,0 +1,85 @@ +--- +title: 'getAssetProofBatch' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetProofBatch` + +Returns the Merkle tree proof information for multiple compressed assets. + +## Parameters + +- `ids`: (array of strings) _[required]_ - An array of `base58` encoded public keys of the assets to query. + +## Returns + +`result` - An object where each key is an asset ID, and the value is an object containing the following fields: + +- `root` - The root hash of the Merkle tree. +- `proof` - An array of hashes representing the Merkle proof. +- `node_index` - The index of the node in the Merkle tree. +- `leaf` - The hash of the leaf node. +- `tree_id` - The ID of the Merkle tree. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetProofBatch", "params": [["D85MZkvir9yQZFDHt8U2ZmS7D3LXKdiSjvw2MBdscJJa", "ELDjRRs5Wb478K4h3B5bMPEhqFD8FvoET5ctHku5uiYi"]]}' +``` + + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "ELDjRRs5Wb478K4h3B5bMPEhqFD8FvoET5ctHku5uiYi": null, + "D85MZkvir9yQZFDHt8U2ZmS7D3LXKdiSjvw2MBdscJJa": { + "root": "HscyoK57Grh1CGHi7HDDGaQRqe3CtetqgwZCBjw6E73t", + "proof": [ + "4EVwURnyVehgq4LhPfJFmPngfuNvreJgBGX1jbojcg7p", + "89KmAg6NuRkwbSmpEU2fH8tJmuoGkwAwkV7MZaTRuRyE", + "DD34gSoVzcDJKK4FcQx6RPDBmjwsWJ2JyL9Poch9i6Hm", + "F9oTuKohez7fbLjXXfqurqNG4KhVn2RgnC7o85Z4qgnm", + "HSfwLLiVjmhtFFFaLF6VFQZ7NrWZW9qoZDGWTPnU8Trw", + "CyFfjtkvg1HfexcekN6cCrUYmUwqtoeFGaTWeyPGxqmj", + "3Rv9v5r97j6vudzjVF8idGQdeu7jJdHgm75pTAeiN9ce", + "6mr5hmD2nkPU76irs6duAYekRgPxDWh8JMuunua4Whra", + "HxDaLgV8UrMq4G3YtXfcCx4UXm511hWSxPTeAfcD39vG", + "EvxphsdRErrDMs9nhFfF4nzq8i1C2KSogA7uB96TPpPR", + "HpMJWAzQv9HFgHBqY1o8V1B27sCYPFHJdGivDA658jEL", + "GcUfCg1P6XhSXzW34YmgXspCYaT7ujHSNmDK2CDEA3dy", + "4YCF1CSyTXm1Yi9W9JeYevawupkomdgy2dLxEBHL9euq", + "E3oMtCuPEauftdZLX8EZ8YX7BbFzpBCVRYEiLxwPJLY2" + ], + "node_index": 18559, + "leaf": "91eAJoZoXMmLbxCGWo7tdfHT7ZDYZMLgJRaGi2ocPxwL", + "tree_id": "5i1rrMFvFfwCkR15cf66bEXM2LmtfffDfYegQ3qdWgcF" + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassets.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassets.mdx new file mode 100644 index 00000000000..f65cde08bc8 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassets.mdx @@ -0,0 +1,325 @@ +--- +title: 'getAssets' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssets` + +Returns the metadata information of multiple compressed or standard assets. + +## Parameters + +- `ids`: (array of strings) _[required]_ - The `base58` encoded public keys of the assets to query. +- `config`: (object) _[optional]_ - Optional flags to return additional information about the asset: + - `showFungible`: (boolean) - Whether to return the `token_info` object about the asset. + - `showCollectionMetadata`: (boolean) - Whether to return the collection metadata. + +## Returns + +`result` - An array of objects, where each object contains the following fields: + +- `interface` - The interface type of the asset. Return types include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. +- `id` - The ID of the asset. +- `content` - Metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - Metadata fields: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. +- `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. +- `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. +- `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. +- `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. +- `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. +- `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. +- `supply` - Supply details: + - `print_max_supply` - The maximum supply for prints. + - `print_current_supply` - The current supply for prints. + - `edition_nonce` - The edition nonce. +- `mutable` - Whether the asset is mutable. +- `burnt` - Whether the asset is burnt. +- `token_info` - Additional token info which is returned via the `showFungible` flag: + - `supply` - The supply of the asset. + - `decimals` - The decimals supported by the asset. + - `token_program` - The token program of the asset. + - `mint_authority` - The mint authority of the asset. + - `freeze_authority` - The freeze authority of the asset. + +## Example + +Replace `` with your API key. + +### Request + + + + +````bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getAssets", + "params": [["GEciJX32EwG7DeHrXgosvpDAgjiuPo3uSEUAfJPLoSBD", "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"]] + }' + ``` + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "interface": "Custom", + "id": "GEciJX32EwG7DeHrXgosvpDAgjiuPo3uSEUAfJPLoSBD", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://arweave.net/I657C0VaPHIN7G4iL8Lr_8nctJhoIecFIyzlMCVF6IQ", + "files": [ + { + "uri": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es", + "mime": "image/png" + }, + { + "uri": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es?ext=png", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Green", + "trait_type": "Background" + }, + ... + { + "value": 2463, + "trait_type": "sequence", + "display_type": "number" + } + ], + "description": "Deep in the heart of Dingus Forest echoes the sleepless cries of a troop of 10,000 apes. These aren't just regular apes, however. These are degenerate apes.", + "name": "Degen Ape #2463", + "symbol": "DAPE" + }, + "links": { + "image": "https://arweave.net/IxZAe2W4quFYdtae3d_NFZ8kAAcledOkK6_C7H352es", + "external_url": "" + } + }, + "authorities": [ + { + "address": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "DSwfRF1jhhu6HpSuzaig1G19kzP73PfLZBPLofkw6fLD" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.042, + "basis_points": 420, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L", + "share": 39, + "verified": false + }, + { + "address": "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9", + "share": 25, + "verified": false + }, + { + "address": "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM", + "share": 25, + "verified": false + }, + { + "address": "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu", + "share": 10, + "verified": false + }, + { + "address": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX", + "share": 1, + "verified": true + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 255 + }, + "mutable": false, + "burnt": false + }, + { + "interface": "ProgrammableNFT", + "id": "exMUf3JuFQMBUc3p6osuqJRFQWr9wgQWBGiuzXmHJTa", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://arweave.net/4yDL8qbv-j58hjv3imAnC_nP-2VKmjy7bNMNPsdUDZQ", + "files": [ + { + "uri": "https://arweave.net/qAr3txiC4QwJk5Na9_0bJbEiPlUeRvVDH4-YzOALK44", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Cream", + "trait_type": "Background" + }, + ... + { + "value": "Hooded Cardigan", + "trait_type": "Clothes" + } + ], + "description": "Okay Bears is a culture shift. A clean collection of 10,000 diverse bears building a virtuous community that will transcend the internet into the real world.", + "name": "Okay Bear #6261", + "symbol": "OKB", + "token_standard": "ProgrammableNonFungible" + }, + "links": { + "external_url": "https://www.okaybears.com/", + "image": "https://arweave.net/qAr3txiC4QwJk5Na9_0bJbEiPlUeRvVDH4-YzOALK44" + } + }, + "authorities": [ + { + "address": "4zj22pu8yRyenFHwLmue28CqVmGFgVQt5FmVvwdP5fLa", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "3saAedkM9o5g1u5DCqsuMZuC4GRqPB4TuMkvSsSVvGQ3" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.05, + "basis_points": 500, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "3xVDoLaecZwXXtN59o6T3Gfxwjcgf8Hc9RfoqBn995P9", + "share": 0, + "verified": true + }, + { + "address": "7zL7HVn85F5yFT6XM3BsJcQF7PBcNE7R2BT5GyfunpKe", + "share": 100, + "verified": false + } + ], + "ownership": { + "frozen": true, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 254 + }, + "mutable": true, + "burnt": false + } + ], + "id": 1 +} +```` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyauthority.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyauthority.mdx new file mode 100644 index 00000000000..8a04d9ad949 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyauthority.mdx @@ -0,0 +1,232 @@ +--- +title: 'getAssetsByAuthority' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetsByAuthority` + +Returns the list of assets given an authority address. + +## Parameters + +- `authorityAddress`: (string) _[required]_ - The `base58` encoded public key of the authority of the assets. +- `sortBy`: (object) _[optional]_ - Sorting criteria for the results: + - `sortBy` - The field to sort by. Possible values: `created`, `updated`, `recent_action`, `id`, `none`. + - `sortDirection` - The sort direction. Possible values: `asc`, `desc`. +- `limit`: (number) _[optional]_ - The maximum number of assets to retrieve. +- `page`: (number) _[optional]_ - The index of the page to retrieve. +- `before`: (string) _[optional]_ - Retrieve assets before the specified ID. +- `after`: (string) _[optional]_ - Retrieve assets after the specified ID. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of assets matching the query. +- `limit` - The maximum number of assets returned in this response. +- `items` - An array of asset objects. Each asset object contains: + - `interface` - The interface type of the asset. Return types include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, + `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. + - `id` - The ID of the asset. + - `content` - An object containing the metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - An object containing the metadata information: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. + - `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. + - `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. + - `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. + - `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. + - `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. + - `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. + - `mutable` - Whether the asset is mutable. + - `burnt` - Whether the asset is burnt. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetsByAuthority", "params": ["3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", {"sortBy": "created", "sortDirection": "desc"}, 50, 1, null, null]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 50, + "limit": 50, + "page": 1, + "items": [ + { + "interface": "V1_NFT", + "id": "AMBvgj2Zcjg7wpo5Vfzy1ruXUWmYHS2fZkrqSwQEtpJz", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://famousfoxes.com/metadata/9712.json", + "files": [ + { + "uri": "https://famousfoxes.com/hd/9712.png", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Straw", + "trait_type": "Background" + }, + { + "value": "Jacket Denim", + "trait_type": "Outfit" + }, + { + "value": "Natural", + "trait_type": "Skin" + }, + { + "value": "Vixen", + "trait_type": "Eyes" + }, + { + "value": "UwU", + "trait_type": "Mouth" + }, + { + "value": "Cap Purple", + "trait_type": "Head" + }, + { + "value": "True", + "trait_type": "Summoned" + } + ], + "description": "The Famous Fox Federation, an independent organization of the most fabulously famous foxes on the Blockchain.", + "name": "Fox #9712", + "symbol": "FFF", + "token_standard": "NonFungible" + }, + "links": { + "external_url": "https://famousfoxes.com", + "image": "https://famousfoxes.com/hd/9712.png" + } + }, + "authorities": [ + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "BUjZjAS2vbbb65g7Z1Ca9ZRVYoJscURG5L3AkVvHP9ac" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.042, + "basis_points": 420, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "442t3gHbw55CqiEAtoSWasVQ3eAhmYW2gPy5jqJNTdcw", + "share": 0, + "verified": true + }, + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "share": 100, + "verified": false + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "91GBiM6pBxVsANodJd4nGjnKBDE8XRJbcvQD9C1Phpyb" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 255 + }, + "mutable": true, + "burnt": false + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbycreator.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbycreator.mdx new file mode 100644 index 00000000000..42b62bed543 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbycreator.mdx @@ -0,0 +1,228 @@ +--- +title: 'getAssetsByCreator' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetsByCreator` + +Returns the list of assets given a creator address. + +## Parameters + +- `creatorAddress`: (string) _[required]_ - The `base58` encoded public key of the creator of the assets. +- `onlyVerified`: (boolean) _[optional]_ - Indicates whether to retrieve only verified assets. +- `sortBy`: (object) _[optional]_ - Sorting criteria for the results: + - `sortBy` - The field to sort by. Possible values: `created`, `updated`, `recent_action`, `id`, `none`. + - `sortDirection` - The sort direction. Possible values: `asc`, `desc`. +- `limit`: (number) _[optional]_ - The maximum number of assets to retrieve. +- `page`: (number) _[optional]_ - The index of the page to retrieve. +- `before`: (string) _[optional]_ - Retrieve assets before the specified ID. +- `after`: (string) _[optional]_ - Retrieve assets after the specified ID. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of assets matching the query. +- `limit` - The maximum number of assets returned in this response. +- `items` - An array of asset objects. Each asset object contains: + - `interface` - The interface type of the asset. Return types include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, + `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. + - `id` - The ID of the asset. + - `content` - An object containing the metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - An object containing the metadata information: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. + - `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. + - `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. + - `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. + - `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. + - `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. + - `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. + - `mutable` - Whether the asset is mutable. + - `burnt` - Whether the asset is burnt. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetsByCreator", "params": ["D3XrkNZz6wx6cofot7Zohsf2KSsu2ArngNk8VqU9cTY3", true, {"sortBy": "created", "sortDirection": "desc"}, 50, 1, null, null]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 50, + "limit": 50, + "page": 1, + "items": [ + { + "interface": "Custom", + "id": "H5soVfY8CD5Pcdmud6HUdW6N4GN7amE7zAxgDjWtMux6", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://famousfoxes.com/metadata/7616.json", + "files": [ + { + "uri": "https://famousfoxes.com/hd/7616.png", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Straw", + "trait_type": "Background" + }, + { + "value": "Hoodie Light", + "trait_type": "Outfit" + }, + { + "value": "Natural", + "trait_type": "Skin" + }, + { + "value": "Smirk", + "trait_type": "Mouth" + }, + { + "value": "None", + "trait_type": "Head" + }, + { + "value": "Scar", + "trait_type": "Eyes" + } + ], + "description": "The Famous Fox Federation, an independent organization of the most fabulously famous foxes on the Blockchain.", + "name": "Fox #7616", + "symbol": "FFF" + }, + "links": { + "external_url": "https://famousfoxes.com", + "image": "https://famousfoxes.com/hd/7616.png" + } + }, + "authorities": [ + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "BUjZjAS2vbbb65g7Z1Ca9ZRVYoJscURG5L3AkVvHP9ac" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.042, + "basis_points": 420, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "D3XrkNZz6wx6cofot7Zohsf2KSsu2ArngNk8VqU9cTY3", + "share": 0, + "verified": true + }, + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "share": 100, + "verified": true + } + ], + "ownership": { + "frozen": true, + "delegated": true, + "delegate": "3fn29NJqUuKJgwHKmk9n54TbaXG9DgWvLAqajxZLUi22", + "ownership_model": "single", + "owner": "3ZsZsjVDjMh6rrEdFi13TnBgh9W9vLyCYcY4yzApzrdK" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 254 + }, + "mutable": true, + "burnt": false + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbygroup.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbygroup.mdx new file mode 100644 index 00000000000..ac56c0caa56 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbygroup.mdx @@ -0,0 +1,233 @@ +--- +title: 'getAssetsByGroup' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetsByGroup` + +Returns the list of assets given a group (key, value) pair. + +## Parameters + +- `groupKey`: (string) _[required]_ - The key of the group (for example `collection`). +- `groupValue`: (string) _[required]_ - The value of the group. +- `sortBy`: (object) _[optional]_ - Sorting criteria for the results: + - `sortBy` - The field to sort by. Possible values: `created`, `updated`, `recent_action`, `id`, `none`. + - `sortDirection` - The sort direction. Possible values: `asc`, `desc`. +- `limit`: (number) _[optional]_ - The maximum number of assets to retrieve. +- `page`: (number) _[optional]_ - The index of the page to retrieve. +- `before`: (string) _[optional]_ - Retrieve assets before the specified ID. +- `after`: (string) _[optional]_ - Retrieve assets after the specified ID. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of assets matching the query. +- `limit` - The maximum number of assets returned in this response. +- `items` - An array of asset objects. Each asset object contains: + - `interface` - The interface type of the asset. Return types include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, + `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. + - `id` - The ID of the asset. + - `content` - An object containing the metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - An object containing the metadata information: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. + - `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. + - `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. + - `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. + - `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. + - `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. + - `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. + - `mutable` - Whether the asset is mutable. + - `burnt` - Whether the asset is burnt. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetsByGroup", "params": ["collection", "BUjZjAS2vbbb65g7Z1Ca9ZRVYoJscURG5L3AkVvHP9ac", {"sortBy": "created", "sortDirection": "desc"}, 50, 1, null, null]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 50, + "limit": 50, + "page": 1, + "items": [ + { + "interface": "V1_NFT", + "id": "An7sN8sjhd7bBzsNoryPYtrRdgjPixT4FFsSxPSxnf5g", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://famousfoxes.com/metadata/9713.json", + "files": [ + { + "uri": "https://famousfoxes.com/hd/9713.png", + "mime": "image/png" + } + ], + "metadata": { + "attributes": [ + { + "value": "Cream", + "trait_type": "Background" + }, + { + "value": "Jacket Red", + "trait_type": "Outfit" + }, + { + "value": "Natural", + "trait_type": "Skin" + }, + { + "value": "Blue", + "trait_type": "Eyes" + }, + { + "value": "Toothy", + "trait_type": "Mouth" + }, + { + "value": "Cap Fire", + "trait_type": "Head" + }, + { + "value": "True", + "trait_type": "Summoned" + } + ], + "description": "The Famous Fox Federation, an independent organization of the most fabulously famous foxes on the Blockchain.", + "name": "Fox #9713", + "symbol": "FFF", + "token_standard": "NonFungible" + }, + "links": { + "image": "https://famousfoxes.com/hd/9713.png", + "external_url": "https://famousfoxes.com" + } + }, + "authorities": [ + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": false, + "data_hash": "", + "creator_hash": "", + "asset_hash": "", + "tree": "", + "seq": 0, + "leaf_id": 0 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "BUjZjAS2vbbb65g7Z1Ca9ZRVYoJscURG5L3AkVvHP9ac" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.042, + "basis_points": 420, + "primary_sale_happened": true, + "locked": false + }, + "creators": [ + { + "address": "442t3gHbw55CqiEAtoSWasVQ3eAhmYW2gPy5jqJNTdcw", + "share": 0, + "verified": true + }, + { + "address": "3pMvTLUA9NzZQd4gi725p89mvND1wRNQM3C8XEv1hTdA", + "share": 100, + "verified": false + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "BJL17Qr3cKSMXWBFqvWN58FhRqZPqdJCXU9MJykUuS7w" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": 255 + }, + "mutable": true, + "burnt": false + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyowner.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyowner.mdx new file mode 100644 index 00000000000..97b9fb03200 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsbyowner.mdx @@ -0,0 +1,188 @@ +--- +title: 'getAssetsByOwner' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetsByOwner` + +Returns the list of assets given an owner address. + +## Parameters + +- `ownerAddress`: (string) _[required]_ - The `base58` encoded public key of the owner of the assets. +- `sortBy`: (object) _[optional]_ - Sorting criteria for the results: + - `sortBy` - The field to sort by. Possible values: `created`, `updated`, `recent_action`, `id`, `none`. + - `sortDirection` - The sort direction. Possible values: `asc`, `desc`. +- `limit`: (number) _[optional]_ - The maximum number of assets to retrieve. +- `page`: (number) _[optional]_ - The index of the page to retrieve. +- `before`: (string) _[optional]_ - Retrieve assets before the specified ID. +- `after`: (string) _[optional]_ - Retrieve assets after the specified ID. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of assets matching the query. +- `limit` - The maximum number of assets returned in this response. +- `items` - An array of asset objects. Each asset object contains: + - `interface` - The interface type of the asset. Return types include: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, + `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. + - `id` - The ID of the asset. + - `content` - An object containing the metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - An object containing the metadata information: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. + - `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. + - `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. + - `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. + - `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. + - `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. + - `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. + - `mutable` - Whether the asset is mutable. + - `burnt` - Whether the asset is burnt. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getAssetsByOwner", "params": ["4cbnLyRoowAXtxLN6sEYrdYTFUkzodRyNFG7g4FKWBBA", {"sortBy": "created", "sortDirection": "desc"}, 50, 1, null, null]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 46, + "limit": 50, + "page": 1, + "items": [ + { + "interface": "V1_NFT", + "id": "6rZXazDDvM8RU1UDwunkqdhw1nXVFWRuk2Dh1ThJYLTH", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://cloudflare-ipfs.com/ipfs/QmctZUaANofFr1BLgWQchwjcUMYEX2ZSx2LpDSHSRtQj5m", + "files": [], + "metadata": { + "name": "Key", + "symbol": "", + "token_standard": "NonFungible" + }, + "links": {} + }, + "authorities": [ + { + "address": "9NFLyt33NWcidPYbPyVW7yWpAM1RKepNVMYAhCSpSM3w", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": true, + "data_hash": "5ZUYsZn64hubvRVCpnVxX9iBmEbEt1N8v5kbtoSS3L2K", + "creator_hash": "8i3JU72aZtimFTFFQtZCGkzrnLbibBDYVycCn3yrKc5e", + "asset_hash": "37fJAak3P8dFCJX4HijBtqEG6PjoXr74g86xaW4bPfjB", + "tree": "EpGN5mjMwAdWAQHZSHrjGcB7zewEw2KrRezZchSq9W6B", + "seq": 238234, + "leaf_id": 225357 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "BZNai1KJr17myQUUSfcU6FGHxtp4UwMPawkszXmihyiJ" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0, + "basis_points": 0, + "primary_sale_happened": false, + "locked": false + }, + "creators": [ + { + "address": "HeUwVyLufyPMiUnRe6Fo9iUvSBXtFYszAkG6q2WLCikD", + "share": 100, + "verified": false + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "4cbnLyRoowAXtxLN6sEYrdYTFUkzodRyNFG7g4FKWBBA" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": null + }, + "mutable": true, + "burnt": false + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsignatures.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsignatures.mdx new file mode 100644 index 00000000000..d10af680a47 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getassetsignatures.mdx @@ -0,0 +1,93 @@ +--- +title: 'getAssetSignatures' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAssetSignatures` + +Retrieve a list of transaction signatures linked to a compressed asset. + +This method supports only compressed assets created by the +[Metaplex Bubblegum program](https://developers.metaplex.com/bubblegum). + +## Parameters + +- `id`: (string) _[required]_ - The `base58` encoded public key of the asset. +- `owner`: (string) _[optional]_ - The `base58` encoded public key of the asset owner. +- `page`: (number) _[optional]_ - The current pagination page. +- `limit`: (number) _[optional]_ - The number of results per page. +- `cursor`: (string) _[optional]_ - Optional pagination cursor. +- `before`: (string) _[optional]_ - Return results before the specified signature. +- `after`: (string) _[optional]_ - Return results after the specified signature. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of transaction signatures matching the query. +- `limit` - The maximum number of transaction signatures returned in this response. +- `page` - The current pagination page. +- `items` - An array of transaction signature objects. Each object contains: + - `signature` - The transaction signature. + - `type` - The type of the signature. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getAssetSignatures", + "params": [ + "D85MZkvir9yQZFDHt8U2ZmS7D3LXKdiSjvw2MBdscJJa", + null, + 1, + null, + null, + null, + null + ] + }' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 1, + "limit": 1000, + "page": 1, + "items": [ + [ + "3b52uoDvGTkJKk7ygozyK38gfrU8iruz2VPRZPFJKY1zUgWCA8df1ZZUFf5zwokwhEinsofHxiY7mMMuFsik6bjW", + "MintToCollectionV1" + ] + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/getnfteditions.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/getnfteditions.mdx new file mode 100644 index 00000000000..6274ac2a36b --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/getnfteditions.mdx @@ -0,0 +1,97 @@ +--- +title: 'getNftEditions' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getNftEditions` + +Retrieves all printable editions for a parent edition NFT mint. + +## Parameters + +- `mint`: (string) _[required]_ - The mint address of the parent edition. +- `page`: (number) _[optional]_ - The current pagination page. +- `limit`: (number) _[optional]_ - The number of results per page. +- `cursor`: (string) _[optional]_ - Optional pagination cursor. +- `before`: (string) _[optional]_ - Return results before the cursor. +- `after`: (string) _[optional]_ - Return results after the cursor. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of printable editions. +- `limit` - The maximum number of editions returned in this response. +- `page` - The current pagination page. +- `master_edition_address` - The address of the parent edition. +- `supply` - The current supply of editions. +- `max_supply` - The maximum supply of editions. +- `editions` - An array of edition objects. Each edition object contains: + - `mint` - The mint address of the edition. + - `edition_address` - The address of the edition. + - `edition` - The edition number. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getNftEditions", + "params": [ + "Ey2Qb8kLctbchQsMnhZs5DjY32To2QtPuXNwWvk4NosL", + 1, + null, + null, + null, + null + ] + }' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 66, + "limit": 100, + "page": 1, + "master_edition_address": "8SHfqzJYABeGfiG1apwiEYt6TvfGQiL1pdwEjvTKsyiZ", + "supply": 57, + "max_supply": 69, + "editions": [ + { + "mint": "GJvFDcBWf6aDncd1TBzx2ou1rgLFYaMBdbYLBa9oTAEw", + "edition_address": "AoxgzXKEsJmUyF5pBb3djn9cJFA26zh2SQHvd9EYijZV", + "edition": 1 + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/gettokenaccounts.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/gettokenaccounts.mdx new file mode 100644 index 00000000000..882ce742334 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/gettokenaccounts.mdx @@ -0,0 +1,108 @@ +--- +title: 'getTokenAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenAccounts` + +Retrieves information about all token accounts for a specific mint or an owner. + +## Parameters + +- `mint`: (string) _[optional]_ - The address of the associated mint. +- `owner`: (string) _[optional]_ - The owner address of the tokens. +- `page`: (integer) _[optional]_ - The index of the page to retrieve. The page parameter starts at `1` +- `limit`: (integer) _[optional]_ - The number of results per page. +- `cursor`: (string) _[optional]_ - Optional pagination cursor. +- `before`: (string) _[optional]_ - Return results before the cursor. +- `after`: (string) _[optional]_ - Return results after the cursor. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of token accounts matching the query. +- `limit` - The maximum number of token accounts returned in this response. +- `page` - The current pagination page. +- `token_accounts` - An array of token account objects. Each token account object contains: + - `address` - The address of the token account. + - `mint` - The mint address associated with the token account. + - `owner` - The owner address of the token account. + - `frozen` - Whether the token account is frozen. + - `amount` - The amount of tokens held in the account. + - `delegate` - The delegate address, if any. + - `close_authority` - The address that can close the token account, if any. + - `extensions` - Additional information about the token account, if any. + - `delegated_amount` - The amount of tokens delegated, if any. +- `errors` - An array of error objects, if any errors occurred during the request. +- `cursor` - The pagination cursor for the next page of results. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "getTokenAccounts", + "params": [ + "So11111111111111111111111111111111111111112", + null, + 1, + 50, + null, + null, + null + ] + }' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 1, + "limit": 1, + "page": 50, + "token_accounts": [ + { + "address": "DgeCdQBqsoAWhJtewsSN4Pcz9okEGBTebEZcrcGhPXDE", + "mint": "5fgwRW94H1KavvaGEanNZc2AnEGKkFaJWkZzAuvaxRNH", + "amount": 100000000, + "owner": "So11111111111111111111111111111111111111112", + "frozen": false, + "delegate": null, + "delegated_amount": 0, + "close_authority": null, + "extensions": null + } + ], + "cursor": null, + "errors": [] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/index.md b/services/reference/solana/json-rpc-methods/digital-asset-standard/index.md new file mode 100644 index 00000000000..bd262250f64 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/index.md @@ -0,0 +1,54 @@ +--- +title: Digital Asset Standard (DAS) API +--- + +The DAS API provides an interface for interacting with digital assets such as fungible tokens, regular +NFTs, and compressed NFTs. + +Use the pagination and sort options available to some API methods that return a large amount on data. + +## Supported DAS methods + +Infura supports the following DAS API methods: + +- [`getAsset`](./getasset.mdx) +- [`getAssetProof`](./getassetproof.mdx) +- [`getAssetProofBatch`](./getassetproofbatch.mdx) +- [`getAssets`](./getassets.mdx) +- [`getAssetsByAuthority`](./getassetsbyauthority.mdx) +- [`getAssetsByCreator`](./getassetsbycreator.mdx) +- [`getAssetsByGroup`](./getassetsbygroup.mdx) +- [`getAssetsByOwner`](./getassetsbyowner.mdx) +- [`getAssetSignatures`](./getassetsignatures.mdx) +- [`getNftEditions`](./getnfteditions.mdx) +- [`getTokenAccounts`](./gettokenaccounts.mdx) +- [`searchAssets`](./searchassets.mdx) + +## Pagination options + +Use pagination to manage large result sets and control how data is returned. + +- **By page**: Use when you want to access results in fixed-size pages (for example, when + displaying data in a paged UI). Requires the `page` parameter and can be combined with a `limit`. +- **By cursor**: Use for efficient pagination through a large or frequently changing dataset. + Requires a `cursor` value from a previous response. +- **By range**: Use when you need to retrieve results within a specific time or ID range. + Requires `before` or `after` parameters. Useful for narrowing a query. + +## Sorting options + +Control the order in which results are returned. Sorting may affect performance. + +- **`id`**: Sorts results by ID. Useful when IDs are incremental and correlate with creation order. +- **`created`**: Sorts results by creation timestamp. Use this to get the oldest or newest records + first. +- **`recent_action`**: Sorts by the timestamp of the most recent update or event. Helpful when + tracking activity or status changes. +- **`none`**: No sorting applied. Use for faster responses when order doesn't matter. + +## Sort direction + +Define how sorted results are ordered. + +- **`asc`**: Sorts in ascending order (for example, from oldest to newest). +- **`desc`**: Sorts in descending order (for example, from newest to oldest). Often used to show the most recent results first. diff --git a/services/reference/solana/json-rpc-methods/digital-asset-standard/searchassets.mdx b/services/reference/solana/json-rpc-methods/digital-asset-standard/searchassets.mdx new file mode 100644 index 00000000000..2e8ed9db7eb --- /dev/null +++ b/services/reference/solana/json-rpc-methods/digital-asset-standard/searchassets.mdx @@ -0,0 +1,238 @@ +--- +title: 'searchAssets' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `searchAssets` + +Returns the list of assets based on the specified search criteria. + +## Parameters + +- `negate`: (boolean) _[optional]_ - Indicates whether the search criteria should be inverted. +- `conditionType`: (string) _[optional]_ - Indicates whether to retrieve all or any asset that matches the search criteria. + Valid options are: `all`, `any`. +- `interface`: (string) _[optional]_ - The interface of the asset. + Valid options are: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, `V2_NFT`, `FungibleAsset`, `Custom`, `Identity`, `Executable`. +- `ownerAddress`: (string) _[optional]_ - The `base58` encoded public key of the owner. +- `ownerType`: (string) _[optional]_ - The type of ownership. Valid options are: `single`, `token`. +- `creatorAddress`: (string) _[optional]_ - The `base58` encoded public key of the creator. +- `creatorVerified`: (boolean) _[optional]_ - Indicates whether the creator must be verified. +- `authorityAddress`: (string) _[optional]_ - The `base58` encoded public key of the authority. +- `grouping`: (array) _[optional]_ - A group (key, value) pair. +- `delegateAddress`: (string) _[optional]_ - The `base58` encoded public key of the delegate. +- `frozen`: (boolean) _[optional]_ - Indicates whether the asset is frozen. +- `supply`: (number) _[optional]_ - The supply of the asset. +- `supplyMint`: (string) _[optional]_ - The `base58` encoded public key of the supply mint. +- `compressed`: (boolean) _[optional]_ - Indicates whether the asset is compressed. +- `compressible`: (boolean) _[optional]_ - Indicates whether the asset is compressible. +- `royaltyTargetType`: (string) _[optional]_ - The type of royalty. Valid options are: `creators`, `fanout`, `single`. +- `royaltyTarget`: (string) _[optional]_ - The target address for royalties. +- `royaltyAmount`: (number) _[optional]_ - The royalties amount. +- `burnt`: (boolean) _[optional]_ - Indicates whether the asset is burnt. +- `sortBy`: (object) _[optional]_ - Sorting criteria for the results: + - `sortBy` - The field to sort by. Valid options are: `created`, `updated`, `recent_action`, `id`, `none`. + - `sortDirection` - The sort direction. Valid options are: `asc`, `desc`. +- `limit`: (number) _[optional]_ - The maximum number of assets to retrieve. +- `page`: (number) _[optional]_ - The index of the page to retrieve. +- `before`: (string) _[optional]_ - Retrieve assets before the specified ID. +- `after`: (string) _[optional]_ - Retrieve assets after the specified ID. +- `jsonUri`: (string) _[optional]_ - The value for the JSON URI. + +## Returns + +`result` - An object containing the following fields: + +- `total` - The total number of assets matching the query. +- `limit` - The maximum number of assets returned in this response. +- `items` - An array of asset objects. Each asset object contains: + - `interface` - The interface type of the asset. Valid options are: `V1_NFT`, `V1_PRINT`, `LEGACY_NFT`, `V2_NFT`, `FungibleAsset`, `FungibleToken`, `Custom`, `Identity`, `Executable`, `ProgrammableNFT`. + - `id` - The ID of the asset. + - `content` - An object containing the metadata and content information: + - `$schema` - The schema URI. + - `json_uri` - The URI pointing to the asset's JSON metadata. + - `files` - List of associated files with `uri`, `mime`, and optional `contexts`. + - `metadata` - An object containing the metadata information: + - `name` - The name of the asset. + - `symbol` - The symbol of the asset. + - `description` - A description of the asset. + - `attributes` - List of attributes with `trait_type` and `value`. + - `token_standard` - The token standard of the asset. + - `ownership` - An object containing the ownership details: + - `owner` - The owner's public key. + - `frozen` - Whether the asset is frozen. + - `delegated` - Whether the asset is delegated. + - `delegate` - The delegate's public key. + - `ownership_model` - The ownership model, for example `single` or `token`. + - `compression` - An object containing the asset compression details: + - `eligible` - Whether the asset is eligible for compression. + - `compressed` - Whether the asset is compressed. + - `data_hash` - The data hash of the asset. + - `creator_hash` - The creator hash of the asset. + - `asset_hash` - The asset hash. + - `tree` - The Merkle tree ID. + - `seq` - The sequence number. + - `leaf_id` - The leaf ID. + - `royalty` - An object containing the royalty details: + - `royalty_model` - The royalty model (`creators`, `fanout`, or `single`). + - `target` - The target address for royalties. + - `percent` - The royalty percentage. + - `basis_points` - The royalty in basis points. + - `primary_sale_happened` - Whether the primary sale has occurred. + - `locked` - Whether the royalty is locked. + - `creators` - List of creators: + - `address` - The creator's public key. + - `share` - The creator's share percentage. + - `verified` - Whether the creator is verified. + - `grouping` - Grouping details: + - `group_key` - The group key (for example, `collection`). + - `group_value` - The group value. + - `uses` - An object containing the usage details: + - `use_method` - The usage method (`burn`, `multiple`, or `single`). + - `remaining` - The remaining uses. + - `total` - The total uses. + - `mutable` - Whether the asset is mutable. + - `burnt` - Whether the asset is burnt. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ +-X POST \ +-H "Content-Type: application/json" \ +-d '{ + "jsonrpc": "2.0", + "id": 1, + "method": "searchAssets", + "params": [ + false, + "all", + "V1_NFT", + "2RtGg6fsFiiF1EQzHqbd66AhW7R5bWeQGpTbv2UMkCdW", + "single", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + { "sortBy": "created", "sortDirection": "desc" }, + 50, + 1, + null, + null, + null + ] +}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "total": 50, + "limit": 50, + "page": 1, + "items": [ + { + "interface": "V1_NFT", + "id": "2SiYEckvp5MHz63ybheoehgk7YYPGZksKcxyT7MsJvDS", + "content": { + "$schema": "https://schema.metaplex.com/nft1.0.json", + "json_uri": "https://ipfs.io/ipfs/QmUWytohB2ecUqbor12sm7ozDrVzgbwnCtqF66m9abMLWG", + "files": [], + "metadata": { + "name": "5000 TO 50000 #54", + "symbol": "", + "token_standard": "NonFungible" + }, + "links": {} + }, + "authorities": [ + { + "address": "7GaUkgafjv7uxni4GuvBFp8b1qFVRyZAmwNHzjeFbmTt", + "scopes": [ + "full" + ] + } + ], + "compression": { + "eligible": false, + "compressed": true, + "data_hash": "8uwkK3ydNdnGUbSGTfHjmw8uQ8HheerdEB1RmiL7xyvD", + "creator_hash": "9FiGqDmyw6peu9uZk3XekNC3S7KjaTV6oxC476gPCHLz", + "asset_hash": "9g5DrQ3ndkzLo2mfN74hqhzHG8suKyAetrgJZ4KG4xb8", + "tree": "2xZ7XN9wkUuMRj9RiCbBLXYMofAyHsrEKpWbA3xwxPfG", + "seq": 1038593, + "leaf_id": 1037754 + }, + "grouping": [ + { + "group_key": "collection", + "group_value": "71zrEGzfv4oX3uhc96trWayxdF3xm2kD9WWWoiMZkHAR" + } + ], + "royalty": { + "royalty_model": "creators", + "target": null, + "percent": 0.055, + "basis_points": 550, + "primary_sale_happened": false, + "locked": false + }, + "creators": [ + { + "address": "4AuVuuzh7NA8b8jCcJzARdUALum4MxG9tPYA7QxTPHqo", + "share": 100, + "verified": false + } + ], + "ownership": { + "frozen": false, + "delegated": false, + "delegate": null, + "ownership_model": "single", + "owner": "2RtGg6fsFiiF1EQzHqbd66AhW7R5bWeQGpTbv2UMkCdW" + }, + "supply": { + "print_max_supply": 0, + "print_current_supply": 0, + "edition_nonce": null + }, + "mutable": true, + "burnt": false + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getaccountinfo.mdx b/services/reference/solana/json-rpc-methods/getaccountinfo.mdx new file mode 100644 index 00000000000..375a167a2d2 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getaccountinfo.mdx @@ -0,0 +1,94 @@ +--- +title: 'getAccountInfo' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getAccountInfo` + +Returns information associated with the account of the specified address. + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the account to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed` + - `dataSlice`: (object) _[optional]_ - A slice of the account data to return. Only available for `base58`, `base64`, + or `base64+zstd` encoding. This is an object with two properties: + - `offset` - The starting byte offset of the slice. + - `length` - The length of the slice in bytes. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - `null` when the account doesn't exist, or an object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object containing the following keys: + - `data` - The account data, encoded in the specified format. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports in the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "getAccountInfo", "params": ["F5a3ExamplePubkeyABCDEFGH", {"encoding": "jsonParsed"}],"id": 1}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 371626267 + }, + "value": { + "data": [ + "", + "base58" + ], + "executable": false, + "lamports": 88859014690252, + "owner": "11111111111111111111111111111111", + "rentEpoch": 18446744073709552000, + "space": 0 + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getbalance.mdx b/services/reference/solana/json-rpc-methods/getbalance.mdx new file mode 100644 index 00000000000..18d19ef283f --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getbalance.mdx @@ -0,0 +1,69 @@ +--- +title: 'getBalance' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBalance` + +Returns the balance of the specified address in lamports. + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the account to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: (integer) _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - `null` when the account doesn't exist, or an object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - The balance of the account in lamports. + +## Example + +Replace `` with your API key. + +### Request + + + + +````bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getBalance", "params": ["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"]}' + ``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { "slot": 1 }, + "value": 0 + }, + "id": 1 +} +```` + + + diff --git a/services/reference/solana/json-rpc-methods/getblock.mdx b/services/reference/solana/json-rpc-methods/getblock.mdx new file mode 100644 index 00000000000..c6c02c84a8d --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblock.mdx @@ -0,0 +1,197 @@ +--- +title: 'getBlock' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlock` + +Returns the identity and transaction information about a confirmed block. + +## Parameters + +- `slot`: (integer) _[required]_ - The slot number of the block to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `transactionDetails`: (string) _[optional]_ - The level of transaction details to include in the response. Possible values are: + - `none` - No transaction details. + - `accounts` - Transaction details only include signatures and an annotated list of accounts in each transaction. + - `signatures` - Only the signatures of the transactions. + - `full` - Full transaction details. This is the default option. + - `rewards`: (boolean) _[optional]_ - Whether to include rewards information in the response. The default is `false`. + - `encoding`: (string) _[optional]_ - The encoding format to use for the block data. Can be one + of `base58`, `base64`, `jsonParsed`, or `json` + - Returns the block data as a JSON object. + - `commitment`: (string) _[optional]_ The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `maxSupportedTransactionVersion`: (integer) _[optional]_ - The maximum supported transaction version to return. + If the requested block contains a transaction with a higher version, an error will be returned. If this parameter + is omitted, only legacy transactions will be returned, and a block containing any versioned transaction will prompt an error. + +## Returns + +`result` - `null` when the block doesn't exist, or an object with the following fields: + +- `blockHeight` - The number of blocks before this block. +- `blockTime` - The estimated production time, as Unix timestamp (seconds since the Unix epoch). It's `null` if not available. +- `blockhash` - The hash of the block encoded as a `base58` string. +- `parentSlot` - The slot index of this block's parent. +- `previousBlockhash` - The block hash of this block's parent encoded as `base58` string; if the parent block + is not available due to ledger cleanup, the field returns `11111111111111111111111111111111`. +- `transactions` - If full transaction details are requested, returns an array of JSON objects with the following fields: + - `meta` - The transaction status metadata object, which contains additional information about the block and its + transactions. The meta object can be `null`, or it may contain the following fields: + - `err` - Error code if the transaction failed, or `null` if the transaction succeeds. + - `fee` - The total fees paid by all transactions in the block encoded as `u64` integer. + - `innerInstructions` - An array of objects representing the inner instructions of all transactions in the + block (omitted if inner instruction recording is disabled). Each object has the following fields: + - `logMessages` - An array of strings containing any log messages generated by the block's transactions + (omitted if inner instruction recording is disabled). + - `postBalances` - An array of lamport balances for each account in the block after the transactions were processed. + - `postTokenBalances` - An array of token balances for each token account in the block after the transactions were + processed (omitted if inner instruction recording is disabled). + - `preBalances` - An array of lamport balances for each account in the block before the transactions were processed. + - `preTokenBalances` - An array of token balances for each token account in the block before the transactions were + processed (omitted if inner instruction recording is disabled). + - `rewards` - An object containing information about the rewards earned by the block's validators + (only present if the rewards are requested). It has the following fields: + - `pubkey` - The public key of the account that received the award encoded as a `base58` string. + - `lamports` - The number of reward lamports credited or debited by the account. + - `postBalance` - The account balance in lamports after the reward was applied. + - `rewardType` - The type of reward. It could be `fee`, `rent`, `voting`, or `staking`. + - `commission` - The vote account commission when the reward was credited, only present for voting and staking rewards. + - `status` - The status of the transaction. It returns `Ok` if the transaction was successful, and `Err` + if the transaction failed. + - `transaction` - The transaction object. It could be either JSON format or encoded binary data, depending on the encoding parameter. + - `message` - An array of transactions objects included in the block: + - `accountKeys` - An array of public keys associated with the accounts that were accessed during + the execution of transactions in the block. + - `pubkey` - The public key associated with the block producer that created the block. + - `signer` - Indicates if the account is a required transaction signer. It can also be used to identify the signers + involved in the block's transactions and to verify the authenticity of the signatures. + - `source` - Identifies the accounts that provided the funds for the block's transactions. + - `writable` - A boolean value that indicates whether the accounts associated with the given public keys + were modified by the transactions or not. + - `instructions` - An array of instructions that were executed in the block's transactions + - `parsed` - An array of parsed instructions that were executed in the block's transactions + - `info` - An array of information objects that provide additional details about the transactions in the block. + - `clockSysvar` - Provides information about the current state of the blockchain. + - `slotHashesSysvar` - Provides information about the hashes of recent slots. + - `vote` - An array of vote accounts that were involved in the block's transactions. + - `hash` - The hash of the block. It can be used to uniquely identify the block and to verify the authenticity + of the block's contents. + - `slots` - An array of slot numbers that correspond to the transactions in the block. + - `timestamp` - The Unix timestamp of the block's creation. + - `voteAccount` - A vote account to identify the validator that produced the block and to verify the validity of their vote. + - `voteAuthority` - An authority associated with the vote account used to produce the block. + - `type` - The type of the block. It can be used to differentiate between regular blocks and special + blocks such as snapshot or transaction confirmation blocks. + - `program` - The data associated with the program that was executed in the block's transactions. + - `programId` - The public key of the program that was executed in the block's transactions. + - `stackHeight` - The current depth of the execution stack. + - `recentBlockhash` - The recent block hash for the account's cluster. + - `signatures` - The list of transaction signatures contained within a particular block. +- `version` - The transaction version. Returns `undefined` if` maxSupportedTransactionVersion` is not set in the requested parameters. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getBlock", "params": [333290000, {"encoding": "json", "maxSupportedTransactionVersion": 0, "transactionDetails": "full", "rewards": false}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "blockHeight": 359639279, + "blockTime": 1743651773, + "blockhash": "6m5rEYueCyWK54JQ9tNLJ7ZLMYQsQ5HFjySZgt2FjaV2", + "parentSlot": 371661599, + "previousBlockhash": "AGX8AvrjGJouXLwAoqEVLABfHMqeyGdVHw8zacsG4Dit", + "transactions": [ + { + "meta": { + "computeUnitsConsumed": 2100, + "err": null, + "fee": 5000, + "innerInstructions": [], + "loadedAddresses": { + "readonly": [], + "writable": [] + }, + "logMessages": [ + "Program Vote111111111111111111111111111111111111111 invoke [1]", + "Program Vote111111111111111111111111111111111111111 success" + ], + "postBalances": [ + 7221320288943, + 10172781085509212, + 1 + ], + "postTokenBalances": [], + "preBalances": [ + 7221320293943, + 10172781085509212, + 1 + ], + "preTokenBalances": [], + "rewards": null, + "status": { + "Ok": null + } + }, + "transaction": { + "message": { + "accountKeys": [ + "dv1ZAGvdsz5hHLwWXsVnM94hWf1pjbKVau1QVkaMJ92", + "5ZWgXcyqrrNpQHCme5SdC5hCeYb2o3fEJhF7Gok3bTVN", + "Vote111111111111111111111111111111111111111" + ], + "header": { + "numReadonlySignedAccounts": 0, + "numReadonlyUnsignedAccounts": 1, + "numRequiredSignatures": 1 + }, + "instructions": [ + { + "accounts": [1, 0], + "data": "67MGmzAKuQPwzeYjrCpiDrjsgJk2cKGAWHeYYXr5hJVLwo11193dCcRDeWHENT2mB8qxgRnFXXpyXdm2WR7c9R2Gdn1ZTJiC4s7voQNfLo5hEiGrHbW5C15Ru6W9zSx7tLJSBgdUVeeNa6cp3FhJtfA5vChhLo54eVuQERTEfU3YSaSRAyCciNpEXUVmiWtrVY9fDEznum", + "programIdIndex": 2, + "stackHeight": null + } + ], + "recentBlockhash": "AGX8AvrjGJouXLwAoqEVLABfHMqeyGdVHw8zacsG4Dit" + }, + "signatures": [ + "4LYx3ESTTTiD3DSJ8TmDrEHQNEJHM9WWbKw4bz6GrguJ7Eon4MAepRWZZyaaJ57agxhss9HeaUhgXVurDCp3pi8H" + ] + }, + "version": "legacy" + ... + } + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getblockcommitment.mdx b/services/reference/solana/json-rpc-methods/getblockcommitment.mdx new file mode 100644 index 00000000000..cac781fb6ae --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblockcommitment.mdx @@ -0,0 +1,63 @@ +--- +title: 'getBlockCommitment' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlockCommitment` + +Returns the commitment for a block identified by the given slot number. + +## Parameters + +`slot`: (integer) _[required]_ - The slot number of the block to query. + +## Returns + +`result` - An object with the following fields: + +- `commitment` - The commitment values for the block. Returns either: + - `null` if the block is not found. + - Array of `u64` integers logging the amount of cluster stake in lamports that has voted on the + block at each depth from `0` to `MAX_LOCKOUT_HISTORY`. +- `totalStake` - The total number of lamports being used by validators to participate in the block production + and voting process + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getBlockCommitment", "params": [5]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "commitment": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 32 + ], + "totalStake": 42 + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getblockheight.mdx b/services/reference/solana/json-rpc-methods/getblockheight.mdx new file mode 100644 index 00000000000..65ab712244a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblockheight.mdx @@ -0,0 +1,56 @@ +--- +title: 'getBlockHeight' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlockHeight` + +Returns the current block height. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result`: (integer) - The current block height in `u64` format. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getBlockHeight", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": 359660979, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getblockproduction.mdx b/services/reference/solana/json-rpc-methods/getblockproduction.mdx new file mode 100644 index 00000000000..640c5a3d36a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblockproduction.mdx @@ -0,0 +1,91 @@ +--- +title: 'getBlockProduction' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlockProduction` + +Returns recent block production information from the current or previous epoch. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `range`: (array) _[optional]_ - Slot range to return block production for. If not provided, defaults to current epoch. + - `firstSlot`: (integer) _[optional]_ - The first slot in the range. + - `lastSlot`: (integer) _[optional]_ - The last slot in the range. + - `identity`: (string) _[optional]_ - Only return results for this `base58` encoded validator identity. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object containing block production information: + - `byIdentity` - A dictionary of validator identities, as `base58` encoded strings. This is a two + element array containing the number of leader slots and the number of blocks produced. + - `range` - The block production slot range: + - `firstSlot` - The first slot of the block production information (inclusive). + - `lastSlot` - The last slot of the block production information (inclusive). + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getBlockProduction", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 371687291 + }, + "value": { + "byIdentity": { + "3zvXem8vqvDYos6BKu66FV84tmDdQwgLxYSempy8tSrs": [ + 584, + 584 + ], + ... + "dv4ACNkpYPcE3aKmYDqZm9G5EB3J4MRoeE7WNDRBVJB": [ + 40400, + 40400 + ] + }, + "range": { + "firstSlot": 371520000, + "lastSlot": 371687291 + } + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getblocks.mdx b/services/reference/solana/json-rpc-methods/getblocks.mdx new file mode 100644 index 00000000000..90780adef85 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblocks.mdx @@ -0,0 +1,58 @@ +--- +title: 'getBlocks' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlocks` + +Returns a list of confirmed blocks between two given slots. + +## Parameters + +- `startSlot`: (integer) _[required]_ - The starting slot number for the range of blocks to query. +- `endSlot`: (integer) _[optional]_ - The ending slot number for the range of blocks to query. + Must be no more than 500,000 blocks higher than `startSlot`. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + +## Returns + +`result`: (integer) - An array of `u64` integers representing the block numbers within the specified range. If `endSlot` is not +provided, the method will return blocks starting from `startSlot` to the most recent block. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id":1, "method":"getBlocks", "params":[371661723, 371661733]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":[371661723,371661724,371661725,371661726,371661727,371661728,371661729,371661730,371661731,371661732,371661733], + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getblockswithlimit.mdx b/services/reference/solana/json-rpc-methods/getblockswithlimit.mdx new file mode 100644 index 00000000000..97cc7f0549a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getblockswithlimit.mdx @@ -0,0 +1,57 @@ +--- +title: 'getBlocksWithLimit' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getBlocksWithLimit` + +Returns a list of confirmed blocks starting at the given slot, up to the specified limit. + +## Parameters + +- `startSlot`: (integer) _[required]_ - The starting slot number for the range of blocks to query. +- `limit`: (integer) _[required]_ - The maximum number of confirmed blocks to return, starting from the specified slot. + Must be no more than 500,000 blocks higher than `startSlot`. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + +## Returns + +`result`: (integer) - An array of `u64` integers representing the block numbers from the `startSlot` up to the specified `limit`. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id":1, "method":"getBlocksWithLimit", "params":[371661723, 10]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":[371661723,371661724,371661725,371661726,371661727,371661728,371661729,371661730,371661731,371661732], + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getclusternodes.mdx b/services/reference/solana/json-rpc-methods/getclusternodes.mdx new file mode 100644 index 00000000000..818cbafc4c0 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getclusternodes.mdx @@ -0,0 +1,76 @@ +--- +title: 'getClusterNodes' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getClusterNodes` + +Returns information about all the nodes participating in the cluster. + +## Parameters + +None + +## Returns + +`result`: An array of objects with the following fields: + +- `featureSet` - The unique identifier of the node's feature set. +- `gossip` - The gossip network address for the node. +- `pubkey` - The public key of the node encoded as `base58` string. +- `rpc` -The IP address and port number of the node's JSON-RPC service. `nul`` if the JSON-RPC service is disabled. +- `shredVersion` - The version of the data structure used by this node to store and transmit blocks. +- `tpu` - The TPU network address for the node. +- `version` - The software version of the node. `null` if the version information is unavailable. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id":1, "method":"getClusterNodes"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "featureSet": 3294202862, + "gossip": "208.91.107.3:8001", + "pubkey": "8GFyFHMa8oobGzK6Bab1qdExMqjvQoFeHYTpkfJiR8NH", + "pubsub": null, + "rpc": null, + "serveRepair": "208.91.107.3:8013", + "shredVersion": 2405, + "tpu": "208.91.107.3:8004", + "tpuForwards": "208.91.107.3:8005", + "tpuForwardsQuic": "208.91.107.3:8011", + "tpuQuic": "208.91.107.3:8010", + "tpuVote": "208.91.107.3:8006", + "tvu": "208.91.107.3:8002", + "version": "2.2.3" + }, + ... + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getepochinfo.mdx b/services/reference/solana/json-rpc-methods/getepochinfo.mdx new file mode 100644 index 00000000000..7f9240d03df --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getepochinfo.mdx @@ -0,0 +1,70 @@ +--- +title: 'getEpochInfo' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getEpochInfo` + +Returns information about the current epoch. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: (integer) _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result`: An array of objects with the following fields: + +- `absoluteSlot` - The current slot. +- `blockHeight` - The current block height. +- `epoch` - The current epoch. +- `slotIndex` - The current slot relative to the start of the current epoch. +- `slotsInEpoch` - The number of slots in this epoch. +- `transactionCount` The total number of transactions processed during the current epoch. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getEpochInfo"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "absoluteSlot": 371857300, + "blockHeight": 359834889, + "epoch": 860, + "slotIndex": 337300, + "slotsInEpoch": 432000, + "transactionCount": 15448034599 + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getepochschedule.mdx b/services/reference/solana/json-rpc-methods/getepochschedule.mdx new file mode 100644 index 00000000000..05417bd88fb --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getepochschedule.mdx @@ -0,0 +1,64 @@ +--- +title: 'getEpochSchedule' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getEpochSchedule` + +Returns epoch schedule information from the cluster's genesis configuration. + +## Parameters + +None + +## Returns + +`result` - An object with the following fields: + +- `firstNormalEpoch` - The first normal length epoch. Calculated as `log2(slotsPerEpoch) - log2(MINIMUM_SLOTS_PER_EPOCH)`. +- `firstNormalSlot` - The slot number of the first normal slot. Calculated as `MINIMUM_SLOTS_PER_EPOCH * (2.pow(firstNormalEpoch) - 1)`. +- `leaderScheduleSlotOffset` - The number of slots before starting an epoch to calculate a leader schedule for that epoch. +- `slotsPerEpoch` - The maximum number of slots in each epoch. +- `warmup` - Whether epochs start shorter and grow in length. During warmup (`true`) the epoch schedule starts small and + gradually increases to ease the network into normal operation, whereas without warmup (`false`), epochs have a + consistent length from the start. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getEpochSchedule"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "firstNormalEpoch": 0, + "firstNormalSlot": 0, + "leaderScheduleSlotOffset": 432000, + "slotsPerEpoch": 432000, + "warmup": false + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getfeeformessage.mdx b/services/reference/solana/json-rpc-methods/getfeeformessage.mdx new file mode 100644 index 00000000000..3ca9129d8b6 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getfeeformessage.mdx @@ -0,0 +1,68 @@ +--- +title: 'getFeeForMessage' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getFeeForMessage` + +Returns the fee the network will charge for a specified message. + +## Parameters + +- `message`: (string) _[required]_ - The `base64` encoded transaction message. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: (integer) _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - `null` when the block doesn't exist, or an object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - `null`, or the fee for the specified message. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getFeeForMessage", "params": ["AQABAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAA", {"commitment": "processed"}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.1.11", + "slot": 320142245 + }, + "value": null + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getfirstavailableblock.mdx b/services/reference/solana/json-rpc-methods/getfirstavailableblock.mdx new file mode 100644 index 00000000000..ced30f0d81d --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getfirstavailableblock.mdx @@ -0,0 +1,50 @@ +--- +title: 'getFirstAvailableBlock' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getFirstAvailableBlock` + +Returns the slot of the lowest confirmed block that has not been purged from the ledger. + +## Parameters + +None + +## Returns + +`result`: (integer) - The slot of the lowest confirmed block as a 64-bit unsigned integer. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getFirstAvailableBlock"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":116113408, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getgenesishash.mdx b/services/reference/solana/json-rpc-methods/getgenesishash.mdx new file mode 100644 index 00000000000..6c4e1dd24ad --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getgenesishash.mdx @@ -0,0 +1,50 @@ +--- +title: 'getGenesisHash' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getGenesisHash` + +Returns the genesis hash for the network. + +## Parameters + +None + +## Returns + +`result`: (string) - The hash encoded as a `base58` string. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getGenesisHash"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":"EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG", + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gethealth.mdx b/services/reference/solana/json-rpc-methods/gethealth.mdx new file mode 100644 index 00000000000..4d963266302 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gethealth.mdx @@ -0,0 +1,50 @@ +--- +title: 'getHealth' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getHealth` + +Returns the health of the node. + +## Parameters + +None + +## Returns + +`result`: (string) - `Ok` if the node is healthy, or a JSON-RPC error response if the node is unhealthy. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getHealth"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": "ok", + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gethighestsnapshotslot.mdx b/services/reference/solana/json-rpc-methods/gethighestsnapshotslot.mdx new file mode 100644 index 00000000000..672cdbe2911 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gethighestsnapshotslot.mdx @@ -0,0 +1,59 @@ +--- +title: 'getHighestSnapshotSlot' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getHighestSnapshotSlot` + +Returns information for the highest slot that the node has a snapshot for. + +This will find the highest full snapshot slot, and the highest incremental snapshot slot based on the +full snapshot slot, if there is one. + +## Parameters + +None + +## Returns + +`result` - An object with the following fields: + +- `full`: - The highest full snapshot slot encoded as a `u64` integer. +- `incremental`: The highest incremental snapshot slot derived from the full snapshot. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getHighestSnapshotSlot"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "full":372722782, + "incremental":372732282 + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getidentity.mdx b/services/reference/solana/json-rpc-methods/getidentity.mdx new file mode 100644 index 00000000000..c188f485e19 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getidentity.mdx @@ -0,0 +1,54 @@ +--- +title: 'getIdentity' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getIdentity` + +Returns the public key identity of the current node. + +## Parameters + +None + +## Returns + +`result` - An object with the following fields: + +- `identity` - The public key identity as a `base58` encoded string. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getIdentity"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "identity":"5UHT2MnFvARGe5mGbKZth5Yh546UWmPtucQYBGTYsi4n" + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getinflationgovernor.mdx b/services/reference/solana/json-rpc-methods/getinflationgovernor.mdx new file mode 100644 index 00000000000..70dcae54ef1 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getinflationgovernor.mdx @@ -0,0 +1,68 @@ +--- +title: 'getInflationGovernor' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getInflationGovernor` + +Returns the current inflation governor, which controls the inflation rate in the network. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - An object with the following fields: + +- `foundation` - The proportion of total inflation allocated to the foundation. +- `foundationTerm` - The period in years during which the foundation allocation will be paid out. +- `initial` - The initial inflation percentage from time (`0`). +- `taper` - The period in years during which the inflation rate will gradually decrease from the + initial rate to the final rate. +- `terminal` - The terminal inflation percentage. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getInflationGovernor"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "foundation":0.0, + "foundationTerm":0.0, + "initial":0.08, + "taper":0.15, + "terminal":0.015 + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getinflationrate.mdx b/services/reference/solana/json-rpc-methods/getinflationrate.mdx new file mode 100644 index 00000000000..ae0a289170a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getinflationrate.mdx @@ -0,0 +1,60 @@ +--- +title: 'getInflationRate' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getInflationRate` + +Returns the specific inflation values for the current epoch. + +## Parameters + +None + +## Returns + +`result` - An object with the following fields: + +- `epoch` - The epoch during which these values remain valid. +- `foundation` - The proportion of total inflation allocated to the foundation. +- `total` - The total inflation. +- `validator` - The portion of inflation designated for validators. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getInflationRate"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "epoch":862, + "foundation":0.0, + "total":0.0385971617307845, + "validator":0.0385971617307845 + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getinflationreward.mdx b/services/reference/solana/json-rpc-methods/getinflationreward.mdx new file mode 100644 index 00000000000..2b81427f76f --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getinflationreward.mdx @@ -0,0 +1,72 @@ +--- +title: 'getInflationReward' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getInflationReward` + +Returns the inflation (staking) rewards for a list of addresses for an epoch. + +## Parameters + +- `array`: (string) _[requiredl]_ - An array of `base58` encoded addresses to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `epoch`: (integer) _[optional]_ - The epoch for which to query the rewards. If not specified, the current epoch is used. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - An object with the following fields: + +- `epoch` - The epoch during which the reward was received. +- `effectiveSlot` - The slot at which the rewards become active. +- `amount` - The reward value in lamports. +- `postBalance` - The account balance after the transaction in lamports. +- `commission` - The commission rate of the vote account at the time the reward was credited. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method": "getInflationReward", "params": [["6dmNQ5jwLeLk5REvio1JcMshcbvkYMwy26sJ8pbkvStu", "BGsqMegLpV6n6Ve146sSX2dTjUMj3M92HnU8BbNRMhF2"], {"epoch": 2}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "epoch": 2, + "effectiveSlot": 224, + "amount": 2500, + "postBalance": 499999442500 + }, + null + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getlargestaccounts.mdx b/services/reference/solana/json-rpc-methods/getlargestaccounts.mdx new file mode 100644 index 00000000000..f8aacd156b0 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getlargestaccounts.mdx @@ -0,0 +1,75 @@ +--- +title: 'getLargestAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getLargestAccounts` + +Returns the 20 largest accounts, by lamport balance. Results may be cached up to two hours. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `filter`: (string) _[optional]_ - Filters results by account type. Supported options are `circulating` and `nonCirculating`. + +## Returns + +`result` - `null` when the account doesn't exist, or an object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object containing the following keys: + - `address` - The `base58` encoded account address. + - `lamports` - The number of lamports in the account. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method": "getLargestAccounts", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { "slot": 54 }, + "value": [ + { + "address": "99P8ZgtJYe1buSK8JXkvpLh8xPsCFuLYhz9hQFNw93WJ", + "lamports": 999974 + }, + { + "address": "uPwWLo16MVehpyWqsLkK3Ka8nLowWvAHbBChqv2FZeL", + "lamports": 42 + } + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getlatestblockhash.mdx b/services/reference/solana/json-rpc-methods/getlatestblockhash.mdx new file mode 100644 index 00000000000..1d12d4d6659 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getlatestblockhash.mdx @@ -0,0 +1,72 @@ +--- +title: 'getLatestBlockhash' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getLatestBlockhash` + +Returns the latest block hash. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object containing the following keys: + - `blockhash` - The `base58` encoded block hash. + - `lastValidBlockHeight` - The last block height at which the block hash will be valid. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method": "getLatestBlockhash", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 372758352 + }, + "value": { + "blockhash": "4zuGA4EyEjaN25qMVnwwij4UMRWcmEpFn1txrzMMk5xw", + "lastValidBlockHeight": 360735720 + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getleaderschedule.mdx b/services/reference/solana/json-rpc-methods/getleaderschedule.mdx new file mode 100644 index 00000000000..812cbc26718 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getleaderschedule.mdx @@ -0,0 +1,69 @@ +--- +title: 'getLeaderSchedule' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getLeaderSchedule` + +Returns the leader schedule for an epoch. + +## Parameters + +- `slot`: (integer) _[optional]_ - The slot number to query. The method returns the leader schedule + for the epoch that corresponds to the provided slot. If unspecified, returns the leader schedule for + the current epoch. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `identity`: (string) _[optional]_ - Only return results for this `base58` encoded validator identity. + +## Returns + +`result` - `null` if the requested epoch is not found; otherwise, an object of `base58` encoded validator +identities, and their corresponding leader slot indices as values (indices are relative to the first slot in the requested epoch). + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getLeaderSchedule", "params":[{"identity":"3zvXem8vqvDYos6BKu66FV84tmDdQwgLxYSempy8tSrs"}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "3zvXem8vqvDYos6BKu66FV84tmDdQwgLxYSempy8tSrs": [ + 2816, + 2817, + 2818, + ... + 430998, + 430999 + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getmaxretransmitslot.mdx b/services/reference/solana/json-rpc-methods/getmaxretransmitslot.mdx new file mode 100644 index 00000000000..ad4168a2e38 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getmaxretransmitslot.mdx @@ -0,0 +1,50 @@ +--- +title: 'getMaxRetransmitSlot' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getMaxRetransmitSlot` + +Get the highest slot that the node has processed and retransmitted. + +## Parameters + +None + +## Returns + +`result` - The slot number as a 64-bit unsigned integer. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getMaxRetransmitSlot"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": 372797611, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getmaxshredinsertslot.mdx b/services/reference/solana/json-rpc-methods/getmaxshredinsertslot.mdx new file mode 100644 index 00000000000..92dec56da62 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getmaxshredinsertslot.mdx @@ -0,0 +1,50 @@ +--- +title: 'getMaxShredInsertSlot' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getMaxShredInsertSlot` + +Get the maximum slot visible from after the shred insert. + +## Parameters + +None + +## Returns + +`result` - The slot number as a 64-bit unsigned integer. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getMaxShredInsertSlot"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result":372942171, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getminimumbalanceforrentexemption.mdx b/services/reference/solana/json-rpc-methods/getminimumbalanceforrentexemption.mdx new file mode 100644 index 00000000000..d55560c68c4 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getminimumbalanceforrentexemption.mdx @@ -0,0 +1,56 @@ +--- +title: 'getMinimumBalanceForRentExemption' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getMinimumBalanceForRentExemption` + +Returns the minimum balance (in lamports) required to make an account exempt from rent. + +## Parameters + +- `usize`: (integer) _[required]_ - The account's data length. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - The minimum lamports required in an account to remain rent free. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getMinimumBalanceForRentExemption", "params":[60]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result":1308480, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getmultipleaccounts.mdx b/services/reference/solana/json-rpc-methods/getmultipleaccounts.mdx new file mode 100644 index 00000000000..8e40b08fe97 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getmultipleaccounts.mdx @@ -0,0 +1,108 @@ +--- +title: 'getMultipleAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getMultipleAccounts` + +Returns information associated with a list of accounts. + +## Parameters + +- `array`: (string) _[required]_ - An array of `base58` encoded account public keys to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed` + - `dataSlice`: (object) _[optional]_ - A slice of the account data to return. Only available for `base58`, `base64`, + or `base64+zstd` encoding. This is an object with two properties: + - `offset` - The starting byte offset of the slice. + - `length` - The length of the slice in bytes. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - List of account objects. Returns `null` if the account doesn't exist, or an object containing + the following keys for the requested account: + - `data` - The account data, encoded in the specified format. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports in the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getMultipleAccounts", "params": [["7cVfgArCheMR6Cs4t6vz5rfnqd56vZq4ndaBrY5xkxXy", "ANVUJaJoVaJZELtV2AvRp7V5qPV1B84o29zAwDhPj1c2"], {"encoding": "base58"}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 372957980 + }, + "value": [ + { + "data": [ + "", + "base58" + ], + "executable": false, + "lamports": 6000000000, + "owner": "11111111111111111111111111111111", + "rentEpoch": 18446744073709552000, + "space": 0 + }, + { + "data": [ + "", + "base58" + ], + "executable": false, + "lamports": 3248020787, + "owner": "11111111111111111111111111111111", + "rentEpoch": 18446744073709552000, + "space": 0 + } + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getprogramaccounts.mdx b/services/reference/solana/json-rpc-methods/getprogramaccounts.mdx new file mode 100644 index 00000000000..2c4f0ac922e --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getprogramaccounts.mdx @@ -0,0 +1,90 @@ +--- +title: 'getProgramAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getProgramAccounts` + +Returns all accounts owned by the provided program public key. + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the program to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed` + - `dataSlice`: (object) _[optional]_ - A slice of the account data to return. Only available for `base58`, `base64`, + or `base64+zstd` encoding. This is an object with two properties: + - `offset` - The starting byte offset of the slice. + - `length` - The length of the slice in bytes. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + - `withContext`: (boolean). Wraps the result in a JSON object. + - `filters` - Filter results using an array of up to 4 filter objects. + +## Returns + +`result` - An object with the following fields: + +- `pubkey` - The public key of the node encoded as `base58` string. +- `account` - An object with the following fields: + - `data` - The account data, encoded in the specified format. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports assigned to the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getProgramAccounts", "params": ["4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", {"filters": [{"dataSize": 17}, {"memcmp": {"offset": 4, "bytes": "3Mc6vR"}}]}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "account": { + "data": "2R9jLfiAQ9bgdcw6h8s44439", + "executable": false, + "lamports": 15298080, + "owner": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + "rentEpoch": 28, + "space": 42 + }, + "pubkey": "CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY" + } + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getrecentperformancesamples.mdx b/services/reference/solana/json-rpc-methods/getrecentperformancesamples.mdx new file mode 100644 index 00000000000..df809e31c6a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getrecentperformancesamples.mdx @@ -0,0 +1,86 @@ +--- +title: 'getRecentPerformanceSamples' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getRecentPerformanceSamples` + +Returns a list of recent performance samples, in reverse slot order. Performance samples are taken every 60 seconds +and include the number of transactions and slots that occur in a given time window. + +## Parameters + +- `limit`: (integer) - The number of samples to return (maximum 720). + +## Returns + +`result` - An object with the following fields: + +- `numNonVoteTransactions` - The number of non-vote transactions during the specified sample period. +- `numSlots` - The number of slots in the sample. +- `numTransactions` - The number of transactions in the sample. +- `samplePeriodSecs` - The number of seconds in the sample window. +- `slot` - The slot in which the sample was taken at. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getRecentPerformanceSamples", "params": [4]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "numNonVoteTransactions": 4255, + "numSlots": 156, + "numTransactions": 6751, + "samplePeriodSecs": 60, + "slot": 372969680 + }, + { + "numNonVoteTransactions": 5486, + "numSlots": 156, + "numTransactions": 7980, + "samplePeriodSecs": 60, + "slot": 372969524 + }, + { + "numNonVoteTransactions": 4069, + "numSlots": 154, + "numTransactions": 6532, + "samplePeriodSecs": 60, + "slot": 372969368 + }, + { + "numNonVoteTransactions": 3760, + "numSlots": 155, + "numTransactions": 6224, + "samplePeriodSecs": 60, + "slot": 372969214 + } + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getrecentprioritizationfees.mdx b/services/reference/solana/json-rpc-methods/getrecentprioritizationfees.mdx new file mode 100644 index 00000000000..cdb5f8f014a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getrecentprioritizationfees.mdx @@ -0,0 +1,63 @@ +--- +title: 'getRecentPrioritizationFees' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getRecentPrioritizationFees` + +Returns a list of prioritization fees from recent blocks. + +## Parameters + +- `address`: (array) _[optional]_ - Array of account addresses (up to a maximum of 128 addresses), as `base58` encoded strings. + +## Returns + +`result` - An array of objects with the following fields: + +- `prioritizationFee` - The prioritization fee value. +- `slot` - The slot number associated with the prioritization fee. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getRecentPrioritizationFees", "params": [["CxELquR1gPP8wHe33gZ4QxqGB3sZ9RSwsJ2KshVewkFY"]]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "prioritizationFee": 0, + "slot": 372976610 + }, + ... + { + "prioritizationFee": 0, + "slot": 372976759 + } + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getsignaturesforaddress.mdx b/services/reference/solana/json-rpc-methods/getsignaturesforaddress.mdx new file mode 100644 index 00000000000..b39407d500b --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getsignaturesforaddress.mdx @@ -0,0 +1,84 @@ +--- +title: 'getSignaturesForAddress' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSignaturesForAddress` + +Returns signatures for confirmed transactions that include the specified address in the `accountKeys` list. +Results are returned in reverse chronological order, starting from the provided signature or the most recent confirmed block. + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the account to query. + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + - `limit`: (number) _[optional]_ - The maximum number of signatures to return (between `1` and `1000`). + The default is `1000`. + - `before`: (string) _[optional]_ - Starts searching backward from the specified transaction signature. + If not provided, the search begins from the most recent confirmed block. + - `until`: (string) _[optional]_ - The signature to end the query at (if found before reaching `limit`). + +## Returns + +`result` - An object with the following fields: + +- `blockTime` - The estimated production time, as Unix timestamp (seconds since the Unix epoch). `null` if not available. +- `confirmationStatus` - The transaction's cluster confirmation status. The status can be `processed`, `confirmed`, or `finalized`. +- `err` - Error code if the transaction failed, or `null` if the transaction succeeds. +- `memo` - The memo associated with the transaction, or `null` if no memo is present. +- `signature` - The `base58` encoded signature of the transaction. +- `slot` - The slot number in which the transaction was confirmed. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSignaturesForAddress", "params": ["Vote111111111111111111111111111111111111111", {"limit": 1}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + { + "blockTime": 1744177112, + "confirmationStatus": "finalized", + "err": null, + "memo": null, + "signature": "2QYQGurkeT9CwdMTnMNTETbqwU4NiLoB8kqA4KxVUu4vV1BWxw79YfzWAWpPduqA2zmxgbunyrPZtCbDR7LCmTZr", + "slot": 373019515 + } + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getsignaturestatuses.mdx b/services/reference/solana/json-rpc-methods/getsignaturestatuses.mdx new file mode 100644 index 00000000000..e573cfb841b --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getsignaturestatuses.mdx @@ -0,0 +1,78 @@ +--- +title: 'getSignatureStatuses' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSignatureStatuses` + +Returns the statuses of a list of signatures. Unless the `searchTransactionHistory` configuration parameter +is included, this method only searches the recent status cache of signatures, which retains statuses for +all active slots plus `MAX_RECENT_BLOCKHASHES` rooted slots. + +## Parameters + +- `txSignatures`: (array of strings) _[required]_ - An array of `base58` encoded transaction signatures to confirm. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `searchTransactionHistory`: boolean - If `true`, the search includes the entire transaction + history. If `false`, the search only includes recent transactions in the latest confirmed block. + The default is `false`. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An array of objects containing the following keys, or `null` if the signature is not found: + - `confirmationStatus` - The transaction's cluster confirmation status. It can either be `processed`, `confirmed`, or `finalized`. + - `confirmations` - The number of confirmations a transaction has received. If the transaction is + `finalized` (confirmed at the highest level of commitment), the value will be `null`. + - `err` - Error code if the transaction failed, or `null` if the transaction succeeds. + - `slot` - The slot number in which the transaction was confirmed. + - `status` - The processing status of the transaction. It returns `Ok` if the transaction was successful + and `Err` if the transaction failed. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSignatureStatuses", "params": [["5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW"], {"searchTransactionHistory": true}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 373170033 + }, + "value": [null] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getslot.mdx b/services/reference/solana/json-rpc-methods/getslot.mdx new file mode 100644 index 00000000000..8ac35e5daf6 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getslot.mdx @@ -0,0 +1,56 @@ +--- +title: 'getSlot' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSlot` + +Returns the latest slot that has reached the commitment level. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result`: (integer) - The current slot. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSlot", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result":373175194, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getslotleader.mdx b/services/reference/solana/json-rpc-methods/getslotleader.mdx new file mode 100644 index 00000000000..277a5a51797 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getslotleader.mdx @@ -0,0 +1,56 @@ +--- +title: 'getSlotLeader' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSlotLeader` + +Returns the current slot leader. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result`: (string) - The slot leader's `base58` encoded public key address. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSlotLeader", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result":"dv4ACNkpYPcE3aKmYDqZm9G5EB3J4MRoeE7WNDRBVJB", + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getslotleaders.mdx b/services/reference/solana/json-rpc-methods/getslotleaders.mdx new file mode 100644 index 00000000000..e31b371796a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getslotleaders.mdx @@ -0,0 +1,57 @@ +--- +title: 'getSlotLeaders' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSlotLeaders` + +Returns the slot leaders for a given slot range. + +## Parameters + +- `startSlot`: (integer) _[required]_ - The starting slot number for the query.` +- `limit`: (integer) _[required]_ - The maximum number of slot leaders to return (`1` to `5000`). + +## Returns + +`result`: (array of strings) - An array of `base58` encoded public key addresses identifying the slot leaders. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSlotLeaders", "params": [373184397, 5]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": [ + "dv3qDFk1DTF36Z62bNvrCXe9sKATA6xvVy6A798xxAS", + "dv3qDFk1DTF36Z62bNvrCXe9sKATA6xvVy6A798xxAS", + "dv3qDFk1DTF36Z62bNvrCXe9sKATA6xvVy6A798xxAS", + "dv2eQHeP4RFrJZ6UeiZWoc3XTtmtZCUKxxCApCDcRNV", + "dv2eQHeP4RFrJZ6UeiZWoc3XTtmtZCUKxxCApCDcRNV" + ], + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getstakeminimumdelegation.mdx b/services/reference/solana/json-rpc-methods/getstakeminimumdelegation.mdx new file mode 100644 index 00000000000..d46ff8ff095 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getstakeminimumdelegation.mdx @@ -0,0 +1,66 @@ +--- +title: 'getStakeMinimumDelegation' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getStakeMinimumDelegation` + +Returns the minimum number of lamports required to delegate a stake account. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - The minimum number of lamports required to delegate a stake account. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","id":1,"method":"getStakeMinimumDelegation","params":[]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 373193193 + }, + "value": 1 + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getsupply.mdx b/services/reference/solana/json-rpc-methods/getsupply.mdx new file mode 100644 index 00000000000..295499f3f53 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getsupply.mdx @@ -0,0 +1,80 @@ +--- +title: 'getSupply' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getSupply` + +Returns information about the current token supply. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `total` - The total supply of lamports in the network. + - `circulating` - The circulating supply of lamports in the network. + - `nonCirculating` - The non-circulating supply of lamports in the network. + - `nonCirculatingAccounts` - An array of account addresses that hold non-circulating lamports. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getSupply", "params": []}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.2.3", + "slot": 373204187 + }, + "value": { + "circulating": 967687939079885400, + "nonCirculating": 315864946585692700, + "nonCirculatingAccounts": [ + "Bzr4raUumaTNeqhMjvWYaF2Zm2gQwgFCDbVwcCNjNcT8", + "9NFMpkv65d2G7UMMFYHeXrBAaB6rVD3BgQ95bKiwr448", + ... + "3RQvfXbzQQBT4PymcwrBPtSLVuEpK79NuPAt8k4PhrXe" + ], + "total": 1283552885665578200 + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gettokenaccountbalance.mdx b/services/reference/solana/json-rpc-methods/gettokenaccountbalance.mdx new file mode 100644 index 00000000000..d2b67900460 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettokenaccountbalance.mdx @@ -0,0 +1,80 @@ +--- +title: 'getTokenAccountBalance' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenAccountBalance` + +Returns the token balance of an SPL token account. + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the token account to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `amount` - The raw total token supply without decimals, a string representation of a 64-bit unsigned integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - Deprecated. The total token supply using mint-prescribed decimals. + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + +## Example + +Replace `` with your API key. + +### Request + + + + +````bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getTokenAccountBalance", "params": ["3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa"]}' + ``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.1.16", + "slot": 332462945 + }, + "value": { + "amount": "344068629195906", + "decimals": 6, + "uiAmount": 344068629.195906, + "uiAmountString": "344068629.195906" + } + }, + "id": 1 +} +```` + + + diff --git a/services/reference/solana/json-rpc-methods/gettokenaccountsbydelegate.mdx b/services/reference/solana/json-rpc-methods/gettokenaccountsbydelegate.mdx new file mode 100644 index 00000000000..4bb9e315d59 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettokenaccountsbydelegate.mdx @@ -0,0 +1,138 @@ +--- +title: 'getTokenAccountsByDelegate' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenAccountsByDelegate` + +Retrieves all SPL token accounts for which a specified delegate has been approved. + +## Parameters + +- `address`: (string) _[required]_ - The `base58` encoded public key of the delegate account to query. +- `accountDetails`: (object) _[required]_ - An object containing one the following fields: + - `mint`: (string) _[optional]_ - The `base58` encoded public key of the mint account. + - `programId`: (string) _[optional]_ - The `base58` encoded public key of the token program that owns the account. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed` + - `dataSlice`: (object) _[optional]_ - A slice of the account data to return. Only available for `base58`, `base64`, + or `base64+zstd` encoding. This is an object with two properties: + - `offset` - The starting byte offset of the slice. + - `length` - The length of the slice in bytes. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - An array of objects with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `pubkey` - The `base58` encoded public key of the token account. + - `account` - An object containing the address used to store assets: + - `data` - An object containing token state data associated with the account, either as + encoded binary data or in JSON format: + - `program` The program that manages the token. + - `parsed` - An array of parsed instructions that were executed in the block's transactions: + - `info` - An array of objects that provide additional details about the transactions in the block: + - `tokenAmount` - The balance of the token in the token account. + - `amount` - The raw total token supply without decimals, a string representation of a u64 integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - The total token supply using mint-prescribed decimals (DEPRECATED). + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + - `isNative` - A boolean value indicating whether the token is a native token of the Solana blockchain. + - `mint` - Provides information about the creation of new tokens. + - `owner` - The base-58 encoded Pubkey of the program this account has been assigned to. + - `state` - The current state of the token account. + - `type` - The type of the block. It can be used to differentiate between regular blocks and special blocks such as snapshot or transaction confirmation blocks. + - `space` - The amount of storage space required to store the token account. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports in the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + +## Example + +Replace `` with your API key. + +### Request + + + + +````bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getTokenAccountsByDelegate", "params": ["4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", {"programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}, {"encoding": "jsonParsed"}]}' + ``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { "slot": 1114 }, + "value": [ + { + "pubkey": "28YTZEwqtMHWrhWcvv34se7pjS7wctgqzCPB3gReCFKp", + "account": { + "data": { + "program": "spl-token", + "parsed": { + "info": { + "tokenAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "delegate": "4Nd1mBQtrMJVYVfKf2PJy9NZUZdTAsp7D4xWLs4gDB4T", + "delegatedAmount": { + "amount": "1", + "decimals": 1, + "uiAmount": 0.1, + "uiAmountString": "0.1" + }, + "state": "initialized", + "isNative": false, + "mint": "3wyAj7Rt1TWVPZVteFJPLa26JmLvdb1CAKEFZm3NY75E", + "owner": "CnPoSPKXu7wJqxe59Fs72tkBeALovhsCxYeFwPCQH9TD" + }, + "type": "account" + }, + "space": 165 + }, + "executable": false, + "lamports": 1726080, + "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "rentEpoch": 4, + "space": 165 + } + } + ] + }, + "id": 1 +} +```` + + + diff --git a/services/reference/solana/json-rpc-methods/gettokenaccountsbyowner.mdx b/services/reference/solana/json-rpc-methods/gettokenaccountsbyowner.mdx new file mode 100644 index 00000000000..df15beaf778 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettokenaccountsbyowner.mdx @@ -0,0 +1,137 @@ +--- +title: 'getTokenAccountsByOwner' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenAccountsByOwner` + +Retrieves all SPL token accounts for the specified token owner. + +## Parameters + +- `address`: (string) _[required]_ - The `base58` encoded public key of the account owner to query. +- `accountDetails`: (object) _[required]_ - An object containing one the following fields: + - `mint`: (string) _[optional]_ - The `base58` encoded public key of the mint account. + - `programId`: (string) _[optional]_ - The `base58` encoded public key of the token program that owns the account. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed` + - `dataSlice`: (object) _[optional]_ - A slice of the account data to return. Only available for `base58`, `base64`, + or `base64+zstd` encoding. This is an object with two properties: + - `offset` - The starting byte offset of the slice. + - `length` - The length of the slice in bytes. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - An array of objects with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `pubkey` - The `base58` encoded public key of the account. + - `account` - An object containing the address used to store assets: + - `data` - An object containing state data associated with the account, either as + encoded binary data or in JSON format: + - `program` The program that manages the token. + - `parsed` - An array of parsed instructions that were executed in the block's transactions: + - `info` - An array of objects that provide additional details about the transactions in the block: + - `tokenAmount` - The balance of the token in the account. + - `amount` - The raw total token supply without decimals, a string representation of a u64 integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - The total token supply using mint-prescribed decimals (DEPRECATED). + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + - `delegate` - The public address of the delegate from which the account tokens are to be retrieved encoded as base-58 string. + - `delegateAmount` The configuration object with the following fields: + - `amount` - The raw total token supply without decimals, a string representation of a u64 integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - The total token supply using mint-prescribed decimals (DEPRECATED). + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + - `isNative` - A boolean value indicating whether the token is a native token of the Solana blockchain. + - `mint` - Provides information about the creation of new tokens. + - `owner` - The base-58 encoded Pubkey of the program this account has been assigned to. + - `state` - The current state of the token account. + - `type` - The type of the block. It can be used to differentiate between regular blocks and special blocks such as snapshot or transaction confirmation blocks. + - `space` - The amount of storage space required to store the token account. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports in the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + +## Example + +Replace `` with your API key. + +### Request + + + + +````bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "getTokenAccountsByOwner", "params": ["A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd", {"programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}, {"encoding": "jsonParsed"}]}' + ``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { "apiVersion": "2.0.15", "slot": 341197933 }, + "value": [ + { + "pubkey": "BGocb4GEpbTFm8UFV2VsDSaBXHELPfAXrvd4vtt8QWrA", + "account": { + "data": { + "program": "spl-token", + "parsed": { + "info": { + "isNative": false, + "mint": "2cHr7QS3xfuSV8wdxo3ztuF4xbiarF6Nrgx3qpx3HzXR", + "owner": "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd", + "state": "initialized", + "tokenAmount": { + "amount": "420000000000000", + "decimals": 6, + "uiAmount": 420000000.0, + "uiAmountString": "420000000" + } + }, + "type": "account" + }, + "space": 165 + }, + "executable": false, + "lamports": 2039280, + "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "rentEpoch": 18446744073709551615, + "space": 165 + } + } + ] + }, + "id": 1 +} +```` + + + diff --git a/services/reference/solana/json-rpc-methods/gettokenlargestaccounts.mdx b/services/reference/solana/json-rpc-methods/gettokenlargestaccounts.mdx new file mode 100644 index 00000000000..531c9a6caa5 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettokenlargestaccounts.mdx @@ -0,0 +1,93 @@ +--- +title: 'getTokenLargestAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenLargestAccounts` + +Returns the 20 largest accounts holding a specified SPL token type. + +## Parameters + +- `address`: (string) _[required]_ - The `base58` encoded public key of the token mint to query. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result` - An array of objects with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `address` - The address of the token account. + - `amount` - The raw total token supply without decimals, a string representation of a `u64` integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - Deprecated. The total token supply using mint-prescribed decimals. + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + +## Example + +Replace `` with your API key. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getTokenLargestAccounts", "params": ["1YDQ35V8g68FGvcT85haHwAXv1U7XMzuc4mZeEXfrjE"]}' +``` + + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.1.16", + "slot": 332646796 + }, + "value": [ + { + "address": "GFpkRJXUBNDWXENKAJ1dkYq4kYpHyNmgbifZbHsXXz4x", + "amount": "12", + "decimals": 0, + "uiAmount": 12, + "uiAmountString": "12" + }, + ... + { + "address": "GrxprwFYdFV4kdHjQDTWsdDFn9KtFn1p35rSZYDFgMkD", + "amount": "3", + "decimals": 0, + "uiAmount": 3, + "uiAmountString": "3" + } + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gettokensupply.mdx b/services/reference/solana/json-rpc-methods/gettokensupply.mdx new file mode 100644 index 00000000000..66001c6fa65 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettokensupply.mdx @@ -0,0 +1,76 @@ +--- +title: 'getTokenSupply' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTokenSupply` + +Returns the total supply of an SPL token. + +## Parameters + +- `pubKey`: (string) _[required]_ - The `base58` encoded public key of the token mint. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + +## Returns + +`result`- An object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `amount` - The raw total token supply without decimals, a string representation of a `u64` integer. + - `decimals` - An integer value representing the number of decimal places used by the token. + - `uiAmount` - Deprecated. The total token supply using mint-prescribed decimals. + - `uiAmountString` - The total token supply as a string using mint-prescribed decimals. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"getTokenSupply", "params": ["7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { + "apiVersion": "2.1.16", + "slot": 332678924 + }, + "value": { + "amount": "5736490108605186363", + "decimals": 9, + "uiAmount": 5736490108.605186, + "uiAmountString": "5736490108.605186363" + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gettransaction.mdx b/services/reference/solana/json-rpc-methods/gettransaction.mdx new file mode 100644 index 00000000000..bacf33e01d2 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettransaction.mdx @@ -0,0 +1,407 @@ +--- +title: 'getTransaction' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTransaction` + +Returns transaction details for a confirmed transaction. + +## Parameters + +- `address`: (string) _[required]_ - The `base58` encoded program public key. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `maxSupportedTransactionVersion`: (integer) _[optional]_ - The maximum supported transaction version to return. + If the requested transaction contains a transaction with a higher version, an error will be returned. If this parameter + is omitted, only legacy transactions will be returned, and any versioned transaction will return an error. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `json`, and `jsonParsed`. The + default is `json`. + +## Returns + +`result`- `null` if the transaction is not found or not confirmed, otherwise returns an object containing: + +- `slot` - The slot this transaction was processed in. +- `blockTime` - The block time of the transaction as Unix timestamp (seconds since the Unix epoch). `null` if not available. + - `meta` - The transaction status metadata object, which contains additional information about the block and its + transactions. The meta object can be `null`, or it may contain the following fields: + - `err` - Error code if the transaction failed, or `null` if the transaction succeeds. + - `fee` - The total fees paid by all transactions in the block encoded as `u64` integer. + - `innerInstructions` - An array of objects representing the inner instructions of all transactions in the + block (omitted if inner instruction recording is disabled). Each object has the following fields: + - `logMessages` - An array of strings containing any log messages generated by the block's transactions + (omitted if inner instruction recording is disabled). + - `postBalances` - An array of lamport balances for each account in the block after the transactions were processed. + - `postTokenBalances` - An array of token balances for each token account in the block after the transactions were + processed (omitted if inner instruction recording is disabled): + - `accountIndex` - The index of an account within a transaction. + - `mint` - The mint address of the token. + - `owner` - The `base58` encoded public key of the program this account has been assigned to. + - `uiTokenAmount` - The amount of a token transfer. + - `amount` - The amount of the token transferred. + - `decimals` - The number of decimal places used by the token. + - `uiAmount` - The amount of the token transferred in the smallest unit of the token. + - `uiAmountString` - The amount of the token transferred with the appropriate number of decimal places for the token. + - `preBalances` - An array of lamport balances for each account in the block before the transactions were processed. + - `preTokenBalances` - An array of token balances for each token account in the block before the transactions were + processed (omitted if inner instruction recording is disabled): + - `accountIndex` - The index of an account within a transaction. + - `mint` - The mint address of the token. + - `owner` - The `base58` encoded public key of the program this account has been assigned to. + - `uiTokenAmount` - The amount of a token transfer. + - `amount` - The amount of the token transferred. + - `decimals` - The number of decimal places used by the token. + - `uiAmount` - The amount of the token transferred in the smallest unit of the token. + - `uiAmountString` - The amount of the token transferred with the appropriate number of decimal places for the token. + - `rewards` - An object containing information about the rewards earned by the block's validators + (only present if the rewards are requested). It has the following fields: + - `pubkey` - The public key of the account that received the award encoded as a `base58` string. + - `lamports` - The number of reward lamports credited or debited by the account. + - `postBalance` - The account balance in lamports after the reward was applied. + - `rewardType` - The type of reward. It could be `fee`, `rent`, `voting`, or `staking`. + - `commission` - The vote account commission when the reward was credited, only present for voting and staking rewards. + - `status` - The status of the transaction. It returns `Ok` if the transaction was successful, and `Err` + if the transaction failed. + - `transaction` - The transaction object. It could be either JSON format or encoded binary data, depending on the encoding parameter. + - `message` - An array of transaction objects included in the block: + - `accountKeys` - An array of public keys associated with the accounts that were accessed during + the execution of transactions in the block. + - `pubkey` - The public key associated with the block producer that created the block. + - `signer` - Indicates if the account is a required transaction signer. It can also be used to identify the signers + involved in the block's transactions and to verify the authenticity of the signatures. + - `source` - Identifies the accounts that provided the funds for the block's transactions. + - `writable` - A boolean value that indicates whether the accounts associated with the given public keys + were modified by the transactions or not. + - `instructions` - An array of instructions that were executed in the block's transactions + - `parsed` - An array of parsed instructions that were executed in the block's transactions + - `info` - An array of information objects that provide additional details about the transactions in the block. + - `clockSysvar` - Provides information about the current state of the blockchain. + - `slotHashesSysvar` - Provides information about the hashes of recent slots. + - `vote` - An array of vote accounts that were involved in the block's transactions. + - `hash` - The hash of the block. It can be used to uniquely identify the block and to verify the authenticity + of the block's contents. + - `slots` - An array of slot numbers that correspond to the transactions in the block. + - `timestamp` - The Unix timestamp of the block's creation. + - `voteAccount` - A vote account to identify the validator that produced the block and to verify the validity of their vote. + - `voteAuthority` - An authority associated with the vote account used to produce the block. + - `type` - The type of the block. It can be used to differentiate between regular blocks and special + blocks such as snapshot or transaction confirmation blocks. + - `program` - The data associated with the program that was executed in the block's transactions. + - `programId` - The public key of the program that was executed in the block's transactions. + - `stackHeight` - The current depth of the execution stack. + - `recentBlockhash` - The recent block hash for the account's cluster. + - `signatures` - The list of transaction signatures contained within a particular block. +- `version` - The version of the transaction. Returns `undefined` if `maxSupportedTransactionVersion` is not specified in the request. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","id": 1,"method": "getTransaction","params": ["bVwuWqLs5wbHMHMavFfpK6zrg3mGY6AWVTNgdeDuWi1PxmFgvQYQJBMMcYp16fmJE9hwg4nNjDFok4rxmxQ6j5e",{"encoding": "jsonParsed","maxSupportedTransactionVersion":0}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "blockTime": 1744593547, + "meta": { + "computeUnitsConsumed": 52018, + "err": null, + "fee": 10000, + "innerInstructions": [ + { + "index": 2, + "instructions": [ + { + "parsed": { + "info": { + "authority": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "destination": "EXp2FCTRX9tPyyjLneE7K6YRgh9qpqKnQLecXdRFMQFL", + "mint": "So11111111111111111111111111111111111111112", + "source": "GscCpwDVJfJ9Qv1svzLWpend7hvJq3Syrfuwe5YzHbtp", + "tokenAmount": { + "amount": "10", + "decimals": 9, + "uiAmount": 1e-8, + "uiAmountString": "0.00000001" + } + }, + "type": "transferChecked" + }, + "program": "spl-token", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "stackHeight": 2 + }, + { + "parsed": { + "info": { + "authority": "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "destination": "HTADwVNDuSxnzYyuwhfNyZAkaVCABnbNFZzEdcR35idy", + "mint": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "source": "CPg85jShyN1Tez437qgR1jYbF43i8aWhTMWpbPCJoJqE", + "tokenAmount": { + "amount": "2583", + "decimals": 6, + "uiAmount": 0.002583, + "uiAmountString": "0.002583" + } + }, + "type": "transferChecked" + }, + "program": "spl-token", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "stackHeight": 2 + } + ] + } + ], + "logMessages": [ + "Program 11111111111111111111111111111111 invoke [1]", + "Program 11111111111111111111111111111111 success", + "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]", + ... + "Program 11111111111111111111111111111111 success" + ], + "postBalances": [ + 1160000, + 10799119391, + ... + 5888160 + ], + "postTokenBalances": [ + { + "accountIndex": 3, + "mint": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "owner": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "uiTokenAmount": { + "amount": "173576140", + "decimals": 6, + "uiAmount": 173.57614, + "uiAmountString": "173.57614" + } + }, + { + "accountIndex": 12, + "mint": "So11111111111111111111111111111111111111112", + "owner": "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "uiTokenAmount": { + "amount": "700864692413", + "decimals": 9, + "uiAmount": 700.864692413, + "uiAmountString": "700.864692413" + } + }, + { + "accountIndex": 13, + "mint": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "owner": "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "uiTokenAmount": { + "amount": "201175021191002", + "decimals": 6, + "uiAmount": 201175021.191002, + "uiAmountString": "201175021.191002" + } + } + ], + "preBalances": [ + 1170000, + 10799139401, + ... + 5888160 + ], + "preTokenBalances": [ + { + "accountIndex": 3, + "mint": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "owner": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "uiTokenAmount": { + "amount": "173573816", + "decimals": 6, + "uiAmount": 173.573816, + "uiAmountString": "173.573816" + } + }, + { + "accountIndex": 12, + "mint": "So11111111111111111111111111111111111111112", + "owner": "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "uiTokenAmount": { + "amount": "700864692403", + "decimals": 9, + "uiAmount": 700.864692403, + "uiAmountString": "700.864692403" + } + }, + { + "accountIndex": 13, + "mint": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "owner": "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "uiTokenAmount": { + "amount": "201175021193585", + "decimals": 6, + "uiAmount": 201175021.193585, + "uiAmountString": "201175021.193585" + } + } + ], + "rewards": [], + "status": { + "Ok": null + } + }, + "slot": 333307946, + "transaction": { + "message": { + "accountKeys": [ + { + "pubkey": "AgkMbKTWCuiAaJ262TdpXhuMPvWa21GJmAmZfo6gLEPF", + "signer": true, + "source": "transaction", + "writable": true + }, + ... + { + "pubkey": "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "signer": false, + "source": "lookupTable", + "writable": false + } + ], + "addressTableLookups": [ + { + "accountKey": "CadRirmkx2CeeLd9LUtvF7D53822vrSt8PQULewPLm28", + "readonlyIndexes": [ + 2, + 0, + 5, + 4 + ], + "writableIndexes": [ + 1, + 9, + 10 + ] + } + ], + "instructions": [ + { + "parsed": { + "info": { + "base": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "lamports": 2039290, + "newAccount": "GscCpwDVJfJ9Qv1svzLWpend7hvJq3Syrfuwe5YzHbtp", + "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "seed": "3JgKrBB3sagy1HMXai5hKbRnsuZZDudR", + "source": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "space": 165 + }, + "type": "createAccountWithSeed" + }, + "program": "system", + "programId": "11111111111111111111111111111111", + "stackHeight": null + }, + { + "parsed": { + "info": { + "account": "GscCpwDVJfJ9Qv1svzLWpend7hvJq3Syrfuwe5YzHbtp", + "mint": "So11111111111111111111111111111111111111112", + "owner": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "rentSysvar": "SysvarRent111111111111111111111111111111111" + }, + "type": "initializeAccount" + }, + "program": "spl-token", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "stackHeight": null + }, + { + "accounts": [ + "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL", + "D4FPEruKEHrG5TenZ2mpDGEfu1iUvTiqBxvpU8HLBvC2", + "CLhjQNAdhn6qZiCpDmiQFVNrhfMumDGEGMBrnVmk7wTR", + "GscCpwDVJfJ9Qv1svzLWpend7hvJq3Syrfuwe5YzHbtp", + "HTADwVNDuSxnzYyuwhfNyZAkaVCABnbNFZzEdcR35idy", + "EXp2FCTRX9tPyyjLneE7K6YRgh9qpqKnQLecXdRFMQFL", + "CPg85jShyN1Tez437qgR1jYbF43i8aWhTMWpbPCJoJqE", + "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", + "So11111111111111111111111111111111111111112", + "EyzgnBfHGe9hh169B8993muBVcoeURCnSgPbddBeSybo", + "d2jwtX1E47jw4EwxPK9VSVCmQsQpu4tzniNkzk43rF3" + ], + "data": "E73fXHPWvSR1nM1Tw5ZRioYHwnqN3caKH", + "programId": "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C", + "stackHeight": null + }, + { + "parsed": { + "info": { + "account": "GscCpwDVJfJ9Qv1svzLWpend7hvJq3Syrfuwe5YzHbtp", + "destination": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA", + "owner": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA" + }, + "type": "closeAccount" + }, + "program": "spl-token", + "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "stackHeight": null + }, + { + "parsed": { + "info": { + "destination": "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt", + "lamports": 20000, + "source": "6FwAyRbvKwY4uAzgeWaXUHEqfSDaFcdcZsbBh1TQtnuA" + }, + "type": "transfer" + }, + "program": "system", + "programId": "11111111111111111111111111111111", + "stackHeight": null + } + ], + "recentBlockhash": "BRRXvTHndixZBzAacVfLkCfXX8X4jzrWdd9WKKsmTKG3" + }, + "signatures": [ + "bVwuWqLs5wbHMHMavFfpK6zrg3mGY6AWVTNgdeDuWi1PxmFgvQYQJBMMcYp16fmJE9hwg4nNjDFok4rxmxQ6j5e", + "3mSzNawWNP75KjSH3yyLyydBWaeEV7nJsWNHzJy5ThN4h2sv1vBbygwbLeRFU9zuoeBDVfqdU1tPpH2G9m8eFUFp" + ] + }, + "version": 0 + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/gettransactioncount.mdx b/services/reference/solana/json-rpc-methods/gettransactioncount.mdx new file mode 100644 index 00000000000..65ece086842 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/gettransactioncount.mdx @@ -0,0 +1,56 @@ +--- +title: 'getTransactionCount' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getTransactionCount` + +Returns the current transaction count from the ledger. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: (integer) _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` (integer): The current transaction count. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":394414196266, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getversion.mdx b/services/reference/solana/json-rpc-methods/getversion.mdx new file mode 100644 index 00000000000..d3e65123938 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getversion.mdx @@ -0,0 +1,56 @@ +--- +title: 'getVersion' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getVersion` + +Returns the Solana version running on the node. + +## Parameters + +None + +## Returns + +`result` - An object with the following fields: + +- `solana-core` - The version of the Solana core software. +- `feature-set` - ID of the software's feature set. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "feature-set":3271415109, + "solana-core":"2.1.16" + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/getvoteaccounts.mdx b/services/reference/solana/json-rpc-methods/getvoteaccounts.mdx new file mode 100644 index 00000000000..01f2348fbac --- /dev/null +++ b/services/reference/solana/json-rpc-methods/getvoteaccounts.mdx @@ -0,0 +1,111 @@ +--- +title: 'getVoteAccounts' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `getVoteAccounts` + +Returns the account info and associated stake for all the voting accounts in the current bank. + +## Parameters + +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `votePubkey`: (string) _[optional]_ - The `base58` encoded public key of the validator vote account to return results for. + - `keepUnstakedDelinquents`: (boolean) _[optional]_ - If `true`, the response includes all delinquent + accounts, even if they are not staked. + - `delinquentSlotDistance`: (integer) _[optional]_ - The number of slots that a validator must be behind to be considered delinquent. + It's not recommended to specify this parameter. + +## Returns + +`result` - An object of current and delinquent voting accounts with the following fields: + +- `current` - An array of objects with the following fields: + - `activatedStake` - The amount of stake in lamports delegated to this vote account. + - `commission` - The commission rate for the validator as a percentage (0 - 100). + - `epochCredits` - An array of arrays containing the epoch, credits earned, and previous credits earned. + - `epochVoteAccount` - A boolean indicating if the account is staked for the current epoch. + - `lastVote` - The most recent slot voted on by this vote account. + - `nodePubkey` - The public key of the validator. + - `rootSlot` - The root slot number. + - `votePubkey` - The public key of the vote account. +- `delinquent` - An array of objects with the same fields as `current`, but for delinquent accounts. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","id":1, "method":"getVoteAccounts"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "current": [ + { + "activatedStake": 21728348612276, + "commission": 0, + "epochCredits": [ + [ + 767, + 552326409, + 545429728 + ], + [ + 768, + 559219285, + 552326409 + ], + [ + 769, + 566108108, + 559219285 + ], + [ + 770, + 573001980, + 566108108 + ], + [ + 771, + 577049781, + 573001980 + ] + ], + "epochVoteAccount": true, + "lastVote": 333325355, + "nodePubkey": "W1FAbXyQJ5iPghy12TqPktwobU5kTD73ZjA6QZCvsRp", + "rootSlot": 333325324, + "votePubkey": "DXjujkbMhAvkaygmjLbi7UGdovAs2AU6y45UMEqxhEnw" + }, + ... + ] + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/index.md b/services/reference/solana/json-rpc-methods/index.md new file mode 100644 index 00000000000..38e3914a65d --- /dev/null +++ b/services/reference/solana/json-rpc-methods/index.md @@ -0,0 +1,17 @@ +--- +title: 'JSON-RPC methods' +description: Supported methods on the Solana network. +sidebar_key: solana-json-rpc-api +--- + +# JSON-RPC API + +:::note Decentralized Infrastructure Network (DIN) +Solana is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](../../solana/index.md#partners-and-privacy-policies). + +::: + +Infura supports the standard Solana API methods and the +[Digital Asset Standard (DAS) API methods](./digital-asset-standard/index.md) +used to query digital assets. diff --git a/services/reference/solana/json-rpc-methods/isblockhashvalid.mdx b/services/reference/solana/json-rpc-methods/isblockhashvalid.mdx new file mode 100644 index 00000000000..98623989449 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/isblockhashvalid.mdx @@ -0,0 +1,64 @@ +--- +title: 'isBlockhashValid' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `isBlockhashValid` + +Returns whether a block hash is still valid. + +## Parameters + +- `blockhash`: (string) _[requiredl]_ - The `base58` encoded hash of the block. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `epoch`: (integer) _[optional]_ - The epoch for which to query the rewards. If not specified, the current epoch is used. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - `true` if the block hash is still valid; otherwise `false`. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":1, "method":"isBlockhashValid", "params":["4JsC66MuiW8EbromjB3h64NmZQAH24rAWxwK5raQFTt9", {"commitment":"processed"}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": { + "context": { + "apiVersion":"2.1.16", + "slot":333329792 + }, + "value":false + }, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/minimumledgerslot.mdx b/services/reference/solana/json-rpc-methods/minimumledgerslot.mdx new file mode 100644 index 00000000000..afeda75f31a --- /dev/null +++ b/services/reference/solana/json-rpc-methods/minimumledgerslot.mdx @@ -0,0 +1,50 @@ +--- +title: 'minimumLedgerSlot' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `minimumLedgerSlot` + +Returns the lowest slot that the node has information about in its ledger. + +## Parameters + +None + +## Returns + +`result` (integer): The lowest slot that the node has information about in its ledger. + +### Request + + + + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id":1, "method":"minimumLedgerSlot"}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":333274647, + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/requestairdrop.mdx b/services/reference/solana/json-rpc-methods/requestairdrop.mdx new file mode 100644 index 00000000000..d62bf415f80 --- /dev/null +++ b/services/reference/solana/json-rpc-methods/requestairdrop.mdx @@ -0,0 +1,61 @@ +--- +title: 'requestAirdrop' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `requestAirdrop` + +Requests an airdrop of lamports to a specified account. + +:::info +This method doesn't work on mainnet. +::: + +## Parameters + +- `address`: (string) _[required]_ - The `base-58` encoded public key of the receiving account. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + +## Returns + +`result` - The transaction signature of the airdrop. + +### Request + + + + +```bash +curl https://solana-testnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id":1, "method":"requestAirdrop", "params": ["83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri", 100000]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result":"3Q51CirQ3eyysjpbe2FmPgMMpnaTdcY6MGpKUhuZ7TBcWZFHvNB5QMwy5Z5LYy78K4rtYFo78ozw9zxkZgYJMm3D", + "id":1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/sendtransaction.mdx b/services/reference/solana/json-rpc-methods/sendtransaction.mdx new file mode 100644 index 00000000000..83bdbe3f15d --- /dev/null +++ b/services/reference/solana/json-rpc-methods/sendtransaction.mdx @@ -0,0 +1,61 @@ +--- +title: 'sendTransaction' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `sendTransaction` + +Submits a pre-signed transaction to the cluster for processing. + +## Parameters + +- `transaction`: (string) _[required]_ - The transaction as an encoded string. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58` (deprecated) or `base64`. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + - `skipPreflight`: (boolean) _[optional]_ - If `true`, skips the preflight check. The default is `false`. + - `preflightCommitment`: (string) _[optional]_ - The commitment level to use for the preflight check. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `maxRetries`: (integer) _[optional]_ - The maximum number of retries for the transaction. If this parameter + is not provided, the RPC node will retry the transaction until it is finalized or until the block hash expires. + +## Returns + +`result` (string) - The first transaction signature embedded in the transaction, as a `base58` encoded string (transaction ID). + +### Request + + + + +```bash +curl https://solana-testnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "sendTransaction", "params": ["4hXTCkRzt9WyecNzV1XPgCDfGAZzQKNxLXgynz5QDuWWPSAZBZSHptvWRL3BjCvzUXRdKvHL2b7yGrRQcWyaqsaBCncVG7BFggS8w9snUts67BSh3EqKpXLUm5UMHfD7ZBe9GhARjbNQMLJ1QD3Spr6oMTBU6EhdB4RD8CP2xUxr2u3d6fos36PD98XS6oX8TQjLpsMwncs5DAMiD4nNnR8NBfyghGCWvCVifVwvA8B8TJxE1aiyiv2L429BCWfyzAme5sZW8rDb14NeCQHhZbtNqfXhcp2tAnaAT"]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc":"2.0", + "result": "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb", + "id": 1 +} +``` + + + diff --git a/services/reference/solana/json-rpc-methods/simulatetransaction.mdx b/services/reference/solana/json-rpc-methods/simulatetransaction.mdx new file mode 100644 index 00000000000..8d781310c0d --- /dev/null +++ b/services/reference/solana/json-rpc-methods/simulatetransaction.mdx @@ -0,0 +1,107 @@ +--- +title: 'simulateTransaction' +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import CreditCost from '@site/src/components/CreditCost/CreditCostPrice.js' + +# `simulateTransaction` + +Simulate sending a transaction. + +This method is useful for testing and debugging transactions before sending them to the network. + +## Parameters + +- `transaction`: (string) _[required]_ - The transaction as an encoded string. The transaction must have a valid + block hash, but doesn't need to be signed. +- `config`: (object) _[optional]_ - Configuration object with the following options: + - `commitment`: (string) _[optional]_ - The commitment level to use for the query. The default is `finalized`. Possible values are: + - `finalized` - Queries the most recent block confirmed by a super majority of the cluster as having + reached maximum lockout, meaning the cluster has recognized this block as finalized. + - `confirmed` - Queries the most recent block that has been voted on by a super majority of the cluster. + - `processed` - Queries its most recent block. The block may still be skipped by the cluster. + - `sigVerify`: (boolean) _[optional]_ - If `true`, verifies the signatures in the transaction. + Conflicts with `replaceRecentBlockhash`. The default is `false`. + - `replaceRecentBlockhash`: (boolean) _[optional]_ - If `true`, replaces the recent block hash in the transaction with the + latest block hash. Conflicts with `sigVerify`. The default is `false`. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58` (deprecated) or `base64`. + - `minContextSlot`: _[optional]_ - The minimum slot to use for the query. + - `innerInstructions`: (boolean) _[optional]_ - If `true`, returns the inner instructions of the transaction. + The inner instructions will be `jsonParsed` where possible, otherwise `json`. + - `accounts`: (object) _[optional]_ - An object containing the following fields: + - `addresses`: (array) _[optional]_ - An array of addresses to include in the response. + - `encoding`: (string) _[optional]_ - The encoding format to use. Can be one of `base58`, `base64`, `base64+zstd`, + or `jsonParsed`. + +## Returns + +`result` - `null` if the account doesn't exist; otherwise an object with the following fields: + +- `context` - An object containing the following keys: + - `slot` - The slot number of the block that was queried. + - `apiVersion` - The API version used for the query. +- `value` - An object with the following fields: + - `err` - An error if transaction failed, `null` if transaction succeeded. + - `logs` - An array of log messages generated by the transaction. Returns `null` if the simulation failed. + - `accounts` - + - `data` - The account data, encoded in the specified format. + - `executable` - A boolean indicating whether the account is executable. + - `lamports` - The number of lamports in the account. + - `owner` - The public key of the program that owns the account. + - `rentEpoch` - The epoch in which the account will next be due for rent. + - `space` - The size of the account data in bytes. + - `unitsConsumed` - The number of compute units consumed by the transaction. + - `returnData` - An array of objects containing the following fields: + - `programId` - The public key of the program that executed the transaction. + - `data` - The account data, encoded as `base64` binary data. + - `innerInstructions` - An array of [inner instructions](https://solana.com/docs/rpc/json-structures#inner-instructions). + +### Request + + + + +```bash +curl https://solana-testnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "simulateTransaction", "params": ["AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEDArczbMia1tLmq7zz4DinMNN0pJ1JtLdqIJPUw3YrGCzYAMHBsgN27lcgB6H2WQvFgyZuJYHa46puOQo9yQ8CVQbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp20C7Wj2aiuk5TReAXo+VTVg8QTHjs0UjNMMKCvpzZ+ABAgEBARU=", {"encoding": "base64"}]}' +``` + + + + +### Response + + + + +```bash +{ + "jsonrpc": "2.0", + "result": { + "context": { "slot": 218 }, + "value": { + "err": null, + "accounts": null, + "logs": [ + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri invoke [1]", + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri consumed 2366 of 1400000 compute units", + "Program return: 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri KgAAAAAAAAA=", + "Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success" + ], + "returnData": { + "data": ["Kg==", "base64"], + "programId": "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri" + }, + "unitsConsumed": 2366 + } + }, + "id": 1 +} +``` + + + diff --git a/services/reference/solana/quickstart.md b/services/reference/solana/quickstart.md new file mode 100644 index 00000000000..9aef6e5f9a6 --- /dev/null +++ b/services/reference/solana/quickstart.md @@ -0,0 +1,117 @@ +--- +description: Solana quickstart guide +sidebar_position: 2 +--- + +import Banner from '@site/src/components/Banner' + +# Quickstart + +This quickstart guide will help you set up and make calls on the Solana network using the Infura endpoints. + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Solana network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://solana-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "getSlot", "params": [], "id": 1}' +``` + +### JavaScript + +1. Create a project directory, and inside the directory initialize the project: + + ```bash + npm init -y + ``` + +1. In your project directory, [install the latest version of the JavaScript SDK](https://www.npmjs.com/package/@solana/kit). + +1. Create your JavaScript file (`index.js` in this example) and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import { createSolanaRpc } from '@solana/kit' + + const rpc = createSolanaRpc('https://solana-mainnet.infura.io/v3/') + + async function fetchCurrentSlot() { + try { + const slot = await rpc.getSlot().send() + console.log('Current slot:', slot) + } catch (error) { + console.error('Error fetching slot:', error) + } + } + + fetchCurrentSlot() + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Rust + +1. Create a project directory, and inside the directory initialize the project: + + ```bash + cargo init + ``` + +1. In your project directory, [install the Rust dependencies](https://www.npmjs.com/package/@solana/kit). + + ```bash + cargo add solana-sdk solana-client + ``` + +1. In the `src/main.rs` paste the following code: + + Replace `` with your actual Infura API key. + + ```rust title="main.rs" + use solana_client::rpc_client::RpcClient; + + fn main() { + let url = "https://solana-mainnet.infura.io/v3/"; + let client = RpcClient::new(url.to_string()); + + match client.get_slot() { + Ok(slot) => println!("Current slot: {}", slot), + Err(err) => eprintln!("Error fetching slot: {}", err), + } + } + ``` + +1. Run the code using the following command: + + ```bash + cargo run + ``` + +## Next steps + +Now that you have successfully made a call to the Solana network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other Solana APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/starknet/index.md b/services/reference/starknet/index.md index a55512ef225..e44d0738db2 100644 --- a/services/reference/starknet/index.md +++ b/services/reference/starknet/index.md @@ -19,36 +19,39 @@ that can perform more computations than on Ethereum's base layer, while maintain :::info see also -See the [Starknet documentation](https://docs.starknet.io/documentation/) to find out more. You can also watch an +See the [Starknet documentation](https://docs.starknet.io/) to find out more. You can also watch an [Introduction to Starknet](https://www.youtube.com/watch?v=eL9le56gcS0). ::: ## Partner and privacy policy +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + The following partners provide access to Starknet: + - Bware Labs ([Terms of Service](https://bwarelabs.com/terms), [Privacy Policy](https://bwarelabs.com/privacy)) - Chainstack ([Terms of Service](https://chainstack.com/tos/), [Privacy Policy](https://chainstack.com/privacy/)) - \ No newline at end of file + diff --git a/services/reference/starknet/json-rpc-methods/index.md b/services/reference/starknet/json-rpc-methods/index.md index 77356ff0dc1..b9212093914 100644 --- a/services/reference/starknet/json-rpc-methods/index.md +++ b/services/reference/starknet/json-rpc-methods/index.md @@ -1,9 +1,11 @@ --- -title: "JSON-RPC methods" -description: Starknet JSON RPC API methods. +title: Starknet JSON-RPC API +description: Starknet JSON-RPC API methods. +sidebar_label: JSON-RPC API +sidebar_key: starknet-json-rpc-api --- -# JSON-RPC methods +# Starknet JSON-RPC API Infura supports a subset of the [Starknet API methods](https://github.com/starkware-libs/starknet-specs/). diff --git a/services/reference/starknet/json-rpc-methods/starknet_adddeclaretransaction.mdx b/services/reference/starknet/json-rpc-methods/starknet_adddeclaretransaction.mdx index f4b9baed07f..267c7dc66df 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_adddeclaretransaction.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_adddeclaretransaction.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_addDeclareTransaction" +title: starknet_addDeclareTransaction +sidebar_label: starknet_addDeclareTransaction --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_addDeclareTransaction` Submits a new class declaration transaction. @@ -22,12 +25,12 @@ The result of the transaction submission, including: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_adddeployaccounttransaction.mdx b/services/reference/starknet/json-rpc-methods/starknet_adddeployaccounttransaction.mdx index b115ed0c3c3..0a743e221d3 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_adddeployaccounttransaction.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_adddeployaccounttransaction.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_addDeployAccountTransaction" +title: starknet_addDeployAccountTransaction +sidebar_label: starknet_addDeployAccountTransaction --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_addDeployAccountTransaction` Submits a new deploy account transaction. @@ -22,12 +25,12 @@ The result of the transaction submission, including: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_addinvoketransaction.mdx b/services/reference/starknet/json-rpc-methods/starknet_addinvoketransaction.mdx index a07b619f55c..3d1b19b8317 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_addinvoketransaction.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_addinvoketransaction.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_addInvokeTransaction" +title: starknet_addInvokeTransaction +sidebar_label: starknet_addInvokeTransaction --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_addInvokeTransaction` Submits a new invoke transaction. @@ -19,12 +22,12 @@ The result of the transaction submission, containing `transaction_hash`, the has ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ @@ -55,7 +58,7 @@ curl https://starknet-mainnet.infura.io/v3/ \ "nonce": "0x7", "resource_bounds": { "l1_gas": "0x28ed6103d0000", - "l2_gas": "0x28ed6103d0000", + "l2_gas": "0x28ed6103d0000" }, "tip": "0x0", "paymaster_data": [], diff --git a/services/reference/starknet/json-rpc-methods/starknet_blockhashandnumber.mdx b/services/reference/starknet/json-rpc-methods/starknet_blockhashandnumber.mdx index 1f83e557cd7..049c4f24f47 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_blockhashandnumber.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_blockhashandnumber.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_blockHashAndNumber" +title: starknet_blockHashAndNumber +sidebar_label: starknet_blockHashAndNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_blockHashAndNumber` Returns the block hash and number of the most recent accepted block. @@ -20,12 +23,12 @@ An object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_blocknumber.mdx b/services/reference/starknet/json-rpc-methods/starknet_blocknumber.mdx index cb4ded4d967..de335d4ab14 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_blocknumber.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_blocknumber.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_blockNumber" +title: starknet_blockNumber +sidebar_label: starknet_blockNumber --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_blockNumber` Returns the block number of the most recent accepted block. @@ -17,12 +20,12 @@ The latest block number. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_call.mdx b/services/reference/starknet/json-rpc-methods/starknet_call.mdx index 151a910515b..300148b170c 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_call.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_call.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_call" +title: starknet_call +sidebar_label: starknet_call --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_call` Calls the specified contract function at the specified block, and returns the value of the function, without creating a Starknet transaction. @@ -14,7 +17,7 @@ This method does not change the network state. - `request`: [*Required*] The function call object containing: - `contract_address`: (string) [*Required*] Address the transaction is sent from. - `entry_point_selector`: (string) [*Required*] Smart contract entry point selector. - - `calldata`: (array of strings)[*Required*] The parameters passed to the function. + - `calldata`: (array of strings) [*Required*] The parameters passed to the function. - `block_id`: [*Required*] The block parameter object containing one of the following: - `block_hash`: (string) Block hash. - `block_number`: (integer) Decimal block number. @@ -26,12 +29,12 @@ The function's return value. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_chainid.mdx b/services/reference/starknet/json-rpc-methods/starknet_chainid.mdx index f4252bc0107..3fa3c3d8e8e 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_chainid.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_chainid.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_chainId" +title: starknet_chainId +sidebar_label: starknet_chainId --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_chainId` Returns the currently connected Starknet chain ID. @@ -17,12 +20,12 @@ The current chain ID in hexadecimal format. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_estimatefee.mdx b/services/reference/starknet/json-rpc-methods/starknet_estimatefee.mdx index 61b3a521b6a..6948b365a94 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_estimatefee.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_estimatefee.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_estimateFee" +title: starknet_estimateFee +sidebar_label: starknet_estimateFee --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_estimateFee` Returns an estimate of the fee required for the network to process the specified transactions, at the specified block. @@ -31,12 +34,12 @@ Each fee estimate object contains: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getblocktransactioncount.mdx b/services/reference/starknet/json-rpc-methods/starknet_getblocktransactioncount.mdx index d7bb1797545..df86bf64602 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getblocktransactioncount.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getblocktransactioncount.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getBlockTransactionCount" +title: starknet_getBlockTransactionCount +sidebar_label: starknet_getBlockTransactionCount --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getBlockTransactionCount` Returns the number of transactions in the specified block. @@ -21,12 +24,12 @@ Number of transactions in the requested block. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxhashes.mdx b/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxhashes.mdx index 9954425f30a..fa81865abec 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxhashes.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxhashes.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getBlockWithTxHashes" +title: starknet_getBlockWithTxHashes +sidebar_label: starknet_getBlockWithTxHashes --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getBlockWithTxHashes` Returns block information of the specified block, including a list of transaction hashes. @@ -37,12 +40,12 @@ A block object or pending block object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxs.mdx b/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxs.mdx index ac7c87fffcb..ddab993fe1b 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxs.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getblockwithtxs.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getBlockWithTxs" +title: starknet_getBlockWithTxs +sidebar_label: starknet_getBlockWithTxs --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getBlockWithTxs` Returns block information of the specified block, including a list of transaction objects. @@ -37,12 +40,12 @@ A block object or pending block object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getclass.mdx b/services/reference/starknet/json-rpc-methods/starknet_getclass.mdx index 3e9413e1cd2..41036f2eb44 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getclass.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getclass.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getClass" +title: starknet_getClass +sidebar_label: starknet_getClass --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getClass` Returns the contract class definition of the specified contract class hash in the specified block. @@ -29,12 +32,12 @@ object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getclassat.mdx b/services/reference/starknet/json-rpc-methods/starknet_getclassat.mdx index 0c65726b346..ba4d6add0bb 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getclassat.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getclassat.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getClassAt" +title: starknet_getClassAt +sidebar_label: starknet_getClassAt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getClassAt` Returns the contract class definition of the specified contract class address in the specified block. @@ -28,12 +31,12 @@ object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getclasshashat.mdx b/services/reference/starknet/json-rpc-methods/starknet_getclasshashat.mdx index 427c18a6507..11bbac288d5 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getclasshashat.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getclasshashat.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getClassHashAt" +title: starknet_getClassHashAt +sidebar_label: starknet_getClassHashAt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getClassHashAt` Returns the contract class hash of the specified contract class address in the specified block. @@ -23,12 +26,12 @@ of the requested contract class. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getevents.mdx b/services/reference/starknet/json-rpc-methods/starknet_getevents.mdx index 772376ab10b..0442e8e791e 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getevents.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getevents.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getEvents" +title: starknet_getEvents +sidebar_label: starknet_getEvents --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getEvents` Returns all event objects matching the conditions in the specified filter. @@ -35,12 +38,12 @@ An object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ @@ -85,9 +88,7 @@ curl https://starknet-mainnet.infura.io/v3/ \ "0x34c84c75bde3dc72f961baa" ], "from_address": "0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05", - "keys": [ - "0x30c296ae369716818de77cb5b71ce9cda7cc2c0e8456f474e0abb1ae8d017da" - ], + "keys": ["0x30c296ae369716818de77cb5b71ce9cda7cc2c0e8456f474e0abb1ae8d017da"], "transaction_hash": "0x642fcafc5bdaa756c410cc6a968497551e86a783a5f21ea34c0f9214c2240af" }, { @@ -99,9 +100,7 @@ curl https://starknet-mainnet.infura.io/v3/ \ "0x14e3778ef54505dfab26bf" ], "from_address": "0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05", - "keys": [ - "0xa2fb82b5656725dad81c7112b2c4ef0119096677c3c0fd82632d0a74f07666" - ], + "keys": ["0xa2fb82b5656725dad81c7112b2c4ef0119096677c3c0fd82632d0a74f07666"], "transaction_hash": "0x642fcafc5bdaa756c410cc6a968497551e86a783a5f21ea34c0f9214c2240af" }, { @@ -115,9 +114,7 @@ curl https://starknet-mainnet.infura.io/v3/ \ "0x6379da05b60000" ], "from_address": "0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05", - "keys": [ - "0x7ae0ab7952bbfc33a72035e5eccec7c8816723421c0acb315bd4690a71d46e" - ], + "keys": ["0x7ae0ab7952bbfc33a72035e5eccec7c8816723421c0acb315bd4690a71d46e"], "transaction_hash": "0x642fcafc5bdaa756c410cc6a968497551e86a783a5f21ea34c0f9214c2240af" } ] diff --git a/services/reference/starknet/json-rpc-methods/starknet_getnonce.mdx b/services/reference/starknet/json-rpc-methods/starknet_getnonce.mdx index 304d6d5cf34..0f27fc00484 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getnonce.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getnonce.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getNonce" +title: starknet_getNonce +sidebar_label: starknet_getNonce --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getNonce` Returns the nonce associated with the specified contract address in the specified block. @@ -21,12 +24,12 @@ The last nonce used for the requested contract. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getstateupdate.mdx b/services/reference/starknet/json-rpc-methods/starknet_getstateupdate.mdx index 4f2f78b105b..08f50eafe38 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getstateupdate.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getstateupdate.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getStateUpdate" +title: starknet_getStateUpdate +sidebar_label: starknet_getStateUpdate --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getStateUpdate` Returns information about the result of executing the specified block. @@ -29,12 +32,12 @@ A state update object or pending state update object containing: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_getstorageat.mdx b/services/reference/starknet/json-rpc-methods/starknet_getstorageat.mdx index bb91e3984ca..694a3f3ab4d 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_getstorageat.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_getstorageat.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getStorageAt" +title: starknet_getStorageAt +sidebar_label: starknet_getStorageAt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getStorageAt` Returns the value of the storage at the specified address and key. @@ -23,12 +26,12 @@ Zero (0) is returned if no value is found. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyblockidandindex.mdx b/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyblockidandindex.mdx index 1628b48532a..260a8c466c8 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyblockidandindex.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyblockidandindex.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getTransactionByBlockIdAndIndex" +title: starknet_getTransactionByBlockIdAndIndex +sidebar_label: starknet_getTransactionByBlockIdAndIndex --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getTransactionByBlockIdAndIndex` Returns the details of the specified transaction. @@ -22,12 +25,12 @@ object. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyhash.mdx b/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyhash.mdx index 4ff4612a816..32f6539c0d8 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyhash.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_gettransactionbyhash.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getTransactionByHash" +title: starknet_getTransactionByHash +sidebar_label: starknet_getTransactionByHash --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getTransactionByHash` Returns the details of the specified transaction. @@ -18,12 +21,12 @@ object. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_gettransactionreceipt.mdx b/services/reference/starknet/json-rpc-methods/starknet_gettransactionreceipt.mdx index 8b1e6bd15ac..aee9fe54798 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_gettransactionreceipt.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_gettransactionreceipt.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_getTransactionReceipt" +title: starknet_getTransactionReceipt +sidebar_label: starknet_getTransactionReceipt --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_getTransactionReceipt` Returns the receipt of the specified transaction. @@ -18,12 +21,12 @@ receipt object. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ @@ -60,9 +63,7 @@ curl https://starknet-mainnet.infura.io/v3/ \ "events": [ { "from_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], + "keys": ["0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"], "data": [ "0x206cd6b8b25de0ca44b944d13c2608b355e9a9224a887e2e9447cf5ae3cb2a8", "0x7c57808b9cea7130c44aab2f8ca6147b04408943b48c6d8c3c83eb8cfdd8c0b", @@ -72,13 +73,8 @@ curl https://starknet-mainnet.infura.io/v3/ \ }, { "from_address": "0x206cd6b8b25de0ca44b944d13c2608b355e9a9224a887e2e9447cf5ae3cb2a8", - "keys": [ - "0x5ad857f66a5b55f1301ff1ed7e098ac6d4433148f0b72ebc4a2945ab85ad53" - ], - "data": [ - "0x121aaba2894a63cce81acabb559eb2c114f4859dc5803e0b91349ec398d2eb0", - "0x0" - ] + "keys": ["0x5ad857f66a5b55f1301ff1ed7e098ac6d4433148f0b72ebc4a2945ab85ad53"], + "data": ["0x121aaba2894a63cce81acabb559eb2c114f4859dc5803e0b91349ec398d2eb0", "0x0"] } ] }, diff --git a/services/reference/starknet/json-rpc-methods/starknet_pendingtransactions.mdx b/services/reference/starknet/json-rpc-methods/starknet_pendingtransactions.mdx index 486a0c6e12b..8396e85ce26 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_pendingtransactions.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_pendingtransactions.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_pendingTransactions" +title: starknet_pendingTransactions +sidebar_label: starknet_pendingTransactions --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_pendingTransactions` Returns a list of pending transactions. @@ -19,12 +22,12 @@ objects. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/6e46ee5c0df54fb48c0fb2a94502c42a \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_simulatetransactions.mdx b/services/reference/starknet/json-rpc-methods/starknet_simulatetransactions.mdx index 63dd82115f8..f3f92377a55 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_simulatetransactions.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_simulatetransactions.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_simulateTransactions" +title: starknet_simulateTransactions +sidebar_label: starknet_simulateTransactions --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_simulateTransactions` Simulates the execution of the specified transactions at the specified block. @@ -31,12 +34,12 @@ Each transaction result object contains: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_specversion.mdx b/services/reference/starknet/json-rpc-methods/starknet_specversion.mdx index 3b824d82872..35e4553c35f 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_specversion.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_specversion.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_specVersion" +title: starknet_specVersion +sidebar_label: starknet_specVersion --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_specVersion` Returns the version of the Starknet JSON-RPC specification that the client is using. @@ -17,12 +20,12 @@ The current Starknet JSON-RPC specification version. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/json-rpc-methods/starknet_syncing.mdx b/services/reference/starknet/json-rpc-methods/starknet_syncing.mdx index cf7f29a5aef..679d8b5ac00 100644 --- a/services/reference/starknet/json-rpc-methods/starknet_syncing.mdx +++ b/services/reference/starknet/json-rpc-methods/starknet_syncing.mdx @@ -1,9 +1,12 @@ --- -title: "starknet_syncing" +title: starknet_syncing +sidebar_label: starknet_syncing --- -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `starknet_syncing` Returns the synchronization status of the node. @@ -26,12 +29,12 @@ This method returns `false` if the node is not currently syncing state. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://starknet-mainnet.infura.io/v3/ \ diff --git a/services/reference/starknet/quickstart.md b/services/reference/starknet/quickstart.md index 803bd796cc7..e0a069c2dde 100644 --- a/services/reference/starknet/quickstart.md +++ b/services/reference/starknet/quickstart.md @@ -1,11 +1,12 @@ --- description: Starknet quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# Starknet quickstart This quickstart guide will help you set up and make calls on the Starknet network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the Star ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the Starknet network enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the Starknet network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://starknet-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://starknet-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "starknet_blockNumber", + jsonrpc: '2.0', + method: 'starknet_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://starknet-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "starknet_blockNumber", + .post('https://starknet-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'starknet_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -149,7 +150,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta ```bash python index.py ``` - + ## Next steps Now that you have successfully made a call to the Starknet network, you can explore more functionalities and APIs provided @@ -160,7 +161,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Ethereum, Optimism, IPFS and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/unichain/index.md b/services/reference/unichain/index.md new file mode 100644 index 00000000000..c39cdb1d784 --- /dev/null +++ b/services/reference/unichain/index.md @@ -0,0 +1,62 @@ +--- +description: Unichain network information. +--- + +import CardList from '@site/src/components/CardList' + +# Unichain + +:::note Decentralized Infrastructure Network (DIN) + +Unichain is supported through the [DIN](https://www.infura.io/solutions/decentralized-infrastructure-service) service, +meaning calls to the network are routed to [partner infrastructure providers](#partners-and-privacy-policies). + +Infura provides Open Beta access to Unichain. During this period, there might be feature limitations. +Performance issues aren't expected, but they're possible as we optimize and stabilize the service. + +::: + +Unichain is a layer-2 Optimistic Rollup for Ethereum that's designed to be fast, decentralized, and +optimized for DeFi applications. + +This allows Unichain to scale the experience of Ethereum, ensuring cheaper and more accessible data while +maintaining the robust security inherent to Ethereum. + +Infura provides access to the [Unichain JSON-RPC API](json-rpc-methods/index.md) method library that +interacts with the Unichain blockchain. Methods include functionality for reading and writing data to the network, +and executing smart contracts. + +:::info See also + +See the [official Unichain documentation](https://docs.unichain.org/docs) for more information. + +::: + + + +## Partners and privacy policies + +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + +The following partners provide access to the Unichain network: + +- InfStones ([Privacy Policy](https://infstones.com/terms/privacy-notice)) +- 0xFury ([Privacy policy](https://0xfury.com/privacy)) diff --git a/services/reference/unichain/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_accounts-request.mdx new file mode 100644 index 00000000000..53391a4cfc0 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_accounts-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_accounts", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_blocknumber-request.mdx new file mode 100644 index 00000000000..755d69b2a4f --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_blocknumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_call-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_call-request.mdx new file mode 100644 index 00000000000..fc096a0d158 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_call-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_chainid-request.mdx new file mode 100644 index 00000000000..6b7f8141e1b --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_chainid-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_chainId", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_estimategas-request.mdx new file mode 100644 index 00000000000..c06062bc255 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_estimategas-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_estimateGas", "params": [{"from": "0x9cE564c7d09f88E7d8233Cdd3A4d7AC42aBFf3aC", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "value": "0x9184e72a"}], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_feehistory-request.mdx new file mode 100644 index 00000000000..f2f1f7a72cc --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_feehistory-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x5", "latest", [20,30]]}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gasprice-request.mdx new file mode 100644 index 00000000000..a7d3ed0a49a --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gasprice-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_gasPrice", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getbalance-request.mdx new file mode 100644 index 00000000000..0ff65b7b864 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getbalance-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getblockbyhash-request.mdx new file mode 100644 index 00000000000..c46cd025dcd --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", false], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getblockbynumber-request.mdx new file mode 100644 index 00000000000..5dd8f3db22c --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["0x5BAD55", false], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getblockreceipts-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getblockreceipts-request.mdx new file mode 100644 index 00000000000..4da200ec773 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getblockreceipts-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockReceipts", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx new file mode 100644 index 00000000000..95d5b567280 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx new file mode 100644 index 00000000000..cf6d8d6fdbe --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getBlockTransactionCountByNumber", "params": ["latest"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getcode-request.mdx new file mode 100644 index 00000000000..1c739e478ae --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getcode-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getCode", "params": ["0x06012c8cf97bead5deae237070f9587f8e7a266d", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getlogs-request.mdx new file mode 100644 index 00000000000..1c8a2d739fd --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getlogs-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getLogs", "params": [{"blockHash": "0x7c5a35e9cb3e8ae0e221ab470abae9d446c3a5626ce6689fc777dcffcab52c70", "topics":["0x241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b80"]}], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getproof-request.mdx new file mode 100644 index 00000000000..20a55d41104 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getproof-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getProof", "params": ["0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842", ["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"], "latest"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getstorageat-request.mdx new file mode 100644 index 00000000000..cea614ebfc8 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getstorageat-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "0x65a8db"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx new file mode 100644 index 00000000000..8406152d2d3 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35", "0x0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..f3f041bc7f5 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByBlockNumberAndIndex", "params": ["0x5BAD55","0x0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx new file mode 100644 index 00000000000..d0e51428ba5 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionByHash", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gettransactioncount-request.mdx new file mode 100644 index 00000000000..b46226dcce6 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f","0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx new file mode 100644 index 00000000000..f234dd88433 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx new file mode 100644 index 00000000000..d65c6c90caa --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockHashAndIndex", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35","0x0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx new file mode 100644 index 00000000000..ee06adef811 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleByBlockNumberAndIndex", "params": ["0x29c","0x0"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx new file mode 100644 index 00000000000..6c4b54c64d5 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockHash", "params": ["0xb3b20624f8f0f86eb50dd04688409e5cea4bd02d700bf6e79e9384d47d6a5a35"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx new file mode 100644 index 00000000000..7f093260ffc --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_getUncleCountByBlockNumber", "params": ["0x5bad55"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx new file mode 100644 index 00000000000..92bc7e75d44 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_maxPriorityFeePerGas", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_sendrawtransaction-request.mdx new file mode 100644 index 00000000000..0c945be48f1 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_sendRawTransaction", "params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/unichain/json-rpc-methods/_eth_syncing-request.mdx new file mode 100644 index 00000000000..dc8ac48a686 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_syncing-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-call-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-call-parameters.mdx new file mode 100644 index 00000000000..38638909773 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-call-parameters.mdx @@ -0,0 +1,12 @@ +- `from`: 20 bytes [_required_] Address the transaction is sent from. +- `to`: 20 bytes - Address the transaction is directed to. +- `gas`: Hexadecimal value of the gas provided for the transaction execution. `eth_call` consumes zero gas, but this parameter may be needed by some executions. +- `gasPrice`: Hexadecimal value of the `gasPrice` used for each paid gas. +- `maxPriorityFeePerGas`: Maximum fee, in wei, the sender is willing to pay per gas above the base fee. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). +- `maxFeePerGas`: Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). +- `value`: Hexadecimal of the value sent with this transaction. +- `data`: Hash of the method signature and encoded parameters. See [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-estimategas-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-estimategas-parameters.mdx new file mode 100644 index 00000000000..a0e614a01f7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-estimategas-parameters.mdx @@ -0,0 +1,25 @@ +- `TRANSACTION CALL OBJECT` _\[required]_ + - `from`: _\[optional]_ 20 Bytes - The address the transaction is sent from. + - `to`: 20 Bytes - The address the transaction is directed to. + - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `eth_estimateGas` consumes + zero gas, but this parameter may be needed by some executions. + - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. + - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas + above the base fee. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). + - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is + willing to pay per gas. + See [EIP-1559 transactions](../../../concepts/transaction-types.md#eip-1559-transactions). + - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. + - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the + [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, + `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +If no gas limit is specified, geth uses the block gas limit from the pending block as an upper bound. +As a result the returned estimate might not be enough to executed the call/transaction when the amount +of gas is higher than the pending block gas limit. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getbalance-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getbalance-parameters.mdx new file mode 100644 index 00000000000..d9d5fabe6bf --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getbalance-parameters.mdx @@ -0,0 +1,6 @@ +- `address`: [_Required_] A string representing the address (20 bytes) to check for balance. +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getblockbynumber-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getblockbynumber-parameters.mdx new file mode 100644 index 00000000000..cc79fc9753a --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getblockbynumber-parameters.mdx @@ -0,0 +1,7 @@ +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- `show transaction details flag`: [_Required_] If set to `true`, returns the full transaction objects. If `false` returns only the hashes of the transactions. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getblocktransactioncountbynumber-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getblocktransactioncountbynumber-parameters.mdx new file mode 100644 index 00000000000..8f9ffe9520f --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getblocktransactioncountbynumber-parameters.mdx @@ -0,0 +1,5 @@ +`block number`:[_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + +:::warning +`safe` isn't supported. Use `finalized` instead. +::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getcode-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getcode-parameters.mdx new file mode 100644 index 00000000000..4d9ce64b0b7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getcode-parameters.mdx @@ -0,0 +1,6 @@ +- `address`: [_Required_] A string representing the address (20 bytes) of the smart contract, from which the compiled byte code will be obtained. +- `block number`:[_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getlogs-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getlogs-parameters.mdx new file mode 100644 index 00000000000..2eb23ad0be1 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getlogs-parameters.mdx @@ -0,0 +1,12 @@ +A filter object containing the following: + +- `address`: [_optional_] Contract address (20 bytes) or a list of addresses from which logs should originate. +- `fromBlock`: _[optional, default is `latest`]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- `toBlock`: _[optional, default is `latest`]_ A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). +- `topics`: _[optional]_ Array of 32 bytes DATA topics. Topics are order-dependent. +- `blockhash`: _[optional]_ Restricts the logs returned to the single block referenced in the 32-byte hash `blockHash`. Using `blockHash` is equivalent to setting `fromBlock` and `toBlock` to the block number referenced in the `blockHash`. If `blockHash` is present in the filter criteria, then neither `fromBlock` nor `toBlock` are allowed. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getproof-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getproof-parameters.mdx new file mode 100644 index 00000000000..cbfa1aea28c --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getproof-parameters.mdx @@ -0,0 +1,7 @@ +- `address`: A string representing the address (20 bytes) to check for balance. +- `storageKeys`: An array of 32-byte storage keys to be proofed and included. +- `blockParameter`: (string) A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getstorageat-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getstorageat-parameters.mdx new file mode 100644 index 00000000000..b4814c296d9 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getstorageat-parameters.mdx @@ -0,0 +1,8 @@ +- `address`: [_required_] A string representing the address (20 bytes) to check for balance. +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- `storage position`: [_required_] A hexadecimal code of the position in the storage. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactionbyblocknumberandindex-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactionbyblocknumberandindex-parameters.mdx new file mode 100644 index 00000000000..9ad3306bb8f --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactionbyblocknumberandindex-parameters.mdx @@ -0,0 +1,7 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- `transaction index position`: [_required_] A hexadecimal of the integer representing the position in the block. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactioncount-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactioncount-parameters.mdx new file mode 100644 index 00000000000..6194660ae94 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-gettransactioncount-parameters.mdx @@ -0,0 +1,6 @@ +- `address`: [_Required_] A string representing the address (20 bytes). +- `block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclebyblocknumberandindex-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclebyblocknumberandindex-parameters.mdx new file mode 100644 index 00000000000..b7f27af2500 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclebyblocknumberandindex-parameters.mdx @@ -0,0 +1,7 @@ +- `blockParameter`: (string) [_required_] A hexadecimal block number, or one of the tags `latest`, `earliest`, `pending` or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + + :::warning + `safe` isn't supported. Use `finalized` instead. + ::: + +- `uncle index position`: [_required_] A hexadecimal equivalent of the integer indicating the uncle's index position. diff --git a/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclecountbyblocknumber-parameters.mdx b/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclecountbyblocknumber-parameters.mdx new file mode 100644 index 00000000000..75c3dbea5d3 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_eth_unichain-getunclecountbyblocknumber-parameters.mdx @@ -0,0 +1,5 @@ +`block parameter`: [_Required_] A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). + +:::warning +`safe` isn't supported. Use `finalized` instead. +::: diff --git a/services/reference/unichain/json-rpc-methods/_net_listening-request.mdx b/services/reference/unichain/json-rpc-methods/_net_listening-request.mdx new file mode 100644 index 00000000000..00009fee74f --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_net_listening-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_listening", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_net_peercount-request.mdx b/services/reference/unichain/json-rpc-methods/_net_peercount-request.mdx new file mode 100644 index 00000000000..71b821fbc17 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_net_peercount-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_peerCount", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_net_version-request.mdx b/services/reference/unichain/json-rpc-methods/_net_version-request.mdx new file mode 100644 index 00000000000..1e6aad2f8b0 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_net_version-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "net_version", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/unichain/json-rpc-methods/_web3_clientversion-request.mdx new file mode 100644 index 00000000000..4da6b9f2ef9 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/_web3_clientversion-request.mdx @@ -0,0 +1,15 @@ +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}' +``` + + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx b/services/reference/unichain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx new file mode 100644 index 00000000000..803be056fa8 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/eth_estimateuseroperationgas.mdx @@ -0,0 +1,44 @@ +--- +title: eth_estimateUserOperationGas +sidebar_label: eth_estimateUserOperationGas +description: Simulate and estimate gas limits for a user operation before submission. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-description.mdx' + +# `eth_estimateUserOperationGas` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_eth_estimateuseroperationgas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_estimateuseroperationgas-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx b/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx new file mode 100644 index 00000000000..1dd3edf3b6d --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationByHash +sidebar_label: eth_getUserOperationByHash +description: Fetch user operation details by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-description.mdx' + +# `eth_getUserOperationByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_eth_getuseroperationbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationbyhash-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx b/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx new file mode 100644 index 00000000000..15584ee85c2 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/eth_getuseroperationreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: eth_getUserOperationReceipt +sidebar_label: eth_getUserOperationReceipt +description: Fetch the receipt of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-description.mdx' + +# `eth_getUserOperationReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_eth_getuseroperationreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_getuseroperationreceipt-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/eth_senduseroperation.mdx b/services/reference/unichain/json-rpc-methods/bundler/eth_senduseroperation.mdx new file mode 100644 index 00000000000..7b8454f3fc8 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/eth_senduseroperation.mdx @@ -0,0 +1,44 @@ +--- +title: eth_sendUserOperation +sidebar_label: eth_sendUserOperation +description: Submit a user operation to the mempool for bundling and execution. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_senduseroperation-description.mdx' + +# `eth_sendUserOperation` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_senduseroperation-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_senduseroperation-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_senduseroperation-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_eth_senduseroperation-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_senduseroperation-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx b/services/reference/unichain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx new file mode 100644 index 00000000000..2f3c73681e2 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/eth_supportedentrypoints.mdx @@ -0,0 +1,44 @@ +--- +title: eth_supportedEntryPoints +sidebar_label: eth_supportedEntryPoints +description: Get the list of EntryPoint addresses supported by the bundler. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_eth_supportedentrypoints-description.mdx' + +# `eth_supportedEntryPoints` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_eth_supportedentrypoints-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_eth_supportedentrypoints-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_eth_supportedentrypoints-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_eth_supportedentrypoints-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_eth_supportedentrypoints-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/index.md b/services/reference/unichain/json-rpc-methods/bundler/index.md new file mode 100644 index 00000000000..cd4f9e83075 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/index.md @@ -0,0 +1,29 @@ +--- +title: Unichain bundler methods +sidebar_label: Bundler methods +sidebar_key: unichain-bundler-methods +description: Unichain bundler methods +--- + +Infura integrates with the Pimlico account abstraction bundler infrastructure, enabling +developers to access [ERC-4337](https://docs.erc4337.io/) smart account features. + +The following [bundler methods](../../../../concepts/bundler.md) are supported on Unichain mainnet +and Sepolia: + +- [`eth_sendUserOperation`](eth_senduseroperation.mdx): + Submits a user operation to be included onchain. +- [`eth_estimateUserOperationGas`](eth_estimateuseroperationgas.mdx): + Simulates the user operation and estimates the appropriate gas limits. +- [`eth_getUserOperationReceipt`](eth_getuseroperationreceipt.mdx): + Fetches the receipt of a user operation. +- [`eth_getUserOperationByHash`](eth_getuseroperationbyhash.mdx): + Fetches the user operation by hash. +- [`eth_supportedEntryPoints`](eth_supportedentrypoints.mdx): + Fetches the EntryPoint addresses supported by the bundler. +- [`pimlico_getUserOperationGasPrice`](pimlico_getuseroperationgasprice.mdx): + Returns the gas prices that must be used for the user operation. +- [`pimlico_getUserOperationStatus`](pimlico_getuseroperationstatus.mdx): + Returns the user operation status. +- [`pimlico_simulateAssetChanges`](pimlico_simulateassetchanges.mdx): + Simulates a user operation to predict the asset changes it will cause. diff --git a/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx b/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx new file mode 100644 index 00000000000..963ff7ba378 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationgasprice.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationGasPrice +sidebar_label: pimlico_getUserOperationGasPrice +description: Get recommended gas prices for user operations on Pimlico bundlers. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-description.mdx' + +# `pimlico_getUserOperationGasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationgasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationgasprice-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx b/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx new file mode 100644 index 00000000000..b61d8d50db7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/pimlico_getuseroperationstatus.mdx @@ -0,0 +1,44 @@ +--- +title: pimlico_getUserOperationStatus +sidebar_label: pimlico_getUserOperationStatus +description: Get the current status of a user operation by its hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-description.mdx' + +# `pimlico_getUserOperationStatus` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_pimlico_getuseroperationstatus-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_getuseroperationstatus-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx b/services/reference/unichain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx new file mode 100644 index 00000000000..7a12f53a0df --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/bundler/pimlico_simulateassetchanges.mdx @@ -0,0 +1,50 @@ +--- +title: pimlico_simulateAssetChanges +sidebar_label: pimlico_simulateAssetChanges +description: Simulate a user operation and return predicted asset changes. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-description.mdx' + +# `pimlico_simulateAssetChanges` + + + +## Parameters + +import Params from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-example.mdx' + + + +### Request + +import Request from '/services/reference/_partials/bundler/unichain/_pimlico_simulateassetchanges-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-response.mdx' + + + +## Errors + +import Errors from '/services/reference/_partials/bundler/_pimlico_simulateassetchanges-errors.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_accounts.mdx b/services/reference/unichain/json-rpc-methods/eth_accounts.mdx new file mode 100644 index 00000000000..206f5423e7a --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_accounts.mdx @@ -0,0 +1,41 @@ +--- +title: Unichain eth_accounts +sidebar_label: eth_accounts +description: Returns a list of Unichain accounts. +--- + +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' + + + +### Request + +import Request from './_eth_accounts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_blocknumber.mdx b/services/reference/unichain/json-rpc-methods/eth_blocknumber.mdx new file mode 100644 index 00000000000..c73a57d56a4 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_blocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest Unichain block number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' + + + +### Request + +import Request from './_eth_blocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_call.mdx b/services/reference/unichain/json-rpc-methods/eth_call.mdx new file mode 100644 index 00000000000..2629809893b --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_call.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_call +sidebar_label: eth_call +description: Executes a Unichain call without creating a transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` + + + +## Parameters + +import Params from './_eth_unichain-call-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_call-example.mdx' + + + +### Request + +import Request from './_eth_call-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_call-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_chainid.mdx b/services/reference/unichain/json-rpc-methods/eth_chainid.mdx new file mode 100644 index 00000000000..3f4f4bc89c7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_chainid.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_chainId +sidebar_label: eth_chainId +description: Returns the Unichain chain ID. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' + + + +### Request + +import Request from './_eth_chainid-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_estimategas.mdx b/services/reference/unichain/json-rpc-methods/eth_estimategas.mdx new file mode 100644 index 00000000000..bf11948f685 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_estimategas.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a Unichain transaction. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` + + + +## Parameters + +import Params from './_eth_unichain-estimategas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' + + + +### Request + +import Request from './_eth_estimategas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_feehistory.mdx b/services/reference/unichain/json-rpc-methods/eth_feehistory.mdx new file mode 100644 index 00000000000..b2a245ed3f8 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_feehistory.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical Unichain gas information. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' + + + +### Request + +import Request from './_eth_feehistory-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gasprice.mdx b/services/reference/unichain/json-rpc-methods/eth_gasprice.mdx new file mode 100644 index 00000000000..0b7dde960d4 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gasprice.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current Unichain gas price. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' + + + +### Request + +import Request from './_eth_gasprice-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getbalance.mdx b/services/reference/unichain/json-rpc-methods/eth_getbalance.mdx new file mode 100644 index 00000000000..d60a4b38eba --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getbalance.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a Unichain address. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` + + + +## Parameters + +import Params from './_eth_unichain-getbalance-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' + + + +### Request + +import Request from './_eth_getbalance-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/unichain/json-rpc-methods/eth_getblockbyhash.mdx new file mode 100644 index 00000000000..04cf0f7f4e4 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getblockbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns Unichain block information by hash. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblockbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/unichain/json-rpc-methods/eth_getblockbynumber.mdx new file mode 100644 index 00000000000..cffce927143 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getblockbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns Unichain block information by number. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` + + + +## Parameters + +import Params from './_eth_unichain-getblockbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblockbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getblockreceipts.mdx b/services/reference/unichain/json-rpc-methods/eth_getblockreceipts.mdx new file mode 100644 index 00000000000..831e9f3d604 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getblockreceipts.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBlockReceipts +sidebar_label: eth_getBlockReceipts +description: Returns receipts for a block on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblockreceipts-description.mdx' + +# `eth_getBlockReceipts` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblockreceipts-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblockreceipts-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblockreceipts-example.mdx' + + + +### Request + +import Request from './_eth_getblockreceipts-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblockreceipts-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx new file mode 100644 index 00000000000..bff35a64e81 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx new file mode 100644 index 00000000000..0ed5b4aab07 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` + + + +## Parameters + +import Params from './_eth_unichain-getblocktransactioncountbynumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' + + + +### Request + +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getcode.mdx b/services/reference/unichain/json-rpc-methods/eth_getcode.mdx new file mode 100644 index 00000000000..d35e6aca418 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getcode.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` + + + +## Parameters + +import Params from './_eth_unichain-getcode-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' + + + +### Request + +import Request from './_eth_getcode-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getlogs.mdx b/services/reference/unichain/json-rpc-methods/eth_getlogs.mdx new file mode 100644 index 00000000000..8f429988815 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getlogs.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` + + + +## Parameters + +import Params from './_eth_unichain-getlogs-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' + + + +### Request + +import Request from './_eth_getlogs-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getproof.mdx b/services/reference/unichain/json-rpc-methods/eth_getproof.mdx new file mode 100644 index 00000000000..4292726e62b --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getproof.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` + + + +## Parameters + +import Params from './_eth_unichain-getproof-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' + + + +### Request + +import Request from './_eth_getproof-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getstorageat.mdx b/services/reference/unichain/json-rpc-methods/eth_getstorageat.mdx new file mode 100644 index 00000000000..624cfee97ef --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getstorageat.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` + + + +## Parameters + +import Params from './_eth_unichain-getstorageat-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' + + + +### Request + +import Request from './_eth_getstorageat-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx new file mode 100644 index 00000000000..636de79f1e8 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response-yparity.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx new file mode 100644 index 00000000000..a085e140926 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` + + + +## Parameters + +import Params from './_eth_unichain-gettransactionbyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response-yparity.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyhash.mdx new file mode 100644 index 00000000000..ad1c7f8b328 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns-yparity.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionbyhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response-yparity.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/unichain/json-rpc-methods/eth_gettransactioncount.mdx new file mode 100644 index 00000000000..a7f2580285c --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gettransactioncount.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` + + + +## Parameters + +import Params from './_eth_unichain-gettransactioncount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' + + + +### Request + +import Request from './_eth_gettransactioncount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/unichain/json-rpc-methods/eth_gettransactionreceipt.mdx new file mode 100644 index 00000000000..537f9e19286 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' + + + +### Request + +import Request from './_eth_gettransactionreceipt-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/unichain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx new file mode 100644 index 00000000000..64f748d9af7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblockhashandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/unichain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx new file mode 100644 index 00000000000..530c1105da5 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` + + + +## Parameters + +import Params from './_eth_unichain-getunclebyblocknumberandindex-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' + + + +### Request + +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblockhash.mdx new file mode 100644 index 00000000000..601a4d348fc --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblockhash-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx new file mode 100644 index 00000000000..c568294d802 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` + + + +## Parameters + +import Params from './_eth_unichain-getunclecountbyblocknumber-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' + + + +### Request + +import Request from './_eth_getunclecountbyblocknumber-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/unichain/json-rpc-methods/eth_maxpriorityfeepergas.mdx new file mode 100644 index 00000000000..f58ad3db23a --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' + + + +### Request + +import Request from './_eth_maxpriorityfeepergas-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/unichain/json-rpc-methods/eth_sendrawtransaction.mdx new file mode 100644 index 00000000000..8cdf99fd1d7 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_sendrawtransaction.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' + + + +### Request + +import Request from './_eth_sendrawtransaction-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/eth_syncing.mdx b/services/reference/unichain/json-rpc-methods/eth_syncing.mdx new file mode 100644 index 00000000000..cbaf3e89ebb --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/eth_syncing.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` + + + +## Parameters + +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' + + + +### Request + +import Request from './_eth_syncing-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/index.md b/services/reference/unichain/json-rpc-methods/index.md new file mode 100644 index 00000000000..08f80a4458d --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/index.md @@ -0,0 +1,9 @@ +--- +title: Unichain JSON-RPC API +sidebar_label: JSON-RPC API +sidebar_key: unichain-json-rpc-api +--- + +import ErrorCodes from "../../\_partials/error-codes.mdx"; + + diff --git a/services/reference/unichain/json-rpc-methods/net_listening.mdx b/services/reference/unichain/json-rpc-methods/net_listening.mdx new file mode 100644 index 00000000000..34cb454e50f --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/net_listening.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_listening-example.mdx' + + + +### Request + +import Request from './_net_listening-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_listening-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/net_peercount.mdx b/services/reference/unichain/json-rpc-methods/net_peercount.mdx new file mode 100644 index 00000000000..d5f34a42a5b --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/net_peercount.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_peercount-example.mdx' + + + +### Request + +import Request from './_net_peercount-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_peercount-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/net_version.mdx b/services/reference/unichain/json-rpc-methods/net_version.mdx new file mode 100644 index 00000000000..c7a74f4f714 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/net_version.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain net_version +sidebar_label: net_version +description: Returns network ID on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` + + + +## Parameters + +import Params from '/services/reference/_partials/_net_version-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_net_version-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_net_version-example.mdx' + + + +### Request + +import Request from './_net_version-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_net_version-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/web3_clientversion.mdx b/services/reference/unichain/json-rpc-methods/web3_clientversion.mdx new file mode 100644 index 00000000000..2abadd782d1 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/web3_clientversion.mdx @@ -0,0 +1,44 @@ +--- +title: Unichain web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on Unichain. +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` + + + +## Parameters + +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' + + + +## Returns + +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' + + + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + +import Request from './_web3_clientversion-request.mdx' + + + +### Response + +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' + + diff --git a/services/reference/unichain/json-rpc-methods/web3_sha3.mdx b/services/reference/unichain/json-rpc-methods/web3_sha3.mdx new file mode 100644 index 00000000000..1b79d039626 --- /dev/null +++ b/services/reference/unichain/json-rpc-methods/web3_sha3.mdx @@ -0,0 +1,58 @@ +--- +title: Unichain web3_sha3 +sidebar_label: web3_sha3 +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `web3_sha3` + +Returns a [SHA-3](https://en.wikipedia.org/wiki/SHA-3) hash of the specified data. The result value is a [Keccak-256](https://keccak.team/keccak.html) hash, not the standardized SHA3-256. + +## Parameters + +`data`: [Required] _string_ - data to convert to a SHA3 hash. + +## Returns + +`result`: _string_ - SHA3 result of the input data. + +## Example + +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' + + + +### Request + + + + + +```bash +curl https://unichain-mainnet.infura.io/v3/YOUR-API-KEY \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "web3_sha3", "params":["0x68656c6c6f20776f726c00"], "id": 1}' +``` + + + + +### Response + + + + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": "0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f" +} +``` + + + + diff --git a/services/reference/unichain/quickstart.md b/services/reference/unichain/quickstart.md new file mode 100644 index 00000000000..b2599245563 --- /dev/null +++ b/services/reference/unichain/quickstart.md @@ -0,0 +1,247 @@ +--- +description: Unichain quickstart guide +sidebar_position: 2 +sidebar_label: Quickstart +--- + +import Banner from '@site/src/components/Banner' + +# Unichain quickstart + +This quickstart guide will help you set up and make calls on the Unichain network using the Infura endpoints. + + +Don't have an Infura account? Sign up for a free plan and start using the Unichain network! + + +## Prerequisites + +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api/) with the Unichain network enabled. + +## Make calls + +### curl + +Run the following command in your terminal, replacing `` with your actual Infura API key: + +```bash +curl https://unichain-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}' +``` + +:::note + +In Windows Powershell, quotations in `curl` commands can behave differently than expected. We recommend using Postman on Windows systems. + +::: + +### Postman + +Call the JSON-RPC methods using [Postman](https://learning.postman.com/docs/getting-started/introduction/). + +Select **Run in Postman** to fork the collection and make requests. + +[![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/8171681-49bfbc10-85ae-466c-8cf0-91eba9298b12?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D8171681-49bfbc10-85ae-466c-8cf0-91eba9298b12%26entityType%3Dcollection%26workspaceId%3Db8156083-f4da-481f-84fa-72dcc26cb146) + +:::info + +Set the correct [variables](https://learning.postman.com/docs/sending-requests/variables/#understanding-variables) for your API key and network before running requests. + +::: + +### Node (JavaScript) + +In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) as your package manager. + +#### Node Fetch + +1. In your project folder, install the `node-fetch` package using npm: + + ```bash + npm i node-fetch + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + import fetch from 'node-fetch' + + fetch('https://unichain-mainnet.infura.io/v3/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }), + }) + .then(response => response.json()) + .then(data => { + console.log(data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Axios + +1. In your project folder, install the `axios` package using npm: + + ```bash + npm i axios + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const axios = require('axios') + + axios + .post('https://unichain-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', + params: [], + id: 1, + }) + .then(response => { + console.log(response.data) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Ethers + +1. In your project folder, install the `ethers` package using npm: + + ```bash + npm install ethers + ``` + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + const ethers = require('ethers') + + const provider = new ethers.providers.JsonRpcProvider( + 'https://unichain-mainnet.infura.io/v3/' + ) + + provider + .getBlockNumber() + .then(blockNumber => { + console.log(blockNumber) + }) + .catch(error => { + console.error(error) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +#### Web3.js + +1. In your project folder, [install the latest version of the web3.js library](https://www.npmjs.com/package/web3?activeTab=versions) + +1. Create your JavaScript file and copy the following code: + + Replace `` with your actual Infura API key. + + ```javascript title="index.js" + var { Web3 } = require('web3') + var provider = 'https://unichain-mainnet.infura.io/v3/' + var web3Provider = new Web3.providers.HttpProvider(provider) + var web3 = new Web3(web3Provider) + + web3.eth.getBlockNumber().then(result => { + console.log('Latest Unichain Block is ', result) + }) + ``` + +1. Run the code using the following command: + + ```bash + node index.js + ``` + +### Python + +1. In your project folder, install the `requests` library: + + ```bash + pip install requests + ``` + +1. Create your Python file and copy the following code: + + Replace `` with your actual Infura API key. + + ```python title="index.py" + import requests + import json + + url = "https://unichain-mainnet.infura.io/v3/" + + payload = { + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "params": [], + "id": 1 + } + + headers = {'content-type': 'application/json'} + + response = requests.post(url, data=json.dumps(payload), headers=headers).json() + + print(response) + ``` + +1. Run the code using the following command: + + ```bash + python index.py + ``` + +## Next steps + +Now that you have successfully made a call to the Unichain network, you can explore more functionalities and APIs provided +by Infura. Here are some suggestions: + +- **Explore other Unichain APIs**: Infura supports a wide range of APIs. You can find more information in the + [JSON-RPC API method documentation](json-rpc-methods/index.md). + +- **Try out different networks**: Infura supports multiple networks including Ethereum, Arbitrum, Linea, Polygon, Optimism, and more. + +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. + +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/reference/zksync/index.md b/services/reference/zksync/index.md index c1deb6d425f..0cc3a7d134c 100644 --- a/services/reference/zksync/index.md +++ b/services/reference/zksync/index.md @@ -21,36 +21,39 @@ ZKsync Era is a zero-knowledge Ethereum Virtual Machine (zkEVM) that scales Ethe :::info see also -See the [official ZKsync Era documentation](https://docs.zksync.io/build) for more information. +See the [official ZKsync Era documentation](https://docs.zksync.io) for more information. ::: ## Partners and privacy policies +No personal information is sent as part of partner requests, only information necessary to fulfill your API request. This means that Infura's partner service provider can service your request, but not store the content of your request. + The following partners provide access to the ZKsync Era network: - Chainstack ([Terms of Use](https://chainstack.com/tos/), [Privacy Policy](https://chainstack.com/privacy/)) -- Laconic LLC ([Privacy Policy](https://www.laconic.com/privacy-policy)) +- Liquify ([Privacy Policy](https://www.liquify.com/Liquify_RPC_PP.pdf)) +- [NorthWest Nodes](https://northwestnodes.com/) diff --git a/services/reference/zksync/json-rpc-methods/_eth_accounts-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_accounts-request.mdx index 217c45a723e..400a510ae32 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_accounts-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_accounts-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_blocknumber-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_blocknumber-request.mdx index af03e35d3df..3bd1d688313 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_blocknumber-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_blocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_call-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_call-request.mdx index 4b4f0c2d4cd..a381de18af6 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_call-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_call-request.mdx @@ -1,15 +1,15 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' - ``` +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155", "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", "gas": "0x76c0", "gasPrice": "0x9184e72a000", "value": "0x9184e72a", "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}, "latest"], "id": 1}' +``` @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_chainid-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_chainid-request.mdx index 87f58770819..0d87d2599e2 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_chainid-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_chainid-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_estimategas-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_estimategas-request.mdx index e55a9eb35e0..b4d3b8353f6 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_estimategas-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_estimategas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_feehistory-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_feehistory-request.mdx index f82ac4108aa..c459c7ffc73 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_feehistory-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_feehistory-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"id": 1, "json - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gasprice-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gasprice-request.mdx index 93bf504911b..307047b02b1 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gasprice-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gasprice-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getbalance-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getbalance-request.mdx index c3468aad3e1..df8095ebbd5 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getbalance-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getbalance-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getblockbyhash-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getblockbyhash-request.mdx index 34563fb5fe9..feaeb5b740f 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getblockbyhash-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getblockbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getblockbynumber-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getblockbynumber-request.mdx index 58fd99de5e9..f4685fb305e 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getblockbynumber-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getblockbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx index ad9c8ab291c..9b15ab9f8f4 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx index f303f88b20b..d1758ceb439 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getblocktransactioncountbynumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getcode-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getcode-request.mdx index 2482a920bfb..61b17ca6c7c 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getcode-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getcode-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getlogs-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getlogs-request.mdx index 3bcd4e813bb..3f8a06e8d52 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getlogs-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getlogs-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getproof-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getproof-request.mdx index 61e3df6a864..ef650c76f82 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getproof-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getproof-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getstorageat-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getstorageat-request.mdx index 888cf9bff3d..8e76e309e4b 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getstorageat-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getstorageat-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx index 7fea7814e0d..6c395abb116 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx index 40e17d18b42..b779d210d75 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyhash-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyhash-request.mdx index 77b20c576a3..af0d3af6a04 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyhash-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gettransactionbyhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gettransactioncount-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gettransactioncount-request.mdx index 3f4fa836c56..eb7cff38ebe 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gettransactioncount-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gettransactioncount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_gettransactionreceipt-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_gettransactionreceipt-request.mdx index 35ae851e18e..c23bb81fde7 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_gettransactionreceipt-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_gettransactionreceipt-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -15,9 +15,8 @@ curl https://zksync-mainnet.infura.io/v3/ \ ```bash -wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionCount", "params": ["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "0x5bad55"], "id": 1}' +wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_getTransactionReceipt", "params": ["0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0"], "id": 1}' ``` - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx index 8cd20fb6901..91a9a8dea45 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getunclebyblockhashandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx index 10f6a7eaf35..a6ffad21130 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getunclebyblocknumberandindex-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx index f01e1afbe3e..ac6b033966d 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblockhash-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx index 463fe80fc6c..a2b710d46a7 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getunclecountbyblocknumber-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_getwork-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_getwork-request.mdx index 3277557f6d2..6e809d46198 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_getwork-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_getwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_hashrate-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_hashrate-request.mdx index 5be5f05cb64..2c2f2163e4e 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_hashrate-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_hashrate-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx index 15ebe0d3063..53b4c3d4dcb 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_maxpriorityfeepergas-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_mining-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_mining-request.mdx index 3b2b6b131a5..3f91f25355a 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_mining-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_mining-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_protocolversion-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_protocolversion-request.mdx index 1b88be2524e..db8ea91f101 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_protocolversion-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_protocolversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_sendrawtransaction-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_sendrawtransaction-request.mdx index bdbddf67d84..2ddcf2b63af 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_sendrawtransaction-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_sendrawtransaction-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_submitwork-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_submitwork-request.mdx index 997379ae11f..8cb4ca584a2 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_submitwork-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_submitwork-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_eth_syncing-request.mdx b/services/reference/zksync/json-rpc-methods/_eth_syncing-request.mdx index c3f11ed5e79..d18fbf89047 100644 --- a/services/reference/zksync/json-rpc-methods/_eth_syncing-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_eth_syncing-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -14,10 +14,9 @@ curl https://zksync-mainnet.infura.io/v3/ \ -```bash +```bash wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "method": "eth_syncing", "params": [], "id": 1}' ``` - diff --git a/services/reference/zksync/json-rpc-methods/_net_listening-request.mdx b/services/reference/zksync/json-rpc-methods/_net_listening-request.mdx index d01bd04672e..a74c6217b6a 100644 --- a/services/reference/zksync/json-rpc-methods/_net_listening-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_net_listening-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_net_peercount-request.mdx b/services/reference/zksync/json-rpc-methods/_net_peercount-request.mdx index 64bba4db1c3..dd320af8437 100644 --- a/services/reference/zksync/json-rpc-methods/_net_peercount-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_net_peercount-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_net_version-request.mdx b/services/reference/zksync/json-rpc-methods/_net_version-request.mdx index 70f47ce98ef..bf700723912 100644 --- a/services/reference/zksync/json-rpc-methods/_net_version-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_net_version-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/_web3_clientversion-request.mdx b/services/reference/zksync/json-rpc-methods/_web3_clientversion-request.mdx index 7e5a5362daf..4486178e303 100644 --- a/services/reference/zksync/json-rpc-methods/_web3_clientversion-request.mdx +++ b/services/reference/zksync/json-rpc-methods/_web3_clientversion-request.mdx @@ -1,8 +1,8 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -20,4 +20,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/eth_accounts.mdx b/services/reference/zksync/json-rpc-methods/eth_accounts.mdx index d731082b835..a9840022cfd 100644 --- a/services/reference/zksync/json-rpc-methods/eth_accounts.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_accounts.mdx @@ -1,40 +1,44 @@ --- -title: "eth_accounts" +title: ZKsync Era eth_accounts +sidebar_label: eth_accounts +description: Returns a list of ZKsync Era accounts. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_accounts-description.mdx"; +import Description from '/services/reference/_partials/_eth_accounts-description.mdx' + +# `eth_accounts` ## Parameters -import Params from "/services/reference/_partials/_eth_accounts-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_accounts-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_accounts-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_accounts-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_accounts-example.mdx"; +import Example from '/services/reference/_partials/_eth_accounts-example.mdx' ### Request -import Request from "./_eth_accounts-request.mdx"; +import Request from './_eth_accounts-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_accounts-response.mdx"; +import Response from '/services/reference/_partials/_eth_accounts-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_blocknumber.mdx b/services/reference/zksync/json-rpc-methods/eth_blocknumber.mdx index 4f144ac71cf..2695b9569d7 100644 --- a/services/reference/zksync/json-rpc-methods/eth_blocknumber.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_blocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_blockNumber" +title: ZKsync Era eth_blockNumber +sidebar_label: eth_blockNumber +description: Returns the latest ZKsync Era block number. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_blocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_blocknumber-description.mdx' + +# `eth_blockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_blocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_blocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_blocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_blocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_blocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_blocknumber-example.mdx' ### Request -import Request from "./_eth_blocknumber-request.mdx"; +import Request from './_eth_blocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_blocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_blocknumber-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_call.mdx b/services/reference/zksync/json-rpc-methods/eth_call.mdx index 02221b8a34a..051bf3b5ba6 100644 --- a/services/reference/zksync/json-rpc-methods/eth_call.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_call.mdx @@ -1,40 +1,44 @@ --- -title: "eth_call" +title: ZKsync Era eth_call +sidebar_label: eth_call +description: Executes a ZKsync Era call without creating a transaction. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_call-description.mdx"; +import Description from '/services/reference/_partials/_eth_call-description.mdx' + +# `eth_call` ## Parameters -import Params from "/services/reference/_partials/_eth_call-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_call-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_call-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_call-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_call-example.mdx"; +import Example from '/services/reference/_partials/_eth_call-example.mdx' ### Request -import Request from "./_eth_call-request.mdx"; +import Request from './_eth_call-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_call-response.mdx"; +import Response from '/services/reference/_partials/_eth_call-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_chainid.mdx b/services/reference/zksync/json-rpc-methods/eth_chainid.mdx index 3f5ea061258..ce5e074d127 100644 --- a/services/reference/zksync/json-rpc-methods/eth_chainid.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_chainid.mdx @@ -1,40 +1,44 @@ --- -title: "eth_chainId" +title: ZKsync Era eth_chainId +sidebar_label: eth_chainId +description: Returns the ZKsync Era chain ID. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_chainid-description.mdx"; +import Description from '/services/reference/_partials/_eth_chainid-description.mdx' + +# `eth_chainId` ## Parameters -import Params from "/services/reference/_partials/_eth_chainid-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_chainid-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_chainid-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_chainid-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_chainid-example.mdx"; +import Example from '/services/reference/_partials/_eth_chainid-example.mdx' ### Request -import Request from "./_eth_chainid-request.mdx"; +import Request from './_eth_chainid-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_chainid-response.mdx"; +import Response from '/services/reference/_partials/_eth_chainid-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_coinbase.mdx b/services/reference/zksync/json-rpc-methods/eth_coinbase.mdx deleted file mode 100644 index d1ae9fde092..00000000000 --- a/services/reference/zksync/json-rpc-methods/eth_coinbase.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_coinbase" ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -import Description from "/services/reference/_partials/_eth_coinbase-description.mdx"; - - diff --git a/services/reference/zksync/json-rpc-methods/eth_estimategas.mdx b/services/reference/zksync/json-rpc-methods/eth_estimategas.mdx index 3374ffaba98..b00808ac8ac 100644 --- a/services/reference/zksync/json-rpc-methods/eth_estimategas.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_estimategas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_estimateGas" +title: ZKsync Era eth_estimateGas +sidebar_label: eth_estimateGas +description: Estimates gas required for a ZKsync Era transaction. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_estimategas-description.mdx"; +import Description from '/services/reference/_partials/_eth_estimategas-description.mdx' + +# `eth_estimateGas` ## Parameters -import Params from "/services/reference/_partials/_eth_estimategas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_estimategas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_estimategas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_estimategas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_estimategas-example.mdx"; +import Example from '/services/reference/_partials/_eth_estimategas-example.mdx' ### Request -import Request from "./_eth_estimategas-request.mdx"; +import Request from './_eth_estimategas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_estimategas-response.mdx"; +import Response from '/services/reference/_partials/_eth_estimategas-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_feehistory.mdx b/services/reference/zksync/json-rpc-methods/eth_feehistory.mdx index 25fcbeaa3fc..a31fa726df2 100644 --- a/services/reference/zksync/json-rpc-methods/eth_feehistory.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_feehistory.mdx @@ -1,40 +1,44 @@ --- -title: "eth_feeHistory" +title: ZKsync Era eth_feeHistory +sidebar_label: eth_feeHistory +description: Returns historical ZKsync Era gas information. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_feehistory-description.mdx"; +import Description from '/services/reference/_partials/_eth_feehistory-description.mdx' + +# `eth_feeHistory` ## Parameters -import Params from "/services/reference/_partials/_eth_feehistory-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_feehistory-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_feehistory-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_feehistory-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_feehistory-example.mdx"; +import Example from '/services/reference/_partials/_eth_feehistory-example.mdx' ### Request -import Request from "./_eth_feehistory-request.mdx"; +import Request from './_eth_feehistory-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_feehistory-response.mdx"; +import Response from '/services/reference/_partials/_eth_feehistory-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gasprice.mdx b/services/reference/zksync/json-rpc-methods/eth_gasprice.mdx index 54a9a967b51..5629afbba11 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gasprice.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gasprice.mdx @@ -1,40 +1,44 @@ --- -title: "eth_gasPrice" +title: ZKsync Era eth_gasPrice +sidebar_label: eth_gasPrice +description: Returns the current ZKsync Era gas price. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gasprice-description.mdx"; +import Description from '/services/reference/_partials/_eth_gasprice-description.mdx' + +# `eth_gasPrice` ## Parameters -import Params from "/services/reference/_partials/_eth_gasprice-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gasprice-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gasprice-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gasprice-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gasprice-example.mdx"; +import Example from '/services/reference/_partials/_eth_gasprice-example.mdx' ### Request -import Request from "./_eth_gasprice-request.mdx"; +import Request from './_eth_gasprice-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gasprice-response.mdx"; +import Response from '/services/reference/_partials/_eth_gasprice-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getbalance.mdx b/services/reference/zksync/json-rpc-methods/eth_getbalance.mdx index 94fce5e29b4..ae72e81634a 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getbalance.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getbalance.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBalance" +title: ZKsync Era eth_getBalance +sidebar_label: eth_getBalance +description: Returns the balance of a ZKsync Era address. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getbalance-description.mdx"; +import Description from '/services/reference/_partials/_eth_getbalance-description.mdx' + +# `eth_getBalance` ## Parameters -import Params from "/services/reference/_partials/_eth_getbalance-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getbalance-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getbalance-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getbalance-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getbalance-example.mdx"; +import Example from '/services/reference/_partials/_eth_getbalance-example.mdx' ### Request -import Request from "./_eth_getbalance-request.mdx"; +import Request from './_eth_getbalance-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getbalance-response.mdx"; +import Response from '/services/reference/_partials/_eth_getbalance-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getblockbyhash.mdx b/services/reference/zksync/json-rpc-methods/eth_getblockbyhash.mdx index 1c00b29a2dd..be7ed3a86ed 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getblockbyhash.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getblockbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByHash" +title: ZKsync Era eth_getBlockByHash +sidebar_label: eth_getBlockByHash +description: Returns ZKsync Era block information by hash. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbyhash-description.mdx' + +# `eth_getBlockByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbyhash-example.mdx' ### Request -import Request from "./_eth_getblockbyhash-request.mdx"; +import Request from './_eth_getblockbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbyhash-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getblockbynumber.mdx b/services/reference/zksync/json-rpc-methods/eth_getblockbynumber.mdx index 731b4152496..27cea70d8a1 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getblockbynumber.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getblockbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockByNumber" +title: ZKsync Era eth_getBlockByNumber +sidebar_label: eth_getBlockByNumber +description: Returns ZKsync Era block information by number. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblockbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblockbynumber-description.mdx' + +# `eth_getBlockByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblockbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblockbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblockbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblockbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblockbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblockbynumber-example.mdx' ### Request -import Request from "./_eth_getblockbynumber-request.mdx"; +import Request from './_eth_getblockbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblockbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblockbynumber-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx b/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx index 2d51f2423dd..09bbef91939 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByHash" +title: ZKsync Era eth_getBlockTransactionCountByHash +sidebar_label: eth_getBlockTransactionCountByHash +description: Returns transaction count by block hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-description.mdx' + +# `eth_getBlockTransactionCountByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbyhash-request.mdx"; +import Request from './_eth_getblocktransactioncountbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbyhash-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx b/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx index 529f135c5cd..f82b60f3ef7 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getblocktransactioncountbynumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getBlockTransactionCountByNumber" +title: ZKsync Era eth_getBlockTransactionCountByNumber +sidebar_label: eth_getBlockTransactionCountByNumber +description: Returns transaction count by block number on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-description.mdx' + +# `eth_getBlockTransactionCountByNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-example.mdx' ### Request -import Request from "./_eth_getblocktransactioncountbynumber-request.mdx"; +import Request from './_eth_getblocktransactioncountbynumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getblocktransactioncountbynumber-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getcode.mdx b/services/reference/zksync/json-rpc-methods/eth_getcode.mdx index 5784ce3c0bb..e06b70904f5 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getcode.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getcode.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getCode" +title: ZKsync Era eth_getCode +sidebar_label: eth_getCode +description: Returns byte code of a smart contract on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getcode-description.mdx"; +import Description from '/services/reference/_partials/_eth_getcode-description.mdx' + +# `eth_getCode` ## Parameters -import Params from "/services/reference/_partials/_eth_getcode-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getcode-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getcode-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getcode-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getcode-example.mdx"; +import Example from '/services/reference/_partials/_eth_getcode-example.mdx' ### Request -import Request from "./_eth_getcode-request.mdx"; +import Request from './_eth_getcode-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getcode-response.mdx"; +import Response from '/services/reference/_partials/_eth_getcode-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getlogs.mdx b/services/reference/zksync/json-rpc-methods/eth_getlogs.mdx index 30503fa4fbd..915f3278162 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getlogs.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getlogs.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getLogs" +title: ZKsync Era eth_getLogs +sidebar_label: eth_getLogs +description: Returns filtered logs on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getlogs-description.mdx"; +import Description from '/services/reference/_partials/_eth_getlogs-description.mdx' + +# `eth_getLogs` ## Parameters -import Params from "/services/reference/_partials/_eth_getlogs-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getlogs-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getlogs-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getlogs-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getlogs-example.mdx"; +import Example from '/services/reference/_partials/_eth_getlogs-example.mdx' ### Request -import Request from "./_eth_getlogs-request.mdx"; +import Request from './_eth_getlogs-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getlogs-response.mdx"; +import Response from '/services/reference/_partials/_eth_getlogs-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getproof.mdx b/services/reference/zksync/json-rpc-methods/eth_getproof.mdx index 0f029b5de9f..2a3cc3bbcb5 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getproof.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getproof.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getProof" +title: ZKsync Era eth_getProof +sidebar_label: eth_getProof +description: Returns account and storage proofs on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getproof-description.mdx"; +import Description from '/services/reference/_partials/_eth_getproof-description.mdx' + +# `eth_getProof` ## Parameters -import Params from "/services/reference/_partials/_eth_getproof-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getproof-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getproof-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getproof-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getproof-example.mdx"; +import Example from '/services/reference/_partials/_eth_getproof-example.mdx' ### Request -import Request from "./_eth_getproof-request.mdx"; +import Request from './_eth_getproof-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getproof-response.mdx"; +import Response from '/services/reference/_partials/_eth_getproof-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getstorageat.mdx b/services/reference/zksync/json-rpc-methods/eth_getstorageat.mdx index 9b6e9f50dc2..96327a670b4 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getstorageat.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getstorageat.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getStorageAt" +title: ZKsync Era eth_getStorageAt +sidebar_label: eth_getStorageAt +description: Gets storage value for an address on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getstorageat-description.mdx"; +import Description from '/services/reference/_partials/_eth_getstorageat-description.mdx' + +# `eth_getStorageAt` ## Parameters -import Params from "/services/reference/_partials/_eth_getstorageat-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getstorageat-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getstorageat-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getstorageat-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getstorageat-example.mdx"; +import Example from '/services/reference/_partials/_eth_getstorageat-example.mdx' ### Request -import Request from "./_eth_getstorageat-request.mdx"; +import Request from './_eth_getstorageat-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getstorageat-response.mdx"; +import Response from '/services/reference/_partials/_eth_getstorageat-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx index 0f1bca98cf3..3e36d6c2698 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockHashAndIndex" +title: ZKsync Era eth_getTransactionByBlockHashAndIndex +sidebar_label: eth_getTransactionByBlockHashAndIndex +description: Gets a transaction by block hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-description.mdx' + +# `eth_getTransactionByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblockhashandindex-request.mdx"; +import Request from './_eth_gettransactionbyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblockhashandindex-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx index d6d014f640e..05b247455f3 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByBlockNumberAndIndex" +title: ZKsync Era eth_getTransactionByBlockNumberAndIndex +sidebar_label: eth_getTransactionByBlockNumberAndIndex +description: Gets a transaction by block number on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-description.mdx' + +# `eth_getTransactionByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_gettransactionbyblocknumberandindex-request.mdx"; +import Request from './_eth_gettransactionbyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyblocknumberandindex-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyhash.mdx b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyhash.mdx index 41fe05aa5df..f649b406498 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gettransactionbyhash.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gettransactionbyhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionByHash" +title: ZKsync Era eth_getTransactionByHash +sidebar_label: eth_getTransactionByHash +description: Gets a transaction by hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionbyhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionbyhash-description.mdx' + +# `eth_getTransactionByHash` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionbyhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionbyhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionbyhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionbyhash-example.mdx' ### Request -import Request from "./_eth_gettransactionbyhash-request.mdx"; +import Request from './_eth_gettransactionbyhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionbyhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionbyhash-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gettransactioncount.mdx b/services/reference/zksync/json-rpc-methods/eth_gettransactioncount.mdx index 6fe325796c3..8a8ec40f1e4 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gettransactioncount.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gettransactioncount.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionCount" +title: ZKsync Era eth_getTransactionCount +sidebar_label: eth_getTransactionCount +description: Gets transaction count for an address on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactioncount-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactioncount-description.mdx' + +# `eth_getTransactionCount` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactioncount-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactioncount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactioncount-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactioncount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactioncount-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactioncount-example.mdx' ### Request -import Request from "./_eth_gettransactioncount-request.mdx"; +import Request from './_eth_gettransactioncount-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactioncount-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactioncount-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_gettransactionreceipt.mdx b/services/reference/zksync/json-rpc-methods/eth_gettransactionreceipt.mdx index ad0d7bad3c8..7d99a6acc73 100644 --- a/services/reference/zksync/json-rpc-methods/eth_gettransactionreceipt.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_gettransactionreceipt.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getTransactionReceipt" +title: ZKsync Era eth_getTransactionReceipt +sidebar_label: eth_getTransactionReceipt +description: Gets transaction receipt by transaction hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_gettransactionreceipt-description.mdx"; +import Description from '/services/reference/_partials/_eth_gettransactionreceipt-description.mdx' + +# `eth_getTransactionReceipt` ## Parameters -import Params from "/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_gettransactionreceipt-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_gettransactionreceipt-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_gettransactionreceipt-example.mdx"; +import Example from '/services/reference/_partials/_eth_gettransactionreceipt-example.mdx' ### Request -import Request from "./_eth_gettransactionreceipt-request.mdx"; +import Request from './_eth_gettransactionreceipt-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_gettransactionreceipt-response.mdx"; +import Response from '/services/reference/_partials/_eth_gettransactionreceipt-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getunclebyblockhashandindex.mdx b/services/reference/zksync/json-rpc-methods/eth_getunclebyblockhashandindex.mdx index 577b7c60203..5f919e65e94 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getunclebyblockhashandindex.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getunclebyblockhashandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockHashAndIndex" +title: ZKsync Era eth_getUncleByBlockHashAndIndex +sidebar_label: eth_getUncleByBlockHashAndIndex +description: Gets uncle by block hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclebyblockhashandindex-description.mdx' + +# `eth_getUncleByBlockHashAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclebyblockhashandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclebyblockhashandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclebyblockhashandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblockhashandindex-request.mdx"; +import Request from './_eth_getunclebyblockhashandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclebyblockhashandindex-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx b/services/reference/zksync/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx index f502c7b2455..28f9e24d06a 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getunclebyblocknumberandindex.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleByBlockNumberAndIndex" +title: ZKsync Era eth_getUncleByBlockNumberAndIndex +sidebar_label: eth_getUncleByBlockNumberAndIndex +description: Gets uncle by block number on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-description.mdx' + +# `eth_getUncleByBlockNumberAndIndex` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-example.mdx' ### Request -import Request from "./_eth_getunclebyblocknumberandindex-request.mdx"; +import Request from './_eth_getunclebyblocknumberandindex-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclebyblocknumberandindex-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblockhash.mdx b/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblockhash.mdx index 6657cf6c66f..5f7c831b974 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblockhash.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblockhash.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockHash" +title: ZKsync Era eth_getUncleCountByBlockHash +sidebar_label: eth_getUncleCountByBlockHash +description: Gets uncle count by block hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclecountbyblockhash-description.mdx' + +# `eth_getUncleCountByBlockHash` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclecountbyblockhash-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclecountbyblockhash-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclecountbyblockhash-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblockhash-request.mdx"; +import Request from './_eth_getunclecountbyblockhash-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclecountbyblockhash-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblocknumber.mdx b/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblocknumber.mdx index d84e7a88f37..8e4952976ff 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblocknumber.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getunclecountbyblocknumber.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getUncleCountByBlockNumber" +title: ZKsync Era eth_getUncleCountByBlockNumber +sidebar_label: eth_getUncleCountByBlockNumber +description: Gets uncle count by block number on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx"; +import Description from '/services/reference/_partials/_eth_getunclecountbyblocknumber-description.mdx' + +# `eth_getUncleCountByBlockNumber` ## Parameters -import Params from "/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getunclecountbyblocknumber-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getunclecountbyblocknumber-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx"; +import Example from '/services/reference/_partials/_eth_getunclecountbyblocknumber-example.mdx' ### Request -import Request from "./_eth_getunclecountbyblocknumber-request.mdx"; +import Request from './_eth_getunclecountbyblocknumber-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx"; +import Response from '/services/reference/_partials/_eth_getunclecountbyblocknumber-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_getwork.mdx b/services/reference/zksync/json-rpc-methods/eth_getwork.mdx index 393054c28b1..995665d2b47 100644 --- a/services/reference/zksync/json-rpc-methods/eth_getwork.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_getwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_getWork" +title: ZKsync Era eth_getWork +sidebar_label: eth_getWork +description: Return current block and seed hash on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_getwork-description.mdx"; +import Description from '/services/reference/_partials/_eth_getwork-description.mdx' + +# `eth_getWork` ## Parameters -import Params from "/services/reference/_partials/_eth_getwork-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_getwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_getwork-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_getwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_getwork-example.mdx"; +import Example from '/services/reference/_partials/_eth_getwork-example.mdx' ### Request -import Request from "./_eth_getwork-request.mdx"; +import Request from './_eth_getwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_getwork-response.mdx"; +import Response from '/services/reference/_partials/_eth_getwork-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_hashrate.mdx b/services/reference/zksync/json-rpc-methods/eth_hashrate.mdx index 23c0973cb61..6c2f0da64b4 100644 --- a/services/reference/zksync/json-rpc-methods/eth_hashrate.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_hashrate.mdx @@ -1,40 +1,44 @@ --- -title: "eth_hashrate" +title: ZKsync Era eth_hashrate +sidebar_label: eth_hashrate +description: Return hashes per second on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_hashrate-description.mdx"; +import Description from '/services/reference/_partials/_eth_hashrate-description.mdx' + +# `eth_hashrate` ## Parameters -import Params from "/services/reference/_partials/_eth_hashrate-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_hashrate-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_hashrate-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_hashrate-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_hashrate-example.mdx"; +import Example from '/services/reference/_partials/_eth_hashrate-example.mdx' ### Request -import Request from "./_eth_hashrate-request.mdx"; +import Request from './_eth_hashrate-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_hashrate-response.mdx"; +import Response from '/services/reference/_partials/_eth_hashrate-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_maxpriorityfeepergas.mdx b/services/reference/zksync/json-rpc-methods/eth_maxpriorityfeepergas.mdx index 60e0f9c30b6..6d77a18cb1e 100644 --- a/services/reference/zksync/json-rpc-methods/eth_maxpriorityfeepergas.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_maxpriorityfeepergas.mdx @@ -1,40 +1,44 @@ --- -title: "eth_maxPriorityFeePerGas" +title: ZKsync Era eth_maxPriorityFeePerGas +sidebar_label: eth_maxPriorityFeePerGas +description: Estimates max priority fee on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx"; +import Description from '/services/reference/_partials/_eth_maxpriorityfeepergas-description.mdx' + +# `eth_maxPriorityFeePerGas` ## Parameters -import Params from "/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_maxpriorityfeepergas-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_maxpriorityfeepergas-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx"; +import Example from '/services/reference/_partials/_eth_maxpriorityfeepergas-example.mdx' ### Request -import Request from "./_eth_maxpriorityfeepergas-request.mdx"; +import Request from './_eth_maxpriorityfeepergas-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx"; +import Response from '/services/reference/_partials/_eth_maxpriorityfeepergas-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_mining.mdx b/services/reference/zksync/json-rpc-methods/eth_mining.mdx index e89052dfe65..1eb7f8391b3 100644 --- a/services/reference/zksync/json-rpc-methods/eth_mining.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_mining.mdx @@ -1,40 +1,44 @@ --- -title: "eth_mining" +title: ZKsync Era eth_mining +sidebar_label: eth_mining +description: Indicates whether client is mining on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_mining-description.mdx"; +import Description from '/services/reference/_partials/_eth_mining-description.mdx' + +# `eth_mining` ## Parameters -import Params from "/services/reference/_partials/_eth_mining-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_mining-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_mining-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_mining-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_mining-example.mdx"; +import Example from '/services/reference/_partials/_eth_mining-example.mdx' ### Request -import Request from "./_eth_mining-request.mdx"; +import Request from './_eth_mining-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_mining-response.mdx"; +import Response from '/services/reference/_partials/_eth_mining-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_protocolversion.mdx b/services/reference/zksync/json-rpc-methods/eth_protocolversion.mdx index 86bb3335fae..35414c04d8d 100644 --- a/services/reference/zksync/json-rpc-methods/eth_protocolversion.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_protocolversion.mdx @@ -1,40 +1,44 @@ --- -title: "eth_protocolVersion" +title: ZKsync Era eth_protocolVersion +sidebar_label: eth_protocolVersion +description: Returns protocol version on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_protocolversion-description.mdx"; +import Description from '/services/reference/_partials/_eth_protocolversion-description.mdx' + +# `eth_protocolVersion` ## Parameters -import Params from "/services/reference/_partials/_eth_protocolversion-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_protocolversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_protocolversion-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_protocolversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_protocolversion-example.mdx"; +import Example from '/services/reference/_partials/_eth_protocolversion-example.mdx' ### Request -import Request from "./_eth_protocolversion-request.mdx"; +import Request from './_eth_protocolversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_protocolversion-response.mdx"; +import Response from '/services/reference/_partials/_eth_protocolversion-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_sendrawtransaction.mdx b/services/reference/zksync/json-rpc-methods/eth_sendrawtransaction.mdx index 4e926b28a59..bd4ca77dbde 100644 --- a/services/reference/zksync/json-rpc-methods/eth_sendrawtransaction.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_sendrawtransaction.mdx @@ -1,40 +1,44 @@ --- -title: "eth_sendRawTransaction" +title: ZKsync Era eth_sendRawTransaction +sidebar_label: eth_sendRawTransaction +description: Submits pre-signed transaction on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_sendrawtransaction-description.mdx"; +import Description from '/services/reference/_partials/_eth_sendrawtransaction-description.mdx' + +# `eth_sendRawTransaction` ## Parameters -import Params from "/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_sendrawtransaction-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_sendrawtransaction-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_sendrawtransaction-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_sendrawtransaction-example.mdx"; +import Example from '/services/reference/_partials/_eth_sendrawtransaction-example.mdx' ### Request -import Request from "./_eth_sendrawtransaction-request.mdx"; +import Request from './_eth_sendrawtransaction-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_sendrawtransaction-response.mdx"; +import Response from '/services/reference/_partials/_eth_sendrawtransaction-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_sendtransaction.mdx b/services/reference/zksync/json-rpc-methods/eth_sendtransaction.mdx deleted file mode 100644 index 833e8469487..00000000000 --- a/services/reference/zksync/json-rpc-methods/eth_sendtransaction.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "eth_sendTransaction" ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -import Description from "/services/reference/_partials/_eth_sendtransaction-description.mdx"; - - - diff --git a/services/reference/zksync/json-rpc-methods/eth_sign.mdx b/services/reference/zksync/json-rpc-methods/eth_sign.mdx deleted file mode 100644 index 1cb425c1d63..00000000000 --- a/services/reference/zksync/json-rpc-methods/eth_sign.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "eth_sign" ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -import Description from "/services/reference/_partials/_eth_sign-description.mdx"; - - diff --git a/services/reference/zksync/json-rpc-methods/eth_submitwork.mdx b/services/reference/zksync/json-rpc-methods/eth_submitwork.mdx index 6fd58f0e076..110da220848 100644 --- a/services/reference/zksync/json-rpc-methods/eth_submitwork.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_submitwork.mdx @@ -1,40 +1,44 @@ --- -title: "eth_submitWork" +title: ZKsync Era eth_submitWork +sidebar_label: eth_submitWork +description: Submits PoW solution on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_submitwork-description.mdx"; +import Description from '/services/reference/_partials/_eth_submitwork-description.mdx' + +# `eth_submitWork` ## Parameters -import Params from "/services/reference/_partials/_eth_submitwork-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_submitwork-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_submitwork-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_submitwork-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_submitwork-example.mdx"; +import Example from '/services/reference/_partials/_eth_submitwork-example.mdx' ### Request -import Request from "./_eth_submitwork-request.mdx"; +import Request from './_eth_submitwork-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_submitwork-response.mdx"; +import Response from '/services/reference/_partials/_eth_submitwork-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/eth_syncing.mdx b/services/reference/zksync/json-rpc-methods/eth_syncing.mdx index 2b4d62b4641..af82dc94319 100644 --- a/services/reference/zksync/json-rpc-methods/eth_syncing.mdx +++ b/services/reference/zksync/json-rpc-methods/eth_syncing.mdx @@ -1,40 +1,44 @@ --- -title: "eth_syncing" +title: ZKsync Era eth_syncing +sidebar_label: eth_syncing +description: Indicates whether client is syncing on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_eth_syncing-description.mdx"; +import Description from '/services/reference/_partials/_eth_syncing-description.mdx' + +# `eth_syncing` ## Parameters -import Params from "/services/reference/_partials/_eth_syncing-parameters.mdx"; +import Params from '/services/reference/_partials/_eth_syncing-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_eth_syncing-returns.mdx"; +import Returns from '/services/reference/_partials/_eth_syncing-returns.mdx' ## Example -import Example from "/services/reference/_partials/_eth_syncing-example.mdx"; +import Example from '/services/reference/_partials/_eth_syncing-example.mdx' ### Request -import Request from "./_eth_syncing-request.mdx"; +import Request from './_eth_syncing-request.mdx' ### Response -import Response from "/services/reference/_partials/_eth_syncing-response.mdx"; +import Response from '/services/reference/_partials/_eth_syncing-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/index.md b/services/reference/zksync/json-rpc-methods/index.md index 62d3facbf45..2de7193f5cd 100644 --- a/services/reference/zksync/json-rpc-methods/index.md +++ b/services/reference/zksync/json-rpc-methods/index.md @@ -1,4 +1,9 @@ -# JSON-RPC methods +--- +sidebar_label: JSON-RPC API +sidebar_key: zksync-json-rpc-api +--- + +# ZKsync Era JSON-RPC API ZKsync Era supports the standard Ethereum JSON-RPC-APIs and additional -ZKsync Era-specific methods not supported on Ethereum. \ No newline at end of file +ZKsync Era-specific methods not supported on Ethereum. diff --git a/services/reference/zksync/json-rpc-methods/net_listening.mdx b/services/reference/zksync/json-rpc-methods/net_listening.mdx index 2f2c14afe33..c358d3dee4f 100644 --- a/services/reference/zksync/json-rpc-methods/net_listening.mdx +++ b/services/reference/zksync/json-rpc-methods/net_listening.mdx @@ -1,40 +1,44 @@ --- -title: "net_listening" +title: ZKsync Era net_listening +sidebar_label: net_listening +description: Indicates whether client listening for network connections on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_listening-description.mdx"; +import Description from '/services/reference/_partials/_net_listening-description.mdx' + +# `net_listening` ## Parameters -import Params from "/services/reference/_partials/_net_listening-parameters.mdx"; +import Params from '/services/reference/_partials/_net_listening-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_listening-returns.mdx"; +import Returns from '/services/reference/_partials/_net_listening-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_listening-example.mdx"; +import Example from '/services/reference/_partials/_net_listening-example.mdx' ### Request -import Request from "./_net_listening-request.mdx"; +import Request from './_net_listening-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_listening-response.mdx"; +import Response from '/services/reference/_partials/_net_listening-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/net_peercount.mdx b/services/reference/zksync/json-rpc-methods/net_peercount.mdx index e4885da86a6..59f796636da 100644 --- a/services/reference/zksync/json-rpc-methods/net_peercount.mdx +++ b/services/reference/zksync/json-rpc-methods/net_peercount.mdx @@ -1,40 +1,44 @@ --- -title: "net_peerCount" +title: ZKsync Era net_peerCount +sidebar_label: net_peerCount +description: Returns peer count on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_peercount-description.mdx"; +import Description from '/services/reference/_partials/_net_peercount-description.mdx' + +# `net_peerCount` ## Parameters -import Params from "/services/reference/_partials/_net_peercount-parameters.mdx"; +import Params from '/services/reference/_partials/_net_peercount-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_peercount-returns.mdx"; +import Returns from '/services/reference/_partials/_net_peercount-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_peercount-example.mdx"; +import Example from '/services/reference/_partials/_net_peercount-example.mdx' ### Request -import Request from "./_net_peercount-request.mdx"; +import Request from './_net_peercount-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_peercount-response.mdx"; +import Response from '/services/reference/_partials/_net_peercount-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/net_version.mdx b/services/reference/zksync/json-rpc-methods/net_version.mdx index 5dffa99328b..c9b28b6901f 100644 --- a/services/reference/zksync/json-rpc-methods/net_version.mdx +++ b/services/reference/zksync/json-rpc-methods/net_version.mdx @@ -1,40 +1,44 @@ --- -title: "net_version" +title: ZKsync Era net_version +sidebar_label: net_version +description: Returns network ID on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_net_version-description.mdx"; +import Description from '/services/reference/_partials/_net_version-description.mdx' + +# `net_version` ## Parameters -import Params from "/services/reference/_partials/_net_version-parameters.mdx"; +import Params from '/services/reference/_partials/_net_version-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_net_version-returns.mdx"; +import Returns from '/services/reference/_partials/_net_version-returns.mdx' ## Example -import Example from "/services/reference/_partials/_net_version-example.mdx"; +import Example from '/services/reference/_partials/_net_version-example.mdx' ### Request -import Request from "./_net_version-request.mdx"; +import Request from './_net_version-request.mdx' ### Response -import Response from "/services/reference/_partials/_net_version-response.mdx"; +import Response from '/services/reference/_partials/_net_version-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx b/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx index 42588d48a97..b312ca9cdfe 100644 --- a/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx +++ b/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_subscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -16,5 +16,12 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. ``` - + + +```bash +wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}' +``` + + + diff --git a/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx b/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx index a4bb49eef12..799057dea92 100644 --- a/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx +++ b/services/reference/zksync/json-rpc-methods/subscription-methods/_eth_unsubscribe-request.mdx @@ -1,5 +1,5 @@ -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' @@ -10,4 +10,3 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - diff --git a/services/reference/zksync/json-rpc-methods/subscription-methods/eth_subscribe.mdx b/services/reference/zksync/json-rpc-methods/subscription-methods/eth_subscribe.mdx index 3f187a761ec..05159e3ada2 100644 --- a/services/reference/zksync/json-rpc-methods/subscription-methods/eth_subscribe.mdx +++ b/services/reference/zksync/json-rpc-methods/subscription-methods/eth_subscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_subscribe" +title: ZKsync Era eth_subscribe +sidebar_label: eth_subscribe +description: Creates new subscription on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_subscribe-description.mdx' + +# `eth_subscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_subscribe-parameters-no-pending.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_subscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_subscribe-example.mdx' ### Request -import Request from "./_eth_subscribe-request.mdx"; +import Request from './_eth_subscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_subscribe-response-no-pending.mdx' diff --git a/services/reference/zksync/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx b/services/reference/zksync/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx index aa033555c02..98ca6286ea5 100644 --- a/services/reference/zksync/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx +++ b/services/reference/zksync/json-rpc-methods/subscription-methods/eth_unsubscribe.mdx @@ -1,40 +1,44 @@ --- -title: "eth_unsubscribe" +title: ZKsync Era eth_unsubscribe +sidebar_label: eth_unsubscribe +description: Cancels subscription on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx"; +import Description from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-description.mdx' + +# `eth_unsubscribe` ## Parameters -import Params from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx"; +import Params from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx"; +import Returns from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-returns.mdx' ## Example -import Example from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx"; +import Example from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-example.mdx' ### Request -import Request from "./_eth_unsubscribe-request.mdx"; +import Request from './_eth_unsubscribe-request.mdx' ### Response -import Response from "/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx"; +import Response from '/services/reference/_partials/subscription-methods/_eth_unsubscribe-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/subscription-methods/index.md b/services/reference/zksync/json-rpc-methods/subscription-methods/index.md index dc5adeaf968..cce4010cc2a 100644 --- a/services/reference/zksync/json-rpc-methods/subscription-methods/index.md +++ b/services/reference/zksync/json-rpc-methods/subscription-methods/index.md @@ -1,8 +1,11 @@ --- -title: "Subscription methods" +title: ZkSync subscription methods +sidebar_label: Subscription methods +sidebar_key: zksync-subscription-methods +description: ZkSync subscription methods --- -# Subscription methods +# ZKsync Era subscription methods Subscription methods are available for [WebSocket](../../../../concepts/websockets.md) connections only, and allow you to wait for events instead of polling for them. For example, dapps can subscribe to logs and receive notifications when a specific event occurs. diff --git a/services/reference/zksync/json-rpc-methods/web3_clientversion.mdx b/services/reference/zksync/json-rpc-methods/web3_clientversion.mdx index 805f5cdc70b..ae3c8bb547c 100644 --- a/services/reference/zksync/json-rpc-methods/web3_clientversion.mdx +++ b/services/reference/zksync/json-rpc-methods/web3_clientversion.mdx @@ -1,40 +1,44 @@ --- -title: "web3_clientVersion" +title: ZKsync Era web3_clientVersion +sidebar_label: web3_clientVersion +description: Returns client version on ZKsync Era. --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -import Description from "/services/reference/_partials/_web3_clientversion-description.mdx"; +import Description from '/services/reference/_partials/_web3_clientversion-description.mdx' + +# `web3_clientVersion` ## Parameters -import Params from "/services/reference/_partials/_web3_clientversion-parameters.mdx"; +import Params from '/services/reference/_partials/_web3_clientversion-parameters.mdx' ## Returns -import Returns from "/services/reference/_partials/_web3_clientversion-returns.mdx"; +import Returns from '/services/reference/_partials/_web3_clientversion-returns.mdx' ## Example -import Example from "/services/reference/_partials/_web3_clientversion-example.mdx"; +import Example from '/services/reference/_partials/_web3_clientversion-example.mdx' ### Request -import Request from "./_web3_clientversion-request.mdx"; +import Request from './_web3_clientversion-request.mdx' ### Response -import Response from "/services/reference/_partials/_web3_clientversion-response.mdx"; +import Response from '/services/reference/_partials/_web3_clientversion-response.mdx' diff --git a/services/reference/zksync/json-rpc-methods/zks_estimatefee.mdx b/services/reference/zksync/json-rpc-methods/zks_estimatefee.mdx index 76f7665b2cb..0ada860c826 100644 --- a/services/reference/zksync/json-rpc-methods/zks_estimatefee.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_estimatefee.mdx @@ -1,9 +1,12 @@ --- -title: "zks_estimateFee" +title: zks_estimateFee +sidebar_label: zks_estimateFee --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_estimateFee` Returns the fee for the transaction. @@ -24,19 +27,20 @@ The estimated fee which includes: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0", "id":2, "method": "zks_estimateFee", "params": [ { "from": "0x1111111111111111111111111111111111111111", "to":"0x2222222222222222222222222222222222222222", "data": "0xffffffff" } ] }' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":2, "method": "zks_estimateFee", "params": [ { "from": "0x1111111111111111111111111111111111111111", "to":"0x2222222222222222222222222222222222222222", "data": "0xffffffff" } ] }' +``` + @@ -51,17 +55,19 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0 - ```json - { - "jsonrpc": "2.0", - "result": { - "gas_limit": "0x156c00", - "gas_per_pubdata_limit": "0x143b", - "max_fee_per_gas": "0xee6b280", - "max_priority_fee_per_gas": "0x0" - }, - "id": 2 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "gas_limit": "0x156c00", + "gas_per_pubdata_limit": "0x143b", + "max_fee_per_gas": "0xee6b280", + "max_priority_fee_per_gas": "0x0" + }, + "id": 2 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_estimategasl1tol2.mdx b/services/reference/zksync/json-rpc-methods/zks_estimategasl1tol2.mdx index bdd74688ca9..e1f70aa53d8 100644 --- a/services/reference/zksync/json-rpc-methods/zks_estimategasl1tol2.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_estimategasl1tol2.mdx @@ -1,9 +1,12 @@ --- -title: "zks_estimateGasL1ToL2" +title: zks_estimateGasL1ToL2 +sidebar_label: zks_estimateGasL1ToL2 --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_estimateGasL1ToL2` Returns an estimate of the gas required for a layer 1 (L1) to layer 2 (L2) transaction. @@ -19,19 +22,20 @@ The estimate of the gas required for a L1 to L2 transaction. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc":"2.0", "id":2, "method": "zks_estimateGasL1ToL2", "params": [ { "from": "0x1111111111111111111111111111111111111111", "to":"0x2222222222222222222222222222222222222222", "data": "0xffffffff" } ] }' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0", "id":2, "method": "zks_estimateGasL1ToL2", "params": [ { "from": "0x1111111111111111111111111111111111111111", "to":"0x2222222222222222222222222222222222222222", "data": "0xffffffff" } ] }' +``` + @@ -46,12 +50,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc":"2.0 - ```json - { - "jsonrpc": "2.0", - "result": "0x25f64db", - "id": 2 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x25f64db", + "id": 2 +} +``` + diff --git a/services/reference/zksync/json-rpc-methods/zks_getallaccountbalances.mdx b/services/reference/zksync/json-rpc-methods/zks_getallaccountbalances.mdx index 27f7ecfd57b..b7590b898ac 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getallaccountbalances.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getallaccountbalances.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getAllAccountBalances" +title: zks_getAllAccountBalances +sidebar_label: zks_getAllAccountBalances --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getAllAccountBalances` Returns all balances for confirmed tokens given by an account address. @@ -17,19 +20,20 @@ The method returns all balances for confirmed tokens associated with the provide ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getAllAccountBalances", "params": [ "0x98E9D288743839e96A8005a6B51C770Bbf7788C0" ]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getAllAccountBalances", "params": [ "0x98E9D288743839e96A8005a6B51C770Bbf7788C0" ]}' +``` + @@ -44,14 +48,16 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": { - "0x0000000000000000000000000000000000000000": "0x2fbd72a1121b3100" - }, - "id": 2 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "0x0000000000000000000000000000000000000000": "0x2fbd72a1121b3100" + }, + "id": 2 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getblockdetails.mdx b/services/reference/zksync/json-rpc-methods/zks_getblockdetails.mdx index 74dc3bfee85..3b4730ac477 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getblockdetails.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getblockdetails.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getBlockDetails" +title: zks_getBlockDetails +sidebar_label: zks_getBlockDetails --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getBlockDetails` Returns additional ZKsync-specific information about the L2 block. @@ -16,8 +19,8 @@ Returns additional ZKsync-specific information about the L2 block. Object containing the details of the L2 block: - `baseSystemContractsHashes`: An object containing hashes of the base system contracts used in the transaction: - - `bootloader`: The hash of the bootloader contract. - - `default_aa`: The hash of the default account contract. + - `bootloader`: The hash of the bootloader contract. + - `default_aa`: The hash of the default account contract. - `commitTxHash`: The hash of the transaction committed to the network. - `committedAt`: The timestamp when the transaction was committed to the network. - `executeTxHash`: The hash of the transaction executed on the network. @@ -35,22 +38,22 @@ Object containing the details of the L2 block: - `status`: The status of the transaction. - `timestamp`: The timestamp of the transaction. - ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getBlockDetails", "params": [ 140599 ]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getBlockDetails", "params": [ 140599 ]}' +``` + @@ -61,37 +64,39 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. -## Response +### Response - ```json - { - "jsonrpc": "2.0", - "result": { - "baseSystemContractsHashes": { - "bootloader": "0x010007793a328ef16cc7086708f7f3292ff9b5eed9e7e539c184228f461bf4ef", - "default_aa": "0x0100067d861e2f5717a12c3e869cfb657793b86bbb0caa05cc1421f16c5217bc" - }, - "commitTxHash": "0xd045e3698f018cb233c3817eb53a41a4c5b28784ffe659da246aa33bda34350c", - "committedAt": "2023-03-26T07:21:21.046817Z", - "executeTxHash": "0xbb66aa75f437bb4255cf751badfc6b142e8d4d3a4e531c7b2e737a22870ff19e", - "executedAt": "2023-03-27T07:44:52.187764Z", - "l1BatchNumber": 1617, - "l1GasPrice": 20690385511, - "l1TxCount": 0, - "l2FairGasPrice": 250000000, - "l2TxCount": 20, - "number": 140599, - "operatorAddress": "0xfeee860e7aae671124e9a4e61139f3a5085dfeee", - "proveTxHash": "0x1591e9b16ff6eb029cc865614094b2e6dd872c8be40b15cc56164941ed723a1a", - "provenAt": "2023-03-26T19:48:35.200565Z", - "rootHash": "0xf1adac176fc939313eea4b72055db0622a10bbd9b7a83097286e84e471d2e7df", - "status": "verified", - "timestamp": 1679815038 + +```json +{ + "jsonrpc": "2.0", + "result": { + "baseSystemContractsHashes": { + "bootloader": "0x010007793a328ef16cc7086708f7f3292ff9b5eed9e7e539c184228f461bf4ef", + "default_aa": "0x0100067d861e2f5717a12c3e869cfb657793b86bbb0caa05cc1421f16c5217bc" }, - "id": 1 - } - ``` + "commitTxHash": "0xd045e3698f018cb233c3817eb53a41a4c5b28784ffe659da246aa33bda34350c", + "committedAt": "2023-03-26T07:21:21.046817Z", + "executeTxHash": "0xbb66aa75f437bb4255cf751badfc6b142e8d4d3a4e531c7b2e737a22870ff19e", + "executedAt": "2023-03-27T07:44:52.187764Z", + "l1BatchNumber": 1617, + "l1GasPrice": 20690385511, + "l1TxCount": 0, + "l2FairGasPrice": 250000000, + "l2TxCount": 20, + "number": 140599, + "operatorAddress": "0xfeee860e7aae671124e9a4e61139f3a5085dfeee", + "proveTxHash": "0x1591e9b16ff6eb029cc865614094b2e6dd872c8be40b15cc56164941ed723a1a", + "provenAt": "2023-03-26T19:48:35.200565Z", + "rootHash": "0xf1adac176fc939313eea4b72055db0622a10bbd9b7a83097286e84e471d2e7df", + "status": "verified", + "timestamp": 1679815038 + }, + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getbridgecontracts.mdx b/services/reference/zksync/json-rpc-methods/zks_getbridgecontracts.mdx index f20a7f4b662..2726b7a2f83 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getbridgecontracts.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getbridgecontracts.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getBridgeContracts" +title: zks_getBridgeContracts +sidebar_label: zks_getBridgeContracts --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getBridgeContracts` Returns the L1 and L2 address of the default bridges. @@ -15,26 +18,27 @@ None. The default bridges used in the ZKsync network: -- `1Erc20DefaultBridge` - The address of the default bridge contract responsible for handling ERC-20 token - transfers from the L1 network to the L2 network +- `l1Erc20DefaultBridge` - The address of the default bridge contract responsible for handling ERC-20 token + transfers from the L1 network to the L2 network - `l2Erc20DefaultBridge` - The address of the default bridge contract responsible for handling ERC-20 token - transfers from the L2 network to the L1 network + transfers from the L2 network to the L1 network ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getBridgeContracts", "params": []}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getBridgeContracts", "params": []}' +``` + @@ -49,15 +53,17 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": { - "l1Erc20DefaultBridge": "0x57891966931eb4bb6fb81430e6ce0a03aabde063", - "l2Erc20DefaultBridge": "0x11f943b2c77b743ab90f4a0ae7d5a4e7fca3e102" - }, - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "l1Erc20DefaultBridge": "0x57891966931eb4bb6fb81430e6ce0a03aabde063", + "l2Erc20DefaultBridge": "0x11f943b2c77b743ab90f4a0ae7d5a4e7fca3e102" + }, + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getbytecodebyhash.mdx b/services/reference/zksync/json-rpc-methods/zks_getbytecodebyhash.mdx index da9486f82b4..99441e8c0e3 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getbytecodebyhash.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getbytecodebyhash.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getBytecodeByHash" +title: zks_getBytecodeByHash +sidebar_label: zks_getBytecodeByHash --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getBytecodeByHash` Returns the bytecode of a transaction for the provided hash. @@ -17,12 +20,12 @@ The byte code of the given transaction. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + ```bash curl https://zksync-mainnet.infura.io/v3/ \ @@ -30,6 +33,7 @@ curl https://zksync-mainnet.infura.io/v3/ \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getBytecodeByHash", "params": ["0x0100067d861e2f5717a12c3e869cfb657793b86bbb0caa05cc1421f16c5217bc"]}' ``` + @@ -44,6 +48,7 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. + ```json { "jsonrpc": "2.0", @@ -64,5 +69,6 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. "id": 1 } ``` + diff --git a/services/reference/zksync/json-rpc-methods/zks_getl1batchblockrange.mdx b/services/reference/zksync/json-rpc-methods/zks_getl1batchblockrange.mdx index 36a65d886cc..7ad1e249131 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getl1batchblockrange.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getl1batchblockrange.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getL1BatchBlockRange" +title: zks_getL1BatchBlockRange +sidebar_label: zks_getL1BatchBlockRange --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getL1BatchBlockRange` Returns the range of blocks contained within a given batch. @@ -18,19 +21,20 @@ beginning/end block numbers in hexadecimal. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL1BatchBlockRange", "params": [12345]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL1BatchBlockRange", "params": [12345]}' +``` + @@ -45,12 +49,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": ["0x116fec", "0x117015"], - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": ["0x116fec", "0x117015"], + "id": 1 +} +``` + diff --git a/services/reference/zksync/json-rpc-methods/zks_getl1batchdetails.mdx b/services/reference/zksync/json-rpc-methods/zks_getl1batchdetails.mdx index fbbebf07cd3..fe40109cc8c 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getl1batchdetails.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getl1batchdetails.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getL1BatchDetails" +title: zks_getL1BatchDetails +sidebar_label: zks_getL1BatchDetails --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getL1BatchDetails` Returns data pertaining to a given L1 batch. @@ -16,8 +19,8 @@ Returns data pertaining to a given L1 batch. Detailed information about the specified L1 batch: - `baseSystemContractsHashes`: An object containing hashes of the base system contracts used in the transaction: - - `bootloader`: The hash of the bootloader contract. - - `default_aa`: The hash of the default account contract. + - `bootloader`: The hash of the bootloader contract. + - `default_aa`: The hash of the default account contract. - `commitTxHash`: The hash of the transaction committed to the network. - `committedAt`: The timestamp when the transaction was committed to the network. - `executeTxHash`: The hash of the transaction executed on the network. @@ -37,19 +40,20 @@ Detailed information about the specified L1 batch: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL1BatchDetails", "params": [12345]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL1BatchDetails", "params": [12345]}' +``` + @@ -64,12 +68,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x25f64db", - "id": 2 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x25f64db", + "id": 2 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getl2tol1logproof.mdx b/services/reference/zksync/json-rpc-methods/zks_getl2tol1logproof.mdx index 66b20a80dc1..08fcac37823 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getl2tol1logproof.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getl2tol1logproof.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getL2ToL1LogProof" +title: zks_getL2ToL1LogProof +sidebar_label: zks_getL2ToL1LogProof --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getL2ToL1LogProof` Returns the proof for the corresponding L2 to L1 log. The index of the log that can be obtained from the transaction receipt. @@ -13,7 +16,6 @@ from the transaction receipt. - `tx_hash`: [_Required_] Hash of the L2 transaction the L2 to L1 log was produced in. - `l2_to_l1_log_index`: [_Optional_] The index of the L2 to L1 log in the transaction. - ## Response - `id` - The position of the leaf in the Merkle tree of L2 to L1 messages for the block. @@ -22,19 +24,20 @@ from the transaction receipt. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL2ToL1LogProof", "params": ["0x2a1c6c74b184965c0cb015aae9ea134fd96215d2e4f4979cfec12563295f610e"]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL2ToL1LogProof", "params": ["0x2a1c6c74b184965c0cb015aae9ea134fd96215d2e4f4979cfec12563295f610e"]}' +``` + @@ -49,26 +52,28 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": { - "id": 0, - "proof": [ - "0x8c48910df2ca7de509daf50b3182fcdf2dd6c422c6704054fd857d6c9516d6fc", - "0xc5028885760b8b596c4fa11497c783752cb3a3fb3b8e6b52d7e54b9f1c63521e", - "0xeb1f451eb8163723ee19940cf3a8f2a2afdf51100ce8ba25839bd94a057cda16", - "0x7aabfd367dea2b5306b8071c246b99566dae551a1dbd40da791e66c4f696b236", - "0xe4733f281f18ba3ea8775dd62d2fcd84011c8c938f16ea5790fd29a03bf8db89", - "0x1798a1fd9c8fbb818c98cff190daa7cc10b6e5ac9716b4a2649f7c2ebcef2272", - "0x66d7c5983afe44cf15ea8cf565b34c6c31ff0cb4dd744524f7842b942d08770d", - "0xb04e5ee349086985f74b73971ce9dfe76bbed95c84906c5dffd96504e1e5396c", - "0xac506ecb5465659b3a927143f6d724f91d8d9c4bdb2463aee111d9aa869874db" - ], - "root": "0x920c63cb0066a08da45f0a9bf934517141bd72d8e5a51421a94b517bf49a0d39" - }, - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "id": 0, + "proof": [ + "0x8c48910df2ca7de509daf50b3182fcdf2dd6c422c6704054fd857d6c9516d6fc", + "0xc5028885760b8b596c4fa11497c783752cb3a3fb3b8e6b52d7e54b9f1c63521e", + "0xeb1f451eb8163723ee19940cf3a8f2a2afdf51100ce8ba25839bd94a057cda16", + "0x7aabfd367dea2b5306b8071c246b99566dae551a1dbd40da791e66c4f696b236", + "0xe4733f281f18ba3ea8775dd62d2fcd84011c8c938f16ea5790fd29a03bf8db89", + "0x1798a1fd9c8fbb818c98cff190daa7cc10b6e5ac9716b4a2649f7c2ebcef2272", + "0x66d7c5983afe44cf15ea8cf565b34c6c31ff0cb4dd744524f7842b942d08770d", + "0xb04e5ee349086985f74b73971ce9dfe76bbed95c84906c5dffd96504e1e5396c", + "0xac506ecb5465659b3a927143f6d724f91d8d9c4bdb2463aee111d9aa869874db" + ], + "root": "0x920c63cb0066a08da45f0a9bf934517141bd72d8e5a51421a94b517bf49a0d39" + }, + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getl2tol1msgproof.mdx b/services/reference/zksync/json-rpc-methods/zks_getl2tol1msgproof.mdx index 76dba122788..ccdbb5c8628 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getl2tol1msgproof.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getl2tol1msgproof.mdx @@ -1,12 +1,15 @@ --- -title: "zks_getL2ToL1MsgProof" +title: zks_getL2ToL1MsgProof +sidebar_label: zks_getL2ToL1MsgProof --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getL2ToL1MsgProof` Returns the proof for a message sent through the L1Messenger system contract, given a -block, sender, message, and an optional message log index containing the L1 to L2 message. +block, sender, message, and an optional message log index containing the L1 to L2 message. ## Parameters @@ -14,7 +17,7 @@ block, sender, message, and an optional message log index containing the L1 to L - `sender`: (string) [_Required_] The sender (account) of the message. - `msg`: [_Required_] The keccak256 hash of the sent message. - `l2_log_position`: The index in the block of the event that was emitted by the L1Messenger - when submitting this message. If it is omitted, the proof for the first message is returned. + when submitting this message. If it is omitted, the proof for the first message is returned. ## Response @@ -24,19 +27,20 @@ block, sender, message, and an optional message log index containing the L1 to L ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL2ToL1MsgProof", "params": [5187, "0x87869cb87c4Fa78ca278dF358E890FF73B42a39E", "0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9"]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getL2ToL1MsgProof", "params": [5187, "0x87869cb87c4Fa78ca278dF358E890FF73B42a39E", "0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9"]}' +``` + @@ -51,12 +55,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x25f64db", - "id": 2 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x25f64db", + "id": 2 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getmaincontract.mdx b/services/reference/zksync/json-rpc-methods/zks_getmaincontract.mdx index 418a7adec0d..7579e78d766 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getmaincontract.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getmaincontract.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getMainContract" +title: zks_getMainContract +sidebar_label: zks_getMainContract --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getMainContract` Returns the address of the ZKsync Era contract. @@ -11,26 +14,26 @@ Returns the address of the ZKsync Era contract. None. - ## Response The address of the main ZKsync Era contract on the network. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getMainContract", "params": []}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getMainContract", "params": []}' +``` + @@ -45,12 +48,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x32400084c286cf3e17e7b677ea9583e60a000324", - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x32400084c286cf3e17e7b677ea9583e60a000324", + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getproof.mdx b/services/reference/zksync/json-rpc-methods/zks_getproof.mdx index 0cf9ffd0d56..1a0c869a0a0 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getproof.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getproof.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getProof" +title: zks_getProof +sidebar_label: zks_getProof --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getProof` Returns Merkle proofs for one or more storage values for the specified account along with a Merkle proof of their authenticity. This allows you to verify that the values have not been tampered with. @@ -14,32 +17,32 @@ of their authenticity. This allows you to verify that the values have not been t - `keys`: [_Required_] Vector of storage keys in the account. - `l1BatchNumber`: [_Required_] Number of the L1 batch specifying the point in time at which the requested values are returned. - ## Response - `address`: The account address. - `storageProof`: Proof for each of the requested keys in the order at which they were requested: - - `key` - The requested storage key. - - `value` - The storage value. - - `index` - Index of the tree entry. - - `proof` - Sequence of zero or more 32-byte hashes that form a Merkle path for the key in the Merkle tree. - Hashes are listed using the root-to-leaf ordering. The root hash is excluded; it is published on L1 as a part of L1 batch commit data. + - `key` - The requested storage key. + - `value` - The storage value. + - `index` - Index of the tree entry. + - `proof` - Sequence of zero or more 32-byte hashes that form a Merkle path for the key in the Merkle tree. + Hashes are listed using the root-to-leaf ordering. The root hash is excluded; it is published on L1 as a part of L1 batch commit data. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getProof", "params": ["0x0000000000000000000000000000000000008003", ["0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12"], 354895]}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getProof", "params": ["0x0000000000000000000000000000000000008003", ["0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12"], 354895]}' +``` + @@ -54,29 +57,30 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": { - "address": "0x0000000000000000000000000000000000008003", - "storageProof": [ - { - "key": "0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12", - "proof": [ - "0xe3e8e49a998b3abf8926f62a5a832d829aadc1b7e059f1ea59ffbab8e11edfb7", - "0x9bebfa036e85a6ffb6bf447a9c7d41af176642c6aaf5cfbc97128f4f10d8a25a", - ... - "0x9ebd7b37a21fb0c74d0040a941038887caf4e4c7dfaa182b82915cacc6191025", - "0x4550ab30af8c76557a74d051eb43a964889d383d6da343c6a4f4799595d86f9c" - ], - "value": "0x0000000000000000000000000000000000000000000000000000000000000060", - "index": 27900957 - } - ] - }, - "id": 1 - } - - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "address": "0x0000000000000000000000000000000000008003", + "storageProof": [ + { + "key": "0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12", + "proof": [ + "0xe3e8e49a998b3abf8926f62a5a832d829aadc1b7e059f1ea59ffbab8e11edfb7", + "0x9bebfa036e85a6ffb6bf447a9c7d41af176642c6aaf5cfbc97128f4f10d8a25a", + ... + "0x9ebd7b37a21fb0c74d0040a941038887caf4e4c7dfaa182b82915cacc6191025", + "0x4550ab30af8c76557a74d051eb43a964889d383d6da343c6a4f4799595d86f9c" + ], + "value": "0x0000000000000000000000000000000000000000000000000000000000000060", + "index": 27900957 + } + ] + }, + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_getrawblocktransactions.mdx b/services/reference/zksync/json-rpc-methods/zks_getrawblocktransactions.mdx index 2e82ec456c9..5fc26037189 100644 --- a/services/reference/zksync/json-rpc-methods/zks_getrawblocktransactions.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_getrawblocktransactions.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getRawBlockTransactions" +title: zks_getRawBlockTransactions +sidebar_label: zks_getRawBlockTransactions --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getRawBlockTransactions` Returns data about the transactions in the specified block. @@ -16,43 +19,44 @@ Returns data about the transactions in the specified block. Object containing the data about the executed transaction: - `L1`: Object containing information about the corresponding transaction on the L1 network: - - `canonicalTxHash`: The canonical hash of the transaction on the L1 network. - - `deadlineBlock`: The deadline block for the transaction on the L1 network. - - `ethBlock`: The Ethereum block number for the transaction. - - `ethHash`: The Ethereum transaction hash for the transaction. - - `fullFee`: The full fee for the transaction in hexadecimal format. - - `gasLimit`: The gas limit for the transaction in hexadecimal format. - - `gasPerPubdataLimit`: The gas per public data limit for the transaction in hexadecimal format. - - `layer2TipFee`: The tip fee for the transaction on the L2 network in hexadecimal format. - - `maxFeePerGas`: The maximum fee per gas for the transaction in hexadecimal format. - - `opProcessingType`: The type of operation processing used for the transaction. - - `priorityQueueType`: The type of priority queue used for the transaction. - - `refundRecipient`: The recipient address for any potential refund for the transaction. - - `sender`: The sender address of the transaction. - - `serialId`: The serial ID of the transaction. - - `toMint`: The address to mint tokens for the transaction. + - `canonicalTxHash`: The canonical hash of the transaction on the L1 network. + - `deadlineBlock`: The deadline block for the transaction on the L1 network. + - `ethBlock`: The Ethereum block number for the transaction. + - `ethHash`: The Ethereum transaction hash for the transaction. + - `fullFee`: The full fee for the transaction in hexadecimal format. + - `gasLimit`: The gas limit for the transaction in hexadecimal format. + - `gasPerPubdataLimit`: The gas per public data limit for the transaction in hexadecimal format. + - `layer2TipFee`: The tip fee for the transaction on the L2 network in hexadecimal format. + - `maxFeePerGas`: The maximum fee per gas for the transaction in hexadecimal format. + - `opProcessingType`: The type of operation processing used for the transaction. + - `priorityQueueType`: The type of priority queue used for the transaction. + - `refundRecipient`: The recipient address for any potential refund for the transaction. + - `sender`: The sender address of the transaction. + - `serialId`: The serial ID of the transaction. + - `toMint`: The address to mint tokens for the transaction. - `execute`: Object that contains information about the transaction execution: - - `calldata`: The calldata for the execution in hexadecimal format. - - `contractAddress`: The contract address for the execution. - - `factoryDeps`: An array containing factory dependencies for the execution. - - `value`: The value for the execution in hexadecimal format. + - `calldata`: The calldata for the execution in hexadecimal format. + - `contractAddress`: The contract address for the execution. + - `factoryDeps`: An array containing factory dependencies for the execution. + - `value`: The value for the execution in hexadecimal format. - `received_timestamp_ms`: The transaction timestamp. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getRawBlockTransactions", "params": [5817]}' - ``` + + +```bash + curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getRawBlockTransactions", "params": [5817]}' +``` + @@ -67,41 +71,43 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": [ - { - "common_data": { - "L1": { - "canonicalTxHash": "0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9", - "deadlineBlock": 0, - "ethBlock": 16751339, - "ethHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "fullFee": "0x0", - "gasLimit": "0x989680", - "gasPerPubdataLimit": "0x320", - "layer2TipFee": "0x0", - "maxFeePerGas": "0x0", - "opProcessingType": "Common", - "priorityQueueType": "Deque", - "refundRecipient": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", - "sender": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", - "serialId": 67, - "toMint": "0x0" - } - }, - "execute": { - "calldata": "0x471c46c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000031edd5a882583cbf3a712e98e100ef34ad6934b400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "contractAddress": "0xfc5b07a5dd1b80cf271d35642f75cc0500ff1e2c", - "factoryDeps": [], - "value": "0x0" - }, - "received_timestamp_ms": 1677887544169 - } - ], - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": [ + { + "common_data": { + "L1": { + "canonicalTxHash": "0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9", + "deadlineBlock": 0, + "ethBlock": 16751339, + "ethHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "fullFee": "0x0", + "gasLimit": "0x989680", + "gasPerPubdataLimit": "0x320", + "layer2TipFee": "0x0", + "maxFeePerGas": "0x0", + "opProcessingType": "Common", + "priorityQueueType": "Deque", + "refundRecipient": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", + "sender": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", + "serialId": 67, + "toMint": "0x0" + } + }, + "execute": { + "calldata": "0x471c46c800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000031edd5a882583cbf3a712e98e100ef34ad6934b400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "contractAddress": "0xfc5b07a5dd1b80cf271d35642f75cc0500ff1e2c", + "factoryDeps": [], + "value": "0x0" + }, + "received_timestamp_ms": 1677887544169 + } + ], + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_gettestnetpaymaster.mdx b/services/reference/zksync/json-rpc-methods/zks_gettestnetpaymaster.mdx index 728ba5f2801..4f8e1a25c80 100644 --- a/services/reference/zksync/json-rpc-methods/zks_gettestnetpaymaster.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_gettestnetpaymaster.mdx @@ -1,11 +1,14 @@ --- -title: "zks_getTestnetPaymaster" +title: zks_getTestnetPaymaster +sidebar_label: zks_getTestnetPaymaster --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -Returns the address of the [testnet paymaster](https://docs.zksync.io/build/developer-reference/account-abstraction.html#testnet-paymaster) +# `zks_getTestnetPaymaster` + +Returns the address of the [testnet paymaster](https://docs.zksync.io/zksync-protocol/era-vm/account-abstraction/paymasters#testnet-paymaster) available on testnets and enables paying fees in ERC-20 compatible tokens. ## Parameters @@ -18,19 +21,20 @@ The address of the testnet paymaster. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-sepolia.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getTestnetPaymaster", "params": []}' - ``` + + +```bash +curl https://zksync-sepolia.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getTestnetPaymaster", "params": []}' +``` + @@ -45,12 +49,14 @@ wscat -c wss://zksync-sepolia.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x8f0ea1312da29f17eabeb2f484fd3c112cccdd63", - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x8f0ea1312da29f17eabeb2f484fd3c112cccdd63", + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_gettransactiondetails.mdx b/services/reference/zksync/json-rpc-methods/zks_gettransactiondetails.mdx index 334715a0dd1..cf61d8408b9 100644 --- a/services/reference/zksync/json-rpc-methods/zks_gettransactiondetails.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_gettransactiondetails.mdx @@ -1,9 +1,12 @@ --- -title: "zks_getTransactionDetails" +title: zks_getTransactionDetails +sidebar_label: zks_getTransactionDetails --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_getTransactionDetails` Returns data about a transaction given by the transaction hash. @@ -27,19 +30,19 @@ Object containing the transaction data: ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - + - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getTransactionDetails", "params": ["0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9"]}' - ``` +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_getTransactionDetails", "params": ["0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9"]}' +``` @@ -55,22 +58,24 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": { - "ethCommitTxHash": "0x3da5b6eda357189c9243c41c5a33b1b2ed0169be172705d74681a25217702772", - "ethExecuteTxHash": "0xdaff5fd7ff91333b161de54534b4bb6a78e5325329959a0863bf0aae2b0fdcc6", - "ethProveTxHash": "0x2f482d3ea163f5be0c2aca7819d0beb80415be1a310e845a2d726fbc4ac54c80", - "fee": "0x0", - "gasPerPubdata": "0x320", - "initiatorAddress": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", - "isL1Originated": true, - "receivedAt": "2023-03-03T23:52:24.169Z", - "status": "verified" - }, - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": { + "ethCommitTxHash": "0x3da5b6eda357189c9243c41c5a33b1b2ed0169be172705d74681a25217702772", + "ethExecuteTxHash": "0xdaff5fd7ff91333b161de54534b4bb6a78e5325329959a0863bf0aae2b0fdcc6", + "ethProveTxHash": "0x2f482d3ea163f5be0c2aca7819d0beb80415be1a310e845a2d726fbc4ac54c80", + "fee": "0x0", + "gasPerPubdata": "0x320", + "initiatorAddress": "0x87869cb87c4fa78ca278df358e890ff73b42a39e", + "isL1Originated": true, + "receivedAt": "2023-03-03T23:52:24.169Z", + "status": "verified" + }, + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_l1batchnumber.mdx b/services/reference/zksync/json-rpc-methods/zks_l1batchnumber.mdx index b227f435518..dfd156873fd 100644 --- a/services/reference/zksync/json-rpc-methods/zks_l1batchnumber.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_l1batchnumber.mdx @@ -1,9 +1,12 @@ --- -title: "zks_L1BatchNumber" +title: zks_L1BatchNumber +sidebar_label: zks_L1BatchNumber --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_L1BatchNumber` Returns the latest L1 batch number. @@ -11,26 +14,26 @@ Returns the latest L1 batch number. None. - ## Response -The latest L1 batch number in hexidecimal format. +The latest L1 batch number in hexadecimal format. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_L1BatchNumber", "params": []}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_L1BatchNumber", "params": []}' +``` + @@ -45,12 +48,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x544c", - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x544c", + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/json-rpc-methods/zks_l1chainid.mdx b/services/reference/zksync/json-rpc-methods/zks_l1chainid.mdx index a93142c677d..e2c06ee7181 100644 --- a/services/reference/zksync/json-rpc-methods/zks_l1chainid.mdx +++ b/services/reference/zksync/json-rpc-methods/zks_l1chainid.mdx @@ -1,9 +1,12 @@ --- -title: "zks_L1ChainId" +title: zks_L1ChainId +sidebar_label: zks_L1ChainId --- -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# `zks_L1ChainId` Returns the chain ID of the underlying L1. @@ -11,25 +14,26 @@ Returns the chain ID of the underlying L1. None. - ## Response The L1 chain ID. ## Example -Replace `` with an API key from your [Infura dashboard](https://infura.io/dashboard). +Replace `` with an API key from your [Infura dashboard](https://app.infura.io/). ### Request - - ```bash - curl https://zksync-mainnet.infura.io/v3/ \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_L1ChainId", "params": []}' - ``` + + +```bash +curl https://zksync-mainnet.infura.io/v3/ \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0", "id": 1, "method": "zks_L1ChainId", "params": []}' +``` + @@ -44,12 +48,14 @@ wscat -c wss://zksync-mainnet.infura.io/ws/v3/ -x '{"jsonrpc": "2. - ```json - { - "jsonrpc": "2.0", - "result": "0x1", - "id": 1 - } - ``` + +```json +{ + "jsonrpc": "2.0", + "result": "0x1", + "id": 1 +} +``` + - \ No newline at end of file + diff --git a/services/reference/zksync/quickstart.md b/services/reference/zksync/quickstart.md index 60451c3da60..5a707689b81 100644 --- a/services/reference/zksync/quickstart.md +++ b/services/reference/zksync/quickstart.md @@ -1,11 +1,12 @@ --- description: ZKsync Era quickstart guide sidebar_position: 2 +sidebar_label: Quickstart --- import Banner from '@site/src/components/Banner' -# Quickstart +# ZKsync Era quickstart This quickstart guide will help you set up and make calls on the ZKsync Era network using the Infura endpoints. @@ -15,11 +16,11 @@ Don't have an Infura account? Sign up for our free plan and start using the ZKsy ## Prerequisites -Ensure you have an [API key](../../../../developer-tools/dashboard/get-started/create-api/) with the ZKsync Era networked enabled. +Ensure you have an [API key](/developer-tools/dashboard/get-started/create-api) with the ZKsync Era network enabled. ## Make calls -### cURL +### curl Run the following command in your terminal, replacing `` with your actual Infura API key: @@ -36,7 +37,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta #### Node Fetch -1. In your project folder, install the `node-fetch` package using npm:: +1. In your project folder, install the `node-fetch` package using npm: ```bash npm i node-fetch @@ -47,25 +48,25 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - import fetch from "node-fetch" + import fetch from 'node-fetch' - fetch("https://zksync-mainnet.infura.io/v3/", { - method: "POST", + fetch('https://zksync-mainnet.infura.io/v3/', { + method: 'POST', headers: { - "Content-Type": "application/json", + 'Content-Type': 'application/json', }, body: JSON.stringify({ - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }), }) - .then((response) => response.json()) - .then((data) => { + .then(response => response.json()) + .then(data => { console.log(data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -89,19 +90,19 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const axios = require("axios") + const axios = require('axios') axios - .post("https://zksync-mainnet.infura.io/v3/", { - jsonrpc: "2.0", - method: "eth_blockNumber", + .post('https://zksync-mainnet.infura.io/v3/', { + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], id: 1, }) - .then((response) => { + .then(response => { console.log(response.data) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -125,18 +126,18 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta Replace `` with your actual Infura API key. ```javascript title="index.js" - const ethers = require("ethers") + const ethers = require('ethers') const provider = new ethers.providers.JsonRpcProvider( - "https://zksync-mainnet.infura.io/v3/" + 'https://zksync-mainnet.infura.io/v3/' ) provider .getBlockNumber() - .then((blockNumber) => { + .then(blockNumber => { console.log(blockNumber) }) - .catch((error) => { + .catch(error => { console.error(error) }) ``` @@ -185,7 +186,7 @@ In these examples, you'll use [npm](https://docs.npmjs.com/downloading-and-insta python index.py ``` -## Next Steps +## Next steps Now that you have successfully made a call to the ZKsync Era network, you can explore more functionalities and APIs provided by Infura. Here are some suggestions: @@ -195,7 +196,7 @@ by Infura. Here are some suggestions: - **Try out different networks**: Infura supports multiple networks including Arbitrum, Polygon, Optimism, IPFS, and more. -- **Monitor your usage**: Keep an eye on your usage on the [Infura dashboard](../../../../../developer-tools/dashboard/how-to/dashboard-stats/) to ensure you're not hitting your rate limits. +- **Monitor your usage**: Monitor your usage on the [Infura dashboard](/developer-tools/dashboard/how-to/dashboard-stats) to ensure you're not hitting your rate limits. -Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the -[Infura community](https://community.infura.io/) for help and answers to common questions. +Remember, the MetaMask community is here to help. If you have any questions or run into any issues, check out the +[MetaMask community](https://community.metamask.io/) for help and answers to common questions. diff --git a/services/tutorials/ethereum/_category_.json b/services/tutorials/ethereum/_category_.json index c629f387bf0..1605ce62c0b 100644 --- a/services/tutorials/ethereum/_category_.json +++ b/services/tutorials/ethereum/_category_.json @@ -1,10 +1,5 @@ { "label": "Ethereum", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "tutorials/ethereum", - "description": "This section provides tutorials for using the Infura API to perform various tasks on the Ethereum blockchain." - } + "position": 1, + "key": "ethereum-tutorials" } diff --git a/services/tutorials/ethereum/authenticate-with-jwt.md b/services/tutorials/ethereum/authenticate-with-jwt.md index e58e609d9de..15945c3769e 100644 --- a/services/tutorials/ethereum/authenticate-with-jwt.md +++ b/services/tutorials/ethereum/authenticate-with-jwt.md @@ -6,14 +6,11 @@ sidebar_position: 1 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; - # Authenticate with JWT -This tutorial demonstrates how to create and apply a JSON Web Token (JWT) to authenticate an -[`eth_blockNumber`](../../api/networks/ethereum/json-rpc-methods/eth_blocknumber.mdx) API request -with Node.js. - -Developers can configure the expiry time and scope of JWTs to enhance the security profile of their dapps. +This tutorial demonstrates how to create and apply a JSON Web Token (JWT) to authenticate an +[`eth_blockNumber`](../../reference/ethereum/json-rpc-methods/eth_blocknumber.mdx) API request +with Node.js. ## Prerequisites @@ -49,7 +46,7 @@ Install the required dependencies: npm install axios jsonwebtoken dotenv ``` -### 2. Create a key pair +### 2. Create a key pair #### 2.1. Generate your private key @@ -64,7 +61,7 @@ openssl genpkey \ -out private_key.pem \ -pkeyopt rsa_keygen_bits:2048 \ -outform PEM - ``` +``` @@ -111,7 +108,7 @@ openssl ec \ #### 3.1. Update the Infura dashboard -In the [Infura dashboard](https://app.infura.io/), under **API Keys**, select the key you want to use for authentication. Go to its **Settings** tab. Under **Requirements**, fill out these fields: +In the [Infura dashboard](https://app.infura.io/login), under **API Keys**, select the key you want to use for authentication. Go to its **Settings** tab. Under **Requirements**, fill out these fields: - **JWT PUBLIC KEY NAME** - Provide a unique name for your JWT public key, which can help you manage multiple keys. - **JWT PUBLIC KEY** - Paste the entire contents of the `public_key.pem` file. @@ -157,12 +154,12 @@ Replace the following values in the `.env` file: - `` with your API key from the Infura dashboard. - `` with the JWT's key ID. This is generated by Infura, and you can find it in the Infura dashboard. The code in [Step 4](#4-create-and-apply-your-jwt) applies this ID to the JWT header to allow Infura to identify which key was used to sign the JWT. -- `` with the URL of an Infura network for which your key has access rights, and that supports the method [`eth_blockNumber`](../../api/networks/ethereum/json-rpc-methods/eth_blocknumber.mdx). +- `` with the URL of an Infura network for which your key has access rights, and that supports the method [`eth_blockNumber`](../../reference/ethereum/json-rpc-methods/eth_blocknumber.mdx). :::warning Important Before pushing code to a public repository, add `.env` to your `.gitignore` file. This reduces the likelihood that keys are exposed in public repositories. - + Note that `.gitignore` ignores only untracked files. If your `.env` file was committed in the past, it's tracked by Git. Untrack the file by deleting it and running `git rm --cached .env`, then include it in `.gitignore`. ::: @@ -178,68 +175,67 @@ touch call.js Add the following to `call.js`: ```javascript title="call.js" -require("dotenv").config(); -const axios = require("axios"); -const jwt = require("jsonwebtoken"); -const fs = require("fs"); +require('dotenv').config() +const axios = require('axios') +const jwt = require('jsonwebtoken') +const fs = require('fs') function getAlgorithm(privateKey) { - if (privateKey.includes("BEGIN RSA PRIVATE KEY") || privateKey.includes("BEGIN PRIVATE KEY")) { - return "RS256"; - } else if (privateKey.includes("BEGIN EC PRIVATE KEY")) { - return "ES256"; + if (privateKey.includes('BEGIN RSA PRIVATE KEY') || privateKey.includes('BEGIN PRIVATE KEY')) { + return 'RS256' + } else if (privateKey.includes('BEGIN EC PRIVATE KEY')) { + return 'ES256' } else { - throw new Error("Unsupported key type"); + throw new Error('Unsupported key type') } } // Function to generate the JWT function generateJWT() { - const privateKey = fs.readFileSync("private_key.pem", "utf8"); - const algorithm = getAlgorithm(privateKey); - const token = jwt.sign( - {}, - privateKey, - { - algorithm: algorithm, // Dynamically set the algorithm based on the key type - keyid: process.env.JWT_KEY_ID, - audience: "infura.io", - expiresIn: "1h", - header: { - typ: "JWT" - } - } - ); - - return token; + const privateKey = fs.readFileSync('private_key.pem', 'utf8') + const algorithm = getAlgorithm(privateKey) + const token = jwt.sign({}, privateKey, { + algorithm: algorithm, // Dynamically set the algorithm based on the key type + keyid: process.env.JWT_KEY_ID, + audience: 'infura.io', + expiresIn: '1h', + header: { + typ: 'JWT', + }, + }) + + return token } // Function to authenticate with Infura and get the latest block number async function getBlockNumber() { - const jwtToken = generateJWT(); - const url = `${process.env.INFURA_NETWORK_URL}${process.env.INFURA_API_KEY}`; + const jwtToken = generateJWT() + const url = `${process.env.INFURA_NETWORK_URL}${process.env.INFURA_API_KEY}` const data = { - jsonrpc: "2.0", - method: "eth_blockNumber", + jsonrpc: '2.0', + method: 'eth_blockNumber', params: [], - id: 1 - }; + id: 1, + } try { const response = await axios.post(url, data, { headers: { - Authorization: "Bearer " + jwtToken, - "Content-Type": "application/json" - } - }); - console.log("Block number:", response.data.result); + Authorization: 'Bearer ' + jwtToken, + 'Content-Type': 'application/json', + }, + }) + console.log('Block number:', response.data.result) } catch (error) { - console.error("Error fetching block number:", error.response ? error.response.data : error.message); + console.error( + 'Error fetching block number:', + error.response ? error.response.data : error.message + ) } } // Call the function to get latest block -getBlockNumber(); +getBlockNumber() ``` Next, run the code: @@ -257,7 +253,8 @@ Block number: 0x61fc48 :::tip This script: -1. Generates a JWT with a 1 hour expiry that is only valid on `infura.io`. + +1. Generates a JWT with a 1-hour expiry that is only valid on `infura.io`. 2. Applies this JWT to form the header of a `getBlockNumber` call. 3. Submits the API call. @@ -276,44 +273,40 @@ touch curl.js Add the following to `curl.js`: ```javascript title="curl.js" -require("dotenv").config(); -const jwt = require("jsonwebtoken"); -const fs = require("fs"); +require('dotenv').config() +const jwt = require('jsonwebtoken') +const fs = require('fs') function getAlgorithm(privateKey) { - if (privateKey.includes("BEGIN RSA PRIVATE KEY") || privateKey.includes("BEGIN PRIVATE KEY")) { - return "RS256"; - } else if (privateKey.includes("BEGIN EC PRIVATE KEY")) { - return "ES256"; + if (privateKey.includes('BEGIN RSA PRIVATE KEY') || privateKey.includes('BEGIN PRIVATE KEY')) { + return 'RS256' + } else if (privateKey.includes('BEGIN EC PRIVATE KEY')) { + return 'ES256' } else { - throw new Error("Unsupported key type"); + throw new Error('Unsupported key type') } } // Function to generate the JWT function generateJWT() { - const privateKey = fs.readFileSync("private_key.pem", "utf8"); - const algorithm = getAlgorithm(privateKey); - const token = jwt.sign( - {}, - privateKey, - { - algorithm: algorithm, // Dynamically set the algorithm based on the key type - keyid: process.env.JWT_KEY_ID, - audience: "infura.io", - expiresIn: "1h", - header: { - typ: "JWT" - } - } - ); - return token; + const privateKey = fs.readFileSync('private_key.pem', 'utf8') + const algorithm = getAlgorithm(privateKey) + const token = jwt.sign({}, privateKey, { + algorithm: algorithm, // Dynamically set the algorithm based on the key type + keyid: process.env.JWT_KEY_ID, + audience: 'infura.io', + expiresIn: '1h', + header: { + typ: 'JWT', + }, + }) + return token } // Generate the JWT and print the curl command async function printCurlRequest() { - const jwtToken = generateJWT(); - console.log("Generated JWT:", jwtToken); + const jwtToken = generateJWT() + console.log('Generated JWT:', jwtToken) const curlRequest = ` curl -X POST ${process.env.INFURA_NETWORK_URL}${process.env.INFURA_API_KEY} \\ -H "Authorization: Bearer ${jwtToken}" \\ @@ -324,13 +317,13 @@ async function printCurlRequest() { "params": [], "id": 1 }' - `; - console.log("Equivalent curl request:"); - console.log(curlRequest); + ` + console.log('Equivalent curl request:') + console.log(curlRequest) } // Call the function to print the curl request -printCurlRequest(); +printCurlRequest() ``` Next, run the code: @@ -364,9 +357,8 @@ You can run this request yourself to make the call. Your console outputs the res Consider following these next steps: - [Configure your JWT](../../how-to/json-web-token-jwt.md) to control its scope. - - Decode your JWT: Copy the JWT provided in the console by the [optional curl equivalent step](#optional-examine-the-curl-equivalent), and paste it into the **Encoded** field in [jwt.io](https://jwt.io/). -- Add a layer of verification to your call by applying the JWT's **FINGERPRINT** provided in the Infura dashboard. +- Add a layer of verification to your call by applying the JWT's **FINGERPRINT** provided in the Infura dashboard. :::note diff --git a/services/tutorials/ethereum/call-a-contract.md b/services/tutorials/ethereum/call-a-contract.md index 26aedcae07e..abfc4d1606c 100644 --- a/services/tutorials/ethereum/call-a-contract.md +++ b/services/tutorials/ethereum/call-a-contract.md @@ -20,25 +20,21 @@ In the `deployContract` folder created [earlier](deploy-a-contract-using-web3.js In this example we'll create the `call.js` file with the following contents: ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') // Loading the contract ABI // (the results of a previous compilation step) -const fs = require("fs") -const { abi } = JSON.parse(fs.readFileSync("Demo.json")) +const fs = require('fs') +const { abi } = JSON.parse(fs.readFileSync('Demo.json')) async function main() { // Configuring the connection to an Ethereum node const network = process.env.ETHEREUM_NETWORK const web3 = new Web3( - new Web3.providers.HttpProvider( - `https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}` - ) + new Web3.providers.HttpProvider(`https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}`) ) // Creating a signing account from a private key - const signer = web3.eth.accounts.privateKeyToAccount( - "0x" + process.env.SIGNER_PRIVATE_KEY - ) + const signer = web3.eth.accounts.privateKeyToAccount('0x' + process.env.SIGNER_PRIVATE_KEY) web3.eth.accounts.wallet.add(signer) // Creating a Contract instance const contract = new web3.eth.Contract( @@ -47,25 +43,22 @@ async function main() { process.env.DEMO_CONTRACT ) // Issuing a transaction that calls the `echo` method - const method_abi = contract.methods.echo("Hello, world!").encodeABI() + const method_abi = contract.methods.echo('Hello, world!').encodeABI() const tx = { from: signer.address, to: contract.options.address, data: method_abi, - value: "0", - gasPrice: "100000000000", + value: '0', + gasPrice: '100000000000', } const gas_estimate = await web3.eth.estimateGas(tx) tx.gas = gas_estimate - const signedTx = await web3.eth.accounts.signTransaction( - tx, - signer.privateKey - ) - console.log("Raw transaction data: " + signedTx.rawTransaction) + const signedTx = await web3.eth.accounts.signTransaction(tx, signer.privateKey) + console.log('Raw transaction data: ' + signedTx.rawTransaction) // Sending the transaction to the network const receipt = await web3.eth .sendSignedTransaction(signedTx.rawTransaction) - .once("transactionHash", (txhash) => { + .once('transactionHash', txhash => { console.log(`Mining transaction ...`) console.log(`https://${network}.etherscan.io/tx/${txhash}`) }) @@ -73,7 +66,7 @@ async function main() { console.log(`Mined in block ${receipt.blockNumber}`) } -require("dotenv").config() +require('dotenv').config() main() ``` diff --git a/services/tutorials/ethereum/deploy-a-contract-using-web3.js.md b/services/tutorials/ethereum/deploy-a-contract-using-web3.js.md index 6eabf1530a8..1b3675dffd5 100644 --- a/services/tutorials/ethereum/deploy-a-contract-using-web3.js.md +++ b/services/tutorials/ethereum/deploy-a-contract-using-web3.js.md @@ -23,7 +23,7 @@ You can use [MetaMask](https://metamask.io) or similar to create an Ethereum acc ### 1. Fund your Ethereum account -[Use the Infura faucet to load testnet ETH](https://www.infura.io/faucet) on your Ethereum account for the Sepolia network. +[Use the MetaMask faucet to load testnet ETH](/developer-tools/faucet) on your Ethereum account for the Sepolia network. If using a network other than Sepolia, ensure you [update your environment file](deploy-a-contract-using-web3.js.md#10-update-the-env-file) with the network name. @@ -126,25 +126,25 @@ You can compile the smart contract using the [`solc` command line options](https Create a file called `compile.js` with the following content: ```javascript -const fs = require("fs").promises -const solc = require("solc") +const fs = require('fs').promises +const solc = require('solc') async function main() { // Load the contract source code - const sourceCode = await fs.readFile("Demo.sol", "utf8") + const sourceCode = await fs.readFile('Demo.sol', 'utf8') // Compile the source code and retrieve the ABI and Bytecode - const { abi, bytecode } = compile(sourceCode, "Demo") + const { abi, bytecode } = compile(sourceCode, 'Demo') // Store the ABI and Bytecode into a JSON file const artifact = JSON.stringify({ abi, bytecode }, null, 2) - await fs.writeFile("Demo.json", artifact) + await fs.writeFile('Demo.json', artifact) } function compile(sourceCode, contractName) { // Create the Solidity Compiler Standard Input and Output JSON const input = { - language: "Solidity", + language: 'Solidity', sources: { main: { content: sourceCode } }, - settings: { outputSelection: { "*": { "*": ["abi", "evm.bytecode"] } } }, + settings: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } }, } // Parse the compiler output to retrieve the ABI and Bytecode const output = solc.compile(JSON.stringify(input)) @@ -175,25 +175,21 @@ A file called `Demo.json` should be created in the directory. Next, we'll create a deployment script called `deploy.js`. The script uses the Web3 methods to sign the transaction and deploy the smart contract to the network. ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') // Loading the contract ABI and Bytecode // (the results of a previous compilation step) -const fs = require("fs") -const { abi, bytecode } = JSON.parse(fs.readFileSync("Demo.json")) +const fs = require('fs') +const { abi, bytecode } = JSON.parse(fs.readFileSync('Demo.json')) async function main() { // Configuring the connection to an Ethereum node const network = process.env.ETHEREUM_NETWORK const web3 = new Web3( - new Web3.providers.HttpProvider( - `https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}` - ) + new Web3.providers.HttpProvider(`https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}`) ) // Creating a signing account from a private key - const signer = web3.eth.accounts.privateKeyToAccount( - "0x" + process.env.SIGNER_PRIVATE_KEY - ) + const signer = web3.eth.accounts.privateKeyToAccount('0x' + process.env.SIGNER_PRIVATE_KEY) web3.eth.accounts.wallet.add(signer) // Using the signing account to deploy the contract @@ -205,18 +201,18 @@ async function main() { from: signer.address, gas: await deployTx.estimateGas(), }) - .once("transactionHash", (txhash) => { + .once('transactionHash', txhash => { console.log(`Mining deployment transaction ...`) console.log(`https://${network}.etherscan.io/tx/${txhash}`) }) // The contract is now deployed on chain! console.log(`Contract deployed at ${deployedContract.options.address}`) console.log( - `Add DEMO_CONTRACT to the.env file to store the contract address: ${deployedContract.options.address}` + `Add DEMO_CONTRACT to the .env file to store the contract address: ${deployedContract.options.address}` ) } -require("dotenv").config() +require('dotenv').config() main() ``` diff --git a/services/tutorials/ethereum/monitor-transfers-using-python.md b/services/tutorials/ethereum/monitor-transfers-using-python.md index 3f28582e461..0a315257f44 100644 --- a/services/tutorials/ethereum/monitor-transfers-using-python.md +++ b/services/tutorials/ethereum/monitor-transfers-using-python.md @@ -65,7 +65,7 @@ Replace `` with your Infura API key and `` wi ### 5. Set the function -Create a function to check new transactions for the account defined in [step 3](monitor-transfers-using-python.md#3.-create-a-script-file) and retrieves the details for the transaction: +Create a function to check new transactions for the account defined in [step 3](#3-create-a-script-file) and retrieves the details for the transaction: ```python def watch(): @@ -83,7 +83,7 @@ def watch(): print({ "hash": tx_hash, "from": tx["from"], - "value": web3.fromWei(tx["value"], "ether") + "value": web3.from_wei(tx["value"], "ether") }) time.sleep(5) @@ -92,7 +92,7 @@ watch() ### 6. Check for confirmations -Exchanges often wait until a deposit has reached a certain number of confirmations before processing the new transaction. The number of confirmations is the number of blocks that have passed since the transaction was included on-chain. By checking that a transaction has reached the specified number of confirmations, the exchange can be confident that this transaction is final and they can process the deposit. +Exchanges often wait until a deposit has reached a certain number of confirmations before processing the new transaction. The number of confirmations is the number of blocks that have passed since the transaction was included onchain. By checking that a transaction has reached the specified number of confirmations, the exchange can be confident that this transaction is final and they can process the deposit. Create a function to determine the number of confirmations for the transaction: diff --git a/services/tutorials/ethereum/retrieve-and-display-erc-721-and-erc-1155-tokens.md b/services/tutorials/ethereum/retrieve-and-display-erc-721-and-erc-1155-tokens.md index 2b3cf679157..3b22ad6e0e7 100644 --- a/services/tutorials/ethereum/retrieve-and-display-erc-721-and-erc-1155-tokens.md +++ b/services/tutorials/ethereum/retrieve-and-display-erc-721-and-erc-1155-tokens.md @@ -47,13 +47,13 @@ This example has been written for web3js v4.x. It may not work for earlier versi ### 3. Set up the script -Create a file called `retrieveBalance.js`. At the top of file, add the following lines to import the web3.js library and connect to the Infura HTTPS endpoint: +Create a file called `retrieveBalance.js`. At the top of the file, add the following lines to import the web3.js library and connect to the Infura HTTPS endpoint: ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') const web3 = new Web3( - new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/") + new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/') ) ``` @@ -61,9 +61,9 @@ Replace `` with your Infura API key. ### 4. Set the ABI -For ERC-721 NFTs, use the `tokenURI` function, which is part of the ERC-721 standard. This function retrieves a token’s metadata so you can view it. For ERC-1155, use the `uri` method. +For ERC-721 NFTs, use the `tokenURI` function, which is part of the ERC-721 standard. This function retrieves a token's metadata so you can view it. For ERC-1155, use the `uri` method. -Note the `tokenURI` and `uri` methods are optional for contracts. However, these methods are the only standardized on-chain way of seeing NFT metadata without using a third-party API. +Note the `tokenURI` and `uri` methods are optional for contracts. However, these methods are the only standardized onchain way of seeing NFT metadata without using a third-party API. Define the ABI for the respective method by adding the following to the script: @@ -75,21 +75,21 @@ const tokenURIABI = [ { inputs: [ { - internalType: "uint256", - name: "tokenId", - type: "uint256", + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', }, ], - name: "tokenURI", + name: 'tokenURI', outputs: [ { - internalType: "string", - name: "", - type: "string", + internalType: 'string', + name: '', + type: 'string', }, ], - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] ``` @@ -103,22 +103,22 @@ const uriABI = [ constant: true, inputs: [ { - internalType: "uint256", - name: "_id", - type: "uint256", + internalType: 'uint256', + name: '_id', + type: 'uint256', }, ], - name: "uri", + name: 'uri', outputs: [ { - internalType: "string", - name: "", - type: "string", + internalType: 'string', + name: '', + type: 'string', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] ``` @@ -134,7 +134,7 @@ Define the ABI for the respective method by adding the following to the script: ```javascript -const tokenContract = "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" +const tokenContract = '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d' const tokenId = 101 ``` @@ -142,7 +142,7 @@ const tokenId = 101 ```javascript -const tokenContract = "0x76be3b62873462d2142405439777e971754e8e77" +const tokenContract = '0x76be3b62873462d2142405439777e971754e8e77' const tokenId = 10570 ``` @@ -218,8 +218,8 @@ In the script, add a function to combine the IPFS hash and your Infura subdomain ```javascript function addIPFSProxy(ipfsHash) { - const URL = "https://.infura-ipfs.io/ipfs/" - const hash = ipfsHash.replace(/^ipfs?:\/\//, "") + const URL = 'https://.infura-ipfs.io/ipfs/' + const hash = ipfsHash.replace(/^ipfs?:\/\//, '') const ipfsURL = URL + hash console.log(ipfsURL) // https://.infura-ipfs.io/ipfs/ @@ -270,36 +270,36 @@ Note some ERC-721 contracts return a regular HTTP URL, while some ERC-1155 contr ```js -const fetch = require("node-fetch") -const { Web3 } = require("web3") +const fetch = require('node-fetch') +const { Web3 } = require('web3') const web3 = new Web3( - new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/") + new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/') ) const tokenURIABI = [ { inputs: [ { - internalType: "uint256", - name: "tokenId", - type: "uint256", + internalType: 'uint256', + name: 'tokenId', + type: 'uint256', }, ], - name: "tokenURI", + name: 'tokenURI', outputs: [ { - internalType: "string", - name: "", - type: "string", + internalType: 'string', + name: '', + type: 'string', }, ], - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] -const tokenContract = "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" // BAYC contract address +const tokenContract = '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d' // BAYC contract address const tokenId = 101 // A token we'd like to retrieve its metadata of const contract = new web3.eth.Contract(tokenURIABI, tokenContract) @@ -321,8 +321,8 @@ async function getNFTMetadata() { getNFTMetadata() function addIPFSProxy(ipfsHash) { - const URL = "https://.infura-ipfs.io/ipfs/" - const hash = ipfsHash.replace(/^ipfs?:\/\//, "") + const URL = 'https://.infura-ipfs.io/ipfs/' + const hash = ipfsHash.replace(/^ipfs?:\/\//, '') const ipfsURL = URL + hash console.log(ipfsURL) // https://.infura-ipfs.io/ipfs/ @@ -334,10 +334,10 @@ function addIPFSProxy(ipfsHash) { ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') const web3 = new Web3( - new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/") + new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/') ) const uriABI = [ @@ -345,26 +345,26 @@ const uriABI = [ constant: true, inputs: [ { - internalType: "uint256", - name: "_id", - type: "uint256", + internalType: 'uint256', + name: '_id', + type: 'uint256', }, ], - name: "uri", + name: 'uri', outputs: [ { - internalType: "string", - name: "", - type: "string", + internalType: 'string', + name: '', + type: 'string', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] -const tokenContract = "0x76be3b62873462d2142405439777e971754e8e77" // Parallel contract address +const tokenContract = '0x76be3b62873462d2142405439777e971754e8e77' // Parallel contract address const tokenId = 10570 // A token we'd like to retrieve its metadata of const contract = new web3.eth.Contract(uriABI, tokenContract) diff --git a/services/tutorials/ethereum/retrieve-the-balance-of-an-erc-20-token.md b/services/tutorials/ethereum/retrieve-the-balance-of-an-erc-20-token.md index 584abde2883..c125e78dfc2 100644 --- a/services/tutorials/ethereum/retrieve-the-balance-of-an-erc-20-token.md +++ b/services/tutorials/ethereum/retrieve-the-balance-of-an-erc-20-token.md @@ -41,12 +41,12 @@ npm install web3 ### 3. Set up the script -Create a file called `retrieveBalance.js`. At the top of file, add the following lines to import the web3.js library and connect to the Infura HTTPS endpoint: +Create a file called `retrieveBalance.js`. At the top of the file, add the following lines to import the web3.js library and connect to the Infura HTTPS endpoint: ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') const web3 = new Web3( - new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/") + new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/') ) ``` @@ -54,7 +54,7 @@ Make sure to replace `` with your Infura API key. ### 4. Set the ABI -You'll only use the `balanceOf` method, so you don’t need the entire ABI for ERC-20 smart contracts. In the `retrieveBalance.js` file, define the ABI for the `balanceOf` method by adding the following to the script: +You'll only use the `balanceOf` method, so you don't need the entire ABI for ERC-20 smart contracts. In the `retrieveBalance.js` file, define the ABI for the `balanceOf` method by adding the following to the script: ```javascript const balanceOfABI = [ @@ -62,20 +62,20 @@ const balanceOfABI = [ constant: true, inputs: [ { - name: "_owner", - type: "address", + name: '_owner', + type: 'address', }, ], - name: "balanceOf", + name: 'balanceOf', outputs: [ { - name: "balance", - type: "uint256", + name: 'balance', + type: 'uint256', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] ``` @@ -93,8 +93,8 @@ This example uses a DAI token contract. However, you can use any ERC-20 token co Define the addresses to use in the `retrieveBalance.js` script: ```javascript -const tokenContract = "0x6b175474e89094c44da98b954eedeac495271d0f" -const tokenHolder = "0xf326e4de8f66a0bdc0970b79e0924e33c79f1915" +const tokenContract = '0x6b175474e89094c44da98b954eedeac495271d0f' +const tokenHolder = '0xf326e4de8f66a0bdc0970b79e0924e33c79f1915' ``` Define `contract` using `web3.eth.Contract()`, passing the `balanceOfABI` and the token contract address `tokenContract` as parameters: @@ -109,21 +109,21 @@ Create the below `async` function `getTokenBalance` that accomplishes this by in ```javascript async function getTokenBalance() { - const result = await.contract.methods.balanceOf(tokenHolder).call(); + const result = await contract.methods.balanceOf(tokenHolder).call() console.log(result) } -getTokenBalance(); +getTokenBalance() ``` ### 7. Convert the token units -By default, calling `balanceOf` returns the balance value in `wei`, which is the smallest unit in Ethereum, equal to 0.000000000000000001 Ether (10-18). +By default, calling `balanceOf` returns the balance value in wei, which is the smallest unit in Ethereum, equal to 0.000000000000000001 Ether. Use `web3.utils.fromWei(result, "ether")` to get the actual number of DAI tokens, by adding the following line to the `async` function: ```javascript -const formattedResult = web3.utils.fromWei(result, "ether") +const formattedResult = web3.utils.fromWei(result, 'ether') ``` Also, update your `console.log(format)`: @@ -139,9 +139,9 @@ console.log(formattedResult) Here is the complete code for `retrieveBalance.js`. Before running it make sure you replace `` with your Infura API key. ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') const web3 = new Web3( - new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/") + new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/') ) const balanceOfABI = [ @@ -149,32 +149,32 @@ const balanceOfABI = [ constant: true, inputs: [ { - name: "_owner", - type: "address", + name: '_owner', + type: 'address', }, ], - name: "balanceOf", + name: 'balanceOf', outputs: [ { - name: "balance", - type: "uint256", + name: 'balance', + type: 'uint256', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] // DAI token contract -const tokenContract = "0x6B175474E89094C44Da98b954EedeAC495271d0F" +const tokenContract = '0x6B175474E89094C44Da98b954EedeAC495271d0F' // A DAI token holder -const tokenHolder = "0x075e72a5eDf65F0A5f44699c7654C1a76941Ddc8" +const tokenHolder = '0x075e72a5eDf65F0A5f44699c7654C1a76941Ddc8' const contract = new web3.eth.Contract(balanceOfABI, tokenContract) async function getTokenBalance() { const result = await contract.methods.balanceOf(tokenHolder).call() - const formattedResult = web3.utils.fromWei(result, "ether") + const formattedResult = web3.utils.fromWei(result, 'ether') console.log(formattedResult) } diff --git a/services/tutorials/ethereum/send-a-transaction/_category_.json b/services/tutorials/ethereum/send-a-transaction/_category_.json index bef04a26aae..c2ab8ffa8c5 100644 --- a/services/tutorials/ethereum/send-a-transaction/_category_.json +++ b/services/tutorials/ethereum/send-a-transaction/_category_.json @@ -2,10 +2,5 @@ "label": "Send transactions", "collapsible": true, "collapsed": true, - "position": 11, - "link": { - "type": "generated-index", - "slug": "tutorials/ethereum/send-a-transaction", - "description": "These tutorials use various Web3 libraries to send transactions on the Ethereum testnet." - } + "position": 11 } diff --git a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-ethers.md b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-ethers.md index 050765408e0..b69a62f9eec 100644 --- a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-ethers.md +++ b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-ethers.md @@ -24,24 +24,13 @@ Use [MetaMask](https://metamask.io) or similar to create an Ethereum account for ### 1. Select your network and verify funds - - - -To use the Sepolia testnet, ensure that your account has Sepolia ETH. -You can use the [Infura faucet](https://www.infura.io/faucet) to add more funds. - - - - -To use an alternative network, ensure that your account has testnet ETH for that network. - -:::info note -When using an alternative network, you'll update your `.env` file in -[Step 4](#4-create-a-env-file) with the alternative network name. -::: - - - +- **Sepolia** - To use the Sepolia testnet, ensure that your account has Sepolia ETH. + You can use the [MetaMask faucet](/developer-tools/faucet) to add more funds. +- **Alternative network** - To use an alternative network, ensure that your account has testnet ETH for that network. + :::info note + When using an alternative network, you'll update your `.env` file in + [Step 4](#4-create-a-env-file) with the alternative network name. + ::: ### 2. Create a project directory @@ -69,7 +58,6 @@ The [`dotenv`](../../../how-to/javascript-dotenv.md) package allows you to use a Install the `ethers` package: - ```bash npm install --save ethers ``` @@ -109,7 +97,7 @@ Replace the following values in the `.env` file: - `` with `sepolia` or the alternative network you are using. - `` with your API key of the web3 project. -- `` with the [private key of your Ethereum account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). A transaction must be signed with the sender's private key. Make sure that you prefix the `SIGNER_PRIVATE_KEY` value with `0x`. The private key you export from MetaMask isn't prefixed with `0x`. +- `` with the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). A transaction must be signed with the sender's private key. Make sure that you prefix the `SIGNER_PRIVATE_KEY` value with `0x`. The private key you export from MetaMask isn't prefixed with `0x`. :::danger @@ -128,30 +116,29 @@ To send test ETH to an account of your choice, update line 15 with your selected ::: ```javascript title="eip1559_tx.js" showLineNumbers {15} -const { ethers, parseUnits } = require("ethers"); - - async function main() { - // Configuring the connection to an Ethereum node - const network = process.env.ETHEREUM_NETWORK; - const provider = new ethers.InfuraProvider( - network, - process.env.INFURA_API_KEY - ); - // Creating a signing account from a private key - const signer = new ethers.Wallet(process.env.SIGNER_PRIVATE_KEY).connect(provider); - - // Creating and sending the transaction object - const tx = await signer.sendTransaction({ - to: "0x618917c657e9F5b346c0141CB14F5D3CED65D449", // Replace with your selected account - value: parseUnits("0.001", "ether"), - }); - console.log("Mining transaction..."); - console.log(`https://${network}.etherscan.io/tx/${tx.hash}`); - // Waiting for the transaction to be mined - const receipt = await tx.wait(); - // The transaction is now on chain! - console.log(`Mined in block ${receipt.blockNumber}`); - } +const { ethers, parseUnits } = require('ethers') + +async function main() { + // Configuring the connection to an Ethereum node + const network = process.env.ETHEREUM_NETWORK + const provider = new ethers.InfuraProvider(network, process.env.INFURA_API_KEY) + // Creating a signing account from a private key + const signer = new ethers.Wallet(process.env.SIGNER_PRIVATE_KEY).connect(provider) + + // Creating and sending the transaction object + const tx = await signer.sendTransaction({ + to: '0x618917c657e9F5b346c0141CB14F5D3CED65D449', // Replace with your selected account + value: parseUnits('0.001', 'ether'), + }) + console.log('Mining transaction...') + console.log(`https://${network}.etherscan.io/tx/${tx.hash}`) + // Waiting for the transaction to be mined + const receipt = await tx.wait() + // The transaction is now on chain! + console.log(`Mined in block ${receipt.blockNumber}`) +} + +main() ``` ### 6. Execute the transaction @@ -177,19 +164,21 @@ You can search for the transaction on a block explorer such as [Sepolia Ethersca To change default values, update the `signer.sendTransaction` method to include an `estimateGas` result: ```javascript title="eip1559_tx.js" -const limit = provider.estimateGas({ +const { ethers, parseUnits } = require('ethers') + +const limit = await provider.estimateGas({ from: signer.address, - to: "", - value: ethers.utils.parseUnits("0.001", "ether"), -}); + to: '', + value: parseUnits('0.001', 'ether'), +}) // Creating and sending the transaction object const tx = await signer.sendTransaction({ - to: "", - value: ethers.utils.parseUnits("0.001", "ether"), + to: '', + value: parseUnits('0.001', 'ether'), gasLimit: limit, - nonce: signer.getTransactionCount(), - maxPriorityFeePerGas: ethers.utils.parseUnits("2", "gwei"), - chainId: 3, -}); + nonce: await signer.getTransactionCount(), + maxPriorityFeePerGas: parseUnits('2', 'gwei'), + chainId: 11155111, // Sepolia +}) ``` diff --git a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-go.md b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-go.md index 986c1d4b9c5..95effc30629 100644 --- a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-go.md +++ b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-go.md @@ -128,8 +128,8 @@ func main() { Replace the following values in the script: -- `` with the Infura API key. -- `` with the [private key of your Ethereum account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). +- `` with the Infura API key. +- `` with the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). - `` with the address of the recipient of funds. If using a different Ethereum network, update the URL in the script. diff --git a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-py.md b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-py.md index 8d99a303801..b826c631a50 100644 --- a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-py.md +++ b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-py.md @@ -33,7 +33,7 @@ mkdir infura cd infura ``` -### 2. install the dependencies +### 2. Install the dependencies ```bash pip install web3 @@ -51,7 +51,7 @@ Create a `.env` file in your project directory to store the private key of your PRIVATE_KEY = ``` -Find out how to access the [private key of your Ethereum account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). Make sure that you prefix the `` value with `0x`. The +Find out how to access the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). Make sure that you prefix the `` value with `0x`. The private key you export from MetaMask will not be prefixed with `0x`. :::danger diff --git a/services/tutorials/ethereum/send-a-transaction/send-a-transaction-viem.md b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-viem.md new file mode 100644 index 00000000000..a4c36d973df --- /dev/null +++ b/services/tutorials/ethereum/send-a-transaction/send-a-transaction-viem.md @@ -0,0 +1,227 @@ +--- +description: Send a transaction using Viem. +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Use Viem + +In this tutorial, you'll send a transaction of 0.001 ETH from one account to another using the [Viem](https://viem.sh/) +TypeScript library. + +## Prerequisites + +- [Node.js](https://nodejs.org/en/download/) +- [Install TypeScript](https://www.typescriptlang.org/download/) +- [Install `ts-node`](https://www.npmjs.com/package/ts-node) +- An Ethereum account + +:::info +Use [MetaMask](https://metamask.io/) or similar to create an Ethereum account for testing. +::: + +## Steps + +### 1. Select your network and verify funds + +- **Sepolia** - To use the Sepolia testnet, ensure that your account has Sepolia ETH. + You can use the [MetaMask faucet](/developer-tools/faucet) to add more funds. +- **Alternative network** - To use an alternative network, ensure that your account has testnet ETH + for that network. + + :::note + When using an alternative network, update the chain name in the script (in Step 6) with the + alternative network name from the [Viem supported chains list](https://github.com/wevm/viem/blob/main/src/chains/index.ts). + ::: + +### 2. Create a project directory + +Create a new directory for your project using the command line: + +```bash +mkdir infura +``` + +Change into the new directory: + +```bash +cd infura +``` + +### 3. Initialize the project + +Create a `package.json` file with default values: + +```bash +npm init -y +``` + +Generate a `tsconfig.json` file, which is used to configure TypeScript compiler options: + +```bash +tsc --init --resolveJsonModule true +``` + +### 4. Install the required packages + +Install the required packages in the project directory. + +```bash +npm i viem +``` + +```bash +npm install -D tslib @types/node +``` + +### 5. Create a `config.ts` file + +Create a `config.ts` file in your project directory to store the private key of the sending account: + + + + +```tsx title="config.ts" +import { privateKeyToAccount } from 'viem/accounts' +export const account = privateKeyToAccount('') +``` + + + + +```tsx title="config.ts" +import { privateKeyToAccount } from 'viem/accounts' +export const account = privateKeyToAccount('0x561...x...61df') +``` + + + + +In the `config.ts` file, replace `` with the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). +A transaction must be signed with the sender's private key. Make sure that you prefix the private key +value with `0x`. The private key you export from MetaMask isn't prefixed with `0x`. + +:::danger +Never disclose your private key. Anyone with your private keys can steal the assets controlled by those keys. +::: + +### 6. Create a `sendTransaction.ts` file + +In the project directory, create a `sendTransaction.ts` file, which configures and sends the transaction. For example: + +```tsx +import { http, createWalletClient, parseEther } from 'viem' +import { sepolia } from 'viem/chains' +import { account } from './config' + +// Create a wallet client to interact with Ethereum accounts. +const walletClient = createWalletClient({ + chain: sepolia, + transport: http('https://sepolia.infura.io/v3/'), +}) + +async function sendTx() { + // Create and send the transaction object. + const hash = await walletClient.sendTransaction({ + account, + to: '0xc2CB3fb3924b8DE3A63C1da570a8dBaf2a533eA7', + value: parseEther('0.001'), + }) + + console.log('Mining transaction... ') + console.log(`Tx mined in https://sepolia.etherscan.io/tx/${hash}`) +} + +sendTx() +``` + +In the `sendTransaction.ts` file: + +- Update the `chain` name if you're using an alternative network. +- Replace `` with your Infura API key. +- Update the `to` account in the code if you wish to send test ETH to an account of your choice. + +### 7. Execute the transaction + +To execute the transaction, run: + +```bash +ts-node sendTransaction.ts +``` + +:::note +`ts-node` is a TypeScript execution engine for Node.js. It allows you to run TypeScript files without +manually compiling them into JavaScript first. +::: + +An alternative way to execute your transaction using Node.js is to compile your `sendTransaction.ts` file to JavaScript +first, and then run the compiled JavaScript file: + +```jsx +tsc sendTransaction.ts +node sendTransaction.js +``` + +You can also run the TypeScript file, `sendTransaction.ts`, directly from your code development environment (such as +VS Code) without using `ts-node` or pre-compiling to JavaScript. +The following is an example output: + +```bash +Mining transaction... +Tx mined https://sepolia.etherscan.io/tx/0x310588719e733118f50c0a1608e13b4e8bd5eb5891d546d89795c2041833abb6 +``` + +You can search for the transaction on a block explorer such as [Sepolia Etherscan](https://sepolia.etherscan.io/). + +### 8. (Optional) Fine tune the transaction details + +Viem automatically determines the gas limit and fees. If you want to change the default values, update +the `sendTransaction` method to include an `estimateGas` result (`gasLimit`) and the `maxFeePerGas` and +`maxPriorityFeePerGas` parameters. + +To do this you will also need to declare an `httpClient` to interface with JSON-RPC methods like `eth_estimateGas`. + +The following is a full code overview: + +```tsx +import { http, createWalletClient, createPublicClient, parseEther, parseGwei } from 'viem' +import { sepolia } from 'viem/chains' +import { account } from './config' + +// Create a wallet client to interact with Ethereum accounts. +const walletClient = createWalletClient({ + chain: sepolia, + transport: http('https://sepolia.infura.io/v3/'), +}) + +// Create a public client to interact with JSON-RPC API methods. +const httpClient = createPublicClient({ + chain: sepolia, + transport: http('https://sepolia.infura.io/v3/'), +}) + +async function sendTx() { + // Estimate gas limit. + const limit = await httpClient.estimateGas({ + account, + to: '0xc2CB3fb3924b8DE3A63C1da570a8dBaf2a533eA7', + value: parseEther('0.001'), + }) + + // Create and send the transaction object. + const hash = await walletClient.sendTransaction({ + account, + to: '0xc2CB3fb3924b8DE3A63C1da570a8dBaf2a533eA7', + value: parseEther('0.001'), + maxFeePerGas: parseGwei('20'), + maxPriorityFeePerGas: parseGwei('2'), + gas: limit, + }) + + console.log('Mining transaction... ') + console.log(`Tx: https://sepolia.etherscan.io/tx/${hash}`) +} + +sendTx() +``` diff --git a/services/tutorials/ethereum/send-a-transaction/use-ethers.js-infuraprovider-or-web3provider.md b/services/tutorials/ethereum/send-a-transaction/use-ethers.js-infuraprovider-or-web3provider.md index 5744316b2b7..161c69f24e0 100644 --- a/services/tutorials/ethereum/send-a-transaction/use-ethers.js-infuraprovider-or-web3provider.md +++ b/services/tutorials/ethereum/send-a-transaction/use-ethers.js-infuraprovider-or-web3provider.md @@ -2,21 +2,23 @@ description: Use the Ethers InfuraProvider and Web3Provider methods. --- -# Use ethers.js InfuraProvider or Web3Provider +# Use Ethers.js `InfuraProvider` or `Web3Provider` -In this tutorial, we'll create a simple React app to show the differences between using the ethers.js library's `InfuraProvider` and `Web3Provider` methods to send a transaction. +In this tutorial, you'll create a simple React app to show the differences between using the +Ethers.js library's `InfuraProvider` and `Web3Provider` methods to send a transaction. -The key difference we'll highlight is that with Web3Provider you can load the private key from a Web3 wallet (MetaMask in this example), while InfuraProvider needs a wallet created locally with a stored private key. +The key difference is that with `Web3Provider`, you can load the private key from a web3 wallet +(for example, MetaMask), while `InfuraProvider` needs a wallet created locally with a stored private key. This tutorial uses the Sepolia testnet. ## Prerequisites - Install [MetaMask](https://metamask.io) and create an Ethereum account for testing purposes. -- Load Sepolia ETH into your wallet from the [Infura faucet](https://www.infura.io/faucet). -- [Node.js and NPM installed](https://nodejs.org/en/download/). +- Load Sepolia ETH into your wallet from the [MetaMask faucet](/developer-tools/faucet). +- [Node.js and npm installed](https://nodejs.org/en/download/). -You can run the following to confirm that Node and NPM are installed: +You can run the following to confirm that Node and npm are installed: ```bash node -v && npm -v @@ -32,7 +34,7 @@ This tutorial was tested using ethers v5.7.2 and Node.js v16.17.0. ### 1. Create the React app -In the terminal, run the following command to create an app called my-app: +In the terminal, run the following command to create an app called `my-app`: ```bash npx create-react-app my-app @@ -58,13 +60,13 @@ Create a `.env` file in your project directory to store the project and Ethereum ``` REACT_APP_API_KEY="" -REACT_APP_PRIVATE_KEY="" +REACT_APP_PRIVATE_KEY="" ``` Ensure you replace the following values in the `.env` file: - `` with the API key of the Ethereum project. -- `` with the [private key of your Ethereum account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). +- `` with the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). :::danger @@ -87,15 +89,15 @@ Import the required dependencies and create the providers for communicating with In the `src` directory open the `App.js` file. Remove the existing code and add the following code: ```javascript title="App.js" -import React, { useState } from "react" -import "./App.css" +import React, { useState } from 'react' +import './App.css' function App() { - const ethers = require("ethers") + const ethers = require('ethers') const API_KEY = process.env.REACT_APP_API_KEY const PRIVATE_KEY = process.env.REACT_APP_PRIVATE_KEY const provider_Metamask = new ethers.providers.Web3Provider(window.ethereum) - const infuraProvider = new ethers.providers.InfuraProvider("sepolia", API_KEY) + const infuraProvider = new ethers.providers.InfuraProvider('sepolia', API_KEY) } export default App ``` @@ -156,12 +158,12 @@ Create the code to retrieve the latest block number. Add the following code abov ```javascript // Get the latest block using the InfuraProvider or wallet const handleButton1 = async () => { - const latest_block = await infuraProvider.getBlockNumber("latest") + const latest_block = await infuraProvider.getBlockNumber('latest') setBlockNumber(latest_block) } const handleButton2 = async () => { - const latest_block = await provider_Metamask.getBlockNumber("latest") + const latest_block = await provider_Metamask.getBlockNumber('latest') setBlockNumber(latest_block) } ``` @@ -172,19 +174,19 @@ To send the transaction, you need the target address and the amount to send. Add ```javascript // Handle the form submissions to send the transactions -const handleSubmitWeb3 = async (e) => { +const handleSubmitWeb3 = async e => { e.preventDefault() const data = new FormData(e.target) - const address = data.get("address") - const amount = data.get("amount") + const address = data.get('address') + const amount = data.get('amount') sendTransaction(address, amount) } -const handleSubmitInfura = async (e) => { +const handleSubmitInfura = async e => { e.preventDefault() const data = new FormData(e.target) - const address = data.get("address") - const amount = data.get("amount") + const address = data.get('address') + const amount = data.get('amount') const signer = new ethers.Wallet(PRIVATE_KEY, infuraProvider) sendTransaction(address, amount, signer) } @@ -193,33 +195,32 @@ const handleSubmitInfura = async (e) => { Next, create the `sendTransaction()` function that sends the transaction. Place the following code below the two `handleSubmit` methods. ```javascript - // Send the transaction using either the Web3Provider or InfuraProvider - const sendTransaction = async (address, amount, signer=null) => { - if (signer==null){ // Web3 Provider - if (!window.ethereum) - console.error("No wallet found!"); - else { - await window.ethereum.send("eth_requestAccounts"); - const provider = new ethers.providers.Web3Provider(window.ethereum); - const signer = provider.getSigner(); - const tx = await signer.sendTransaction({ - to: address, - value: ethers.utils.parseEther(amount) - }); - console.log("tx", tx); - setTxSent("Transaction initiated! Tx hash: " + tx.hash); - } - } - else // InfuraProvider - { +// Send the transaction using either the Web3Provider or InfuraProvider +const sendTransaction = async (address, amount, signer = null) => { + if (signer == null) { + // Web3 Provider + if (!window.ethereum) console.error('No wallet found!') + else { + await window.ethereum.send('eth_requestAccounts') + const provider = new ethers.providers.Web3Provider(window.ethereum) + const signer = provider.getSigner() const tx = await signer.sendTransaction({ to: address, - value: ethers.utils.parseEther(amount) - }); - console.log("tx", tx); - setTxSentInfura("Transaction initiated! Tx hash: " + tx.hash); + value: ethers.utils.parseEther(amount), + }) + console.log('tx', tx) + setTxSent('Transaction initiated! Tx hash: ' + tx.hash) } + } // InfuraProvider + else { + const tx = await signer.sendTransaction({ + to: address, + value: ethers.utils.parseEther(amount), + }) + console.log('tx', tx) + setTxSentInfura('Transaction initiated! Tx hash: ' + tx.hash) } +} ``` ### 5. Run the app @@ -232,7 +233,7 @@ npm start :::warning -If you are using create-react-app version >=5 you may run into issues building, such as: +If you are using Create React App version >=5 you may run into issues building, such as: ``` Module not found: Error: Can't resolve 'crypto' in 'C:\Users\Username\Projects\testProject\client\node_modules\eth-lib\lib' @@ -241,7 +242,7 @@ BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules This is no longer the case. Verify if you need this module and configure a polyfill for it. ``` -This is because NodeJS polyfills are not included in the latest version of create-react-app. +This is because Node.js polyfills are not included in the latest version of Create React App. [Follow these instructions to resolve the issue](https://github.com/ChainSafe/web3.js#web3-and-create-react-app). @@ -249,26 +250,30 @@ This is because NodeJS polyfills are not included in the latest version of creat In the app, notice that when you try and send a transaction using Web3Provider, the app opens a MetaMask instance to transfer your funds. -![](../../../images/metamask.png) +

+ +

If you transfer funds using the InfuraProvider, then the funds are transferred directly from your app. -![](../../../images/app.png) +

+ +

## Complete code sample The complete code sample looks like this: ```javascript -import React, { useState } from "react" -import "./App.css" +import React, { useState } from 'react' +import './App.css' function App() { - const ethers = require("ethers") + const ethers = require('ethers') const API_KEY = process.env.REACT_APP_API_KEY const PRIVATE_KEY = process.env.REACT_APP_PRIVATE_KEY const provider_Metamask = new ethers.providers.Web3Provider(window.ethereum) - const infuraProvider = new ethers.providers.InfuraProvider("mainnet", API_KEY) + const infuraProvider = new ethers.providers.InfuraProvider('mainnet', API_KEY) // Use the useState hook function to add state variables to a functional component. const [blockNumber, setBlockNumber] = useState(null) @@ -277,29 +282,29 @@ function App() { // Get the latest block using the InfuraProvider or wallet const handleButton1 = async () => { - const latest_block = await infuraProvider.getBlockNumber("latest") + const latest_block = await infuraProvider.getBlockNumber('latest') setBlockNumber(latest_block) } const handleButton2 = async () => { - const latest_block = await provider_Metamask.getBlockNumber("latest") + const latest_block = await provider_Metamask.getBlockNumber('latest') setBlockNumber(latest_block) } // Handle the form submissions to send the transactions - const handleSubmitWeb3 = async (e) => { + const handleSubmitWeb3 = async e => { e.preventDefault() const data = new FormData(e.target) - const address = data.get("address") - const amount = data.get("amount") + const address = data.get('address') + const amount = data.get('amount') sendTransaction(address, amount) } - const handleSubmitInfura = async (e) => { + const handleSubmitInfura = async e => { e.preventDefault() const data = new FormData(e.target) - const address = data.get("address") - const amount = data.get("amount") + const address = data.get('address') + const amount = data.get('amount') const signer = new ethers.Wallet(PRIVATE_KEY, infuraProvider) sendTransaction(address, amount, signer) } @@ -308,17 +313,17 @@ function App() { const sendTransaction = async (address, amount, signer = null) => { if (signer == null) { // Web3 Provider - if (!window.ethereum) console.error("No wallet found!") + if (!window.ethereum) console.error('No wallet found!') else { - await window.ethereum.send("eth_requestAccounts") + await window.ethereum.send('eth_requestAccounts') const provider = new ethers.providers.Web3Provider(window.ethereum) const signer = provider.getSigner() const tx = await signer.sendTransaction({ to: address, value: ethers.utils.parseEther(amount), }) - console.log("tx", tx) - setTxSent("Transaction initiated! Tx hash: " + tx.hash) + console.log('tx', tx) + setTxSent('Transaction initiated! Tx hash: ' + tx.hash) } } // InfuraProvider else { @@ -326,8 +331,8 @@ function App() { to: address, value: ethers.utils.parseEther(amount), }) - console.log("tx", tx) - setTxSentInfura("Transaction initiated! Tx hash: " + tx.hash) + console.log('tx', tx) + setTxSentInfura('Transaction initiated! Tx hash: ' + tx.hash) } } diff --git a/services/tutorials/ethereum/send-a-transaction/use-rust.md b/services/tutorials/ethereum/send-a-transaction/use-rust.md index 995f53ad8a0..2b99f1df670 100644 --- a/services/tutorials/ethereum/send-a-transaction/use-rust.md +++ b/services/tutorials/ethereum/send-a-transaction/use-rust.md @@ -1,11 +1,11 @@ --- -title: "Use Rust" +title: 'Use Rust' description: A tutorial for legacy and EIP-1559 transactions. --- # Use Rust -In this two-part tutorial we'll use Rust and the [ethers-rs library](https://www.gakonst.com/ethers-rs/getting-started/intro.html) to: +In this two-part tutorial we'll use Rust and the [ethers-rs library](https://docs.rs/ethers/latest/ethers/) to: - Send a legacy transaction `("type":"0x0")` - Send an EIP-1559 transaction `("type":"0x2")` @@ -82,7 +82,7 @@ async fn main() -> Result<()> { // Define the signer. // Replace the SIGNER_PRIVATE_KEY with // the private key of your Ethereum account (without the 0x prefix). - // However, we recommended that you load it from + // However, we recommend that you load it from // an .env file or external vault. let wallet: LocalWallet = "SIGNER_PRIVATE_KEY" .parse::()? @@ -118,13 +118,13 @@ async fn main() -> Result<()> { Next, make the following updates to the above code: - On line 16 replace the `INFURA_API_KEY` with you API key from the - [Infura dashboard](../../../../../developer-tools/dashboard/get-started/create-api/). + [Infura dashboard](/developer-tools/dashboard/get-started/create-api). - On line 26 replace the `SIGNER_PRIVATE_KEY` with the private key of your Ethereum account. - On line 29, use a test address, such as [`0xAED01C776d98303eE080D25A21f0a42D94a86D9c`](https://sepolia.etherscan.io/address/0xaed01c776d98303ee080d25a21f0a42d94a86d9c). :::tip Secure your keys -To better secure your keys, follow the recommended approach described in the section [Create the .env file](../../../tutorials/ethereum/send-a-transaction/use-web3.js.md#4-create-the-env-file). +To better secure your keys, follow the recommended approach described in the section [Create the .env file](use-web3.js.md#4-create-a-env-file). ::: @@ -192,7 +192,7 @@ In the above transaction receipt, the transaction type shows `"type":"0x0"` indi ### 1. Modify the main code -To send an EIP-1559 transaction, i.e., of the `"type":"0x2"` you must use `Eip1559TransactionRequest` instead of `TransactionRequest` in the `main.rs` code. Replace the code in `main.rs` with the following code. +To send an EIP-1559 transaction, use `Eip1559TransactionRequest` instead of `TransactionRequest` in the `main.rs` code. Replace the code in `main.rs` with the following code. ```rust showLineNumbers use ethers::{ @@ -217,7 +217,7 @@ async fn main() -> Result<()> { // Define the signer. // Replace the SIGNER_PRIVATE_KEY with // the private key of your Ethereum account (without the 0x prefix). - // However, we recommended that you load it from + // However, we recommend that you load it from // an .env file or external vault. let wallet: LocalWallet = "SIGNER_PRIVATE_KEY" .parse::()? @@ -316,5 +316,5 @@ Tx receipt: } ``` -Ignore the `"warning: unused import: types::TransactionRequest"`. +Ignore the `"warning: unused import: types::TransactionRequest"`. In the above transaction receipt, the transaction type shows `"type":"0x2"` indicating that this was an EIP-1559 transaction. diff --git a/services/tutorials/ethereum/send-a-transaction/use-web3.js.md b/services/tutorials/ethereum/send-a-transaction/use-web3.js.md index 734c12ecad8..fcfab7e67e6 100644 --- a/services/tutorials/ethereum/send-a-transaction/use-web3.js.md +++ b/services/tutorials/ethereum/send-a-transaction/use-web3.js.md @@ -25,26 +25,14 @@ Use [MetaMask](https://metamask.io) or similar to create an Ethereum account for ### 1. Select your network and verify funds - - - -To use the Sepolia testnet, ensure that your account has Sepolia ETH. -You can use the [Infura faucet](https://www.infura.io/faucet) to add more funds. - - - - -To use an alternative network, ensure that your account has testnet ETH for that network. - -:::info note -When using an alternative network, you'll: - -- Update your `.env` file in [Step 4](#4-create-a-env-file) with the alternative network name. -- Update the `chaindId` in [Step 5](#5-create-a-sendjs-file) with the alternative network chain ID. -::: - - - +- **Sepolia** - To use the Sepolia testnet, ensure that your account has Sepolia ETH. + You can use the [MetaMask faucet](/developer-tools/faucet) to add more funds. +- **Alternative network** - To use an alternative network, ensure that your account has testnet ETH for that network. + :::info note + When using an alternative network, you'll: + - Update your `.env` file in [Step 4](#4-create-a-env-file) with the alternative network name. + - Update the `chaindId` in [Step 5](#5-create-a-sendjs-file) with the alternative network chain ID. + ::: ### 2. Create a project directory @@ -111,7 +99,7 @@ Replace the following values in the `.env` file: - `` with `sepolia` or the alternative network you are using. - `` with your API key of the web3 project. -- `` with the [private key of your Ethereum account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). A transaction must be signed with the sender's private key. Make sure that you prefix the `SIGNER_PRIVATE_KEY` value with `0x`. The private key you export from MetaMask isn't prefixed with `0x`. +- `` with the [private key of your Ethereum account](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/). A transaction must be signed with the sender's private key. Make sure that you prefix the `SIGNER_PRIVATE_KEY` value with `0x`. The private key you export from MetaMask isn't prefixed with `0x`. :::danger @@ -133,61 +121,57 @@ For example: ::: ```javascript title="send.js" showLineNumbers {20,39} -const { Web3 } = require("web3"); -const { ETH_DATA_FORMAT, DEFAULT_RETURN_FORMAT } = require("web3"); +const { Web3 } = require('web3') +const { ETH_DATA_FORMAT, DEFAULT_RETURN_FORMAT } = require('web3') async function main() { // Configuring the connection to an Ethereum node - const network = process.env.ETHEREUM_NETWORK; + const network = process.env.ETHEREUM_NETWORK const web3 = new Web3( - new Web3.providers.HttpProvider( - `https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}`, - ), - ); + new Web3.providers.HttpProvider(`https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}`) + ) // Creating a signing account from a private key - const signer = web3.eth.accounts.privateKeyToAccount( - process.env.SIGNER_PRIVATE_KEY, - ); - web3.eth.accounts.wallet.add(signer); + const signer = web3.eth.accounts.privateKeyToAccount(process.env.SIGNER_PRIVATE_KEY) + web3.eth.accounts.wallet.add(signer) await web3.eth .estimateGas( { from: signer.address, - to: "0xAED01C776d98303eE080D25A21f0a42D94a86D9c", // Replace with your selected account - value: web3.utils.toWei("0.0001", "ether"), + to: '0xAED01C776d98303eE080D25A21f0a42D94a86D9c', // Replace with your selected account + value: web3.utils.toWei('0.0001', 'ether'), }, - "latest", - ETH_DATA_FORMAT, + 'latest', + ETH_DATA_FORMAT ) - .then((value) => { - limit = value; - }); + .then(value => { + limit = value + }) // Creating the transaction object const tx = { from: signer.address, - to: "0xAED01C776d98303eE080D25A21f0a42D94a86D9c", - value: web3.utils.toWei("0.0001", "ether"), + to: '0xAED01C776d98303eE080D25A21f0a42D94a86D9c', + value: web3.utils.toWei('0.0001', 'ether'), gas: limit, nonce: await web3.eth.getTransactionCount(signer.address), - maxPriorityFeePerGas: web3.utils.toWei("3", "gwei"), - maxFeePerGas: web3.utils.toWei("90", "gwei"), + maxPriorityFeePerGas: web3.utils.toWei('3', 'gwei'), + maxFeePerGas: web3.utils.toWei('90', 'gwei'), chainId: 11155111, // If you're not using Sepolia, replace with your network chain ID type: 0x2, - }; - signedTx = await web3.eth.accounts.signTransaction(tx, signer.privateKey); - console.log("Raw transaction data: " + signedTx.rawTransaction); + } + signedTx = await web3.eth.accounts.signTransaction(tx, signer.privateKey) + console.log('Raw transaction data: ' + signedTx.rawTransaction) // Sending the transaction to the network const receipt = await web3.eth .sendSignedTransaction(signedTx.rawTransaction) - .once("transactionHash", (txhash) => { - console.log(`Mining transaction ...`); - console.log(`https://${network}.etherscan.io/tx/${txhash}`); - }); + .once('transactionHash', txhash => { + console.log(`Mining transaction ...`) + console.log(`https://${network}.etherscan.io/tx/${txhash}`) + }) // The transaction is now on chain! - console.log(`Mined in block ${receipt.blockNumber}`); + console.log(`Mined in block ${receipt.blockNumber}`) } -require("dotenv").config(); -main(); +require('dotenv').config() +main() ``` ### 6. Execute the transaction diff --git a/services/tutorials/ethereum/send-erc-20-token-rust.md b/services/tutorials/ethereum/send-erc-20-token-rust.md index 1b37cdb88fb..fd69ade6552 100644 --- a/services/tutorials/ethereum/send-erc-20-token-rust.md +++ b/services/tutorials/ethereum/send-erc-20-token-rust.md @@ -5,7 +5,7 @@ sidebar_position: 7 # Send an ERC-20 token -In this tutorial we'll use Rust and the [ethers-rs library](https://www.gakonst.com/ethers-rs/getting-started/intro.html) to send an ERC-20 token from one address to another. This tutorial uses the Sepolia testnet and sends the [Chainlink token (LINK)](https://sepolia.etherscan.io/token/0x779877a7b0d9e8603169ddbd7836e478b4624789#code). +In this tutorial we'll use Rust and the [ethers-rs library](https://docs.rs/ethers/latest/ethers/) to send an ERC-20 token from one address to another. This tutorial uses the Sepolia testnet and sends the [Chainlink token (LINK)](https://sepolia.etherscan.io/token/0x779877a7b0d9e8603169ddbd7836e478b4624789#code). ## Prerequisites @@ -127,7 +127,7 @@ Next, make the following updates to the above code: - On line 30 replace the `SIGNER_PRIVATE_KEY` with the private key of your Ethereum account. :::tip Secure your keys -To better secure your keys, follow the recommended approach described in the section [Create the .env file](../../tutorials/ethereum/send-a-transaction/use-web3.js.md#4-create-the-env-file). +To better secure your keys, follow the recommended approach described in the section [Create the .env file](send-a-transaction/use-web3.js.md#4-create-a-env-file). ::: ### 4. Run the code diff --git a/services/tutorials/ethereum/subscribe-to-pending-transactions.md b/services/tutorials/ethereum/subscribe-to-pending-transactions.md index 2de2cb52d66..0186b7e9e6a 100644 --- a/services/tutorials/ethereum/subscribe-to-pending-transactions.md +++ b/services/tutorials/ethereum/subscribe-to-pending-transactions.md @@ -7,7 +7,7 @@ sidebar_position: 8 This tutorial shows you how to use Ethereum subscriptions to listen for new transactions on the blockchain as they get submitted. -The tutorial uses the Python `websockets` library and Infura’s WebSocket endpoint to subscribe to transactions and events on the blockchain. +The tutorial uses the Python `websockets` library and Infura's WebSocket endpoint to subscribe to transactions and events on the blockchain. ## Prerequisites @@ -38,7 +38,7 @@ Install `web3.py` and the `websockets` library: pip install web3 websockets ``` -### 2. Import project libraries +### 3. Import project libraries Create your file (for example `subscribe.py`) and import the libraries needed for the project: @@ -50,9 +50,9 @@ from web3 import Web3 from websockets import connect ``` -### 3. Connect to Infura +### 4. Connect to Infura -Connect to Infura’s WebSockets endpoint to subscribe to new pending transactions, and Infura’s HTTP Ethereum endpoint so we can make JSON-RPC calls such as `eth_get_transaction` to get more information about a specific transaction. +Connect to Infura's WebSockets endpoint to subscribe to new pending transactions, and Infura's HTTP Ethereum endpoint so we can make JSON-RPC calls such as `eth_get_transaction` to get more information about a specific transaction. Define the following endpoints in your file: @@ -68,9 +68,9 @@ Replace `` with your Infura API key, you can use the same for both ::: -### 4. Subscribe to pending transactions +### 5. Subscribe to pending transactions -Create an `async` method that connects to Infura’s WebSocket endpoint: +Create an `async` method that connects to Infura's WebSocket endpoint: ```python async def get_event(): @@ -140,12 +140,12 @@ if __name__ == "__main__": loop.run_until_complete(get_event()) ``` -### 5. Execute the program +### 6. Execute the program Execute the program using the following: -``` -Python python3 subscribe.py +```python +python3 subscribe.py ``` You should now see the terminal fill up with Ethereum transfers: @@ -159,9 +159,9 @@ You should now see the terminal fill up with Ethereum transfers: ... ``` -### 6. Monitor a specific address for transactions +### 7. Monitor a specific address for transactions -You can update the program to monitor incoming transactions to a specific Ethereum address. Let’s define an account we’d like to monitor first, outside of the `get_event()` function: +You can update the program to monitor incoming transactions to a specific Ethereum address. Let's define an account we'd like to monitor first, outside of the `get_event()` function: ```python account = "" diff --git a/services/tutorials/ethereum/track-erc-20-token-transfers.md b/services/tutorials/ethereum/track-erc-20-token-transfers.md index 673711470d0..90886df3bca 100644 --- a/services/tutorials/ethereum/track-erc-20-token-transfers.md +++ b/services/tutorials/ethereum/track-erc-20-token-transfers.md @@ -47,7 +47,7 @@ This example has been written for web3js v4.x. It may not work for earlier versi ### 3. Set up the script -Create a file called `trackERC20.js`. At the top of file, add the following lines to import the web3.js library and connect to the Infura WebSocket endpoint: +Create a file called `trackERC20.js`. At the top of the file, add the following lines to import the web3.js library and connect to the Infura WebSocket endpoint: ```javascript const { Web3 } = require("web3"); @@ -106,14 +106,14 @@ Add the following filter to the script, which tells the `web3.eth.subscribe` fun ```javascript let options = { - topics: [web3.utils.sha3("Transfer(address,address,uint256)")], + topics: [web3.utils.sha3('Transfer(address,address,uint256)')], } ``` Then, initiate the subscription by passing along the filter: ```javascript -let subscription = await web3.eth.subscribe("logs", options) +let subscription = await web3.eth.subscribe('logs', options) ``` :::info @@ -125,12 +125,10 @@ In [step 3](#3-set-up-the-script), you wrap the whole script in an async functio You can also add the following lines to the script to see whether the subscription started successfully or if any errors occurred: ```javascript -subscription.on("error", (err) => { +subscription.on('error', err => { throw err }) -subscription.on("connected", (nr) => - console.log("Subscription on ERC-20 started with ID %s", nr) -) +subscription.on('connected', nr => console.log('Subscription on ERC-20 started with ID %s', nr)) ``` ### 6. Read ERC-20 transfers @@ -138,11 +136,11 @@ subscription.on("connected", (nr) => You can set the listener for the `subscription` created in [step 5](track-erc-20-token-transfers.md#5-subscribe-to-contract-events) by adding the following lines to the script: ```javascript -subscription.on("data", (event) => { +subscription.on('data', event => { if (event.topics.length == 3) { // ... } -}); +}) ``` :::info @@ -154,31 +152,31 @@ To verify that the `Transfer` event you catch is an ERC-20 transfer, these lines Because you can't read the event topics on their own, you must decode them using the ERC-20 ABI. Edit the listener as follows: ```javascript -subscription.on("data", (event) => { +subscription.on('data', event => { if (event.topics.length == 3) { let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "value", + type: 'uint256', + name: 'value', indexed: false, }, ], event.data, - [event.topics[0], event.topics[1], event.topics[2]], - ); + [event.topics[0], event.topics[1], event.topics[2]] + ) } -}); +}) ``` You can now retrieve the sender address (`from`), receiving address (`to`), and the number of tokens transferred (`value`, though yet to be converted, see [step 7](track-erc-20-token-transfers.md#7-read-contract-data)) from the `transaction` object. @@ -203,7 +201,7 @@ async function collectData(contract) { try { var symbol = await contract.methods.symbol().call() } catch { - symbol = "???" + symbol = '???' } return { decimals, symbol } } @@ -211,55 +209,55 @@ async function collectData(contract) { :::info -Since you’re already requesting the `decimals` value from the contract, you can also request the `symbol` value to display the ticker of the token. +Since you're already requesting the `decimals` value from the contract, you can also request the `symbol` value to display the ticker of the token. ::: Inside the listener, call the `collectData` function every time a new ERC-20 transaction is found. You can also calculate the correct decimal value: ```javascript -subscription.on("data", (event) => { +subscription.on('data', event => { if (event.topics.length == 3) { let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "value", + type: 'uint256', + name: 'value', indexed: false, }, ], event.data, - [event.topics[0], event.topics[1], event.topics[2]], - ); + [event.topics[0], event.topics[1], event.topics[2]] + ) - const contract = new web3.eth.Contract(abi, event.address); - collectData(contract).then((contractData) => { + const contract = new web3.eth.Contract(abi, event.address) + collectData(contract).then(contractData => { var unit = Object.keys(web3.utils.ethUnitMap).find( - (key) => web3.utils.ethUnitMap[key] == (BigInt(10) ** contractData.decimals) - ); + key => web3.utils.ethUnitMap[key] == BigInt(10) ** contractData.decimals + ) if (!unit) { // Simplification for contracts that use "non-standard" units, e.g. REDDIT contract returns decimals==8 - unit = "wei"; + unit = 'wei' } - const value = web3.utils.fromWei(transaction.value, unit); + const value = web3.utils.fromWei(transaction.value, unit) console.log( - `Transfer of ${value + " ".repeat(Math.max(0, 30 - value.length))} ${ - contractData.symbol + " ".repeat(Math.max(0, 10 - contractData.symbol.length)) + `Transfer of ${value + ' '.repeat(Math.max(0, 30 - value.length))} ${ + contractData.symbol + ' '.repeat(Math.max(0, 10 - contractData.symbol.length)) } from ${transaction.from} to ${transaction.to}` - ); - }); + ) + }) } -}); +}) ``` ### 8. Track a specific address @@ -267,16 +265,16 @@ subscription.on("data", (event) => { You can track a specific sender address by reading the `from` value of the decoded `transaction` object. Add the following line to the listener created in [step 6](track-erc-20-token-transfers.md#6-read-erc-20-transfers), replacing `` with the Ethereum address to track: ```javascript -if (transaction.from == "") { - console.log("Specified address sent an ERC-20 token!") +if (transaction.from == '') { + console.log('Specified address sent an ERC-20 token!') } ``` You can also track a specific recipient address receiving any tokens by tracking the `transaction.to` value: ```javascript -if (transaction.to == "") { - console.log("Specified address received an ERC-20 token!") +if (transaction.to == '') { + console.log('Specified address received an ERC-20 token!') } ``` @@ -285,19 +283,16 @@ if (transaction.to == "") { You can track a specific address sending a specific ERC-20 token, by checking for both `transaction.from` (the token sender) and `event.address` (the ERC-20 smart contract). Add the following line to the listener created in [step 6](track-erc-20-token-transfers.md#6-read-erc-20-transfers), replacing `` with the Ethereum address to track, and `` with the smart contract address to track: ```javascript -if ( - transaction.from == "" && - event.address == "" -) { - console.log("Specified address transferred specified token!") +if (transaction.from == '' && event.address == '') { + console.log('Specified address transferred specified token!') } ``` You can also track any transactions for a specific ERC-20 token, regardless of the sender or recipient: ```javascript -if (event.address == "") { - console.log("Specified ERC-20 transfer!") +if (event.address == '') { + console.log('Specified ERC-20 transfer!') } ``` @@ -329,47 +324,47 @@ Transfer of 9964.083347473883463154 RIO from 0x5b7E3E37a1aa6369386 ### Complete code overview ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') async function main() { - const web3 = new Web3("wss://mainnet.infura.io/ws/v3/") + const web3 = new Web3('wss://mainnet.infura.io/ws/v3/') let options = { - topics: [web3.utils.sha3("Transfer(address,address,uint256)")], + topics: [web3.utils.sha3('Transfer(address,address,uint256)')], } const abi = [ { constant: true, inputs: [], - name: "symbol", + name: 'symbol', outputs: [ { - name: "", - type: "string", + name: '', + type: 'string', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, { constant: true, inputs: [], - name: "decimals", + name: 'decimals', outputs: [ { - name: "", - type: "uint8", + name: '', + type: 'uint8', }, ], payable: false, - stateMutability: "view", - type: "function", + stateMutability: 'view', + type: 'function', }, ] - let subscription = await web3.eth.subscribe("logs", options) + let subscription = await web3.eth.subscribe('logs', options) async function collectData(contract) { try { @@ -380,28 +375,28 @@ async function main() { try { var symbol = await contract.methods.symbol().call() } catch { - symbol = "???" + symbol = '???' } return { decimals, symbol } } - subscription.on("data", (event) => { + subscription.on('data', event => { if (event.topics.length == 3) { let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "value", + type: 'uint256', + name: 'value', indexed: false, }, ], @@ -410,50 +405,46 @@ async function main() { ) const contract = new web3.eth.Contract(abi, event.address) - collectData(contract).then((contractData) => { + collectData(contract).then(contractData => { var unit = Object.keys(web3.utils.ethUnitMap).find( - (key) => - web3.utils.ethUnitMap[key] == BigInt(10) ** contractData.decimals + key => web3.utils.ethUnitMap[key] == BigInt(10) ** contractData.decimals ) if (!unit) { // Simplification for contracts that use "non-standard" units, e.g. REDDIT contract returns decimals==8 - unit = "wei" + unit = 'wei' } // This is logging each transfer event found: const value = web3.utils.fromWei(transaction.value, unit) console.log( - `Transfer of ${value + " ".repeat(Math.max(0, 30 - value.length))} ${ - contractData.symbol + - " ".repeat(Math.max(0, 10 - contractData.symbol.length)) + `Transfer of ${value + ' '.repeat(Math.max(0, 30 - value.length))} ${ + contractData.symbol + ' '.repeat(Math.max(0, 10 - contractData.symbol.length)) } from ${transaction.from} to ${transaction.to}` ) // Below are examples of testing for transactions involving particular EOA or contract addresses - if (transaction.from == "0x495f947276749ce646f68ac8c248420045cb7b5e") { - console.log("Specified address sent an ERC-20 token!") + if (transaction.from == '0x495f947276749ce646f68ac8c248420045cb7b5e') { + console.log('Specified address sent an ERC-20 token!') } - if (transaction.to == "0x495f947276749ce646f68ac8c248420045cb7b5e") { - console.log("Specified address received an ERC-20 token!") + if (transaction.to == '0x495f947276749ce646f68ac8c248420045cb7b5e') { + console.log('Specified address received an ERC-20 token!') } if ( - transaction.from == "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D" && - event.address == "0x6b175474e89094c44da98b954eedeac495271d0f" + transaction.from == '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' && + event.address == '0x6b175474e89094c44da98b954eedeac495271d0f' ) { - console.log("Specified address transferred specified token!") + console.log('Specified address transferred specified token!') } // event.address contains the contract address - if (event.address == "0x6b175474e89094c44da98b954eedeac495271d0f") { - console.log("Specified ERC-20 transfer!") + if (event.address == '0x6b175474e89094c44da98b954eedeac495271d0f') { + console.log('Specified ERC-20 transfer!') } }) } }) - subscription.on("error", (err) => { + subscription.on('error', err => { throw err }) - subscription.on("connected", (nr) => - console.log("Subscription on ERC-20 started with ID %s", nr) - ) + subscription.on('connected', nr => console.log('Subscription on ERC-20 started with ID %s', nr)) } main() ``` diff --git a/services/tutorials/ethereum/track-erc-721-and-erc-1155-token-transfers.md b/services/tutorials/ethereum/track-erc-721-and-erc-1155-token-transfers.md index 1c219c05079..a918c00f4b8 100644 --- a/services/tutorials/ethereum/track-erc-721-and-erc-1155-token-transfers.md +++ b/services/tutorials/ethereum/track-erc-721-and-erc-1155-token-transfers.md @@ -69,21 +69,19 @@ Add the following filter to the script, which tells the `web3.eth.subscribe` fun ```javascript let options721 = { - topics: [web3.utils.sha3("Transfer(address,address,uint256)")], + topics: [web3.utils.sha3('Transfer(address,address,uint256)')], } let options1155 = { - topics: [ - web3.utils.sha3("TransferSingle(address,address,address,uint256,uint256)"), - ], + topics: [web3.utils.sha3('TransferSingle(address,address,address,uint256,uint256)')], } ``` Then, initiate the subscription by passing along the filter: ```javascript -let subscription721 = await web3.eth.subscribe("logs", options721) -let subscription1155 = await web3.eth.subscribe("logs", options1155) +let subscription721 = await web3.eth.subscribe('logs', options721) +let subscription1155 = await web3.eth.subscribe('logs', options1155) ``` :::info @@ -95,31 +93,29 @@ In [step 3](#3-set-up-the-script), you wrap the whole script in an async functio You can also add the following lines to the script to see whether the subscription started successfully or if any errors occurred: ```javascript -subscription721.on("error", (err) => { +subscription721.on('error', err => { throw err }) -subscription1155.on("error", (err) => { +subscription1155.on('error', err => { throw err }) -subscription721.on("connected", (nr) => - console.log("Subscription on ERC-721 started with ID %s", nr) -) -subscription1155.on("connected", (nr) => - console.log("Subscription on ERC-1155 started with ID %s", nr) +subscription721.on('connected', nr => console.log('Subscription on ERC-721 started with ID %s', nr)) +subscription1155.on('connected', nr => + console.log('Subscription on ERC-1155 started with ID %s', nr) ) ``` ### 5. Read ERC-721 transfers -Set the listener for the `subscription721` created in [step 4](track-erc-721-and-erc-1155-token-transfers.md#4-subscribe-to-contract-events) by adding the following lines to the script: +Set the listener for the `subscription721` created in [step 4](#4-subscribe-to-contract-events) by adding the following lines to the script: ```javascript -subscription721.on("data", (event) => { +subscription721.on('data', event => { if (event.topics.length == 4) { // ... } -}); +}) ``` :::info @@ -134,18 +130,18 @@ Because you can't read the event topics on their own, you must decode them using let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "tokenId", + type: 'uint256', + name: 'tokenId', indexed: true, }, ], @@ -159,12 +155,8 @@ In order to directly call `from`, `to`, and `tokenId` on `transaction`, add the ```javascript console.log( `\n` + - `New ERC-712 transaction found in block ${event.blockNumber} with hash ${event.transactionHash}\n` + - `From: ${ - transaction.from === "0x0000000000000000000000000000000000000000" - ? "New mint!" - : transaction.from - }\n` + + `New ERC-721 transaction found in block ${event.blockNumber} with hash ${event.transactionHash}\n` + + `From: ${transaction.from === '0x0000000000000000000000000000000000000000' ? 'New mint!' : transaction.from}\n` + `To: ${transaction.to}\n` + `Token contract: ${event.address}\n` + `Token ID: ${transaction.tokenId}` @@ -173,41 +165,41 @@ console.log( ### 6. Read ERC-1155 transfers -You can set the listener for the `subscription1155` created in [step 4](track-erc-721-and-erc-1155-token-transfers.md#4.-subscribe-to-contract-events) by adding the following lines to the script: +You can set the listener for the `subscription1155` created in [step 4](#4-subscribe-to-contract-events) by adding the following lines to the script: ```javascript -subscription1155.on("data", event => { +subscription1155.on('data', event => { // ... }) ``` -As with ERC-721 in [Step 5](track-erc-721-and-erc-1155-token-transfers.md#5.-read-erc-721-transfers), add the ERC-1155 ABI to the listener: +As with ERC-721 in [Step 5](#5-read-erc-721-transfers), add the ERC-1155 ABI to the listener: ```javascript let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "operator", + type: 'address', + name: 'operator', indexed: true, }, { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "id", + type: 'uint256', + name: 'id', }, { - type: "uint256", - name: "value", + type: 'uint256', + name: 'value', }, ], event.data, @@ -222,11 +214,7 @@ console.log( `\n` + `New ERC-1155 transaction found in block ${event.blockNumber} with hash ${event.transactionHash}\n` + `Operator: ${transaction.operator}\n` + - `From: ${ - transaction.from === "0x0000000000000000000000000000000000000000" - ? "New mint!" - : transaction.from - }\n` + + `From: ${transaction.from === '0x0000000000000000000000000000000000000000' ? 'New mint!' : transaction.from}\n` + `To: ${transaction.to}\n` + `id: ${transaction.id}\n` + `value: ${transaction.value}` @@ -238,16 +226,16 @@ console.log( You can track a specific sender address by reading the `from` value of the decoded `transaction` object. For each of the listeners, add the following line, replacing `` with the Ethereum address to track: ```javascript -if (transaction.from == "") { - console.log("Specified address sent an NFT!") +if (transaction.from == '') { + console.log('Specified address sent an NFT!') } ``` You can also track a specific recipient address receiving any tokens by tracking the `transaction.to` value: ```javascript -if (transaction.to == "") { - console.log("Specified address received an NFT") +if (transaction.to == '') { + console.log('Specified address received an NFT') } ``` @@ -266,8 +254,8 @@ if (event.address == "" && transaction.tokenId == ) ```javascript -if (event.address == "") { - console.log("Specified ERC-1155 NFT was transferred!") +if (event.address == '') { + console.log('Specified ERC-1155 NFT was transferred!') } ``` @@ -314,43 +302,39 @@ value: 1 ### Complete code overview ```javascript -const { Web3 } = require("web3") +const { Web3 } = require('web3') async function main() { - const web3 = new Web3("wss://mainnet.infura.io/ws/v3/") + const web3 = new Web3('wss://mainnet.infura.io/ws/v3/') let options721 = { - topics: [web3.utils.sha3("Transfer(address,address,uint256)")], + topics: [web3.utils.sha3('Transfer(address,address,uint256)')], } let options1155 = { - topics: [ - web3.utils.sha3( - "TransferSingle(address,address,address,uint256,uint256)" - ), - ], + topics: [web3.utils.sha3('TransferSingle(address,address,address,uint256,uint256)')], } - let subscription721 = await web3.eth.subscribe("logs", options721) - let subscription1155 = await web3.eth.subscribe("logs", options1155) + let subscription721 = await web3.eth.subscribe('logs', options721) + let subscription1155 = await web3.eth.subscribe('logs', options1155) - subscription721.on("data", (event) => { + subscription721.on('data', event => { if (event.topics.length == 4) { let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "tokenId", + type: 'uint256', + name: 'tokenId', indexed: true, }, ], @@ -358,27 +342,23 @@ async function main() { [event.topics[1], event.topics[2], event.topics[3]] ) - if (transaction.from == "0x495f947276749ce646f68ac8c248420045cb7b5e") { - console.log("Specified address sent an NFT!") + if (transaction.from == '0x495f947276749ce646f68ac8c248420045cb7b5e') { + console.log('Specified address sent an NFT!') } - if (transaction.to == "0x495f947276749ce646f68ac8c248420045cb7b5e") { - console.log("Specified address received an NFT!") + if (transaction.to == '0x495f947276749ce646f68ac8c248420045cb7b5e') { + console.log('Specified address received an NFT!') } if ( - event.address == "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D" && + event.address == '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' && transaction.tokenId == 2500 ) { - console.log("Specified NFT was transferred!") + console.log('Specified NFT was transferred!') } console.log( `\n` + `New ERC-712 transaction found in block ${event.blockNumber} with hash ${event.transactionHash}\n` + - `From: ${ - transaction.from === "0x0000000000000000000000000000000000000000" - ? "New mint!" - : transaction.from - }\n` + + `From: ${transaction.from === '0x0000000000000000000000000000000000000000' ? 'New mint!' : transaction.from}\n` + `To: ${transaction.to}\n` + `Token contract: ${event.address}\n` + `Token ID: ${transaction.tokenId}` @@ -386,31 +366,31 @@ async function main() { } }) - subscription1155.on("data", (event) => { + subscription1155.on('data', event => { let transaction = web3.eth.abi.decodeLog( [ { - type: "address", - name: "operator", + type: 'address', + name: 'operator', indexed: true, }, { - type: "address", - name: "from", + type: 'address', + name: 'from', indexed: true, }, { - type: "address", - name: "to", + type: 'address', + name: 'to', indexed: true, }, { - type: "uint256", - name: "id", + type: 'uint256', + name: 'id', }, { - type: "uint256", - name: "value", + type: 'uint256', + name: 'value', }, ], event.data, @@ -421,29 +401,25 @@ async function main() { `\n` + `New ERC-1155 transaction found in block ${event.blockNumber} with hash ${event.transactionHash}\n` + `Operator: ${transaction.operator}\n` + - `From: ${ - transaction.from === "0x0000000000000000000000000000000000000000" - ? "New mint!" - : transaction.from - }\n` + + `From: ${transaction.from === '0x0000000000000000000000000000000000000000' ? 'New mint!' : transaction.from}\n` + `To: ${transaction.to}\n` + `id: ${transaction.id}\n` + `value: ${transaction.value}` ) }) - subscription721.on("error", (err) => { + subscription721.on('error', err => { throw err }) - subscription1155.on("error", (err) => { + subscription1155.on('error', err => { throw err }) - subscription721.on("connected", (nr) => - console.log("Subscription on ERC-721 started with ID %s", nr) + subscription721.on('connected', nr => + console.log('Subscription on ERC-721 started with ID %s', nr) ) - subscription1155.on("connected", (nr) => - console.log("Subscription on ERC-1155 started with ID %s", nr) + subscription1155.on('connected', nr => + console.log('Subscription on ERC-1155 started with ID %s', nr) ) } diff --git a/services/tutorials/ethereum/use-infura-as-a-reverse-proxy/use-infura-as-a-backup-for-your-node.md b/services/tutorials/ethereum/use-infura-as-a-reverse-proxy/use-infura-as-a-backup-for-your-node.md index 5c1b5723862..b2092404b69 100644 --- a/services/tutorials/ethereum/use-infura-as-a-reverse-proxy/use-infura-as-a-backup-for-your-node.md +++ b/services/tutorials/ethereum/use-infura-as-a-reverse-proxy/use-infura-as-a-backup-for-your-node.md @@ -44,21 +44,21 @@ brew install caddy You may be running your own Ethereum node, but for the sake of this tutorial, you can substitute a node with a Node.js stub. Create a file named `main.js` in the project directory with the following content: ```javascript -const https = require("https") -const fs = require("fs") +const https = require('https') +const fs = require('fs') const options = { - key: fs.readFileSync(".pem"), - cert: fs.readFileSync(".pem"), + key: fs.readFileSync('.pem'), + cert: fs.readFileSync('.pem'), } -const hostname = "127.0.0.1" +const hostname = '127.0.0.1' const port = 9000 const server = https.createServer(options, function (req, res) { res.statusCode = 200 - res.setHeader("Content-Type", "text/plain") + res.setHeader('Content-Type', 'text/plain') setTimeout(() => { - res.end("Reverse proxy success!\n") + res.end('Reverse proxy success!\n') }, 1000) }) diff --git a/services/tutorials/layer-2-networks/_category_.json b/services/tutorials/layer-2-networks/_category_.json index 3fb99a66a58..0e61d893060 100644 --- a/services/tutorials/layer-2-networks/_category_.json +++ b/services/tutorials/layer-2-networks/_category_.json @@ -1,10 +1,4 @@ { "label": "Layer 2 networks", - "collapsible": true, - "collapsed": true, - "link": { - "type": "generated-index", - "slug": "tutorials/layer-2-networks", - "description": "This section lists tutorials for using various layer 2 networks with Infura." - } + "position": 2 } diff --git a/services/tutorials/layer-2-networks/deploy-an-nft-smart-contract-on-palm.md b/services/tutorials/layer-2-networks/deploy-an-nft-smart-contract-on-palm.md deleted file mode 100644 index 3eb3607d30b..00000000000 --- a/services/tutorials/layer-2-networks/deploy-an-nft-smart-contract-on-palm.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -description: Deploy an NFT smart contract on Palm using Hardhat. ---- - -# Deploy an NFT smart contract on Palm using Hardhat - -:::info - -The Palm tutorial, linked below, assumes familiarity and prior usage of the smart contract development tool [Hardhat](https://hardhat.org). If this is your first use of Hardhat, we recommend using the "[Getting Started](https://hardhat.org/getting-started/)" tutorial in Hardhat's documentation first before starting on this tutorial. - -::: - -Check out Palm's tutorial on [deploying an NFT smart contract using Hardhat](https://docs.palm.io/howto/deploy-using-hardhat). - -At the conclusion of the tutorial, you will have deployed an ERC-721 token contract to Palm, which can be used to mint NFTs. diff --git a/services/tutorials/layer-2-networks/send-a-transaction.md b/services/tutorials/layer-2-networks/send-a-transaction.md index b22f500df3d..a02e55f572b 100644 --- a/services/tutorials/layer-2-networks/send-a-transaction.md +++ b/services/tutorials/layer-2-networks/send-a-transaction.md @@ -9,11 +9,11 @@ As with Ethereum, [transactions](https://ethereum.org/en/developers/docs/transac - Regular transactions from one account to another. - Contract deployment transactions, or calling a function in a smart contract. -This tutorial uses the Ethereum Web3 JavaScript library to send a transaction between two accounts on the Polygon-Mumbai testnet. +This tutorial uses the Ethereum Web3 JavaScript library to send a transaction between two accounts on the Polygon Amoy testnet. ## Prerequisites -- An Infura [API key](../../../../developer-tools/dashboard/get-started/create-api/) +- An Infura [API key](/developer-tools/dashboard/get-started/create-api) - [Node.js installed](https://nodejs.org/en/download/) - [MetaMask installed](https://metamask.io) and an account for testing purposes @@ -27,11 +27,11 @@ You can use [MetaMask](https://metamask.io) or a similar Ethereum wallet to crea ### 1. Add Polygon network to MetaMask -Refer to the Polygon instructions to [add the Polygon networks to MetaMask](https://polygon.technology/blog/getting-started-with-metamask-on-polygon). This tutorial uses the Polygon Mumbai network. +Refer to the Polygon instructions to [add the Polygon networks to MetaMask](https://polygon.technology/blog/getting-started-with-metamask-on-polygon). This tutorial uses the Polygon Amoy network. ### 2. Fund your account -[Use the Polygon faucet](https://faucet.polygon.technology) to load testnet MATIC on your account for the Mumbai network. +[Use the Polygon faucet](https://faucet.polygon.technology) to load testnet MATIC on your account for the Amoy network. ### 3. Create a project directory @@ -81,7 +81,7 @@ SIGNER_PRIVATE_KEY = "" Ensure you replace the following values in the `.env` file: -- `` with the API key from your [Infura dashboard](https://infura.io/dashboard). +- `` with the API key from your [Infura dashboard](https://app.infura.io/). - `` with the [private key of your account](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). :::danger @@ -95,42 +95,36 @@ Never disclose your private key. Anyone with your private keys can steal any ass In this example we'll create a JavaScript file (`send.js`) in the project directory which configures and sends the transaction. ```javascript title="send.js" -const { Web3 } = require("web3") +const { Web3 } = require('web3') async function main() { // Configuring the connection to the Polygon node const network = process.env.POLYGON_NETWORK const web3 = new Web3( - new Web3.providers.HttpProvider( - `https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}` - ) + new Web3.providers.HttpProvider(`https://${network}.infura.io/v3/${process.env.INFURA_API_KEY}`) ) // Creating a signing account from a private key - const signer = web3.eth.accounts.privateKeyToAccount( - process.env.SIGNER_PRIVATE_KEY - ) + const signer = web3.eth.accounts.privateKeyToAccount(process.env.SIGNER_PRIVATE_KEY) web3.eth.accounts.wallet.add(signer) // Creating the transaction object const tx = { from: signer.address, - to: "0xAED01C776d98303eE080D25A21f0a42D94a86D9c", - value: web3.utils.toWei("0.001", "ether"), + to: '0xAED01C776d98303eE080D25A21f0a42D94a86D9c', + value: web3.utils.toWei('0.001', 'ether'), } // Assigning the right amount of gas tx.gas = await web3.eth.estimateGas(tx) // Sending the transaction to the network - const receipt = await web3.eth - .sendTransaction(tx) - .once("transactionHash", (txhash) => { - console.log(`Mining transaction ...`) - console.log(`Transaction hash: ${txhash}`) - }) + const receipt = await web3.eth.sendTransaction(tx).once('transactionHash', txhash => { + console.log(`Mining transaction ...`) + console.log(`Transaction hash: ${txhash}`) + }) // The transaction is now on chain! console.log(`Mined in block ${receipt.blockNumber}`) } -require("dotenv").config() +require('dotenv').config() main() ``` @@ -146,4 +140,4 @@ The command line will display the block number containing the transaction detail ### 8. View the transaction details -Copy transaction hash and view the transaction in the [Polygon Mumbai block explorer](https://amoy.polygonscan.com/). +Copy transaction hash and view the transaction in the [Polygon Amoy block explorer](https://amoy.polygonscan.com/). diff --git a/smart-accounts-kit/assets/erc7715-request.png b/smart-accounts-kit/assets/erc7715-request.png new file mode 100644 index 00000000000..01eef3bda26 Binary files /dev/null and b/smart-accounts-kit/assets/erc7715-request.png differ diff --git a/smart-accounts-kit/assets/scaffold-eth-7715.png b/smart-accounts-kit/assets/scaffold-eth-7715.png new file mode 100644 index 00000000000..41848a9b7ed Binary files /dev/null and b/smart-accounts-kit/assets/scaffold-eth-7715.png differ diff --git a/smart-accounts-kit/assets/scaffold-eth-smart-accounts.png b/smart-accounts-kit/assets/scaffold-eth-smart-accounts.png new file mode 100644 index 00000000000..b83ec787390 Binary files /dev/null and b/smart-accounts-kit/assets/scaffold-eth-smart-accounts.png differ diff --git a/smart-accounts-kit/concepts/advanced-permissions.md b/smart-accounts-kit/concepts/advanced-permissions.md new file mode 100644 index 00000000000..12ae2d3305a --- /dev/null +++ b/smart-accounts-kit/concepts/advanced-permissions.md @@ -0,0 +1,64 @@ +--- +description: Learn about MetaMask Advanced Permissions (ERC-7715). +keywords: [ERC-7715, 7715, permissions, wallet, smart account] +--- + +# Advanced Permissions (ERC-7715) + +The Smart Accounts Kit supports Advanced Permissions ([ERC-7715](https://eips.ethereum.org/EIPS/eip-7715)), which lets you request fine-grained permissions from a MetaMask user to execute transactions on their behalf. +For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course of a month. +Once the permission is granted, your dapp can use the allocated 10 USDC each day to purchase ETH directly from the MetaMask user's account. + +Advanced Permissions eliminate the need for users to approve every transaction, which is useful for highly interactive dapps. +It also enables dapps to execute transactions for users without an active wallet connection. + +:::note +This feature requires [MetaMask Flask 13.5.0](/snaps/get-started/install-flask) or later. +::: + +## ERC-7715 technical overview + +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_grantPermissions`. +Dapps can use this method to request a wallet to grant the dapp permission to execute transactions on a user's behalf. +`wallet_grantPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission. +Common signer implementations include wallet signers, single key and multisig signers, and account signers. + +The Smart Accounts Kit supports multiple signer types. The documentation uses [an account signer](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) as a common implementation example. +When you use an account signer, a session account is created solely to request and redeem Advanced Permissions, and doesn't contain tokens. +The session account can be granted with permissions and redeem them as specified in [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710). +The session account can be a smart account or an externally owned account (EOA). + +The MetaMask user that the session account requests permissions from must be upgraded to a [MetaMask smart account](smart-accounts.md). + +## Advanced Permissions vs. delegations + +Advanced Permissions expand on regular [delegations](delegation/overview.md) by enabling permission sharing _via the MetaMask browser extension_. + +With regular delegations, the dapp constructs a delegation and requests the user to sign it. +These delegations are not human-readable, so it is the dapp's responsibility to provide context for the user. +Regular delegations cannot be signed through the MetaMask extension, because if a dapp requests a delegation without constraints, the whole wallet can be exposed to the dapp. + +In contrast, Advanced Permissions enable dapps (and AI agents) to request permissions from a user directly via the MetaMask extension. +Advanced Permissions require a permission configuration which displays a human-readable confirmation for the MetaMask user. +The user can modify the permission parameters if the request is configured to allow adjustments. + +For example, the following Advanced Permissions request displays a rich UI including the start time, amount, and period duration for an [ERC-20 token periodic transfer](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission): + +

+ERC-7715 request +

+ +## Advanced Permissions lifecycle + +The Advanced Permissions lifecycle is as follows: + +1. **Set up a session account** - Set up a session account to execute transactions on behalf of the MetaMask user. + It can be a [smart account](smart-accounts.md) or an externally owned account (EOA). + +2. **Request permissions** - Request permissions from the user. + The Smart Accounts Kit supports [ERC-20 token permissions](../guides/advanced-permissions/use-permissions/erc20-token.md) and + [native token permissions](../guides/advanced-permissions/use-permissions/native-token.md). + +3. **Redeem permissions** - Once the permission is granted, the session account can redeem the permission, executing on the user's behalf. + +See [how to perform executions on a MetaMask user's behalf](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) to get started with the Advanced Permissions lifecycle. diff --git a/smart-accounts-kit/concepts/delegation/caveat-enforcers.md b/smart-accounts-kit/concepts/delegation/caveat-enforcers.md new file mode 100644 index 00000000000..d9d7bbd4a12 --- /dev/null +++ b/smart-accounts-kit/concepts/delegation/caveat-enforcers.md @@ -0,0 +1,62 @@ +--- +description: Learn about caveat enforcers and how they restrict delegations. +keywords: [caveats, caveat enforcers, delegation] +--- + +# Caveat enforcers + +The Smart Accounts Kit provides caveat enforcers, which are smart contracts that implement rules and restrictions +on delegations. They serve as the underlying mechanism that enables conditional execution within the [Delegation Framework](./overview.md#delegation-framework). +See the [delegation flow](overview.md#delegation-flow) for how caveat enforcer hooks are called during delegation redemption. + +A caveat enforcer acts as a gate that validates whether a delegation can be used for a particular execution. +When a delegate attempts to execute an action on behalf of a delegator, each caveat enforcer specified in +the delegation evaluates whether the execution meets its defined criteria. + +:::warning Important + +- Without caveat enforcers, a delegation has infinite and unbounded authority to make any execution the original account can make. + We strongly recommend using caveat enforcers. +- Caveat enforcers safeguard the execution process but do not guarantee a final state post-redemption. + Always consider the full impact of combined caveat enforcers. + +::: + +## Hooks + +The interface consists of four key hook functions that are called at different stages of the delegation redemption process. +Each of these hooks receives comprehensive information about the execution context, including: + +- The caveat terms specified by the delegator. +- Optional arguments provided by the redeemer. +- The execution mode and calldata. +- The delegation hash. +- The delegator and redeemer addresses. + +| Hook | Description | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `beforeAllHook` | Called before any actions in a batch redemption process begin. Verifies conditions that must be true for the entire batch execution. | +| `beforeHook` | Called before the execution tied to a specific delegation. Allows for pre-execution validation of conditions specific to that delegation. | +| `afterHook` | Called after the execution tied to a specific delegation completes. Verifies post-execution state changes or effects specific to that delegation. | +| `afterAllHook` | Called after all actions in a batch redemption process have completed. Verifies final conditions after the entire batch has executed. | + +The most important safety feature of these hooks is their ability to block executions: + +- If any hook determines its conditions aren't met, it will **revert** (throw an exception). +- When a reversion occurs, the entire delegation redemption process is canceled. +- This prevents partial or invalid executions from occurring. +- No state changes from the attempted execution will be committed to the blockchain. + +This "all-or-nothing" approach ensures that delegations only execute exactly as intended by their caveats. + +## Available caveat enforcers + +The Smart Accounts Kit provides [out-of-the-box caveat enforcers](../../reference/delegation/caveats.md) +for common restriction patterns, including: + +- Limiting target addresses and methods. +- Setting time or block number constraints. +- Restricting token transfers and approvals. +- Limiting execution frequency. + +For other restriction patterns, you can also [create custom caveat enforcers](/tutorials/create-custom-caveat-enforcer) by implementing the `ICaveatEnforcer` interface. diff --git a/smart-accounts-kit/concepts/delegation/delegation-manager.md b/smart-accounts-kit/concepts/delegation/delegation-manager.md new file mode 100644 index 00000000000..6c9ce37dfd5 --- /dev/null +++ b/smart-accounts-kit/concepts/delegation/delegation-manager.md @@ -0,0 +1,43 @@ +--- +description: Learn about the Delegation Manager and execution modes. +keywords: [delegation manager, delegation, execution modes, delegation framework] +--- + +# Delegation Manager + +The Delegation Manager is a core component of the [Delegation Framework](./overview.md#delegation-framework). +It validates delegations and triggers executions on behalf of the delegator, ensuring tasks are executed accurately, +and securely. + +See the [delegation flow](./overview.md#delegation-flow) for a full overview of how delegations are created, validated, and redeemed. + +## Execution modes + +The Delegation Manager processes delegations based on a specified execution mode. When redeeming a delegation using [`redeemDelegations`](../../reference/delegation/index.md#redeemdelegations), you must +pass an execution mode for each delegation chain you pass to the method. The Smart Accounts Kit supports the following +execution modes, based on [ERC-7579](https://erc7579.com/): + +| Execution mode | Number of delegation chains passed to `redeemDelegations` | Processing method | Does user operation continue execution if redemption reverts? | +| --------------- | --------------------------------------------------------- | ----------------- | ------------------------------------------------------------- | +| `SingleDefault` | One | Sequential | No | +| `SingleTry` | One | Sequential | Yes | +| `BatchDefault` | Multiple | Interleaved | No | +| `BatchTry` | Multiple | Interleaved | Yes | + +### Sequential processing + +In `Single` modes, the Delegation Manager processes delegations sequentially: + +1. For each delegation in the chain, all caveats' `before` hooks are called. +2. The single redeemed action is executed. +3. For each delegation in the chain, all caveats' `after` hooks are called. + +### Interleaved processing + +In `Batch` modes, the Delegation Manager processes delegations in an interleaved manner: + +1. For each chain in the batch, and each delegation in the chain, all caveats' `before` hooks are called. +2. Each redeemed action is executed. +3. For each chain in the batch, and each delegation in the chain, all caveats' `after` hooks are called. + +`Batch` mode allows for powerful use cases, but the Delegation Framework currently does not include any `Batch` compatible caveat enforcers. diff --git a/smart-accounts-kit/concepts/delegation/delegation-scopes.md b/smart-accounts-kit/concepts/delegation/delegation-scopes.md new file mode 100644 index 00000000000..bac1891a896 --- /dev/null +++ b/smart-accounts-kit/concepts/delegation/delegation-scopes.md @@ -0,0 +1,32 @@ +--- +description: Learn about delegation scopes and how they define the initial authority of a delegation. +keywords: + [delegation scopes, delegation, authority, spending limit, function call, ownership transfer] +--- + +# Delegation scopes + +When creating a delegation, you must configure a scope to define the delegation's initial authority and help prevent delegation misuse. + +Scopes are not part of the [Delegation Framework](overview.md#delegation-framework) itself, but an abstraction introduced in the Smart Accounts Kit that builds on top of [caveat enforcers](caveat-enforcers.md) to provide pre-configured restriction patterns for common use cases. + +## Scopes vs. caveats + +Scopes and caveats work together to define and restrict a delegation's authority: + +- **Scopes** define the _initial authority_ of a delegation. They determine the broad category of actions the delegate is permitted to perform, such as transferring tokens or calling specific contract functions. +- **Caveats** further _constrain_ the authority granted by the scope. They add additional restrictions on top of the scope, such as time limits or execution frequency. + +For example, a spending limit scope might allow a delegate to transfer up to 100 USDC, while an additional caveat could restrict the transfers to only occur within a specific time window. + +See [how to constrain a delegation's scope by adding caveats](../../guides/delegation/use-delegation-scopes/constrain-scope.md). + +## Categories + +The Smart Accounts Kit supports three categories of scopes: + +| Scope type | Description | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| [Spending limit scopes](../../guides/delegation/use-delegation-scopes/spending-limit.md) | Restricts the spending of native, ERC-20, and ERC-721 tokens based on defined conditions. | +| [Function call scope](../../guides/delegation/use-delegation-scopes/function-call.md) | Restricts the delegation to specific contract methods, contract addresses, or calldata. | +| [Ownership transfer scope](../../guides/delegation/use-delegation-scopes/ownership-transfer.md) | Restricts the delegation to only allow ownership transfers, specifically the `transferOwnership` function for a specified contract. | diff --git a/smart-accounts-kit/concepts/delegation/overview.md b/smart-accounts-kit/concepts/delegation/overview.md new file mode 100644 index 00000000000..6426766d795 --- /dev/null +++ b/smart-accounts-kit/concepts/delegation/overview.md @@ -0,0 +1,162 @@ +--- +description: Learn about delegation, the delegation lifecycle, and the Delegation Framework. +sidebar_label: Overview +toc_max_heading_level: 3 +keywords: [smart accounts kit, delegation, delegator, delegate, delegation framework] +--- + +# Delegation + +Delegation is the ability for a [MetaMask smart account](../smart-accounts.md) to grant permission to another smart contract +or externally owned account (EOA) to perform specific executions on its behalf. +The account that grants the permission is called the delegator account, while the account that receives the permission +is called the delegate account. + +The Smart Accounts Kit follows the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) standard for smart contract delegation. +In addition, users can use [delegation scopes](delegation-scopes.md) and [caveat enforcers](caveat-enforcers.md) to apply rules and restrictions to delegations. +For example, Alice delegates the ability to spend her USDC to Bob, limiting the amount to 100 USDC. + +## Delegation types + +You can create the following delegation types: + +### Root delegation + +A root delegation is when a delegator delegates their own authority away, as opposed to _redelegating_ permissions +they received from a previous delegation. In a chain of delegations, the first delegation is the root delegation. +For example, Alice delegates the ability to spend her USDC to Bob, limiting the amount to 100 USDC. + +Use [`createDelegation`](../../reference/delegation/index.md#createdelegation) to create a root delegation. + +### Open root delegation + +An open root delegation is a root delegation that doesn't specify a delegate. This means that any account can +redeem the delegation. For example, Alice delegates the ability to spend 100 of her USDC to anyone. + +You must create open root delegations carefully, to ensure that they are not misused. +Use [`createOpenDelegation`](../../reference/delegation/index.md#createopendelegation) to create an open root delegation. + +### Redelegation + +A delegate can redelegate permissions that have been granted to them, creating a chain of delegations across trusted parties. +For example, Alice delegates the ability to spend 100 of her USDC to Bob. Bob redelegates the ability to spend +50 of Alice's 100 USDC to Carol. + +See [how to create a redelegation](../../guides/delegation/create-redelegation.md) guide to learn more. + +### Open redelegation + +An open redelegation is a redelegation that doesn't specify a delegate. This means that any account can redeem +the redelegation. For example, Alice delegates the ability to spend 100 of her USDC to Bob. Bob redelegates +the ability to spend 50 of Alice's 100 USDC to anyone. + +As with open root delegations, you must create open redelegations carefully, to ensure that they are not misused. +Use [`createOpenDelegation`](../../reference/delegation/index.md#createopendelegation) to create an open redelegation. + +## Attenuating authority + +When creating chains of delegations via redelegations, it's important to understand how authority flows and can be restricted. + +- Each delegation in the chain inherits all restrictions from its parent delegation. +- New caveats can add further restrictions, but can't remove existing ones. + +This means that a delegate can only redelegate with equal or lesser authority than they received. + +## Delegation flow + +The delegation flow consists of the following steps: + +```mermaid +%%{ + init: { + 'sequence': { + 'actorMargin': 30, + 'width': 250 + } + } +}%% + +sequenceDiagram + participant Delegator + participant Delegate + participant Manager as Delegation Manager + participant Enforcer as Caveat enforcer + + Delegator->>Delegator: Create delegation with caveat enforcers + Delegator->>Delegator: Sign delegation + Delegator->>Delegate: Send signed delegation + Note right of Delegate: Hold delegation until redemption + + Delegate->>Manager: redeemDelegations() with delegation & execution details + Manager->>Delegator: isValidSignature() + Delegator-->>Manager: Confirm valid (or not) + + Manager->>Enforcer: beforeAllHook() + Note right of Manager: Expect no error + Manager->>Enforcer: beforeHook() + Note right of Manager: Expect no error + + Manager->>Delegator: executeFromExecutor() with execution details + Delegator->>Delegator: Perform execution + Note right of Manager: Expect no error + + Manager->>Enforcer: afterHook() + Note right of Manager: Expect no error + Manager->>Enforcer: afterAllHook() + Note right of Manager: Expect no error +``` + +### Step 1. Create a delegation + +The delegator creates a delegation, configuring a [scope](delegation-scopes.md) and +optional [caveats](caveat-enforcers.md) that define the conditions under which the delegation can be redeemed. + +### Step 2. Sign the delegation + +The delegator signs the delegation, producing a verifiable signature that the [Delegation Manager](delegation-manager.md) can later validate. + +### Step 3. Send the signed delegation + +The delegator sends the signed delegation to the delegate. A dapp can store the delegation in the storage solution +of their choice (such as a local database, Filecoin, or other databases), enabling retrieval for future redemption. + +### Step 4. Redeem the delegation + +The delegate submits the signed delegation to the Delegation Manager by calling `redeemDelegations()` with the +delegation and execution details. + +### Step 5. Validate the delegation + +The Delegation Manager validates the input data by ensuring the lengths of `delegations`, `modes`, and +`executions` match. It also verifies delegation signatures, ensuring validity using ECDSA (for EOAs) or +`isValidSignature` (for contracts). + +### Step 6. Execute `beforeHook` + +If the signature validation passes, the Delegation Manager executes the `beforeHook` for each [caveat](caveat-enforcers.md) +in the delegation, passing relevant data (`terms`, `arguments`, `mode`, `execution` `calldata`, and `delegationHash`) to +the caveat enforcer. + +### Step 7. Perform execution + +If `beforeHook` validation passes, the Delegation Manager calls `executeFromExecutor` to perform the delegation's +execution, either by the delegator or the caller for self-authorized executions. + +### Step 8. Execute `afterHook` + +The Delegation Manager runs each caveat enforcer's `afterHook` and `afterAllHook` to verify post-execution conditions. + +See [how to perform executions on a smart account's behalf](../../guides/delegation/execute-on-smart-accounts-behalf.md) for a step-by-step guide. + +## Delegation Framework + +The Smart Accounts Kit includes the Delegation Framework, a +[set of comprehensively audited smart contracts](https://github.com/MetaMask/delegation-framework) that +collectively handle smart account creation, the delegation lifecycle, and caveat enforcement. + +It consists of the following components: + +| Component | Description | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| [Delegation Manager](delegation-manager.md) | Validates delegations and triggers executions on behalf of the delegator, ensuring tasks are executed accurately and securely. | +| [Caveat enforcers](caveat-enforcers.md) | Manage rules and restrictions for delegations, providing fine-tuned control over delegated executions. | diff --git a/smart-accounts-kit/concepts/smart-accounts.md b/smart-accounts-kit/concepts/smart-accounts.md new file mode 100644 index 00000000000..22731c5837b --- /dev/null +++ b/smart-accounts-kit/concepts/smart-accounts.md @@ -0,0 +1,94 @@ +--- +description: Learn about MetaMask Smart Accounts. +keywords: [MetaMask, smart accounts, account abstraction, ERC-4337] +--- + +# MetaMask Smart Accounts + +The Smart Accounts Kit enables you to create and manage MetaMask Smart Accounts. +MetaMask Smart Accounts are [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart contract accounts +that support programmable account behavior and advanced features such as multi-signature approvals, +automated transaction batching, and custom security policies. +Unlike traditional wallets, which rely on private keys for every transaction, MetaMask Smart Accounts use smart contracts to govern account logic. + +MetaMask Smart Accounts are referenced in the toolkit as `MetaMaskSmartAccount`. + +## Account abstraction (ERC-4337) + +Account abstraction, specified by [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337), is a +mechanism that enables users to manage smart contract accounts containing arbitrary verification logic. +ERC-4337 enables smart contracts to be used as primary accounts in place of traditional private key-based +accounts, or externally owned accounts (EOAs). + +ERC-4337 introduces the following concepts: + +- **User operation** - A package of instructions signed by a user, specifying executions for + the smart account to perform. + User operations are collected and submitted to the network by bundlers. + +- **Bundler** - A service that collects multiple user operations, packages them into a single transaction, + and submits them to the network, optimizing gas costs and transaction efficiency. + +- **Entry point contract** - A contract that validates and processes bundled user operations, ensuring they + adhere to the required rules and security checks. + +- **Paymasters** - Entities that handle the payment of gas fees on behalf of users, often integrated + into smart accounts to facilitate gas abstraction. + +## Smart account implementation types + +The toolkit supports three types of MetaMask Smart Accounts, each offering unique features and use cases. + +See [Create a smart account](../guides/smart-accounts/create-smart-account.md) to learn how to use these different account types. + +### Hybrid smart account + +The Hybrid smart account is a flexible implementation that supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers. +You can configure any of these signers, and use them to sign any data, including user operations, on behalf of the smart account. + +This type is referenced in the toolkit as `Implementation.Hybrid`. + +### Multisig smart account + +The Multisig smart account is an implementation that supports multiple signers with a configurable threshold, allowing for enhanced security and flexibility in account management. +A valid signature requires signatures from at least the number of signers specified by the threshold. + +This type is referenced in the toolkit as `Implementation.Multisig`. + +### Stateless 7702 smart account + +The Stateless 7702 smart account implementation represents an externally owned account (EOA) upgraded to +support smart account functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). This implementation enables EOAs to perform smart account operations, including the creation and management of delegations. + +This type is referenced in the toolkit as `Implementation.Stateless7702`. + +## Smart account flow + +The MetaMask Smart Accounts flow is as follows: + +1. **Account setup** - A user creates a smart account by deploying a smart contract, and initializing it with + ownership and security settings. + The user can customize the smart account in the following ways: + - **Account logic** - They can configure custom logic for actions such as multi-signature + approvals, spending limits, and automated transaction batching. + + - **Security and recovery** - They can configure advanced security features such as two-factor + authentication and mechanisms for account recovery involving trusted parties. + + - **Gas management** - They can configure flexible gas payment options, including alternative + tokens or third-party sponsorship. + +2. **User operation creation** - For actions such as sending transactions, a user operation is created with + necessary details and signed by the configured signers. + +3. **Bundlers and mempool** - The signed user operation is submitted to a special mempool, where bundlers + collect and package multiple user operations into a single transaction to save on gas costs. + +4. **Validation and execution** - The bundled transaction goes to an entry point contract, which + validates each user operation and executes them if they meet the smart contract's rules. + +## Delegator accounts + +Delegator accounts are a type of MetaMask smart account that allows users to grant permission to other smart accounts or EOAs +to perform specific executions on their behalf, under defined rules and restrictions. +Learn more about [delegation](delegation/overview.md). diff --git a/smart-accounts-kit/get-started/install.md b/smart-accounts-kit/get-started/install.md new file mode 100644 index 00000000000..70b410e0dfc --- /dev/null +++ b/smart-accounts-kit/get-started/install.md @@ -0,0 +1,49 @@ +--- +sidebar_label: Install and set up +description: Learn how to install and set up the MetaMask Smart Accounts Kit. +keywords: [install, MetaMask, delegation, smart accounts kit, smart, accounts] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Install and set up the Smart Accounts Kit + +This page provides instructions to install and set up the Smart Accounts Kit in your dapp, enabling you to create and interact with MetaMask Smart Accounts. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- If you plan to use any smart contracts (for example, to + [create a custom caveat enforcer](/tutorials/create-custom-caveat-enforcer)), + install [Foundry](https://book.getfoundry.sh/getting-started/installation). + +## Steps + +### 1. Install the Smart Accounts Kit + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): + +```bash npm2yarn +npm install @metamask/smart-accounts-kit +``` + +### 2. (Optional) Install the contracts + +If you plan to extend the smart contracts (for example, to +[create a custom caveat enforcer](/tutorials/create-custom-caveat-enforcer)), install +the contract package using Foundry's command-line tool, Forge: + +```bash +forge install metamask/delegation-framework@v1.3.0 +``` + +Add `@metamask/delegation-framework/=lib/metamask/delegation-framework/` in your `remappings.txt` file. + +### 3. Get started + +You're now ready to start using the Smart Accounts Kit. +See the [MetaMask Smart Accounts quickstart](smart-account-quickstart/index.md) to walk through a simple example. diff --git a/smart-accounts-kit/get-started/smart-account-quickstart/eip7702.md b/smart-accounts-kit/get-started/smart-account-quickstart/eip7702.md new file mode 100644 index 00000000000..0433b224c0e --- /dev/null +++ b/smart-accounts-kit/get-started/smart-account-quickstart/eip7702.md @@ -0,0 +1,173 @@ +--- +description: Upgrade an externally owned account (EOA) to a smart account +sidebar_label: EIP-7702 quickstart +keywords: [quickstart, EIP-7702, externally owned account, EOA, smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# EIP-7702 quickstart + +This quickstart demonstrates how to upgrade your EOA to support +functionality using an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction. +This enables your EOA to leverage the benefits of account abstraction, such as batch transactions, gas sponsorship, and delegation. + +:::note +This guide is for embedded wallets. To upgrade a MetaMask account, you can [use MetaMask Connect to upgrade to a smart account](/tutorials/upgrade-eoa-to-smart-account). +::: + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- [Install Viem](https://viem.sh/). + +## Steps + +### 1. Install the Smart Accounts Kit + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): + +```bash npm2yarn +npm install @metamask/smart-accounts-kit +``` + +### 2. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +This client will let the EOA query the account state and interact with the blockchain network. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 3. Set up a Bundler Client + +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), +}) +``` + +### 4. Set up a Wallet Client + +Set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. +This lets you sign and submit [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) authorizations. + +```typescript +import { createWalletClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' +import { privateKeyToAccount } from 'viem/accounts' + +export const account = privateKeyToAccount('0x...') + +export const walletClient = createWalletClient({ + account, + chain, + transport: http(), +}) +``` + +### 5. Authorize a 7702 delegation + +Create an authorization to map the contract code to an EOA, and sign it +using Viem's [`signAuthorization`](https://viem.sh/docs/eip7702/signAuthorization) action. The `signAuthorization` action +does not support JSON-RPC accounts. + +This example uses [`EIP7702StatelessDeleGator`](https://github.com/MetaMask/delegation-framework/blob/main/src/EIP7702/EIP7702StatelessDeleGator.sol) as the [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) delegator contract. +It follows a stateless design, as it does not store signer data in the contract's state. This approach +provides a lightweight and secure way to upgrade an EOA to a . + +```typescript +import { + Implementation, + toMetaMaskSmartAccount, + getSmartAccountsEnvironment, +} from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' + +const environment = getSmartAccountsEnvironment(sepolia.id) +const contractAddress = environment.implementations.EIP7702StatelessDeleGatorImpl + +const authorization = await walletClient.signAuthorization({ + account, + contractAddress, + executor: 'self', +}) +``` + +### 6. Submit the authorization + +Once you have signed an authorization, you can send an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction to set the EOA code. +Since the authorization cannot be sent by itself, you can include it alongside a dummy transaction. + +```ts +import { zeroAddress } from 'viem' + +const hash = await walletClient.sendTransaction({ + authorizationList: [authorization], + data: '0x', + to: zeroAddress, +}) +``` + +### 7. Create a MetaMask smart account + +Create a smart account instance for the EOA and start +leveraging the benefits of account abstraction. + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const addresses = await walletClient.getAddresses() +const address = addresses[0] + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Stateless7702, + address, + signer: { walletClient }, +}) +``` + +### 8. Send a user operation + +Send a user operation through the upgraded EOA, using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. + +```ts +import { parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('1'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + +## Next steps + +- To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). +- To quickly bootstrap a MetaMask Smart Accounts project, [use the CLI](../use-the-cli.md). diff --git a/smart-accounts-kit/get-started/smart-account-quickstart/index.md b/smart-accounts-kit/get-started/smart-account-quickstart/index.md new file mode 100644 index 00000000000..3b07f1d26ea --- /dev/null +++ b/smart-accounts-kit/get-started/smart-account-quickstart/index.md @@ -0,0 +1,117 @@ +--- +description: Get started quickly with the MetaMask Smart Accounts +sidebar_label: Smart account quickstart +keywords: [quickstart, smart accounts, user operation] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# MetaMask Smart Accounts quickstart + +You can get started quickly with [MetaMask Smart Accounts](../../concepts/smart-accounts.md) by creating your first smart account and sending a user operation. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. + +## Steps + +### 1. Install the Smart Accounts Kit + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): + +```bash npm2yarn +npm install @metamask/smart-accounts-kit +``` + +### 2. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +This client will let the smart account query the signer's account state and interact with the blockchain network. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 3. Set up a Bundler Client + +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), +}) +``` + +### 4. Create a MetaMask smart account + +Create a to send the first user operation. + +This example configures a Hybrid smart account, +which is a flexible smart account implementation that supports both an EOA owner and any number of passkey (WebAuthn) signers: + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' + +const account = privateKeyToAccount('0x...') + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + +See [Create a MetaMask smart account](../../guides/smart-accounts/create-smart-account.md) to learn how to configure different smart account types. + +### 5. Send a user operation + +Send a user operation using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. + +The smart account will remain counterfactual until the first user operation. If the smart account is not +deployed, it will be automatically deployed upon the sending first user operation. + +```ts +import { parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('1'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + +See [Send a user operation](../../guides/smart-accounts/send-user-operation.md) to learn how to estimate fee per gas, and wait for the transaction receipt. + +## Next steps + +- To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). +- This quickstart example uses a Hybrid smart account. + You can also [configure other smart account types](../../guides/smart-accounts/create-smart-account.md). +- To upgrade an EOA to a smart account, see the [EIP-7702 quickstart](eip7702.md). +- To quickly bootstrap a MetaMask Smart Accounts project, [use the CLI](../use-the-cli.md). diff --git a/smart-accounts-kit/get-started/supported-advanced-permissions.md b/smart-accounts-kit/get-started/supported-advanced-permissions.md new file mode 100644 index 00000000000..277029fa993 --- /dev/null +++ b/smart-accounts-kit/get-started/supported-advanced-permissions.md @@ -0,0 +1,23 @@ +--- +title: Supported Advanced Permissions +description: Supported Advanced Permissions for Smart Accounts Kit, MetaMask Flask, and MetaMask. +keywords: [MetaMask, smart accounts kit, supported advanced permissions, erc-7715, 7715] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +The following table displays the types supported by +the Smart Accounts Kit, [MetaMask Flask](/snaps/get-started/install-flask), and MetaMask production, and the minimum version required for each. + +If you don't see the Advanced Permissions type you're looking for, you can request it by +emailing [`hellogators@consensys.net`](mailto:hellogators@consensys.net). + +| Permission type | Smart Accounts Kit | MetaMask Flask | MetaMask | +| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------- | ----------- | +| [ERC-20 allowance](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-allowance-permission) | >= v1.4.0 | >= v13.32.1-flask.0 | >= v13.32.1 | +| [ERC-20 periodic](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [ERC-20 stream](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Native token allowance](../guides/advanced-permissions/use-permissions/native-token.md#native-token-allowance-permission) | >= v1.4.0 | >= v13.32.1-flask.0 | >= v13.32.1 | +| [Native token periodic](../guides/advanced-permissions/use-permissions/native-token.md#native-token-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Native token stream](../guides/advanced-permissions/use-permissions/native-token.md#native-token-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Token approval revocation](../guides/advanced-permissions/use-permissions/approval-revocation.md#token-approval-revocation-permission) | >= v1.6.0 | - | - | diff --git a/smart-accounts-kit/get-started/supported-networks.md b/smart-accounts-kit/get-started/supported-networks.md new file mode 100644 index 00000000000..7a9d307b917 --- /dev/null +++ b/smart-accounts-kit/get-started/supported-networks.md @@ -0,0 +1,108 @@ +--- +title: Supported networks +sidebar_label: Supported networks +description: Supported networks for Smart Accounts Kit. +keywords: [MetaMask, smart accounts kit, supported networks, mainnet, testnet] +--- + +The following tables display the networks supported by each version of the Smart Accounts Kit. + +If you don't see the network you're looking for, you can request support by emailing [`hellogators@consensys.net`](mailto:hellogators@consensys.net). + +## MetaMask Smart Accounts + +### Mainnet networks + +| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| ------------------- | ------ | ------ | ------ | ------ | +| Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | +| Arbitrum One | ✅ | ✅ | ✅ | ✅ | +| Base | ✅ | ✅ | ✅ | ✅ | +| Berachain | ✅ | ✅ | ✅ | ✅ | +| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | +| Celo | ❌ | ✅ | ✅ | ✅ | +| Citrea | ❌ | ✅ | ✅ | ✅ | +| Ethereum | ✅ | ✅ | ✅ | ✅ | +| Gnosis Chain | ✅ | ✅ | ✅ | ✅ | +| Ink | ✅ | ✅ | ✅ | ✅ | +| Katana | ❌ | ❌ | ❌ | ✅ | +| Linea | ✅ | ✅ | ✅ | ✅ | +| Mantle | ❌ | ❌ | ✅ | ✅ | +| MegaETH | ❌ | ✅ | ✅ | ✅ | +| Monad | ✅ | ✅ | ✅ | ✅ | +| Optimism | ✅ | ✅ | ✅ | ✅ | +| Polygon | ✅ | ✅ | ✅ | ✅ | +| Ronin | ❌ | ✅ | ✅ | ✅ | +| Sei | ✅ | ✅ | ✅ | ✅ | +| Sonic | ✅ | ✅ | ✅ | ✅ | +| Tempo | ❌ | ✅ | ✅ | ✅ | +| Unichain | ✅ | ✅ | ✅ | ✅ | + +### Testnet networks + +| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| ------------------- | ------ | ------ | ------ | ------ | +| Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | +| Base Sepolia | ✅ | ✅ | ✅ | ✅ | +| Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | +| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | +| Celo Alfajores | ❌ | ✅ | ✅ | ✅ | +| Citrea | ✅ | ✅ | ✅ | ✅ | +| Ethereum Sepolia | ✅ | ✅ | ✅ | ✅ | +| Gnosis Chiado | ✅ | ✅ | ✅ | ✅ | +| Hoodi | ✅ | ✅ | ✅ | ✅ | +| Ink Sepolia | ✅ | ✅ | ✅ | ✅ | +| Bokuto | ❌ | ❌ | ❌ | ✅ | +| Linea Sepolia | ✅ | ✅ | ✅ | ✅ | +| Mantle Sepolia | ❌ | ❌ | ✅ | ✅ | +| MegaETH | ✅ | ✅ | ✅ | ✅ | +| Monad | ✅ | ✅ | ✅ | ✅ | +| Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | +| Polygon Amoy | ✅ | ✅ | ✅ | ✅ | +| Ronin Saigon | ❌ | ✅ | ✅ | ✅ | +| Sei | ✅ | ✅ | ✅ | ✅ | +| Sonic | ✅ | ✅ | ✅ | ✅ | +| Tempo Moderato | ❌ | ✅ | ✅ | ✅ | +| Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | + +## Advanced Permissions (ERC-7715) + +### Mainnet networks + +| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| ------------------- | ------ | ------ | ------ | ------ | +| Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | +| Arbitrum One | ✅ | ✅ | ✅ | ✅ | +| Base | ✅ | ✅ | ✅ | ✅ | +| Berachain | ✅ | ✅ | ✅ | ✅ | +| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | +| Citrea | ✅ | ✅ | ✅ | ✅ | +| Ethereum | ✅ | ✅ | ✅ | ✅ | +| Gnosis | ✅ | ✅ | ✅ | ✅ | +| Linea | ✅ | ✅ | ✅ | ✅ | +| Monad | ✅ | ✅ | ✅ | ✅ | +| Optimism | ✅ | ✅ | ✅ | ✅ | +| Polygon | ✅ | ✅ | ✅ | ✅ | +| Sei | ✅ | ✅ | ✅ | ✅ | +| Sonic | ✅ | ✅ | ✅ | ✅ | +| Unichain | ✅ | ✅ | ✅ | ✅ | + +### Testnet networks + +| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| ------------------- | ------ | ------ | ------ | ------ | +| Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | +| Base Sepolia | ✅ | ✅ | ✅ | ✅ | +| Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | +| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | +| Chiado | ✅ | ✅ | ✅ | ✅ | +| Citrea | ✅ | ✅ | ✅ | ✅ | +| Hoodi | ✅ | ✅ | ✅ | ✅ | +| Linea Sepolia | ✅ | ✅ | ✅ | ✅ | +| MegaETH | ✅ | ✅ | ✅ | ✅ | +| Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | +| Polygon Amoy | ✅ | ✅ | ✅ | ✅ | +| Sei | ✅ | ✅ | ✅ | ✅ | +| Sepolia | ✅ | ✅ | ✅ | ✅ | +| Sonic | ✅ | ✅ | ✅ | ✅ | +| Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | diff --git a/smart-accounts-kit/get-started/use-scaffold-eth/advanced-permissions.md b/smart-accounts-kit/get-started/use-scaffold-eth/advanced-permissions.md new file mode 100644 index 00000000000..03ec33087d7 --- /dev/null +++ b/smart-accounts-kit/get-started/use-scaffold-eth/advanced-permissions.md @@ -0,0 +1,62 @@ +--- +description: Get started with the Advanced Permissions (ERC-7715) using Scaffold-ETH 2. +sidebar_label: Advanced Permissions (ERC-7715) +keywords: [scaffold-eth, delegation, advanced permissions, erc7715, 7715, template] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use Advanced Permissions with Scaffold-ETH 2 + +Use the [Advanced Permissions (ERC-7715) extension](https://github.com/MetaMask/erc-7715-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in +under two minutes. This extension helps you quickly generate the boilerplate code to request fine-grained permissions +from a MetaMask user, and execute transactions on their behalf. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v20.18.3) v20.18.3 or later. +- Install [Yarn](https://yarnpkg.com/) package manager. +- Install [Git](https://git-scm.com/install/). +- [Create a Pimlico API key](https://docs.pimlico.io/guides/create-api-key#create-api-key). + +### 1. Install the extension + +Run the following command to install the Smart Accounts Kit extension: + +```bash +npx create-eth@latest -e metamask/erc-7715-extension your-project-name +``` + +### 2. Set up environment variables + +Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the +`NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. + +```bash +cd your-project-name/packages/nextjs +cp .env.example .env.local +``` + +### 3. Start the frontend + +In the project's root directory start the development server. + +```bash +yarn start +``` + +### 4. Complete the Advanced Permissions lifecycle + +Navigate to the **Advanced Permissions (ERC-7715)** page in your Scaffold-ETH +frontend at http://localhost:3000/erc-7715-permissions, and follow the steps to request an advanced +permission, and execute a transaction on the user's behalf. + +You can view the completed transaction on Etherscan. + +

+ Scaffold-ETH 2 Advanced Permissions Page +

+ +## Next steps + +Learn more about [Advanced Permissions (ERC-7715)](../../concepts/advanced-permissions.md). diff --git a/smart-accounts-kit/get-started/use-scaffold-eth/smart-accounts.md b/smart-accounts-kit/get-started/use-scaffold-eth/smart-accounts.md new file mode 100644 index 00000000000..568d63a0082 --- /dev/null +++ b/smart-accounts-kit/get-started/use-scaffold-eth/smart-accounts.md @@ -0,0 +1,65 @@ +--- +description: Get started with the MetaMask Smart Accounts using Scaffold-ETH 2. +sidebar_label: MetaMask Smart Accounts +keywords: [scaffold-eth, delegation, smart accounts, template] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use MetaMask Smart Accounts with Scaffold-ETH 2 + +Use the [MetaMask Smart Accounts extension](https://github.com/metamask/gator-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in +under two minutes. This extension helps you quickly generate the boilerplate code to create an embedded smart account, and complete +the delegation lifecycle (create, sign, and redeem a delegation). + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v20.18.3) v20.18.3 or later. +- Install [Yarn](https://yarnpkg.com/) package manager. +- Install [Git](https://git-scm.com/install/). +- [Create a Pimlico API key](https://docs.pimlico.io/guides/create-api-key#create-api-key). + +## Steps + +### 1. Install the extension + +Run the following command to install the Smart Accounts Kit extension: + +```bash +npx create-eth@latest -e metamask/gator-extension your-project-name +``` + +### 2. Set up environment variables + +Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the +`NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. + +```bash +cd your-project-name/packages/nextjs +cp .env.example .env.local +``` + +### 3. Start the frontend + +In the project's root directory start the development server. + +```bash +yarn start +``` + +### 4. Complete the delegation lifecycle + +Navigate to the **MetaMask Smart Accounts & Delegation** page in your Scaffold-ETH +frontend at http://localhost:3000/delegations, and follow the steps to deploy a delegator +account, create a delegate wallet, +and create and redeem a delegation. + +You can view the completed transaction on Etherscan. + +

+ Scaffold-ETH 2 Smart Accounts & Delegation Page +

+ +## Next steps + +Learn more about [MetaMask Smart Accounts](../../concepts/smart-accounts.md) and [delegation](../../concepts/delegation/overview.md). diff --git a/smart-accounts-kit/get-started/use-skills.md b/smart-accounts-kit/get-started/use-skills.md new file mode 100644 index 00000000000..304e082f5cf --- /dev/null +++ b/smart-accounts-kit/get-started/use-skills.md @@ -0,0 +1,59 @@ +--- +sidebar_label: Use skills +description: Use MetaMask Smart Accounts Kit skills with agent frameworks to build dapps +toc_max_heading_level: 2 +keywords: + [skill, delegation, smart accounts, ai, metamask smart accounts kit, agent framework, x402] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use skills + +Use skills to give your agent framework context on the MetaMask Smart Accounts Kit. +Skills guide your agent through smart account creation, delegations, (ERC-7715), and [x402](../guides/x402/overview.md) +payments. + +Skills are available through the open-source [`MetaMask/skills`](https://github.com/MetaMask/skills) +repository. + +## Smart Accounts Kit + +This skill gives your agent context on the Smart Accounts Kit and how to integrate its +capabilities into your dapp, including smart account creation, delegations, and Advanced +Permissions. + +```bash +npx skills add MetaMask/skills/domains/web3-tools/skills/smart-accounts-kit +``` + +### Key capabilities + +| Capability | Description | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Smart accounts | Integrate MetaMask Smart Accounts to support batch transactions, multi-sig signatures, and gas sponsorship. | +| Delegation | Integrate delegations to execute transactions on behalf of a smart account. | +| Advanced Permissions | Integrate Advanced Permissions to execute transactions on behalf of a MetaMask user. | + +## x402 Payments + +This skill helps your agent implement [x402 HTTP-based payments](../guides/x402/overview.md) using +the Smart Accounts Kit, enabling both buyer and seller flows with delegations and Advanced +Permissions. + +```bash +npx skills add MetaMask/skills/domains/web3-tools/skills/x402-payments +``` + +### Key capabilities + +| Capability | Description | +| ---------- | --------------------------------------------------------------------------- | +| Seller | Set up x402 payment endpoints that accept HTTP 402-based payments. | +| Buyer | Pay for x402-protected resources using delegations or Advanced Permissions. | + +## Next steps + +- [Install the Smart Accounts Kit](./install.md) +- [Create your first smart account](./smart-account-quickstart/index.md) +- [Learn about x402 payments](../guides/x402/overview.md) diff --git a/smart-accounts-kit/get-started/use-the-cli.md b/smart-accounts-kit/get-started/use-the-cli.md new file mode 100644 index 00000000000..9cfca3407ed --- /dev/null +++ b/smart-accounts-kit/get-started/use-the-cli.md @@ -0,0 +1,84 @@ +--- +description: Get started with the MetaMask Smart Accounts Kit using the CLI. +sidebar_label: Use the CLI +keywords: [CLI, delegation, smart accounts, template] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use the Smart Accounts Kit CLI + +Use the `@metamask/create-gator-app` interactive CLI to bootstrap a project with the Smart Accounts Kit in under two minutes. +The CLI automatically installs the required dependencies and sets up a project structure using a selected template, +allowing you to focus on building your dapp. + +## Run the CLI + +Run the following command to automatically install the `@metamask/create-gator-app` package: + +```bash +npx @metamask/create-gator-app@latest +``` + +Upon installation, you'll be asked the following prompts: + +```bash +? What is your project named? (my-gator-app) +? Pick a framework: (Use arrow keys) +❯ nextjs + vite-react + node +? Pick a template: (Use arrow keys) +❯ MetaMask Smart Accounts Starter + MetaMask Smart Accounts & Delegation Starter + Farcaster Mini App Delegation Starter + Advanced Permissions (ERC-7715) Starter +? Pick a package manager: (Use arrow keys) +❯ npm + yarn + pnpm +``` + +Once you've answered the prompts with the required configuration and selected a template, the CLI will create the +project using the specified name and settings. +See the following section to learn more about available CLI configurations. + +## Options + +The CLI provides the following options to display CLI details, and further customize the template configuration. + +| Option | Description | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-v` or `--version` | Check the current version of the `@metamask/create-gator-app` CLI. | +| `-h` or `--help` | Display the available options. | +| `--skip-install` | Skip the installation of dependencies. | +| `--add-web3auth` | Add [MetaMask Embedded Wallets (previously Web3Auth)](/embedded-wallets) as a signer for the delegator account.

Supported templates:
- MetaMask Smart Accounts Starter
- MetaMask Smart Accounts & Delegation Starter | + +## Examples + +### MetaMask Embedded Wallets configuration + +To create a project that uses [MetaMask Embedded Wallets](/embedded-wallets) as the signer for your +delegator account, use the `--add-web3auth` option with `@metamask/create-gator-app`: + +```bash +npx @metamask/create-gator-app --add-web3auth +``` + +You'll be prompted to provide additional Web3Auth configuration details: + +```bash +? Which Web3Auth network do you want to use? (Use arrow keys) +❯ Sapphire Devnet + Sapphire Mainnet +``` + +## Supported templates + +| Template | Next.js | Vite React | Node.js | +| ------------------------------------------------ | ------- | ---------- | ------- | +| MetaMask Smart Accounts Starter | ✅ | ✅ | ❌ | +| MetaMask Smart Accounts & Delegation Starter | ✅ | ✅ | ❌ | +| Farcaster Mini App Delegation Starter | ✅ | ❌ | ❌ | +| Advanced Permissions (ERC-7715) Starter | ✅ | ❌ | ❌ | +| x402 Server | ❌ | ❌ | ✅ | diff --git a/smart-accounts-kit/guides/advanced-permissions/create-redelegation.md b/smart-accounts-kit/guides/advanced-permissions/create-redelegation.md new file mode 100644 index 00000000000..9c58bc89b61 --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/create-redelegation.md @@ -0,0 +1,168 @@ +--- +description: Learn how to create a redelegation for Advanced Permissions. +sidebar_label: Create a redelegation +keywords: [advanced permissions, caveat, delegation scope, redelegation, delegation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Create a redelegation + +Redelegation is a core feature that sets apart from other permission sharing frameworks. +It allows a session account (delegate) to create a delegation chain, passing on the same or reduced level of authority +from the MetaMask account (delegator). + +For example, if a dapp is granted permission to spend 10 USDC on a user's behalf, it can +further delegate that permission to specific agents, such as allowing a Swap agent to spend +up to 5 USDC. This creates a permission sharing chain in which the root permissions are +shared with additional parties. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) +- [Learn how to request Advanced Permissions.](execute-on-metamask-users-behalf.md) + +## Request Advanced Permissions + +Request Advanced Permissions from the user with the Wallet Client's [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) action. + +This example uses the [ERC-20 periodic permission](./use-permissions/erc20-token.md#erc-20-periodic-permission), allowing the +user to grant dapp the ability to spend 10 USDC on their behalf. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { sessionAccount, walletClient, tokenAddress } from './config.ts' +import { parseUnits } from 'viem' + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress, + // 10 USDC in wei format. Since USDC has 6 decimals, 10 * 10^6 + periodAmount: parseUnits('10', 6), + // 1 day in seconds + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + + +```ts +import { createWalletClient, custom, createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' +import { erc7715ProviderActions, erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' +import { sepolia as chain } from 'viem/chains' + +// USDC address on Ethereum Sepolia. +export const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +export const sessionAccount = createWalletClient({ + account, + chain, + transport: http(), +}).extend(erc7710WalletActions()) + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## Create a redelegation + +Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from dapp to a Swap agent. + +To create a redelegation, provide the granted permission context as the `permissionContext` argument when calling [`redelegatePermissionContext`](../../reference/erc7710/wallet-client.md#redelegatepermissioncontext). +In the previous step, `sessionAccount` was extended with `erc7710WalletActions`. + +When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) +to narrow the Swap agent's authority. In this example, we'll use [`erc20TransferAmount`](../../reference/delegation/caveats.md#erc20transferamount) +enforcer, allowing your dapp to delegate the Swap agent only the ability to spend 5 USDC on the user's behalf. + +:::note +When creating a redelegation, you can only narrow the scope of the original authority, not expand it. +::: + + + + +```typescript +import { sessionAccount, agentAccount, tokenAddress } from './config.ts' +import { + createDelegation, + ScopeType, + getSmartAccountsEnvironment, + Caveats, + CaveatType, +} from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const caveats: Caveats = [ + { + type: CaveatType.Erc20TransferAmount, + tokenAddress, + // USDC has 6 decimal places. + maxAmount: parseUnits('5', 6), + }, +] + +const environment = getSmartAccountsEnvironment(chain.id) + +const { permissionContext: signedPermissionContext } = + await sessionAccount.redelegatePermissionContext({ + to: agentAccount.address, + environment, + permissionContext: grantedPermissions[0].context, + caveats, + }) +``` + + + + +```typescript +// Update the existing config to create a smart account for a Swap agent. + +const agentPrivateKey = '0x...' +export const agentAccount = privateKeyToAccount(agentPrivateKey) +``` + + + diff --git a/smart-accounts-kit/guides/advanced-permissions/execute-on-metamask-users-behalf.md b/smart-accounts-kit/guides/advanced-permissions/execute-on-metamask-users-behalf.md new file mode 100644 index 00000000000..ded0307650c --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/execute-on-metamask-users-behalf.md @@ -0,0 +1,327 @@ +--- +description: Use Advanced Permissions (ERC-7715) to perform executions on a MetaMask user's behalf. +sidebar_label: Execute on a MetaMask user's behalf +keywords: + [ + execution, + smart account, + create, + redeem, + delegation, + erc 7715, + 7715, + session account, + advanced permissions, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Perform executions on a MetaMask user's behalf + +[Advanced Permissions (ERC-7715)](../../concepts/advanced-permissions.md) are fine-grained permissions that your dapp can request from a MetaMask user to execute transactions on their +behalf. For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course +of a month. Once the permission is granted, your dapp can use the allocated 10 USDC each day to +purchase ETH directly from the MetaMask user's account. + +In this guide, you'll request an ERC-20 periodic transfer permission from a MetaMask user to transfer 1 USDC every day on their behalf. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Install MetaMask Flask 13.5.0 or later.](/snaps/get-started/install-flask) + +## Steps + +### 1. Set up a Wallet Client + +Set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. This client will +help you interact with MetaMask Flask. + +Then, extend the Wallet Client functionality using `erc7715ProviderActions`. +These actions enable you to request from the user. + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + +### 2. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +This client will help you query the account state and interact with the blockchain network. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 3. Set up a session account + +Set up a session account, which can be either a smart account or an +EOA, +to request . The requested permissions are granted to the session account, which +is responsible for executing transactions on behalf of the user. + + + + +```typescript +import { privateKeyToAccount } from 'viem/accounts' +import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' + +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +const sessionAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + + + + +```typescript +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { createWalletClient, http } from 'viem' + +const sessionAccount = privateKeyToAccount('0x...') +``` + + + + +### 4. Check the EOA account code + +With MetaMask Flask 13.9.0 or later, Advanced Permissions support automatically upgrading a user's +account to a [MetaMask smart account](../../concepts/smart-accounts.md). On earlier versions, upgrade +the user to a smart account before requesting Advanced Permissions. + +If the user has not yet been upgraded, you can handle the upgrade [programmatically](/metamask-connect/evm/guides/send-transactions/batch-transactions) or ask the +user to [switch to a smart account manually](https://support.metamask.io/configure/accounts/switch-to-or-revert-from-a-smart-account/#how-to-switch-to-a-metamask-smart-account). + +:::info Why is a Smart Account upgrade is required? +MetaMask's Advanced Permissions (ERC-7715) implementation requires the user to be upgraded to a MetaMask +Smart Account because, under the hood, you're requesting a signature for an [ERC-7710 delegation](../../concepts/delegation/overview.md). +ERC-7710 delegation is one of the core features supported only by MetaMask Smart Accounts. +::: + +```typescript +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' + +const addresses = await walletClient.requestAddresses() +const address = addresses[0] + +// Get the EOA account code +const code = await publicClient.getCode({ + address, +}) + +if (code) { + // The address to which EOA has delegated. According to EIP-7702, 0xef0100 || address + // represents the delegation. + // + // You need to remove the first 8 characters (0xef0100) to get the delegator address. + const delegatorAddress = `0x${code.substring(8)}` + + const statelessDelegatorAddress = getSmartAccountsEnvironment(chain.id).implementations + .EIP7702StatelessDeleGatorImpl + + // If account is not upgraded to MetaMask smart account, you can + // either upgrade programmatically or ask the user to switch to a smart account manually. + const isAccountUpgraded = + delegatorAddress.toLowerCase() === statelessDelegatorAddress.toLowerCase() +} +``` + +### 5. Request Advanced Permissions + +Request Advanced Permissions from the user with the Wallet Client's `requestExecutionPermissions` action. +In this example, you'll request an +[ERC-20 periodic permission](use-permissions/erc20-token.md#erc-20-periodic-permission). + +See the [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) API reference for more information. + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress, + // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6 + periodAmount: parseUnits('10', 6), + // 1 day in seconds + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + +### 6. Set up a Viem client + +Set up a Viem client depending on your session account type. + +For a smart account, set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service +to estimate gas for user operations and submit transactions to the network. + +For an EOA, set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. +This lets you send transactions directly to the network. + +The toolkit provides public actions for both of the clients which can be used to redeem Advanced Permissions, and execute transactions on a user's behalf. + + + + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' +import { erc7710BundlerActions } from '@metamask/smart-accounts-kit/actions' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), + // Allows you to use the same Bundler Client as paymaster. + paymaster: true, +}).extend(erc7710BundlerActions()) +``` + + + + +```typescript +import { createWalletClient, http } from 'viem' +import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' +import { sepolia as chain } from 'viem/chains' + +const sessionAccountWalletClient = createWalletClient({ + account: sessionAccount, + chain, + transport: http(), +}).extend(erc7710WalletActions()) +``` + + + + +### 7. Redeem Advanced Permissions + +The session account can now redeem the permissions. The redeem transaction is sent to the `DelegationManager` contract, which validates the delegation and executes actions on the user's behalf. + +To redeem the permissions, use the client action based on your session account type. +A smart account uses the Bundler Client's `sendUserOperationWithDelegation` action, +and an EOA uses the Wallet Client's `sendTransactionWithDelegation` action. + +See the [`sendUserOperationWithDelegation`](../../reference/erc7710/bundler-client.md#senduseroperationwithdelegation) and [`sendTransactionWithDelegation`](../../reference/erc7710/wallet-client.md#sendtransactionwithdelegation) API reference for more information. + + + + +```typescript +import { calldata } from './config.ts' + +// These properties must be extracted from the permission response. +const permissionContext = grantedPermissions[0].context +const delegationManager = grantedPermissions[0].delegationManager + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +// Calls without permissionContext and delegationManager will be executed +// as a normal user operation. +const userOperationHash = await bundlerClient.sendUserOperationWithDelegation({ + publicClient, + account: sessionAccount, + calls: [ + { + to: tokenAddress, + data: calldata, + permissionContext, + delegationManager, + }, + ], + // Appropriate values must be used for fee-per-gas. + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n, +}) +``` + + + + +```typescript +import { calldata } from './config.ts' + +// These properties must be extracted from the permission response. +const permissionContext = grantedPermissions[0].context +const delegationManager = grantedPermissions[0].delegationManager + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const transactionHash = await sessionAccountWalletClient.sendTransactionWithDelegation({ + to: tokenAddress, + data: calldata, + permissionContext, + delegationManager, +}) +``` + + + + + +```typescript +import { encodeFunctionData, erc20Abi, parseUnits } from 'viem' + +export const calldata = encodeFunctionData({ + abi: erc20Abi, + args: [sessionAccount.address, parseUnits('1', 6)], + functionName: 'transfer', +}) +``` + + + + +## Next steps + +- See how to [get the supported execution permissions](get-supported-permissions.md). +- See how to configure different [ERC-20 token permissions](use-permissions/erc20-token.md) and + [native token permissions](use-permissions/native-token.md). diff --git a/smart-accounts-kit/guides/advanced-permissions/get-granted-permissions.md b/smart-accounts-kit/guides/advanced-permissions/get-granted-permissions.md new file mode 100644 index 00000000000..ff473d73974 --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/get-granted-permissions.md @@ -0,0 +1,73 @@ +--- +description: Learn how to get the granted Advanced Permissions for a wallet. +sidebar_label: Get granted permissions +keywords: [advanced permissions, granted execution permissions, erc-7715, 7715] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Get granted permissions + +[ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the granted execution permissions +for a wallet. Use the method to get the granted for a wallet. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) + +## Request granted permissions + +Request the granted Advanced Permissions for a wallet with the +Wallet Client's [`getGrantedExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#getgrantedexecutionpermissions) action. + + + + +```ts +[ + { + chainId: 84532, + context: "0x0000...0000", + delegationManager: "0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3", + dependencies: [], + from: "0x993fC0d346A8AfA40Da014bA8834A56cE8B17f31", + permission: { + type: "erc20-token-periodic", + isAdjustmentAllowed: false, + data: { ... }, + }, + rules: [ + { type: "expiry", data: { ... } }, + ], + to: "0xAB57cfCDaF510594eA68D47ffBEF04Ebf73e7F1f", + }, + // ... +] +``` + + + + +```typescript +import { walletClient } from './config.ts' + +const grantedExecutionPermissions = await walletClient.getGrantedExecutionPermissions() +``` + + + + +```ts +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/smart-accounts-kit/guides/advanced-permissions/get-supported-permissions.md b/smart-accounts-kit/guides/advanced-permissions/get-supported-permissions.md new file mode 100644 index 00000000000..6c62bf2c61d --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/get-supported-permissions.md @@ -0,0 +1,69 @@ +--- +description: Learn how to get supported Advanced Permissions for a wallet. +sidebar_label: Get supported permissions +keywords: [advanced permissions, supported execution permissions, erc-7715, 7715] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Get supported permissions + +[ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the execution permissions +a wallet supports. Use the method to verify the available types and +rules before sending requests. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit](../../get-started/install.md) +- [Learn about Advanced Permissions](../../concepts/advanced-permissions.md) + +## Request supported permissions + +Request the supported Advanced Permissions types for a wallet with the +Wallet Client's [`getSupportedExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#getsupportedexecutionpermissions) action. + + + + +```ts +{ + "native-token-stream": { + "chainIds": [ + 1, + 10, + ], + "ruleTypes": [ + "expiry" + ] + }, + // ... +} +``` + + + + +```typescript +import { walletClient } from './config.ts' + +const supportedPermissions = await walletClient.getSupportedExecutionPermissions() +``` + + + + +```ts +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +See the full list of [supported Advanced Permissions](../../get-started/supported-advanced-permissions.md). diff --git a/smart-accounts-kit/guides/advanced-permissions/use-permissions/approval-revocation.md b/smart-accounts-kit/guides/advanced-permissions/use-permissions/approval-revocation.md new file mode 100644 index 00000000000..2ae1b7c41c4 --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/use-permissions/approval-revocation.md @@ -0,0 +1,80 @@ +--- +description: Learn how to use the token approval revocation permission with Advanced Permissions (ERC-7715). +keywords: [permissions, revocation, approval, 7715, erc-7715, erc20, erc721, permit2] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Use approval revocation permission + +[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports the token approval +revocation permission type that allows you to request permission to revoke existing token approvals +on behalf of the user. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) + +## Token approval revocation permission + +This permission type enables revoking existing token approvals on behalf of the user. + +For example, a user signs an ERC-7715 permission that lets a dapp revoke any ERC-20 token +allowances periodically, or during an ongoing exploit. + +See the [token approval revocation permission API reference](../../../reference/advanced-permissions/permissions.md#token-approval-revocation-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) + +// 30 days from now. +const expiry = currentTime + 60 * 60 * 24 * 30 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'token-approval-revocation', + data: { + erc20Approve: true, + erc721Approve: false, + erc721SetApprovalForAll: false, + permit2Approve: true, + permit2Lockdown: false, + permit2InvalidateNonces: false, + justification: 'Permission to revoke ERC-20 token approvals', + }, + isAdjustmentAllowed: false, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/smart-accounts-kit/guides/advanced-permissions/use-permissions/erc20-token.md b/smart-accounts-kit/guides/advanced-permissions/use-permissions/erc20-token.md new file mode 100644 index 00000000000..efc34146e80 --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/use-permissions/erc20-token.md @@ -0,0 +1,213 @@ +--- +description: Learn how to use the ERC-20 token permissions with Advanced Permissions (ERC-7715). +keywords: [permissions, spending limit, restrict, 7715, erc-7715, erc20-permissions] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Use ERC-20 token permissions + +[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports ERC-20 token permission types that allow you to request fine-grained +permissions for ERC-20 token transfers with periodic, fixed allowance, or streaming conditions, depending on your use case. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) + +## ERC-20 allowance permission + +This permission type ensures a fixed ERC-20 token allowance. +It allows transfers up to a maximum total amount and doesn't reset by period. + +For example, a user signs an ERC-7715 permission that lets your dapp spend up to 50 USDC in total. +After the dapp transfers 50 USDC, no additional transfers are allowed under this permission. + +See the [ERC-20 allowance permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-allowance-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-allowance', + data: { + tokenAddress, + // 50 USDC in WEI format. Since USDC has 6 decimals, 50 * 10^6. + allowanceAmount: parseUnits('50', 6), + startTime: currentTime, + justification: 'Permission to transfer up to 50 USDC in total', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## ERC-20 periodic permission + +This permission type ensures a per-period limit for ERC-20 token transfers. At the start of each new period, the allowance resets. + +For example, a user signs an ERC-7715 permission that lets a dapp spend up to 10 USDC on their behalf each day. The dapp can transfer a total of +10 USDC per day; the limit resets at the beginning of the next day. + +See the [ERC-20 periodic permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-periodic-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress, + // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6. + periodAmount: parseUnits('10', 6), + // 1 day in seconds. + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## ERC-20 stream permission + +This permission type ensures a linear streaming transfer limit for ERC-20 tokens. Token transfers are blocked until the +defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the +configured rate, up to the maximum allowed amount. + +For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.1 USDC per second, starting with an initial amount +of 1 USDC, up to a maximum of 2 USDC. + +See the [ERC-20 stream permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-stream-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-stream', + data: { + tokenAddress, + // 0.1 USDC in WEI format. Since USDC has 6 decimals, 0.1 * 10^6. + amountPerSecond: parseUnits('0.1', 6), + // 1 USDC in WEI format. Since USDC has 6 decimals, 1 * 10^6. + initialAmount: parseUnits('1', 6), + // 2 USDC in WEI format. Since USDC has 6 decimals, 2 * 10^6. + maxAmount: parseUnits('2', 6), + startTime: currentTime, + justification: 'Permission to use 0.1 USDC per second', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/smart-accounts-kit/guides/advanced-permissions/use-permissions/native-token.md b/smart-accounts-kit/guides/advanced-permissions/use-permissions/native-token.md new file mode 100644 index 00000000000..ee1c184dbb5 --- /dev/null +++ b/smart-accounts-kit/guides/advanced-permissions/use-permissions/native-token.md @@ -0,0 +1,210 @@ +--- +description: Learn how to use the native token permissions with Advanced Permissions (ERC-7715). +keywords: + [ + permissions, + spending limit, + restrict, + 7715, + erc-7715, + native-token-permissions, + advanced permissions, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Use native token permissions + +[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports native token permission types that allow you to request fine-grained +permissions for native token transfers with periodic, fixed-allowance, or streaming conditions, depending on your use case. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) + +## Native token allowance permission + +This permission type ensures a fixed native token allowance. +It allows transfers up to a maximum total amount and doesn't reset by period. + +For example, a user signs an ERC-7715 permission that lets your dapp spend up to 0.05 ETH in total. +After the dapp transfers 0.05 ETH, no additional transfers are allowed under this permission. + +See the [native token allowance permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-allowance-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseEther } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'native-token-allowance', + data: { + // 0.05 ETH in wei format. + allowanceAmount: parseEther('0.05'), + startTime: currentTime, + justification: 'Permission to transfer up to 0.05 ETH in total', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## Native token periodic permission + +This permission type ensures a per-period limit for native token transfers. At the start of each new period, the allowance resets. + +For example, a user signs an ERC-7715 permission that lets a dapp spend up to 0.001 ETH on their behalf each day. The dapp can transfer a total of +0.001 ETH per day; the limit resets at the beginning of the next day. + +See the [native token periodic permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-periodic-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseEther } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'native-token-periodic', + data: { + // 0.001 ETH in wei format. + periodAmount: parseEther('0.001'), + // 1 hour in seconds. + periodDuration: 86400, + startTime: currentTime, + justification: 'Permission to use 0.001 ETH every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## Native token stream permission + +This permission type ensures a linear streaming transfer limit for native tokens. Token transfers are blocked until the +defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the +configured rate, up to the maximum allowed amount. + +For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.0001 ETH per second, starting with an initial amount +of 0.1 ETH, up to a maximum of 1 ETH. + +See the [native token stream permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-stream-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseEther } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'native-token-stream', + data: { + // 0.0001 ETH in wei format. + amountPerSecond: parseEther('0.0001'), + // 0.1 ETH in wei format. + initialAmount: parseEther('0.1'), + // 1 ETH in wei format. + maxAmount: parseEther('1'), + startTime: currentTime, + justification: 'Permission to use 0.0001 ETH per second', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/smart-accounts-kit/guides/configure-toolkit.md b/smart-accounts-kit/guides/configure-toolkit.md new file mode 100644 index 00000000000..f7e0b6dbc5a --- /dev/null +++ b/smart-accounts-kit/guides/configure-toolkit.md @@ -0,0 +1,267 @@ +--- +description: Learn how to configure the bundler client, paymaster client, and toolkit environment. +sidebar_label: Configure the toolkit +keywords: [configure, smart accounts kit, bundler, paymaster, smart accounts environment] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Configure the Smart Accounts Kit + +The Smart Accounts Kit is highly configurable, providing support for custom bundlers and paymasters. +You can also configure the toolkit environment to interact with the +. + +## Prerequisites + +[Install and set up the Smart Accounts Kit.](../get-started/install.md) + +## Configure the bundler + +The toolkit uses Viem's Account Abstraction API to configure custom bundlers and paymasters. +This provides a robust and flexible foundation for creating and managing [MetaMask Smart Accounts](../concepts/smart-accounts.md). +See Viem's [account abstraction documentation](https://viem.sh/account-abstraction) for more information on the API's features, methods, and best practices. + +To use the bundler and paymaster clients with the toolkit, create instances of these clients and configure them as follows: + +```typescript +import { createPaymasterClient, createBundlerClient } from 'viem/account-abstraction' +import { http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +// Replace these URLs with your actual bundler and paymaster endpoints. +const bundlerUrl = 'https://your-bundler-url.com' +const paymasterUrl = 'https://your-paymaster-url.com' + +// The paymaster is optional. +const paymasterClient = createPaymasterClient({ + transport: http(paymasterUrl), +}) + +const bundlerClient = createBundlerClient({ + transport: http(bundlerUrl), + paymaster: paymasterClient, + chain, +}) +``` + +Replace the bundler and paymaster URLs with your bundler and paymaster endpoints. +For example, you can use endpoints from [Pimlico](https://docs.pimlico.io/references/bundler), [Infura](/services), or [ZeroDev](https://docs.zerodev.app/meta-infra/intro). + +:::note +Providing a paymaster is optional when configuring your bundler client. However, if you choose not to use a paymaster, the smart account must have enough funds to pay gas fees. +::: + +## (Optional) Configure the toolkit environment + +The toolkit environment (`SmartAccountsEnvironment`) defines the contract addresses necessary for interacting with the [Delegation Framework](../concepts/delegation/overview.md#delegation-framework) on a specific network. +It serves several key purposes: + +- It provides a centralized configuration for all the contract addresses required by the Delegation Framework. +- It enables easy switching between different networks (for example, Mainnet and testnet) or custom deployments. +- It ensures consistency across different parts of the application that interact with the Delegation Framework. + +### Resolve the environment + +When you create a , the toolkit automatically +resolves the environment based on the version it requires and the chain configured. +If no environment is found for the specified chain, it throws an error. + + + + +```typescript +import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { delegatorSmartAccount } from './config.ts' + +const environment: SmartAccountsEnvironment = delegatorSmartAccount.environment +``` + + + + +```typescript +import { + Implementation, + toMetaMaskSmartAccount, +} from "@metamask/smart-accounts-kit"; +import { privateKeyToAccount } from "viem/accounts"; +import { createPublicClient, http } from "viem"; +import { sepolia as chain } from "viem/chains"; + +const publicClient = createPublicClient({ + chain, + transport: http(), +}); + +const delegatorAccount = privateKeyToAccount("0x..."); + +const delegatorSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: "0x", + signer: { account: delegatorAccount }, +}); + +export delegatorSmartAccount; +``` + + + + +:::note +See the changelog of the toolkit version you are using (in the left sidebar) for supported chains. +::: + +Alternatively, you can use the [`getSmartAccountsEnvironment`](../reference/delegation/index.md#getsmartaccountsenvironment) function to resolve the environment. +This function is especially useful if your delegator is not a smart account when +creating a redelegation. + +```typescript +import { getSmartAccountsEnvironment, SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' + +// Resolves the SmartAccountsEnvironment for Sepolia +const environment: SmartAccountsEnvironment = getSmartAccountsEnvironment(sepolia.id) +``` + +### Deploy a custom environment + +You can deploy the contracts using any method, but the toolkit provides a convenient [`deploySmartAccountsEnvironment`](../reference/delegation/index.md#deploysmartaccountsenvironment) function. This function simplifies deploying the contracts to your desired EVM chain. + +This function requires a Viem [Public Client](https://viem.sh/docs/clients/public), [Wallet Client](https://viem.sh/docs/clients/wallet), and [Chain](https://viem.sh/docs/glossary/types#chain) +to deploy the contracts and resolve the `SmartAccountsEnvironment`. + +Your wallet must have a sufficient native token balance to deploy the contracts. + + + + +```typescript +import { walletClient, publicClient } from './config.ts' +import { sepolia as chain } from 'viem/chains' +import { deploySmartAccountsEnvironment } from '@metamask/smart-accounts-kit/utils' + +const environment = await deploySmartAccountsEnvironment(walletClient, publicClient, chain) +``` + + + + +```typescript +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { http, createWalletClient, createPublicClient } from 'viem' + +// Your deployer wallet private key. +const privateKey = '0x123..' +const account = privateKeyToAccount(privateKey) + +export const walletClient = createWalletClient({ + account, + chain, + transport: http(), +}) + +export const publicClient = createPublicClient({ + transport: http(), + chain, +}) +``` + + + + +You can also override specific contracts when calling `deploySmartAccountsEnvironment`. +For example, if you've already deployed the `EntryPoint` contract on the target chain, you can pass the contract address to the function. + +```typescript +// The config.ts is the same as in the previous example. +import { walletClient, publicClient } from "./config.ts"; +import { sepolia as chain } from "viem/chains"; +import { deploySmartAccountsEnvironment } from "@metamask/smart-accounts-kit/utils"; + +const environment = await deploySmartAccountsEnvironment( + walletClient, + publicClient, + chain, + // add-start ++ { ++ EntryPoint: "0x0000000071727De22E5E9d8BAf0edAc6f37da032" ++ } + // add-end +); +``` + +Once the contracts are deployed, you can use them to override the environment. + +### Override the environment + +To override the environment, the toolkit provides an [`overrideDeployedEnvironment`](../reference/delegation/index.md#overridedeployedenvironment) function to resolve +`SmartAccountsEnvironment` with specified contracts for the given chain and contract version. + +```typescript +// The config.ts is the same as in the previous example. +import { walletClient, publicClient } from './config.ts' +import { sepolia as chain } from 'viem/chains' +import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { + overrideDeployedEnvironment, + deploySmartAccountsEnvironment, +} from '@metamask/smart-accounts-kit' + +const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( + walletClient, + publicClient, + chain +) + +overrideDeployedEnvironment(chain.id, '1.3.0', environment) +``` + +If you've already deployed the contracts using a different method, you can create a `SmartAccountsEnvironment` instance with the required contract addresses, and pass it to the function. + +```typescript +// remove-start +- import { walletClient, publicClient } from "./config.ts"; +- import { sepolia as chain } from "viem/chains"; +// remove-end +import { SmartAccountsEnvironment } from "@metamask/smart-accounts-kit"; +import { + overrideDeployedEnvironment, + // remove-next-line +- deploySmartAccountsEnvironment +} from "@metamask/smart-accounts-kit"; + +// remove-start +- const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( +- walletClient, +- publicClient, +- chain +- ); +// remove-end + +// add-start ++ const environment: SmartAccountsEnvironment = { ++ SimpleFactory: "0x124..", ++ // ... ++ implementations: { ++ // ... ++ }, ++ }; +// add-end + +overrideDeployedEnvironment( + chain.id, + "1.3.0", + environment +); +``` + +:::note +Make sure to specify the version required by the toolkit. +See the changelog of the toolkit version you are using (in the left sidebar) for its required Framework version. +::: diff --git a/smart-accounts-kit/guides/delegation/check-delegation-state.md b/smart-accounts-kit/guides/delegation/check-delegation-state.md new file mode 100644 index 00000000000..dc5fff8a041 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/check-delegation-state.md @@ -0,0 +1,111 @@ +--- +description: Learn how to check the delegation state. +sidebar_label: Check the delegation state +toc_max_heading_level: 3 +keywords: [delegation, state, caveat enforcer, delegation scope] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Check the delegation state + +When using [spending limit delegation scopes](use-delegation-scopes/spending-limit.md) or relevant [caveat enforcers](../../reference/delegation/caveats.md), +you might need to check the remaining transferrable amount in a delegation. +For example, if a delegation allows a user to spend 10 USDC per week and they have already spent 10 - n USDC in the current period, +you can determine how much of the allowance is still available for transfer. + +Use the `CaveatEnforcerClient` to check the available balances for specific scopes or caveats. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a delegator account.](execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) +- [Create a delegate account.](execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) +- [Create a delegation with an ERC-20 periodic scope.](use-delegation-scopes/spending-limit.md#erc-20-periodic-scope) + +## Create a `CaveatEnforcerClient` + +To check the delegation state, create a [`CaveatEnforcerClient`](../../reference/delegation/caveat-enforcer-client.md). +This client allows you to interact with the caveat enforcers of the delegation, and read the required state. + + + + +```typescript +import { environment, publicClient as client } from './config.ts' +import { createCaveatEnforcerClient } from '@metamask/smart-accounts-kit' + +const caveatEnforcerClient = createCaveatEnforcerClient({ + environment, + client, +}) +``` + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { createPublicClient, http } from 'viem' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +export const environment = getSmartAccountsEnvironment(chain.id) + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + + + + +## Read the caveat enforcer state + +This example uses the [`getErc20PeriodTransferEnforcerAvailableAmount`](../../reference/delegation/caveat-enforcer-client.md#geterc20periodtransferenforceravailableamount) method to read the state and retrieve the remaining amount for the current transfer period. + + + + +```typescript +import { delegation } from './config.ts' + +// Returns the available amount for current period. +const { availableAmount } = + await caveatEnforcerClient.getErc20PeriodTransferEnforcerAvailableAmount({ + delegation, + }) +``` + + + + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +// startDate should be in seconds. +const startDate = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20PeriodTransfer, + tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + periodAmount: parseUnits('10', 6), + periodDuration: 86400, + startDate, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + + + + +## Next steps + +See the [Caveat Enforcer Client reference](../../reference/delegation/caveat-enforcer-client.md) for the full list of available methods. diff --git a/smart-accounts-kit/guides/delegation/create-redelegation.md b/smart-accounts-kit/guides/delegation/create-redelegation.md new file mode 100644 index 00000000000..616146a2ca2 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/create-redelegation.md @@ -0,0 +1,178 @@ +--- +description: Learn how to create a redelegation. +sidebar_label: Create a redelegation +toc_max_heading_level: 3 +keywords: [delegation, state, caveat enforcer, delegation scope, redelegation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Create a redelegation + +Redelegation is a core feature that sets delegations apart from other permission sharing frameworks. +It allows a delegate to create a delegation chain, passing on the same or reduced level of authority +from the root delegator. + +For example, if Alice grants Bob permission to spend 10 USDC on her behalf, Bob can further grant Carol +permission to spend up to 5 USDC on Alice's behalf-that is, Bob can redelegate. This creates a delegation +chain where the root permissions are re-shared with additional parties. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Learn how to create a delegation.](execute-on-smart-accounts-behalf.md) + +## Create a delegation + +Create a [root delegation](../../concepts/delegation/overview.md#root-delegation) from Alice to Bob. + +This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing +Alice to delegate to Bob the ability to spend 10 USDC on her behalf. + + + + +```typescript +import { aliceSmartAccount, bobSmartAccount } from './config.ts' +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // USDC has 6 decimal places. + maxAmount: parseUnits('10', 6), + }, + to: bobSmartAccount.address, + from: aliceSmartAccount.address, + environment: aliceSmartAccount.environment, +}) + +const signedDelegation = aliceSmartAccount.signDelegation({ delegation }) +``` + + + + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const aliceAccount = privateKeyToAccount('0x...') +const bobAccount = privateKeyToAccount('0x...') + +export const aliceSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [aliceAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: aliceAccount }, +}) + +export const bobSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [bobAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: bobAccount }, +}) +``` + + + + +## Create a redelegation + +Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from Bob to Carol. When creating a redelegation, you can only narrow the scope of the original authority, not expand it. + +To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [`createDelegation`](../../reference/delegation/index.md#createdelegation). +This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing +Bob to delegate to Carol the ability to spend 5 USDC on Alice's behalf. + + + + +```typescript +import { bobSmartAccount, carolSmartAccount } from './config.ts' +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +const redelegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // USDC has 6 decimal places. + maxAmount: parseUnits('5', 6), + }, + to: carolSmartAccount.address, + from: bobSmartAccount.address, + // Signed root delegation from previous step. + parentDelegation: signedDelegation, + environment: bobSmartAccount.environment, +}) + +const signedRedelegation = bobSmartAccount.signDelegation({ delegation: redelegation }) +``` + + + + +```typescript +// Update the existing config to create a smart account for Carol. + +const carolAccount = privateKeyToAccount('0x...') + +export const carolSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [carolAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: carolAccount }, +}) +``` + + + + +### Limit redelegation using caveats + +When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) to narrow the Carol's authority. For example, you can limit the authority so Carol can use the delegation only once. + +To apply caveats, create the `Delegation` object and use [`createCaveatBuilder`](../../reference/delegation/index.md#createcaveatbuilder). Use [`hashDelegation`](../../reference/delegation/index.md#hashdelegation) to get the delegation hash, then provide it as the `authority` field. + +This example uses the [`limitedCalls`](../../reference/delegation/caveats.md#limitedcalls) caveat with a limit of `1`. + +```ts +// Use the config from previous step. +import { bobSmartAccount, carolSmartAccount } from './config.ts' +import { CaveatType } from '@metamask/smart-accounts-kit' +import { createCaveatBuilder, hashDelegation } from '@metamask/smart-accounts-kit/utils' + +const caveatBuilder = createCaveatBuilder(bobSmartAccount.environment) + +const caveats = caveatBuilder.addCaveat(CaveatType.LimitedCalls, { limit: 1 }) + +const redelegation: Delegation = { + delegate: carolSmartAccount.address, + delegator: bobSmartAccount.address, + authority: hashDelegation(rootDelegation), + caveats: caveats.build(), + salt: '0x', +} + +const signedRedelegation = await bobSmartAccount.signDelegation({ delegation: redelegation }) +``` + +## Next steps + +See [how to disable a delegation](disable-delegation.md) to revoke permissions. diff --git a/smart-accounts-kit/guides/delegation/disable-delegation.md b/smart-accounts-kit/guides/delegation/disable-delegation.md new file mode 100644 index 00000000000..fca67204dce --- /dev/null +++ b/smart-accounts-kit/guides/delegation/disable-delegation.md @@ -0,0 +1,103 @@ +--- +description: Learn how to disable the delegation. +sidebar_label: Disable a delegation +toc_max_heading_level: 3 +keywords: [delegation, disable, revoke] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Disable a delegation + +Delegations are created offchain and can be stored anywhere, but you can disable a delegation onchain using the +toolkit. When a delegation is disabled, any attempt to redeem it will revert, effectively revoking the permissions +that were previously granted. + +For example, if Alice has given permission to Bob to spend 10 USDC on her behalf, and after a week she wants to +revoke that permission, Alice can disable the delegation she created for Bob. If Bob tries to redeem the disabled +delegation, the transaction will revert, preventing him from spending Alice's USDC. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a delegator account.](execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) +- [Create a delegate account.](execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) + +## Disable a delegation + +To disable a delegation, you can use the [`disableDelegation`](../../reference/delegation/index.md#disabledelegation) utility function from the +toolkit to generate calldata. Once the calldata is prepared, you can send it to the + to disable the delegation. + + + + +```typescript +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { environment, delegation, bundlerClient } from './config.ts' + +const disableDelegationData = DelegationManager.encode.disableDelegation({ + delegation, +}) + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: delegatorAccount, + calls: [ + { + to: environment.DelegationManager, + data: disableDelegationData, + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { createPublicClient, http, parseEther } from 'viem' +import { createBundlerClient } from 'viem/account-abstraction' +import { + getSmartAccountsEnvironment, + createDelegation, + ScopeType, +} from '@metamask/smart-accounts-kit' + +export const environment = getSmartAccountsEnvironment(chain.id) + +const currentTime = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenPeriodTransfer, + periodAmount: parseEther('0.01'), + periodDuration: 86400, + startDate: currentTime, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), +}) +``` + + + diff --git a/smart-accounts-kit/guides/delegation/execute-on-smart-accounts-behalf.md b/smart-accounts-kit/guides/delegation/execute-on-smart-accounts-behalf.md new file mode 100644 index 00000000000..aab174cc104 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/execute-on-smart-accounts-behalf.md @@ -0,0 +1,273 @@ +--- +description: Use delegations to perform executions on a smart account's behalf. +sidebar_label: Execute on a smart account's behalf +keywords: [execution, smart account, create, redeem, delegation, delegator, delegate] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Perform executions on a smart account's behalf + +[Delegation](../../concepts/delegation/overview.md) is the ability for a [MetaMask smart account](../../concepts/smart-accounts.md) to grant permission to another account to perform executions on its behalf. + +In this guide, you'll create a delegator account (Alice) and a delegate account (Bob), and grant Bob permission to perform executions on Alice's behalf. +You'll complete the delegation lifecycle (create, sign, and redeem a delegation). + +## Prerequisites + +[Install and set up the Smart Accounts Kit.](../../get-started/install.md) + +## Steps + +### 1. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +You will configure Alice's account (the delegator) and the Bundler Client with the Public Client, which you can use to query the signer's account state and interact with smart contracts. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 2. Set up a Bundler Client + +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +You can use the bundler service to estimate gas for user operations and submit transactions to the network. + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), +}) +``` + +### 3. Create a delegator account + +Create an account to represent Alice, the delegator who will create a delegation. +The delegator must be a ; use the toolkit's [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) method to create the delegator account. + +This example configures a Hybrid smart account, +which is a flexible smart account implementation that supports both an EOA owner and any number of passkey (WebAuthn) signers: + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' + +const delegatorAccount = privateKeyToAccount('0x...') + +const delegatorSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegatorAccount }, +}) +``` + +:::note +See [how to configure other smart account types](../smart-accounts/create-smart-account.md). +::: + +### 4. Create a delegate account + +Create an account to represent Bob, the delegate who will receive the delegation. The delegate can be a smart account or an EOA: + + + + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' + +const delegateAccount = privateKeyToAccount('0x...') + +const delegateSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, // Hybrid smart account + deployParams: [delegateAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegateAccount }, +}) +``` + + + + +```typescript +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { createWalletClient, http } from 'viem' + +const delegateAccount = privateKeyToAccount('0x...') + +export const delegateWalletClient = createWalletClient({ + account: delegateAccount, + chain, + transport: http(), +}) +``` + + + + +### 5. Create a delegation + +Create a [root delegation](../../concepts/delegation/overview.md#root-delegation) from Alice to Bob. +With a root delegation, Alice is delegating her own authority away, as opposed to _redelegating_ permissions she received from a previous delegation. + +Use the toolkit's [`createDelegation`](../../reference/delegation/index.md#createdelegation) method to create a root delegation. When creating +delegation, you need to configure the scope of the delegation to define the initial authority. + +This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing Alice to delegate to Bob the ability to spend her USDC, with a +specified limit on the total amount. + +:::warning Important + +Before creating a delegation, ensure that the delegator account (in this example, Alice's account) has been deployed. If the account is not deployed, redeeming the delegation will fail. + +::: + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + to: delegateSmartAccount.address, // This example uses a delegate smart account + from: delegatorSmartAccount.address, + environment: delegatorSmartAccount.environment, + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress, + // 10 USDC + maxAmount: parseUnits('10', 6), + }, +}) +``` + +### 6. Sign the delegation + +Sign the delegation with Alice's account, using the [`signDelegation`](../../reference/smart-account.md#signdelegation) method from `MetaMaskSmartAccount`. Alternatively, you can use the toolkit's [`signDelegation`](../../reference/delegation/index.md#signdelegation) utility method. Bob will later use the signed delegation to perform actions on Alice's behalf. + +```typescript +const signature = await delegatorSmartAccount.signDelegation({ + delegation, +}) + +const signedDelegation = { + ...delegation, + signature, +} +``` + +### 7. Redeem the delegation + +Bob can now redeem the delegation. The redeem transaction is sent to the `DelegationManager` contract, which validates the delegation and executes actions on Alice's behalf. + +To prepare the calldata for the redeem transaction, use the [`redeemDelegations`](../../reference/delegation/index.md#redeemdelegations) method from `DelegationManager`. +Since Bob is redeeming a single delegation chain, use the [`SingleDefault`](../../concepts/delegation/delegation-manager.md#execution-modes) execution mode. + +Bob can redeem the delegation by submitting a user operation if his account is a smart account, or a regular transaction if his account is an EOA. In this example, Bob transfers 1 USDC from Alice's account to his own. + + + + +```typescript +import { createExecution, ExecutionMode } from '@metamask/smart-accounts-kit' +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { zeroAddress } from 'viem' +import { callData } from './config.ts' + +const delegations = [signedDelegation] + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const executions = [createExecution({ target: tokenAddress, callData })] + +const redeemDelegationCalldata = DelegationManager.encode.redeemDelegations({ + delegations: [delegations], + modes: [ExecutionMode.SingleDefault], + executions: [executions], +}) + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: delegateSmartAccount, + calls: [ + { + to: delegateSmartAccount.address, + data: redeemDelegationCalldata, + }, + ], + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n, +}) +``` + + + + +```typescript +import { + createExecution, + getSmartAccountsEnvironment, + ExecutionMode, +} from '@metamask/smart-accounts-kit' +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { zeroAddress } from 'viem' +import { callData } from './config.ts' + +const delegations = [signedDelegation] + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const executions = [createExecution({ target: tokenAddress, callData })] + +const redeemDelegationCalldata = DelegationManager.encode.redeemDelegations({ + delegations: [delegations], + modes: [ExecutionMode.SingleDefault], + executions: [executions], +}) + +const transactionHash = await delegateWalletClient.sendTransaction({ + to: getSmartAccountsEnvironment(chain.id).DelegationManager, + data: redeemDelegationCalldata, + chain, +}) +``` + + + + + +```typescript +import { encodeFunctionData, erc20Abi, parseUnits } from 'viem' + +// calldata to transfer 1 USDC to delegate address. +export const callData = encodeFunctionData({ + abi: erc20Abi, + args: [delegateSmartAccount.address, parseUnits('1', 6)], + functionName: 'transfer', +}) +``` + + + + +## Next steps + +- See [how to configure different scopes](use-delegation-scopes/index.md) to define the initial authority of a delegation. +- See [how to further refine the authority of a delegation](use-delegation-scopes/constrain-scope.md) using caveat enforcers. +- See [how to disable a delegation](disable-delegation.md) to revoke permissions. diff --git a/smart-accounts-kit/guides/delegation/use-delegation-scopes/constrain-scope.md b/smart-accounts-kit/guides/delegation/use-delegation-scopes/constrain-scope.md new file mode 100644 index 00000000000..9077ae1a447 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/use-delegation-scopes/constrain-scope.md @@ -0,0 +1,64 @@ +--- +description: Learn how to constrain a delegation scope using caveat enforcers. +sidebar_label: Constrain a scope +toc_max_heading_level: 3 +keywords: [constrain, restrict, scope, caveat, caveat enforcer] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Constrain a delegation scope + +[Delegation scopes](index.md) define the delegation's initial authority and help prevent delegation misuse. +You can further constrain these scopes and limit the delegation's authority by applying [caveat enforcers](../../../concepts/delegation/caveat-enforcers.md). + +## Prerequisites + +[Configure a delegation scope.](index.md) + +## Apply a caveat enforcer + +For example, Alice creates a delegation with an [ERC-20 transfer scope](spending-limit.md#erc-20-transfer-scope) that allows Bob to spend up to 10 USDC. +If Alice wants to further restrict the scope to limit Bob's delegation to be valid for only seven days, +she can apply the [`timestamp`](../../../reference/delegation/caveats.md#timestamp) caveat enforcer. + +The following example creates a delegation using [`createDelegation`](../../../reference/delegation/index.md#createdelegation), applies the ERC-20 transfer scope with a spending limit of 10 USDC, and applies the `timestamp` caveat enforcer to restrict the delegation's validity to a seven-day period: + +```typescript +import { createDelegation, ScopeType, CaveatType } from '@metamask/smart-accounts-kit' + +// Convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) + +// Seven days after current time. +const beforeThreshold = currentTime + 604800 + +const caveats = [ + { + type: CaveatType.Timestamp, + afterThreshold: currentTime, + beforeThreshold, + }, +] + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + maxAmount: 10000n, + }, + // Apply caveats to the delegation. + caveats, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Next steps + +- See the [caveats reference](../../../reference/delegation/caveats.md) for the full list of caveat types and their parameters. +- For more specific or custom control, you can also [create custom caveat enforcers](/tutorials/create-custom-caveat-enforcer) + and apply them to delegations. diff --git a/smart-accounts-kit/guides/delegation/use-delegation-scopes/function-call.md b/smart-accounts-kit/guides/delegation/use-delegation-scopes/function-call.md new file mode 100644 index 00000000000..7e63910c311 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/use-delegation-scopes/function-call.md @@ -0,0 +1,152 @@ +--- +description: Learn how to use the function call scope for a delegation. +keywords: [delegation scope, function call, restrict, delegation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use the function call scope + +The function call scope defines the specific methods, contract addresses, and calldata that are allowed for the delegation. +For example, Alice delegates to Bob the ability to call the `approve` function on the USDC contract, with the approval amount set to `0`. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) +- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) + +## Function call scope + +This scope requires `targets`, which specifies the permitted contract addresses, and `selectors`, which specifies the allowed methods. + +Internally, this scope uses the [`allowedTargets`](../../../reference/delegation/caveats.md#allowedtargets), [`allowedMethods`](../../../reference/delegation/caveats.md#allowedmethods), and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers, and +optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. +See the [function call scope reference](../../../reference/delegation/delegation-scopes.md#function-call-scope) for more details. + +The following example sets the delegation scope to allow the delegate to call the `approve` function on the USDC token contract: + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' + +// USDC address on Sepolia. +const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + scope: { + type: ScopeType.FunctionCall, + targets: [USDC_ADDRESS], + selectors: ['approve(address, uint256)'], + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +### Define allowed calldata + +You can further restrict the scope by defining the `allowedCalldata`. For example, you can set +`allowedCalldata` so the delegate is only permitted to call the `approve` function on the +USDC token contract with an allowance value of `0`. This effectively limits the delegate to +revoking ERC-20 approvals. + +:::important Usage +The `allowedCalldata` doesn't support multiple selectors. Each entry in the +list represents a portion of calldata corresponding to the same function signature. + +You can include or exclude specific parameters to precisely define what parts of the calldata are valid. +::: + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { encodeAbiParameters, erc20Abi } from 'viem' + +// USDC address on Sepolia. +const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + scope: { + type: ScopeType.FunctionCall, + targets: [USDC_ADDRESS], + selectors: ['approve(address, uint256)'], + allowedCalldata: [ + { + // Limits the allowance amount to be 0. + value: encodeAbiParameters([{ name: 'amount', type: 'uint256' }], [0n]), + // The first 4 bytes are for selector, and next 32 bytes + // are for spender address. + startIndex: 36, + }, + ], + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +### Define exact calldata + +You can define the `exactCalldata` instead of the `allowedCalldata`. For example, you can +set `exactCalldata` so the delegate is permitted to call only the `approve` function on the USDC token +contract, with a specific spender address and an allowance value of 0. This effectively limits the delegate to +revoking ERC-20 approvals for a specific spender. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { encodeFunctionData, erc20Abi } from 'viem' + +// USDC address on Sepolia. +const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + scope: { + type: ScopeType.FunctionCall, + targets: [USDC_ADDRESS], + selectors: ['approve(address, uint256)'], + exactCalldata: { + calldata: encodeFunctionData({ + abi: erc20Abi, + args: ['0x0227628f3F023bb0B980b67D528571c95c6DaC1c', 0n], + functionName: 'approve', + }), + }, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +### Allow native token transfer + +You can set `valueLte` to allow native token transfer up to a specified amount per call. By default, this value is set to `0`. For example, Alice can allow Bob +to take `0.00001` ETH as a fee each time he revokes a token approval on her behalf. + +```ts +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' + +// USDC address on Sepolia. +const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + scope: { + type: ScopeType.FunctionCall, + targets: [USDC_ADDRESS], + selectors: ['approve(address, uint256)'], + valueLte: { maxValue: parseEther('0.00001') }, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Next steps + +See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/smart-accounts-kit/guides/delegation/use-delegation-scopes/index.md b/smart-accounts-kit/guides/delegation/use-delegation-scopes/index.md new file mode 100644 index 00000000000..f0d91efb030 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/use-delegation-scopes/index.md @@ -0,0 +1,17 @@ +--- +description: Learn how to use the delegation scopes. +keywords: [delegation scope, delegation, restrict, authority] +--- + +# Use delegation scopes + +When [creating a delegation](../execute-on-smart-accounts-behalf.md), you must configure a scope to define the delegation's initial authority and help prevent delegation misuse. +You can further constrain this initial authority by [adding caveats to a delegation](constrain-scope.md). + +The Smart Accounts Kit currently supports three categories of scopes: + +| Scope type | Description | +| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| [Spending limit scopes](spending-limit.md) | Restricts the spending of native, ERC-20, and ERC-721 tokens based on defined conditions. | +| [Function call scope](function-call.md) | Restricts the delegation to specific contract methods, contract addresses, or calldata. | +| [Ownership transfer scope](ownership-transfer.md) | Restricts the delegation to only allow ownership transfers, specifically the `transferOwnership` function for a specified contract. | diff --git a/smart-accounts-kit/guides/delegation/use-delegation-scopes/ownership-transfer.md b/smart-accounts-kit/guides/delegation/use-delegation-scopes/ownership-transfer.md new file mode 100644 index 00000000000..d04b0543073 --- /dev/null +++ b/smart-accounts-kit/guides/delegation/use-delegation-scopes/ownership-transfer.md @@ -0,0 +1,45 @@ +--- +description: Learn how to use the ownership transfer scope for a delegation. +keywords: [delegation scope, ownership transfer, restrict, delegation] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use the ownership transfer scope + +The ownership transfer scope restricts a delegation to ownership transfer calls only. +For example, Alice has deployed a smart contract, and she delegates to Bob the ability to transfer ownership of that contract. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) +- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) + +## Ownership transfer scope + +This scope requires a `contractAddress`, which represents the address of the deployed contract. + +Internally, this scope uses the [`ownershipTransfer`](../../../reference/delegation/caveats.md#ownershiptransfer) caveat enforcer. +See the [ownership transfer scope reference](../../../reference/delegation/delegation-scopes.md#ownership-transfer-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' + +const contractAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const delegation = createDelegation({ + scope: { + type: ScopeType.OwnershipTransfer, + contractAddress, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Next steps + +See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/smart-accounts-kit/guides/delegation/use-delegation-scopes/spending-limit.md b/smart-accounts-kit/guides/delegation/use-delegation-scopes/spending-limit.md new file mode 100644 index 00000000000..600eb75b08c --- /dev/null +++ b/smart-accounts-kit/guides/delegation/use-delegation-scopes/spending-limit.md @@ -0,0 +1,246 @@ +--- +description: Learn how to use the spending limit scopes for a delegation. +keywords: [delegation scope, spending limit, restrict, delegation] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use spending limit scopes + +Spending limit scopes define how much a delegate can spend in native, ERC-20, or ERC-721 tokens. +You can set transfer limits with or without time-based (periodic) or streaming conditions, depending on your use case. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) +- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) + +## ERC-20 periodic scope + +This scope ensures a per-period limit for ERC-20 token transfers. +You set the amount, period, and start data. +At the start of each new period, the allowance resets. +For example, Alice creates a delegation that lets Bob spend up to 10 USDC on her behalf each day. +Bob can transfer a total of 10 USDC per day; the limit resets at the beginning of the next day. + +When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). + +Internally, this scope uses the [`erc20PeriodTransfer`](../../../reference/delegation/caveats.md#erc20periodtransfer) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +See the [ERC-20 periodic scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-periodic-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +// startDate should be in seconds. +const startDate = Math.floor(Date.now() / 1000) + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20PeriodTransfer, + tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + // USDC has 6 decimal places. + periodAmount: parseUnits('10', 6), + periodDuration: 86400, + startDate, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## ERC-20 streaming scope + +This scopes ensures a linear streaming transfer limit for ERC-20 tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. +For example, Alice creates a delegation that allows Bob to spend 0.1 USDC per second, starting with an initial amount of 10 USDC, up to a maximum of 100 USDC. + +When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). + +Internally, this scope uses the [`erc20Streaming`](../../../reference/delegation/caveats.md#erc20streaming) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +See the [ERC-20 streaming scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-streaming-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +// startTime should be in seconds. +const startTime = Math.floor(Date.now() / 1000) + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20Streaming, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // USDC has 6 decimal places. + amountPerSecond: parseUnits('0.1', 6), + initialAmount: parseUnits('10', 6), + maxAmount: parseUnits('100', 6), + startTime, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## ERC-20 transfer scope + +This scope ensures that ERC-20 token transfers are limited to a predefined maximum amount. +This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. +For example, Alice creates a delegation that allows Bob to spend up to 10 USDC without any conditions. +Bob may use the 10 USDC in a single transaction or make multiple transactions, as long as the total does not exceed 10 USDC. + +When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). + +Internally, this scope uses the [`erc20TransferAmount`](../../../reference/delegation/caveats.md#erc20transferamount) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +See the [ERC-20 transfer scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-transfer-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // USDC has 6 decimal places. + maxAmount: parseUnits('10', 6), + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## ERC-721 scope + +This scope limits the delegation to ERC-721 token transfers only. +For example, Alice creates a delegation that allows Bob to transfer an NFT she owns on her behalf. + +Internally, this scope uses the [`erc721Transfer`](../../../reference/delegation/caveats.md#erc721transfer) caveat enforcer. +See the [ERC-721 scope reference](../../../reference/delegation/delegation-scopes.md#erc-721-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc721Transfer, + tokenAddress: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + tokenId: 1n, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Native token periodic scope + +This scope ensures a per-period limit for native token transfers. +You set the amount, period, and start date. +At the start of each new period, the allowance resets. +For example, Alice creates a delegation that lets Bob spend up to 0.01 ETH on her behalf each day. +Bob can transfer a total of 0.01 ETH per day; the limit resets at the beginning of the next day. + +When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). +You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure +`allowedCalldata` to allow transactions that match certain patterns or ranges. + +Internally, this scope uses the [`nativeTokenPeriodTransfer`](../../../reference/delegation/caveats.md#nativetokenperiodtransfer) caveat enforcer, and +optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. +See the [native token periodic scope reference](../../../reference/delegation/delegation-scopes.md#native-token-periodic-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' + +// startDate should be in seconds. +const startDate = Math.floor(Date.now() / 1000) + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenPeriodTransfer, + periodAmount: parseEther('0.01'), + periodDuration: 86400, + startDate, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Native token streaming scope + +This scopes ensures a linear streaming transfer limit for native tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. +For example, Alice creates delegation that allows Bob to spend 0.001 ETH per second, starting with an initial amount of 0.01 ETH, up to a maximum of 0.1 ETH. + +When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). +You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure +`allowedCalldata` to allow transactions that match certain patterns or ranges. + +Internally, this scope uses the [`nativeTokenStreaming`](../../../reference/delegation/caveats.md#nativetokenstreaming) caveat enforcer, and +optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. +See the [native token streaming scope reference](../../../reference/delegation/delegation-scopes.md#native-token-streaming-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' + +// startTime should be in seconds. +const startTime = Math.floor(Date.now() / 1000) + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenStreaming, + amountPerSecond: parseEther('0.001'), + initialAmount: parseEther('0.01'), + maxAmount: parseEther('0.1'), + startTime, + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Native token transfer scope + +This scope ensures that native token transfers are limited to a predefined maximum amount. +This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. +For example, Alice creates a delegation that allows Bob to spend up to 0.1 ETH without any conditions. +Bob may use the 0.1 ETH in a single transaction or make multiple transactions, as long as the total does not exceed 0.1 ETH. + +When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). +You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure +`allowedCalldata` to allow transactions that match certain patterns or ranges. + +Internally, this scope uses the [`nativeTokenTransferAmount`](../../../reference/delegation/caveats.md#nativetokentransferamount) caveat enforcer, and +optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. +See the [native token transfer scope reference](../../../reference/delegation/delegation-scopes.md#native-token-transfer-scope) for more details. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenTransferAmount, + maxAmount: parseEther('0.001'), + }, + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` + +## Next steps + +See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/smart-accounts-kit/guides/smart-accounts/create-smart-account.md b/smart-accounts-kit/guides/smart-accounts/create-smart-account.md new file mode 100644 index 00000000000..587fa3084cf --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/create-smart-account.md @@ -0,0 +1,221 @@ +--- +description: Learn how to create a MetaMask smart account using Smart Accounts Kit. +keywords: [create, smart account, signer, hybrid, multisig, 7702] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Create a smart account + +You can enable users to create a [MetaMask smart account](../../concepts/smart-accounts.md) directly +in your dapp. Use [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) +to create different types of smart accounts with different signature schemes. + +## Prerequisites + +[Install and set up the Smart Accounts Kit.](../../get-started/install.md) + +## Hybrid smart account + +A [Hybrid smart account](../../concepts/smart-accounts.md#hybrid-smart-account) supports both an EOA owner and any number of passkey (WebAuthn) signers. + +This example uses `toMetaMaskSmartAccount` and Viem's [Wallet Client](https://viem.sh/docs/clients/wallet) +to create a Hybrid smart account. The `signer` parameter also accepts Viem's [Local Account](https://viem.sh/docs/accounts/local) and [WebAuthnAccount](https://viem.sh/account-abstraction/accounts/webauthn#webauthn-account). + +See the [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) API reference for more information. + + + + +```typescript +import { publicClient } from './client.ts' +import { walletClient } from './signer.ts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +// Some wallets like MetaMask may require you to request access to +// account addresses using walletClient.requestAddresses() first. +const [address] = await walletClient.getAddresses() + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [address, [], [], []], + deploySalt: '0x', + signer: { walletClient }, +}) +``` + + + + + +```typescript +import { http, createPublicClient } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const transport = http() +export const publicClient = createPublicClient({ + transport, + chain, +}) +``` + + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { createWalletClient, custom } from 'viem' + +export const walletClient = createWalletClient({ + chain, + transport: custom(window.ethereum!), +}) +``` + + + + +## Multisig smart account + +A [Multisig smart account](../../concepts/smart-accounts.md#multisig-smart-account) supports multiple EOA signers with a configurable threshold for execution. + +This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) to create a +Multisig smart account with a combination of account signers and Wallet Client signers. + + + + +```typescript +import { publicClient } from './client.ts' +import { account, walletClient } from './signers.ts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const owners = [account.address, walletClient.address] +const signer = [{ account }, { walletClient }] +const threshold = 2n + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [owners, threshold], + deploySalt: '0x', + signer, +}) +``` + + + + + +```typescript +import { http, createPublicClient } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const transport = http() +export const publicClient = createPublicClient({ + transport, + chain, +}) +``` + + + + + +```typescript +import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { http, createWalletClient } from 'viem' + +// This private key will be used to generate the first signer. +const privateKey = generatePrivateKey() +export const account = privateKeyToAccount(privateKey) + +// This private key will be used to generate the second signer. +const walletClientPrivateKey = generatePrivateKey() +const walletClientAccount = privateKeyToAccount(walletClientPrivateKey) + +export const walletClient = createWalletClient({ + account: walletClientAccount, + chain, + transport: http(), +}) +``` + + + + +:::note +The number of signers must be at least equal to the threshold to generate a valid signature. +::: + +## EIP-7702 smart account + +An [EIP-7702 smart account](../../concepts/smart-accounts.md#stateless-7702-smart-account) represents an EOA that has been upgraded +to support MetaMask Smart Accounts functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). + +This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) +and Viem's [`privateKeyToAccount`](https://viem.sh/docs/accounts/local/privateKeyToAccount) to +create an EIP-7702 smart account. This example doesn't handle the upgrade process; see the +[EIP-7702 quickstart](../../get-started/smart-account-quickstart/eip7702.md) to learn how to upgrade. + +:::note Important +The EIP-7702 implementation only works with Viem's [Local Accounts](https://viem.sh/docs/accounts/local). It doesn't work with a [JSON-RPC Account](https://viem.sh/docs/accounts/jsonRpc) like MetaMask. + +See the [Upgrade a MetaMask EOA to a smart account](https://docs.metamask.io/tutorials/upgrade-eoa-to-smart-account/) tutorial. +::: + + + + +```typescript +import { publicClient } from './client.ts' +import { account } from './signer.ts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Stateless7702, + address: account.address, + signer: { account }, +}) +``` + + + + + +```typescript +import { http, createPublicClient } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const transport = http() +export const publicClient = createPublicClient({ + transport, + chain, +}) +``` + + + + + +```typescript +import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts' + +const privateKey = generatePrivateKey() +export const account = privateKeyToAccount(privateKey) +``` + + + + +## Next steps + +- [Configure signers](./signers/index.mdx) to use a signer that fits your needs. +- [Deploy the smart account](deploy-smart-account.md) and [send user operations](send-user-operation.md) using [Viem Account Abstraction clients](../configure-toolkit.md). +- [Create delegations](../delegation/execute-on-smart-accounts-behalf.md) to grant scoped permissions to other accounts. diff --git a/smart-accounts-kit/guides/smart-accounts/deploy-smart-account.md b/smart-accounts-kit/guides/smart-accounts/deploy-smart-account.md new file mode 100644 index 00000000000..610d4f3fa3b --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/deploy-smart-account.md @@ -0,0 +1,153 @@ +--- +description: Learn how to deploy a MetaMask smart account. +keywords: [deploy, smart account, user operation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Deploy a smart account + +You can deploy [MetaMask Smart Accounts](../../concepts/smart-accounts.md) in two different ways. You can either deploy a smart account automatically when sending +the first user operation, or manually deploy the account. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a MetaMask smart account.](create-smart-account.md) + +## Deploy with the first user operation + +When you send the first user operation from a smart account, the Smart Accounts Kit checks whether the account is already deployed. If the account +is not deployed, the toolkit adds the `initCode` to the user operation to deploy the account within the +same operation. Internally, the `initCode` is encoded using the `factory` and `factoryData`. + + + + +```typescript +import { bundlerClient, smartAccount } from './config.ts' +import { parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('0.001'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + + + + + +```typescript +import { createPublicClient, http } from 'viem' +import { createBundlerClient } from 'viem/account-abstraction' +import { sepolia as chain } from 'viem/chains' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = generatePrivateKey() +const account = privateKeyToAccount(privateKey) + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://public.pimlico.io/v2/11155111/rpc'), +}) +``` + + + + +## Deploy manually + +To deploy a smart account manually, call the [`getFactoryArgs`](../../reference/smart-account.md#getfactoryargs) +method from the smart account to retrieve the `factory` and `factoryData`. This allows you to use a relay account to sponsor the deployment without needing a paymaster. + +The `factory` represents the contract address responsible for deploying the smart account, while `factoryData` contains the +calldata that will be executed by the `factory` to deploy the smart account. + +The relay account can be either an EOA or another smart account. This example uses an EOA. + + + + +```typescript +import { walletClient, smartAccount } from './config.ts' + +const { factory, factoryData } = await smartAccount.getFactoryArgs() + +// Deploy smart account using relay account. +const hash = await walletClient.sendTransaction({ + to: factory, + data: factoryData, +}) +``` + + + + + +```typescript +import { createPublicClient, createWalletClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = generatePrivateKey() +const account = privateKeyToAccount(privateKey) + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +const relayAccountPrivateKey = '0x121..' +const relayAccount = privateKeyToAccount(relayAccountPrivateKey) + +export const walletClient = createWalletClient({ + account: relayAccount, + chain, + transport: http(), +}) +``` + + + + +## Next steps + +- Learn more about [sending user operations](send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/generate-multisig-signature.md b/smart-accounts-kit/guides/smart-accounts/generate-multisig-signature.md new file mode 100644 index 00000000000..88dd5c59b8f --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/generate-multisig-signature.md @@ -0,0 +1,121 @@ +--- +description: Learn how to generate a Multisig signature. +keywords: [generate, multsig, signature, smart account] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Generate a multisig signature + +The Smart Accounts Kit supports [Multisig smart accounts](../../concepts/smart-accounts.md#multisig-smart-account), +allowing you to add multiple EOA +signers with a configurable execution threshold. When the threshold +is greater than 1, you can collect signatures from the required signers +and use the [`aggregateSignature`](../../reference/smart-account.md#aggregatesignature) function to combine them +into a single aggregated signature. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a Multisig smart account.](create-smart-account.md#multisig-smart-account) + +## Generate a multisig signature + +The following example configures a Multisig smart account with two different signers: Alice +and Bob. The account has a threshold of 2, meaning that signatures from +both parties are required for any execution. + + + + +```typescript +import { + bundlerClient, + aliceSmartAccount, + bobSmartAccount, + aliceAccount, + bobAccount, +} from './config.ts' +import { aggregateSignature } from '@metamask/smart-accounts-kit' + +const userOperation = await bundlerClient.prepareUserOperation({ + account: aliceSmartAccount, + calls: [ + { + target: zeroAddress, + value: 0n, + data: '0x', + }, + ], +}) + +const aliceSignature = await aliceSmartAccount.signUserOperation(userOperation) +const bobSignature = await bobSmartAccount.signUserOperation(userOperation) + +const aggregatedSignature = aggregateSignature({ + signatures: [ + { + signer: aliceAccount.address, + signature: aliceSignature, + type: 'ECDSA', + }, + { + signer: bobAccount.address, + signature: bobSignature, + type: 'ECDSA', + }, + ], +}) +``` + + + + + +```typescript +import { createPublicClient, http } from 'viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { createBundlerClient } from 'viem/account-abstraction' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const alicePrivateKey = generatePrivateKey() +export const aliceAccount = privateKeyToAccount(alicePrivateKey) + +const bobPrivateKey = generatePrivateKey() +export const bobAccount = privateKeyToAccount(bobPrivateKey) + +const signers = [aliceAccount.address, bobAccount.address] +const threshold = 2n + +export const aliceSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [signers, threshold], + deploySalt: '0x', + signer: [{ account: aliceAccount }], +}) + +export const bobSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [signers, threshold], + deploySalt: '0x', + signer: [{ account: bobAccount }], +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://public.pimlico.io/v2/rpc'), +}) +``` + + + diff --git a/smart-accounts-kit/guides/smart-accounts/send-gasless-transaction.md b/smart-accounts-kit/guides/smart-accounts/send-gasless-transaction.md new file mode 100644 index 00000000000..70c11ce916b --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/send-gasless-transaction.md @@ -0,0 +1,91 @@ +--- +description: Learn how to send a gasless transaction +keywords: [send, gasless transaction, smart account, sponsor, paymaster] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Send a gasless transaction + +[MetaMask Smart Accounts](../../concepts/smart-accounts.md) support gas sponsorship, which simplifies onboarding by abstracting gas fees away from end users. +You can use any paymaster service provider, such as [Pimlico](https://docs.pimlico.io/references/paymaster) or [ZeroDev](https://docs.zerodev.app/meta-infra/rpcs), or plug in your own custom paymaster. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a MetaMask smart account.](create-smart-account.md) + +## Send a gasless transaction + +The following example demonstrates how to use Viem's [Paymaster Client](https://viem.sh/account-abstraction/clients/paymaster) to send gasless transactions. +You can provide the paymaster client using the paymaster property in the [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation#paymaster-optional) method, or in the [Bundler Client](https://viem.sh/account-abstraction/clients/bundler#paymaster-optional). + +In this example, the paymaster client is passed to the `sendUserOperation` method. + + + + +```typescript +import { bundlerClient, smartAccount, paymasterClient } from './config.ts' +import { parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('0.001'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, + paymaster: paymasterClient, +}) +``` + + + + + +```typescript +import { createPublicClient, createPaymasterClient, http } from 'viem' +import { createBundlerClient } from 'viem/account-abstraction' +import { sepolia as chain } from 'viem/chains' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = generatePrivateKey() +const account = privateKeyToAccount(privateKey) + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), +}) + +export const paymasterClient = createPaymasterClient({ + // You can use the paymaster of your choice + transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), +}) +``` + + + diff --git a/smart-accounts-kit/guides/smart-accounts/send-user-operation.md b/smart-accounts-kit/guides/smart-accounts/send-user-operation.md new file mode 100644 index 00000000000..024e7e36989 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/send-user-operation.md @@ -0,0 +1,186 @@ +--- +description: Learn how to send an ERC-4337 user operation using Viem. +keywords: [ERC-4337, send, user operation, smart account] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Send a user operation + +User operations are the [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) counterpart to traditional blockchain transactions. +They incorporate significant enhancements that improve user experience and provide greater +flexibility in account management and transaction execution. + +Viem's Account Abstraction API allows a developer to specify an array of `Calls` that will be executed as a user operation via Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. +The Smart Accounts Kit encodes and executes the provided calls. + +User operations are not directly sent to the network. +Instead, they are sent to a bundler, which validates, optimizes, and aggregates them before network submission. +See [Viem's Bundler Client](https://viem.sh/account-abstraction/clients/bundler) for details on how to interact with the bundler. + +:::note +If a user operation is sent from a MetaMask smart account that has not been deployed, the toolkit configures the user operation to automatically deploy the account. +::: + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Create a MetaMask smart account.](create-smart-account.md) + +## Send a user operation + +The following is a simplified example of sending a user operation using Viem Core SDK. Viem Core SDK offers more granular control for developers who require it. + +In the example, a user operation is created with the necessary gas limits. + +This user operation is passed to a bundler instance, and the `EntryPoint` address is retrieved from the client. + + + + +```typescript +import { bundlerClient, smartAccount } from './config.ts' +import { parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the specific bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('0.001'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + + + + + +```typescript +import { createPublicClient, http } from 'viem' +import { createBundlerClient } from 'viem/account-abstraction' +import { sepolia as chain } from 'viem/chains' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = generatePrivateKey() +const account = privateKeyToAccount(privateKey) + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://public.pimlico.io/v2/11155111/rpc'), +}) +``` + + + + +### Estimate fee per gas + +Different bundlers have different ways to estimate `maxFeePerGas` and `maxPriorityFeePerGas`, and can reject requests with insufficient values. +The following example updates the previous example to estimate the fees. + +This example uses constant values, but the [Hello Gator example](https://github.com/MetaMask/hello-gator) uses Pimlico's Alto bundler, +which fetches user operation gas price using the RPC method [`pimlico_getUserOperationPrice`](https://docs.pimlico.io/infra/bundler/endpoints/pimlico_getUserOperationGasPrice). + +:::info Installation required + +To estimate the gas fee for Pimlico's bundler, install the [permissionless.js SDK](https://docs.pimlico.io/references/permissionless/). + +::: + +```typescript title="example.ts" +// add-next-line ++ import { createPimlicoClient } from "permissionless/clients/pimlico"; +import { parseEther } from "viem"; +import { bundlerClient, smartAccount } from "./config.ts" // The config.ts is the same as in the previous example. + +// remove-start +- const maxFeePerGas = 1n; +- const maxPriorityFeePerGas = 1n; +// remove-end + +// add-start ++ const pimlicoClient = createPimlicoClient({ ++ transport: http("https://api.pimlico.io/v2/11155111/rpc?apikey="), // You can get the API Key from the Pimlico dashboard. ++ }); ++ ++ const { fast: fee } = await pimlicoClient.getUserOperationGasPrice(); +// add-end + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: "0x1234567890123456789012345678901234567890", + value: parseEther("1") + } + ], + // remove-start +- maxFeePerGas, +- maxPriorityFeePerGas + // remove-end + // add-next-line ++ ...fee +}); +``` + +### Wait for the transaction receipt + +After submitting the user operation, it's crucial to wait for the receipt to ensure that it has been successfully included in the blockchain. Use the `waitForUserOperationReceipt` method provided by the bundler client. + +```typescript title="example.ts" +import { createPimlicoClient } from "permissionless/clients/pimlico"; +import { bundlerClient, smartAccount } from "./config.ts" // The config.ts is the same as in the previous example. + +const pimlicoClient = createPimlicoClient({ + transport: http("https://api.pimlico.io/v2/11155111/rpc?apikey="), // You can get the API Key from the Pimlico dashboard. +}); + +const { fast: fee } = await pimlicoClient.getUserOperationGasPrice(); + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: "0x1234567890123456789012345678901234567890", + value: parseEther("1") + } + ], + ...fee +}); + +// add-start ++ const { receipt } = await bundlerClient.waitForUserOperationReceipt({ ++ hash: userOperationHash ++ }); ++ ++ console.log(receipt.transactionHash); +// add-end +``` + +## Next steps + +To sponsor gas for end users, see how to [send a gasless transaction](send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/signers/dynamic.md b/smart-accounts-kit/guides/smart-accounts/signers/dynamic.md new file mode 100644 index 00000000000..fc5a54156b2 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/dynamic.md @@ -0,0 +1,138 @@ +--- +description: Learn how to use Dynamic signer with MetaMask Smart Accounts. +sidebar_label: Dynamic +keywords: [dynamic, smart account, signer, metamask smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use Dynamic with MetaMask Smart Accounts + +[Dynamic](https://www.dynamic.xyz/) is an embedded wallet solution that enables seamless social sign-in and passkey based +wallets, making user onboarding easier. MetaMask Smart Accounts is a signer-agnostic implementation +that allows you to use Dynamic's EOA wallet as a signer for smart accounts. + + + +:::info +This guide supports React and React-based frameworks. +::: + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- Create a [Dynamic Environment ID](https://www.dynamic.xyz/docs/developer-dashboard/tokens-api-keys#environment-id). + +## Steps + +### 1. Install dependencies + +Install the following dependencies: + +```bash npm2yarn +npm install @dynamic-labs/ethereum @dynamic-labs/sdk-react-core @dynamic-labs/wagmi-connector @metamask/smart-accounts-kit @tanstack/react-query wagmi viem +``` + +### 2. Create the Dynamic provider + +In this step, you'll configure the [`DynamicContextProvider`](https://www.dynamic.xyz/docs/react-sdk/providers/providers-introduction#dynamic-context-provider) component to provide Dynamic's context +to your application. You'll also use the [`DynamicWagmiConnector`](https://www.dynamic.xyz/docs/react-sdk/providers/providers-introduction#dynamic-wagmi-connector) to integrate Dynamic with Wagmi. This +connector enables you to use Wagmi hooks with Dynamic. + +Once you have created the `DynamicProvider`, you must wrap it at the root of your application so +that the rest of your application has access to the Dynamic's context. + +For an advanced configuration, see how to [configure Dynamic and Wagmi](https://www.dynamic.xyz/docs/react-sdk/using-wagmi). + + + + +```ts +import { QueryClientProvider } from "@tanstack/react-query"; +import { WagmiProvider } from "wagmi"; +import { ReactNode } from "react"; +import { EthereumWalletConnectors } from "@dynamic-labs/ethereum"; +import { DynamicContextProvider } from "@dynamic-labs/sdk-react-core"; +import { DynamicWagmiConnector } from "@dynamic-labs/wagmi-connector"; +import { wagmiConfig, queryClient } from "./config.ts" + +export function DynamicProvider({ children }: { children: ReactNode }) { + return ( + ", + walletConnectors: [EthereumWalletConnectors], + }} + > + + + + {children} + + + + + ); +} +``` + + + + + +```ts +import { QueryClient } from '@tanstack/react-query' +import { createConfig, http } from 'wagmi' +import { sepolia } from 'viem/chains' + +export const queryClient = new QueryClient() + +export const wagmiConfig = createConfig({ + chains: [sepolia], + ssr: true, + transports: { + [sepolia.id]: http(), + }, +}) +``` + + + + +### 3. Create a smart account + +Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a +. + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { useConnection, usePublicClient, useWalletClient } from 'wagmi' + +const { address } = useConnection() +const publicClient = usePublicClient() +const { data: walletClient } = useWalletClient() + +// Additional check to make sure the Dyanmic is connected +// and values are available. +if (!address || !walletClient || !publicClient) { + // Handle the error case +} + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [address, [], [], []], + deploySalt: '0x', + signer: { walletClient }, +}) +``` + +## Next steps + +- See how to [send a user operation](../send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/signers/embedded-wallets.md b/smart-accounts-kit/guides/smart-accounts/signers/embedded-wallets.md new file mode 100644 index 00000000000..40456fedb67 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/embedded-wallets.md @@ -0,0 +1,124 @@ +--- +description: Learn how to use MetaMask Embedded Wallets (Web3Auth) with MetaMask Smart Accounts. +sidebar_label: MetaMask Embedded Wallets +keywords: [web3auth, smart account, signer, metamask smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use MetaMask Embedded Wallets with MetaMask Smart Accounts + +[MetaMask Embedded Wallets (Web3Auth)](/embedded-wallets/) provides a pluggable embedded wallet +infrastructure to simplify Web3 wallet integration and user onboarding. It supports social sign-ins allowing +users to access Web3 applications through familiar authentication methods in under a minute. + +MetaMask Smart Accounts is a signer-agnostic implementation that allows you to use Embedded Wallets as a signer for smart accounts. + +:::info +This guide supports React and React-based frameworks. +::: + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- Create an [Embedded Wallets Client ID](/embedded-wallets/dashboard). + +## Steps + +### 1. Install dependencies + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: + +```bash npm2yarn +npm install @metamask/smart-accounts-kit @web3auth/modal wagmi @tanstack/react-query viem +``` + +### 2. Create the Web3Auth provider + +Configure the `Web3AuthProvider` component to provide the Embedded Wallets context to your application. +You'll also use the `WagmiProvider` to integrate Embedded Wallets with Wagmi. +This provider enables you to use Wagmi hooks with Embedded Wallets. + +Once you've created the `Web3AuthAppProvider`, wrap it at the root of your application so +the rest of your application has access to the Embedded Wallets context. + +For an advanced configuration, see the [Embedded Wallets guide](/embedded-wallets/sdk/react/advanced/). + + + + +```ts +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ReactNode } from "react"; +import { Web3AuthProvider } from "@web3auth/modal/react"; +// Make sure to import `WagmiProvider` from `@web3auth/modal/react/wagmi`, not `wagmi` +import { WagmiProvider } from "@web3auth/modal/react/wagmi"; +import { web3authConfig } from "./config.ts"; + +const queryClient = new QueryClient(); + +export function Web3AuthAppProvider({ children }: { children: ReactNode }) { + return ( + + + {children} + + + ); +} +``` + + + + + +```ts +import { Web3AuthOptions } from '@web3auth/modal' + +const web3AuthOptions: Web3AuthOptions = { + clientId: '', + web3AuthNetwork: '', +} + +export const web3authConfig = { + web3AuthOptions, +} +``` + + + + +### 3. Create a smart account + +Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a +. + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { useConnection, usePublicClient, useWalletClient } from 'wagmi' + +const { address } = useConnection() +const publicClient = usePublicClient() +const { data: walletClient } = useWalletClient() + +// Additional check to make sure the Embedded Wallets is connected +// and values are available. +if (!address || !walletClient || !publicClient) { + // Handle the error case +} + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [address, [], [], []], + deploySalt: '0x', + signer: { walletClient }, +}) +``` + +## Next steps + +- See how to [send a user operations](../send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/signers/eoa-wallets.md b/smart-accounts-kit/guides/smart-accounts/signers/eoa-wallets.md new file mode 100644 index 00000000000..4015cff5ad5 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/eoa-wallets.md @@ -0,0 +1,118 @@ +--- +description: Learn how to use Externally Owned Account (EOA) with MetaMask Smart Accounts. +sidebar_label: EOA (e.g. MetaMask) +keywords: [metamask, smart account, signer, metamask smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use an EOA with MetaMask Smart Accounts + +Externally owned accounts (EOAs) are accounts controlled by a user's private key (paired with a public address) and are typically accessed through wallet apps like MetaMask. MetaMask Smart Accounts is signer-agnostic, so +you can use an EOA as the signer. + +:::info +This guide supports React and React-based frameworks. For Vue, see [Wagmi docs](https://wagmi.sh/vue/getting-started). +::: + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. + +## Steps + +### 1. Install dependencies + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: + +```bash npm2yarn +npm install @metamask/smart-accounts-kit wagmi @metamask/connect-evm @tanstack/react-query viem +``` + +### 2. Create the App provider + +Once you've created the `AppProvider`, wrap it at the root of your application so +that the rest of your application has access to the Wagmi's and TanStack's context. +This will allow every component inside the provider to use the Wagmi hooks. + +The example uses the [MetaMask Connect](https://wagmi.sh/react/api/connectors/metaMask) connector. +For an advanced configuration, see Wagmi's [`createConfig`](https://wagmi.sh/react/api/createConfig) API reference. + + + + +```ts +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ReactNode } from "react"; +import { WagmiProvider } from 'wagmi' +import { config } from "./config.ts"; + +const queryClient = new QueryClient(); + +export function AppProvider({ children }: { children: ReactNode }) { + return ( + + + {children} + + + ); +} +``` + + + + + +```ts +import { createConfig, http } from 'wagmi' +import { sepolia } from 'viem/chains' +import { metaMask } from 'wagmi/connectors' + +export const config = createConfig({ + chains: [sepolia], + connectors: [metaMask()], + transports: { + [sepolia.id]: http(), + }, +}) +``` + + + + +### 3. Create a smart account + +Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a +. + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { useConnection, usePublicClient, useWalletClient } from 'wagmi' + +const { address } = useConnection() +const publicClient = usePublicClient() +const { data: walletClient } = useWalletClient() + +// Additional check to make sure the EOA wallet is connected +// and values are available. +if (!address || !walletClient || !publicClient) { + // Handle the error case +} + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [address, [], [], []], + deploySalt: '0x', + signer: { walletClient }, +}) +``` + +## Next steps + +- See how to use [MetaMask Embedded Wallets as a signer](./eoa-wallets.md) to make the user onboarding journey easier. +- See how to [send a user operation](../send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/signers/index.mdx b/smart-accounts-kit/guides/smart-accounts/signers/index.mdx new file mode 100644 index 00000000000..b481519ded2 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/index.mdx @@ -0,0 +1,59 @@ +--- +description: Learn how to configure signers for MetaMask Smart Accounts. +keywords: + [signers, metamask smart accounts, smart account, embedded wallets, web3auth, dynamic, privy] +--- + +import CardList from '@site/src/components/CardList' +import GlossaryTerm from '@theme/GlossaryTerm' + +# Configure a signer + +When [creating a smart account](../create-smart-account.md), you must specify a signer. The signer owns the smart account and is responsible for +generating the signatures required to submit user operations. MetaMask Smart Accounts is signer-agnostic, allowing you +to use any signer you prefer, such as Embedded Wallets, passkeys, EOA wallets, or a custom signer. + +MetaMask Smart Accounts has a native integration with [MetaMask Embedded Wallets](/embedded-wallets/), making user onboarding easier. In addition to the native integration, you can use +third-party wallet providers as Privy, Dynamic, or Para as the signer for your smart account. + +See the following guides to learn how to configure different signers: + +## Recommended + + + +## Other signers + + diff --git a/smart-accounts-kit/guides/smart-accounts/signers/passkey.md b/smart-accounts-kit/guides/smart-accounts/signers/passkey.md new file mode 100644 index 00000000000..70cff1dc2ad --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/passkey.md @@ -0,0 +1,101 @@ +--- +description: Learn how to use Passkey with MetaMask Smart Accounts. +sidebar_label: Passkey +keywords: [passkey, smart account, signer, metamask smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use a passkey with MetaMask Smart Accounts + +Passkeys eliminate the need for traditional seed phrases that are difficult to remember, enabling a more seamless +and secure way for users to access their EOAs. Compared to traditional EOAs which use +secp256k1 elliptic curve to generate key pairs and signatures, a passkey-based EOA uses the +secp256r1 (P-256) elliptic curve. + +MetaMask Smart Accounts is signer-agnostic and natively supports passkeys (P-256 elliptic curve signatures), so you can use a passkey as the signer. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. + +## Steps + +### 1. Install dependencies + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: + +```bash npm2yarn +npm install @metamask/smart-accounts-kit ox +``` + +### 2. Create a passkey + +To create a passkey signer, use Viem's [`createWebAuthnCredential`](https://viem.sh/account-abstraction/accounts/webauthn/createWebAuthnCredential) function to securely register the passkey (WebAuthn credential). + +```ts +import { createWebAuthnCredential } from 'viem/account-abstraction' + +const credential = await createWebAuthnCredential({ + name: 'MetaMask Smart Account', +}) +``` + +### 3. Create a smart account + +Once the passkey is created, use the [Viem WebAuthn Account](https://viem.sh/account-abstraction/accounts/webauthn) to configure your passkey as a signer. + +The `deployParams` parameter needs the X and Y coordinates of the P-256 public key. Since WebAuthn credentials store +a compressed public key, you need to deserialize it, and extract the X and Y coordinates. + + + + +```typescript +import { publicClient } from './config.ts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { toWebAuthnAccount } from 'viem/account-abstraction' +import { Address, PublicKey } from 'ox' +import { toHex } from 'viem' + +const webAuthnAccount = toWebAuthnAccount({ credential }) + +// Deserialize compressed public key +const publicKey = PublicKey.fromHex(credential.publicKey) + +// Convert public key to address +const owner = Address.fromPublicKey(publicKey) + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [owner, [toHex(credential.id)], [publicKey.x], [publicKey.y]], + deploySalt: '0x', + signer: { webAuthnAccount, keyId: toHex(credential.id) }, +}) +``` + + + + + +```typescript +import { http, createPublicClient } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const transport = http() +export const publicClient = createPublicClient({ + transport, + chain, +}) +``` + + + + +## Next steps + +- See how to [send a user operation](../send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/smart-accounts/signers/privy.md b/smart-accounts-kit/guides/smart-accounts/signers/privy.md new file mode 100644 index 00000000000..c849385d764 --- /dev/null +++ b/smart-accounts-kit/guides/smart-accounts/signers/privy.md @@ -0,0 +1,125 @@ +--- +description: Learn how to use Privy signer with MetaMask Smart Accounts. +sidebar_label: Privy +keywords: [privy, smart account, signer, metamask smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use Privy with MetaMask Smart Accounts + +[Privy](https://docs.privy.io/welcome) provides an embedded wallet solution that enables seamless social sign-in for Web3 applications making user onboarding easier. MetaMask Smart Accounts is a signer-agnostic implementation +that allows you to use Privy's EOA wallet as a signer for smart accounts. + +:::info +This guide supports React and React-based frameworks. +::: + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- Create a [Privy App ID](https://docs.privy.io/basics/get-started/dashboard/create-new-app#get-api-credentials). + +## Steps + +### 1. Install dependencies + +Install the following dependencies: + +```bash npm2yarn +npm install @privy-io/react-auth @privy-io/wagmi @metamask/smart-accounts-kit @tanstack/react-query wagmi viem +``` + +### 2. Create the Privy provider + +In this step, you'll configure the `PrivyProvider` component to provide the Privy's context +to your application. You'll also use the Privy's `WagmiProvider` component to integrate Privy with Wagmi. This +provider enables you to use Wagmi hooks with Privy. + +Once you have created the `PrivyAppProvider`, you must wrap it at the root of your application so +that the rest of your application has access to the Privy's context. + +For an advanced configuration, see Privy's [configuring appearance](https://docs.privy.io/basics/get-started/dashboard/configuring-appearance) and [configuring login methods](https://docs.privy.io/basics/get-started/dashboard/configure-login-methods) guides. + + + + +```ts +import { QueryClientProvider } from "@tanstack/react-query"; +import { ReactNode } from "react"; +import { PrivyProvider } from '@privy-io/react-auth'; +// Make sure to import `WagmiProvider` from `@privy-io/wagmi`, not `wagmi` +import { WagmiProvider } from '@privy-io/wagmi'; +import { QueryClientProvider } from '@tanstack/react-query'; +import { wagmiConfig, queryClient } from "./config.ts" + +export function PrivyAppProvider({ children }: { children: ReactNode }) { + return ( + + + + {children} + + + + ); +} +``` + + + + + +```ts +import { QueryClient } from '@tanstack/react-query' +import { createConfig, http } from 'wagmi' +import { sepolia } from 'viem/chains' + +export const queryClient = new QueryClient() + +export const wagmiConfig = createConfig({ + chains: [sepolia], + ssr: true, + transports: { + [sepolia.id]: http(), + }, +}) +``` + + + + +### 3. Create a smart account + +Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a +. + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { useConnection, usePublicClient, useWalletClient } from 'wagmi' + +const { address } = useConnection() +const publicClient = usePublicClient() +const { data: walletClient } = useWalletClient() + +// Additional check to make sure the Privy is connected +// and values are available. +if (!address || !walletClient || !publicClient) { + // Handle the error case +} + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [address, [], [], []], + deploySalt: '0x', + signer: { walletClient }, +}) +``` + +## Next steps + +- See how to [send a user operation](../send-user-operation.md). +- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/smart-accounts-kit/guides/x402/buyer/advanced-permissions.md b/smart-accounts-kit/guides/x402/buyer/advanced-permissions.md new file mode 100644 index 00000000000..c54ae0bffd0 --- /dev/null +++ b/smart-accounts-kit/guides/x402/buyer/advanced-permissions.md @@ -0,0 +1,288 @@ +--- +description: Pay for an x402-protected API data using Advanced Permissions with a fixed allowance. +sidebar_label: Advanced Permissions +keywords: + [x402, ERC-7715, ERC-7710, advanced permissions, redeemers, allowance, session account, buyer] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Pay for an x402 API with Advanced Permissions + +In this guide, you request with a fixed ERC-20 allowance +to pay for a specific x402-protected resource. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) + +## Steps + +### 1. Set up a Wallet Client + +Set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. Use this client to interact with MetaMask. + +Extend the Wallet Client with `erc7715ProviderActions` to enable requests. + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + +### 2. Set up a session account + +Set up a session account. The requested permissions are granted to the session account, which is responsible for making x402 API calls. + +The session account can be either a smart account or an EOA. +This example uses an EOA as the session account. + +```typescript +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { createWalletClient, http } from 'viem' + +const sessionAccount = privateKeyToAccount('0x...') +``` + +### 3. Get payment requirements + +Call the protected API route once without the `PAYMENT-SIGNATURE` header. + +The server returns `402` with the payment terms (`PAYMENT-REQUIRED`) in the response, which you use +to build the payment payload. + + + + +```ts +import { PaymentRequirements } from './types' + +// Update the URL +const challengeResponse = await fetch('https://api.example.com/paid-endpoint') +if (challengeResponse.status !== 402) { + console.error('Expected 402 challenge from protected route') + // Handle error +} + +const paymentRequiredHeader = challengeResponse.headers.get('PAYMENT-REQUIRED') +if (!paymentRequiredHeader) { + console.error('PAYMENT-REQUIRED header is missing') + // Handle error +} + +const decodedPaymentRequired = Buffer.from(paymentRequiredHeader, 'base64').toString('utf-8') +const paymentRequired = JSON.parse(decodedPaymentRequired) as { + accepts: PaymentRequirements[] +} + +const accepted = paymentRequired.accepts[0] +if (!accepted) { + console.error('Server did not provide accepted payment requirements') + // Handle error +} + +if (accepted.extra.assetTransferMethod !== 'erc7710') { + console.error('Server does not support ERC-7710 delegation payments') + // Handle error +} +``` + + + + +```ts +import { Address } from 'viem' + +export type PaymentRequirements = { + scheme: string + network: string + amount: string + asset: Address + payTo: Address + maxTimeoutSeconds: number + extra: { + assetTransferMethod: string + facilitators?: Address[] + } +} +``` + + + + +### 4. Request Advanced Permissions + +Request Advanced Permissions from the user with the Wallet Client's `requestExecutionPermissions` action. + +In this example, you request an ERC-20 allowance permission with a fixed allowance equal to the +resource cost. Use the [`redeemer`](../../../reference/advanced-permissions/rules.md#redeemer) rule +to restrict redemption to facilitator addresses from the payment requirements. + +See the [`requestExecutionPermissions`](../../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) API reference for more information. + +```ts +import { base as chain } from 'viem/chains' + +const facilitators = accepted.extra.facilitators +if (!facilitators || facilitators.length === 0) { + console.error('No facilitators found in PAYMENT-REQUIRED') + // Handle error +} + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 3600 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + to: sessionAccount.address, + permission: { + type: 'erc20-token-allowance', + data: { + tokenAddress: accepted.asset, + // Fixed allowance for this resource. + allowanceAmount: BigInt(accepted.amount), + justification: 'Permission to pay for a specific x402-protected API resource', + }, + isAdjustmentAllowed: false, + }, + rules: [ + { + type: 'redeemer', + data: { + addresses: facilitators!, + }, + }, + ], + }, +]) +``` + +### 5. Create a redelegation + +The granted advanced permission is delegated to the session account. To let facilitator addresses +redeem this permission context for x402 settlement, create an open redelegation from the session account. + +Use the Wallet Client's [`redelegatePermissionContextOpen`](../../../reference/erc7710/wallet-client.md#redelegatepermissioncontextopen) +action to create a redelegated permission context. The granted permission already includes +a [redeemer enforcer](../../../reference/delegation/caveats.md#redeemer), so you do not add extra caveats here. + + + + +```ts +import { environment, sessionAccountWalletClient } from './config.ts' + +const permission = grantedPermissions[0] +if (!permission) { + console.error('No permission response returned by requestExecutionPermissions') + // Handle error +} + +const { permissionContext: redelegatedPermissionContext } = + await sessionAccountWalletClient.redelegatePermissionContextOpen({ + environment, + permissionContext: permission!.context, + }) +``` + + + + +```ts +import { createWalletClient, http } from 'viem' +import { base as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' +import { sessionAccount } from './session-account.ts' + +export const environment = getSmartAccountsEnvironment(chain.id) + +export const sessionAccountWalletClient = createWalletClient({ + account: sessionAccount, + chain, + transport: http(), +}).extend(erc7710WalletActions()) +``` + + + + +### 6. Create the payment payload + +Create a payment payload using the redelegated permission context and accepted requirements. +For ERC-7710 (Smart Contract Delegation), x402 requires the payload fields `delegationManager`, +`permissionContext`, and `delegator`. The facilitator uses `permissionContext` to simulate +during verification and then settle the payment. + +Encode the full x402 payment payload as base64, then send it in the `PAYMENT-SIGNATURE` header. + + + + +```ts +import { PaymentPayload } from './types' + +const permission = grantedPermissions[0] + +const paymentPayload: PaymentPayload = { + x402Version: 2, + accepted, + payload: { + delegationManager: permission.delegationManager, + permissionContext: redelegatedPermissionContext, + delegator: permission.from, + }, +} + +const encodedPayment = Buffer.from(JSON.stringify(paymentPayload)).toString('base64') +``` + + + + +```ts +import { Address, Hex } from 'viem' + +export type PaymentPayload = { + x402Version: 2 + accepted: PaymentRequirements + payload: { + delegationManager: Address + permissionContext: Hex + delegator: Address + } +} +``` + + + + +### 7. Make the paid request + +Send the base64-encoded x402 payment payload in the `PAYMENT-SIGNATURE` header. +If verification succeeds, the server returns the protected data. + +```ts +const apiResponse = await fetch('https://api.example.com/paid-endpoint', { + headers: { + 'PAYMENT-SIGNATURE': encodedPayment, + }, +}) + +if (!apiResponse.ok) { + const errorBody = await apiResponse.json() + console.error(errorBody.error ?? 'API request failed') + // Handle error +} + +const data = await apiResponse.json() +console.log('Protected API response:', data) +``` diff --git a/smart-accounts-kit/guides/x402/buyer/delegations.md b/smart-accounts-kit/guides/x402/buyer/delegations.md new file mode 100644 index 00000000000..617ad36328e --- /dev/null +++ b/smart-accounts-kit/guides/x402/buyer/delegations.md @@ -0,0 +1,131 @@ +--- +description: Pay for x402-protected API access using delegation. +sidebar_label: Delegations +keywords: [x402, ERC-7710, delegation, smart account, facilitator, buyer, API] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Pay for an x402 API with delegation + +In this guide, you use a buyer account to access API data from an x402 server by creating +a delegation that authorizes token transfers +on your behalf. + +You use [`createx402DelegationProvider`](../../../reference/x402.md#createx402delegationprovider) +to set up an `x402Erc7710Client` with a delegation provider, register it with the x402 client, +and use `wrapFetchWithPayment` to automatically handle payment when calling a protected API route. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) + +## Steps + +### 1. Install the dependencies + +```bash npm2yarn +npm install @x402/core @x402/fetch @metamask/x402 +``` + +### 2. Create a buyer account + +Create an account to represent the buyer, the +delegator who creates a delegation. + +The delegator must be a . +Use the toolkit's +[`toMetaMaskSmartAccount`](../../../reference/smart-account.md#tometamasksmartaccount) method to +create the buyer account. + +:::note Important +Fund the smart account with USDC for the requested payment. +::: + + + + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { publicClient, buyerAccount } from './config' + +export const buyerSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [buyerAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: buyerAccount }, +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { base as chain } from 'viem/chains' + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +export const buyerAccount = privateKeyToAccount('0x') +``` + + + + +### 3. Create an x402 ERC-7710 client + +Create an `x402Erc7710Client` using +[`createx402DelegationProvider`](../../../reference/x402.md#createx402delegationprovider). +The provider creates an open +root delegation, signs it, and returns an ABI-encoded delegation chain +when the x402 client needs to pay for a request. + +The provider appends [`redeemer`](../../../reference/delegation/caveats.md#redeemer), +[`allowedTargets`](../../../reference/delegation/caveats.md#allowedtargets), and +[`timestamp`](../../../reference/delegation/caveats.md#timestamp) +caveats if not already present. + +```ts +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' +import { x402Erc7710Client } from '@metamask/x402' + +const erc7710Client = new x402Erc7710Client({ + delegationProvider: createx402DelegationProvider({ + account: buyerSmartAccount, + }), +}) +``` + +### 4. Register the client + +Register the ERC-7710 client with the x402 core client for all EVM networks. +Create an HTTP client and a payment-aware `fetch` function using `wrapFetchWithPayment`. + +```ts +import { x402Client, x402HTTPClient } from '@x402/core/client' +import { wrapFetchWithPayment } from '@x402/fetch' + +const coreClient = new x402Client().register('eip155:*', erc7710Client) +const httpClient = new x402HTTPClient(coreClient) + +const fetchWithPayment = wrapFetchWithPayment(fetch, httpClient) +``` + +### 5. Make the paid request + +Call the protected endpoint using `fetchWithPayment`. +It handles the x402 payment flow, calling your delegation provider +to create an open delegation when the server returns a `402` response. + +```ts +const paidResponse = await fetchWithPayment('https://api.example.com/paid-endpoint', { + method: 'GET', +}) +``` diff --git a/smart-accounts-kit/guides/x402/buyer/recurring-payments.md b/smart-accounts-kit/guides/x402/buyer/recurring-payments.md new file mode 100644 index 00000000000..b277d58a520 --- /dev/null +++ b/smart-accounts-kit/guides/x402/buyer/recurring-payments.md @@ -0,0 +1,172 @@ +--- +description: Set up recurring x402 API payments using Advanced Permissions. +sidebar_label: Recurring payments +keywords: + [ + x402, + ERC-7715, + ERC-7710, + advanced permissions, + recurring payments, + periodic permission, + session account, + buyer, + ] +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Recurring x402 payments + +In this guide, you set up recurring x402 payments by requesting an ERC-20 periodic + permission from a user. + +For example, a user gives your agent permission to spend up to 10 USDC per week. +Later, when the agent calls an x402 endpoint, it checks the price, uses the granted permission, +and pays. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) + +## Steps + +### 1. Install the dependencies + +```bash npm2yarn +npm install @x402/core @x402/fetch @metamask/x402 +``` + +### 2. Set up a Wallet Client + +Set up a Wallet Client using Viem's +[`createWalletClient`](https://viem.sh/docs/clients/wallet) function. +Use this client to interact with MetaMask. + +Extend the Wallet Client with `erc7715ProviderActions` to enable + requests. + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + +### 3. Set up an agent account + +The session account can be either a +smart account or an +EOA. +This example uses an EOA as the session account. + +```typescript +import { privateKeyToAccount } from 'viem/accounts' + +const sessionAccount = privateKeyToAccount('0x...') +``` + +### 4. Request Advanced Permissions + +Request Advanced Permissions from the user with the Wallet Client's +`requestExecutionPermissions` action. + +In this example, you request an +[ERC-20 periodic permission](../../advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission) +with a weekly allowance of 10 USDC. +This creates a recurring payment budget that your agent can store and reuse for x402 API calls. + +See the +[`requestExecutionPermissions`](../../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) +API reference for more information. + +```ts +import { base as chain } from 'viem/chains' +import { parseUnits } from 'viem' + +// USDC address on Base. +const tokenAddress = '0x...' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 60 * 60 * 24 * 30 // Permission expires in 30 days. + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress, + periodAmount: parseUnits('10', 6), + periodDuration: 604800, + startTime: currentTime, + justification: + 'Permission for agent to spend up to 10 USDC every week for making x402 API calls', + }, + isAdjustmentAllowed: false, + }, + }, +]) +``` + +### 5. Create an x402 ERC-7710 client + +Create an `x402Erc7710Client` using +[`createx402DelegationProvider`](../../../reference/x402.md#createx402delegationprovider). + +The provider creates an open redelegation +from the session account using the granted permission. The facilitator can then redeem the redelegated +permission context for x402 settlement. + +```ts +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' +import { x402Erc7710Client } from '@metamask/x402' + +const permission = grantedPermissions[0] + +const erc7710Client = new x402Erc7710Client({ + delegationProvider: createx402DelegationProvider({ + account: sessionAccount, + parentPermissionContext: permission.context, + from: permission.from, + }), +}) +``` + +### 6. Register the client + +Register the ERC-7710 client with the x402 core client for all EVM networks, +then create an HTTP client and a payment-aware `fetch` function using `wrapFetchWithPayment`. + +```ts +import { x402Client, x402HTTPClient } from '@x402/core/client' +import { wrapFetchWithPayment } from '@x402/fetch' + +const coreClient = new x402Client().register('eip155:*', erc7710Client) +const httpClient = new x402HTTPClient(coreClient) + +const fetchWithPayment = wrapFetchWithPayment(fetch, httpClient) +``` + +### 7. Make the paid request + +Call the protected endpoint using `fetchWithPayment`. +The x402 payment flow calls your delegation provider to create an open redelegation +when the server returns a `402` response. + +```ts +const paidResponse = await fetchWithPayment('https://api.example.com/paid-endpoint', { + method: 'GET', +}) +``` + +You can reuse the same weekly granted permission for additional protected routes and providers +in your agent flow. +Your agent continues paying until the weekly cap is reached, then resumes after the next +weekly period starts. diff --git a/smart-accounts-kit/guides/x402/overview.md b/smart-accounts-kit/guides/x402/overview.md new file mode 100644 index 00000000000..2c2c03807b1 --- /dev/null +++ b/smart-accounts-kit/guides/x402/overview.md @@ -0,0 +1,66 @@ +--- +description: Use x402 and ERC-7710 delegations to enable programmatic payments from MetaMask smart accounts. +sidebar_label: Overview +keywords: [x402, HTTP 402, ERC-7710, delegation, facilitator, payments, smart account] +--- + +import GlossaryTerm from '@theme/GlossaryTerm' +import CardList from '@site/src/components/CardList' + +# x402 Payments + +[x402](https://www.x402.org/) is an open payment protocol that uses the HTTP `402` status code to enable programmatic, machine-to-machine payments over HTTP. It allows servers to charge for API access without requiring buyer accounts, API keys, or traditional payment infrastructure. + +For example, an AI agent can pay 0.01 USDC per request to access a weather API, or a +dapp can charge users a micro-payment to retrieve premium onchain analytics data. + +## ERC-7710 payments + +The standard x402 protocol supports direct token transfers (using ERC-20 Permit2 or EIP-3009). +[ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) extends this by enabling delegation-based +payments from MetaMask smart accounts. + +With ERC-7710, a buyer's smart account creates a delegation that authorizes the facilitator +to transfer tokens on their behalf. The buyer doesn't sign a direct token approval. +Instead, they sign a delegation that the facilitator redeems during settlement. + +This approach enables buyers to pay from MetaMask wallet. +Buyers can restrict delegations to specific facilitator addresses, amounts, and time windows +using delegation scopes. +They can also create long lived delegations that allow recurring payments without re-signing +for each request. + +Learn more [ERC-7710 delegations](../../concepts/delegation/overview.md). + +## Guides + +Get started with x402 payments in Smart Accounts Kit. +These guides walk you through seller endpoint setup and buyer payment flows. + + diff --git a/smart-accounts-kit/guides/x402/seller.md b/smart-accounts-kit/guides/x402/seller.md new file mode 100644 index 00000000000..eb28b506161 --- /dev/null +++ b/smart-accounts-kit/guides/x402/seller.md @@ -0,0 +1,134 @@ +--- +description: Build an x402-compatible Node.js server that accepts ERC-7710 delegation payments. +sidebar_label: Seller +keywords: + [x402, ERC-7710, HTTP 402, Advanced Permissions, facilitator, delegation, Express, Node.js] +--- + +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +# Create an x402 server with ERC-7710 + +In this guide, you build a Node.js server that charges for HTTP API access using +[x402](https://www.x402.org/) and accepts [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) delegation +payments verified through the MetaMask facilitator. + +You use the official [`@x402/express`](https://www.npmjs.com/package/@x402/express) middleware with the +[`@metamask/x402`](https://www.npmjs.com/package/@metamask/x402) +package, which provides an ERC-7710 server scheme that routes verification and settlement +through the MetaMask facilitator. + +## Prerequisites + +- [Node.js 18](https://nodejs.org/en) or later. +- A [Node.js Express server](https://expressjs.com/en/starter/installing.html). +- A seller payout address to receive funds (for example, a + [MetaMask wallet](https://metamask.io/download) address). + +## Facilitator URLs + +The following table lists the available MetaMask facilitator endpoints: + +| Name | ID | URL | +| ------------ | -------------- | --------------------------------------------------------------------------- | +| Base | `eip155:8453` | `https://tx-sentinel-base-mainnet.dev-api.cx.metamask.io/platform/v2/x402` | +| Base Sepolia | `eip155:84532` | `https://tx-sentinel-base-sepolia.dev-api.cx.metamask.io/platform/v2/x402` | +| Monad | `eip155:143` | `https://tx-sentinel-monad-mainnet.dev-api.cx.metamask.io/platform/v2/x402` | + +## Steps + +### 1. Install the dependencies + +```bash npm2yarn +npm install @metamask/x402 @x402/core @x402/express cors express +``` + +### 2. Configure middleware + +Set up the Express server with the x402 `paymentMiddleware` and the `x402ExactEvmErc7710ServerScheme` +from `@metamask/x402`. +The scheme automatically adds payment requirements with ERC-7710 fields when +`assetTransferMethod` is set to `erc7710` in the route configuration. + +The `paymentMiddleware` intercepts requests to protected routes and handles the full x402 payment +flow, including requirements advertisement, verification, and settlement. + +In this example, you create a protected `GET /api/hello` endpoint that charges 0.01 USDC on +Base Sepolia. +Replace the payout address in `src/config.ts` with your own seller wallet address. + + + + +```ts +import express, { type Request, type Response } from 'express' +import cors from 'cors' +import { paymentMiddleware, x402ResourceServer } from '@x402/express' +import { x402ExactEvmErc7710ServerScheme } from '@metamask/x402' +import { NETWORK_ID, PORT, payToAddress, facilitatorClient } from './config.js' + +const app = express() +app.use(cors({ exposedHeaders: ['PAYMENT-REQUIRED', 'PAYMENT-RESPONSE'] })) + +app.use( + paymentMiddleware( + { + 'GET /api/hello': { + accepts: [ + { + scheme: 'exact', + price: '$0.01', + network: NETWORK_ID, + payTo: payToAddress, + extra: { + assetTransferMethod: 'erc7710', + }, + }, + ], + description: 'Access to protected resource', + mimeType: 'application/json', + }, + }, + new x402ResourceServer(facilitatorClient).register( + NETWORK_ID, + new x402ExactEvmErc7710ServerScheme() + ) + ) +) + +app.get('/api/hello', (_req: Request, res: Response) => { + res.json({ message: 'Hello!' }) +}) + +app.listen(PORT, () => { + console.log(`[seller] Server running on http://localhost:${PORT}`) +}) +``` + + + + + +```ts +import { HTTPFacilitatorClient } from '@x402/core/server' + +export const NETWORK_ID = 'eip155:84532' +export const PORT = 4402 + +// Replace with your seller payout address. +export const payToAddress = '0x' + +// MetaMask facilitator base URL for x402 on Base Sepolia. +export const facilitatorClient = new HTTPFacilitatorClient({ + url: 'https://tx-sentinel-base-sepolia.api.cx.metamask.io/platform/v2/x402', +}) +``` + + + + +## Next steps + +- Learn more about [ERC-7710 delegation](../../concepts/delegation/overview.md). +- See the [x402 ERC-7710 specification](https://github.com/coinbase/x402/blob/main/specs/schemes/exact/scheme_exact_evm.md#3-assettransfermethod-erc-7710). diff --git a/smart-accounts-kit/index.mdx b/smart-accounts-kit/index.mdx new file mode 100644 index 00000000000..45a3ae99948 --- /dev/null +++ b/smart-accounts-kit/index.mdx @@ -0,0 +1,96 @@ +--- +title: MetaMask Smart Accounts Kit introduction +sidebar_label: Introduction +description: High-level overview of MetaMask Smart Accounts Kit. +keywords: [MetaMask, smart accounts kit, smart accounts] +--- + +import CardList from '@site/src/components/CardList' + +# MetaMask Smart Accounts Kit + +The MetaMask Smart Accounts Kit enables developers to create new experiences based on programmable account behavior and granular permission sharing. +It offers a suite of contracts, libraries, and services designed for maximum composability, allowing developers to build and extend their dapps with ease. + +## Build on MetaMask Smart Accounts + +The toolkit enables embedding [MetaMask Smart Accounts](concepts/smart-accounts.md) into dapps. +Smart accounts support programmable account behavior and advanced features like delegated permissions, multi-signature approvals, and gas abstraction. + +[Delegation](concepts/delegation/overview.md) is a core feature of smart accounts, enabling secure, rule-based permission sharing. +Delegation is powered by the [Delegation Framework](https://github.com/metamask/delegation-framework), which defines how permissions are created, shared, and enforced. + + + +## Request Advanced Permissions (ERC-7715) + +The toolkit supports [Advanced Permissions (ERC-7715)](concepts/advanced-permissions.md), which are fine-grained permissions dapps can request from users directly via the MetaMask browser extension. +Advanced Permissions allow you to perform executions on the behalf of MetaMask users. + + + +## Partner integrations + +The Smart Accounts Kit is integrated with multiple ecosystem partners. +Check out the following documentation from these partners: + + diff --git a/smart-accounts-kit/reference/advanced-permissions/permissions.md b/smart-accounts-kit/reference/advanced-permissions/permissions.md new file mode 100644 index 00000000000..a5354dcf1ee --- /dev/null +++ b/smart-accounts-kit/reference/advanced-permissions/permissions.md @@ -0,0 +1,268 @@ +--- +description: Advanced Permissions (ERC-7715) reference. +sidebar_label: Permissions +keywords: + [ + ERC-7715, + permissions, + ERC-20 token, + native token, + approval revocation, + reference, + advanced permissions, + ] +--- + +# Advanced Permissions reference + +When [executing on a MetaMask user's behalf](../../guides/advanced-permissions/execute-on-metamask-users-behalf.md), you can request the following permission types. +Learn [how to use Advanced Permissions types](../../guides/advanced-permissions/use-permissions/erc20-token.md). + +## ERC-20 token permissions + +### ERC-20 allowance permission + +Ensures a fixed ERC-20 token allowance. +Transfers are allowed until the total transferred amount reaches the allowance amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | ---------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `allowanceAmount` | `bigint` | Yes | The maximum total amount of tokens that can be transferred. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseUnits } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'erc20-token-allowance', + data: { + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + allowanceAmount: parseUnits('50', 6), + startTime: currentTime, + justification: 'Permission to transfer up to 50 USDC in total', + }, + isAdjustmentAllowed: true, +} +``` + +### ERC-20 periodic permission + +Ensures a per-period limit for ERC-20 token transfers. +At the start of each new period, the allowance resets. + +#### Parameters + +| Name | Type | Required | Description | +| ---------------- | --------- | -------- | ---------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseUnits } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'erc20-token-periodic', + data: { + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + periodAmount: parseUnits('10', 6), + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, +} +``` + +### ERC-20 stream permission + +Ensures a linear streaming transfer limit for ERC-20 tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | ----------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `initialAmount` | `bigint` | No | The initial amount that can be transferred at start time. The default is `0`. | +| `maxAmount` | `bigint` | No | The maximum total amount that can be unlocked. The default is no limit. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseUnits } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'erc20-token-stream', + data: { + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + amountPerSecond: parseUnits('0.1', 6), + initialAmount: parseUnits('1', 6), + maxAmount: parseUnits('2', 6), + startTime: currentTime, + justification: 'Permission to use 0.1 USDC per second', + }, + isAdjustmentAllowed: true, +} +``` + +## Native token permissions + +### Native token allowance permission + +Ensures a fixed native token allowance. +Transfers are allowed until the total transferred amount reaches the allowance amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | -------- | -------- | ---------------------------------------------------------------------- | +| `allowanceAmount` | `bigint` | Yes | The maximum total amount of tokens that can be transferred. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseEther } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'native-token-allowance', + data: { + allowanceAmount: parseEther('0.05'), + startTime: currentTime, + justification: 'Permission to transfer up to 0.05 ETH in total', + }, + isAdjustmentAllowed: true, +} +``` + +### Native token periodic permission + +Ensures a per-period limit for native token transfers. +At the start of each new period, the allowance resets. + +#### Parameters + +| Name | Type | Required | Description | +| ---------------- | -------- | -------- | ---------------------------------------------------------------------- | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseEther } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'native-token-periodic', + data: { + periodAmount: parseEther('0.001'), + periodDuration: 86400, + startTime: currentTime, + justification: 'Permission to use 0.001 ETH every day', + }, + isAdjustmentAllowed: true, +} +``` + +### Native token stream permission + +Ensures a linear streaming transfer limit for native tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | -------- | -------- | ----------------------------------------------------------------------------- | +| `initialAmount` | `bigint` | No | The initial amount that can be transferred at start time. The default is `0`. | +| `maxAmount` | `bigint` | No | The maximum total amount that can be unlocked. The default is no limit. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +import { parseEther } from 'viem' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const permission = { + type: 'native-token-stream', + data: { + amountPerSecond: parseEther('0.0001'), + initialAmount: parseEther('0.1'), + maxAmount: parseEther('1'), + startTime: currentTime, + justification: 'Permission to use 0.0001 ETH per second', + }, + isAdjustmentAllowed: true, +} +``` + +## Token approval revocation permission + +Enables revoking an existing token approvals on behalf of the user. + +#### Parameters + +| Name | Type | Required | Description | +| ------------------------- | --------- | -------- | ---------------------------------------------------------------------- | +| `erc20Approve` | `boolean` | Yes | Whether to allow revoking ERC-20 allowances. | +| `erc721Approve` | `boolean` | Yes | Whether to allow revoking ERC-721 per-token approvals. | +| `erc721SetApprovalForAll` | `boolean` | Yes | Whether to allow revoking ERC-721 and ERC-1155 operator approvals. | +| `permit2Approve` | `boolean` | Yes | Whether to allow revoking Permit2 approvals. | +| `permit2Lockdown` | `boolean` | Yes | Whether to allow locking down Permit2. | +| `permit2InvalidateNonces` | `boolean` | Yes | Whether to allow invalidating Permit2. | +| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | + +#### Example + +```typescript +const permission = { + type: 'token-approval-revocation', + data: { + erc20Approve: true, + erc721Approve: true, + erc721SetApprovalForAll: true, + permit2Approve: false, + permit2Lockdown: false, + permit2InvalidateNonces: false, + justification: 'Permission to revoke ERC-20, ERC-721, and ERC-115 token approvals', + }, + isAdjustmentAllowed: false, +} +``` diff --git a/smart-accounts-kit/reference/advanced-permissions/rules.md b/smart-accounts-kit/reference/advanced-permissions/rules.md new file mode 100644 index 00000000000..6dc352cd8ce --- /dev/null +++ b/smart-accounts-kit/reference/advanced-permissions/rules.md @@ -0,0 +1,85 @@ +--- +description: Advanced Permissions (ERC-7715) rules reference. +sidebar_label: Rules +keywords: [ERC-7715, advanced permissions, rules, expiry, redeemer, payee, reference] +toc_max_heading_level: 2 +--- + +# Advanced Permissions rules reference + +When [executing on a MetaMask user's behalf](../../guides/advanced-permissions/execute-on-metamask-users-behalf.md), you can add the +following rule types for the supported permission types. + +Use [`getSupportedExecutionPermissions`](./wallet-client.md#getsupportedexecutionpermissions) to +check which rule types are available for each permission type on each chain. + +## Expiry + +Sets an expiration timestamp for the permission. + +### Parameters + +| Name | Type | Required | Description | +| ----------- | -------- | -------- | ------------------------------------- | +| `timestamp` | `number` | Yes | Expiration timestamp in Unix seconds. | + +### Example + +```ts +const currentTime = Math.floor(Date.now() / 1000) + +const rules = [ + { + type: 'expiry', + data: { + timestamp: currentTime + 604800, + }, + }, +] +``` + +## Redeemer + +Restricts permission redemption to specific addresses. + +### Parameters + +| Name | Type | Required | Description | +| ----------- | ----------- | -------- | ---------------------------------------------------- | +| `addresses` | `Address[]` | Yes | Addresses that are allowed to redeem the permission. | + +### Example + +```ts +const rules = [ + { + type: 'redeemer', + data: { + addresses: ['0x...', '0x...'], + }, + }, +] +``` + +## Payee + +Restricts payments to specific receiver addresses. + +### Parameters + +| Name | Type | Required | Description | +| ----------- | ----------- | -------- | ------------------------------------------------- | +| `addresses` | `Address[]` | Yes | Addresses that are allowed as payment recipients. | + +### Example + +```ts +const rules = [ + { + type: 'payee', + data: { + addresses: ['0x...'], + }, + }, +] +``` diff --git a/smart-accounts-kit/reference/advanced-permissions/wallet-client.md b/smart-accounts-kit/reference/advanced-permissions/wallet-client.md new file mode 100644 index 00000000000..58f6c272f4c --- /dev/null +++ b/smart-accounts-kit/reference/advanced-permissions/wallet-client.md @@ -0,0 +1,192 @@ +--- +description: Wallet Client actions reference. +sidebar_label: Wallet Client actions +toc_max_heading_level: 2 +keywords: [ERC-7715, Viem, wallet client, actions, reference, advanced permissions] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Wallet Client actions reference + +The following actions are related to the [Viem Wallet Client](https://viem.sh/docs/clients/wallet) used to [execute on a MetaMask user's behalf](../../guides/advanced-permissions/execute-on-metamask-users-behalf.md). + +:::info +To use Advanced Permissions (ERC-7715) actions, the Viem Wallet Client must be extended with `erc7715ProviderActions`. +::: + +## `requestExecutionPermissions` + +Requests from the MetaMask extension account according to the [ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) specification. Returns a [`RequestExecutionPermissionsReturnType`](../types.md#requestexecutionpermissionsreturntype). + +### Parameters + +| Name | Type | Required | Description | +| ------------ | --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `chainId` | `number` | Yes | The chain ID on which the permission is being requested. | +| `from` | `Address` | No | The wallet address to request the permission from. | +| `expiry` | `number` | Yes | The timestamp (in seconds) by which the permission must expire. | +| `permission` | `SupportedPermissionParams` | Yes | The permission to request. The toolkit supports multiple [Advanced Permissions types](permissions.md). Set `isAdjustmentAllowed` to define whether the user can modify the requested permission. | +| `to` | `Address` | Yes | The account to which the permission will be assigned. | + +### Example + + + + +```ts +import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' +import { walletClient } from './client.ts' + +const currentTime = Math.floor(Date.now() / 1000) +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + periodAmount: parseUnits('10', 6), + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```ts +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## `getSupportedExecutionPermissions` + +Returns the types that the wallet supports, according to the +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) +specification. Use this to verify the available permission types and supported +chains before requesting permissions. + +This action takes no parameters and returns a [`GetSupportedExecutionPermissionsResult`](../types.md#getsupportedexecutionpermissionsresult). + +### Example + + + + +```ts +{ + "native-token-stream": { + "chainIds": [1, 10], + "ruleTypes": ["expiry"] + }, + "erc20-token-periodic": { + "chainIds": [1, 137], + "ruleTypes": ["expiry"] + }, +// ... +} +``` + + + + +```ts +import { walletClient } from './client.ts' + +const supportedPermissions = await walletClient.getSupportedExecutionPermissions() +``` + + + + +```ts +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## `getGrantedExecutionPermissions` + +Returns all previously granted permissions for the connected wallet, according to the +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) specification. + +This action takes no parameters and returns a [`GetGrantedExecutionPermissionsResult`](../types.md#getgrantedexecutionpermissionsresult). + +### Example + + + + +```ts +[ + { + chainId: 84532, + context: "0x0000...0000", + delegationManager: "0xdb9B...7dB3", + dependencies: [], + from: "0x993f...7f31", + permission: { + type: "erc20-token-periodic", + isAdjustmentAllowed: false, + data: { ... }, + }, + rules: [ + { type: "expiry", data: { ... } }, + ], + to: "0xAB57...7F1f", + }, +// ... +] +``` + + + + + +```ts +import { walletClient } from './client.ts' + +const grantedPermissions = await walletClient.getGrantedExecutionPermissions() +``` + + + + +```ts +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/smart-accounts-kit/reference/delegation/caveat-enforcer-client.md b/smart-accounts-kit/reference/delegation/caveat-enforcer-client.md new file mode 100644 index 00000000000..adbecb91314 --- /dev/null +++ b/smart-accounts-kit/reference/delegation/caveat-enforcer-client.md @@ -0,0 +1,363 @@ +--- +description: Caveat Enforcer Client API reference. +sidebar_label: Caveat Enforcer Client +toc_max_heading_level: 2 +keywords: [delegation state, caveat enforcer client, API, methods, reference] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Caveat Enforcer Client reference + +The following API methods are related to `CaveatEnforcerClient` used to [check the delegation state](../../guides/delegation/check-delegation-state.md). + +## `createCaveatEnforcerClient` + +Create a Viem Client extended with caveat enforcer actions. This client allows you to interact with the caveat enforcers of the +delegation, and read the required state. + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------ | +| `client` | `Client` | Yes | The Viem Client to interact with the caveat enforcer contracts and read their state. | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Environment to resolve the smart contracts for the current chain. | + +### Example + + + + +```typescript +import { environment, publicClient as client } from './config.ts' +import { createCaveatEnforcerClient } from '@metamask/smart-accounts-kit' + +const caveatEnforcerClient = createCaveatEnforcerClient({ + environment, + client, +}) +``` + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { createPublicClient, http } from 'viem' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +export const environment = getSmartAccountsEnvironment(chain.id) + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + + + + +## `getErc20PeriodTransferEnforcerAvailableAmount` + +Returns the available amount from the ERC-20 period transfer enforcer for the current period. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | + +### Example + + + + +```typescript +import { delegation } './config.ts' + +// Returns the available amount for current period. +const { availableAmount } = await caveatEnforcerClient.getErc20PeriodTransferEnforcerAvailableAmount({ + delegation, +}) +``` + + + + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +const environment = getSmartAccountsEnvironment(chain.id) + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20PeriodTransfer, + tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + periodAmount: parseUnits('10', 6), + periodDuration: 86400, + startDate, + }, + to: 'DELEGATE_ADDRESS', + from: 'DELEGATOR_ADDRESS', + environment, +}) +``` + + + + +## `getErc20StreamingEnforcerAvailableAmount` + +Returns the available amount from the ERC-20 streaming enforcer. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | + +### Example + + + + +```typescript +import { delegation } './config.ts' + +// Returns the available amount +const { availableAmount } = await caveatEnforcerClient.getErc20StreamingEnforcerAvailableAmount({ + delegation, +}) +``` + + + + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +const environment = getSmartAccountsEnvironment(chain.id) + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const startTime = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20Streaming, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + amountPerSecond: parseUnits('0.1', 6), + initialAmount: parseUnits('1', 6), + maxAmount: parseUnits('10', 6), + startTime, + }, + to: 'DELEGATE_ADDRESS', + from: 'DELEGATOR_ADDRESS', + environment, +}) +``` + + + + +## `getNativeTokenPeriodTransferEnforcerAvailableAmount` + +Returns the available amount from the native token period enforcer for the current period. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | + +### Example + + + + +```typescript +import { delegation } './config.ts' + +// Returns the available amount for current period. +const { availableAmount } = await caveatEnforcerClient.getNativeTokenPeriodTransferEnforcerAvailableAmount({ + delegation, +}) +``` + + + + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' +import { parseEther } from 'viem' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +const environment = getSmartAccountsEnvironment(chain.id) + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenPeriodTransfer, + periodAmount: parseEther('0.01'), + periodDuration: 86400, + startDate, + }, + to: 'DELEGATE_ADDRESS', + from: 'DELEGATOR_ADDRESS', + environment, +}) +``` + + + + +## `getNativeTokenStreamingEnforcerAvailableAmount` + +Returns the available amount from the native streaming enforcer. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | + +### Example + + + + +```typescript +import { delegation } './config.ts' + +// Returns the available amount +const { availableAmount } = await caveatEnforcerClient.getNativeTokenStreamingEnforcerAvailableAmount({ + delegation, +}) +``` + + + + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +const environment = getSmartAccountsEnvironment(chain.id) + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const startTime = Math.floor(Date.now() / 1000) + +export const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenStreaming, + amountPerSecond: parseEther('0.001'), + initialAmount: parseEther('0.01'), + maxAmount: parseEther('0.1'), + startTime, + }, + to: 'DELEGATE_ADDRESS', + from: 'DELEGATOR_ADDRESS', + environment, +}) +``` + + + + +## `getMultiTokenPeriodEnforcerAvailableAmount` + +Returns the available amount from the multi token period transfer enforcer for the current period. You'll need to +encode the arguments for the token index you want to check the available amount. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ---------------------------------------------------------------------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object with token index for which you want to check the available amount. | + +### Example + + + + +```typescript +import { delegation } './config.ts' + +// Encode the args for the multiTokenPeriod enforcer. +const args = encodePacked(['uint256'], [BigInt(0)]); + +// Ensure the index is correct when working with multiple enforcers. +delegation.caveats[0].args = args + +// Returns the available amount for the first token in the list. +const { availableAmount } = await caveatEnforcerClient.getMultiTokenPeriodEnforcerAvailableAmount({ + delegation, +}) +``` + + + + +```typescript +import { + createDelegation, + getSmartAccountsEnvironment, + ROOT_AUTHORITY, + CaveatType, +} from '@metamask/smart-accounts-kit' +import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' +import { sepolia as chain } from 'viem/chains' +import { parseUnits, parseEther } from 'viem' + +const environment = getSmartAccountsEnvironment(chain.id) +const caveatBuilder = createCaveatBuilder(environment) + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +const tokenConfigs = [ + { + token: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + // 1 token with 6 decimals. + periodAmount: parseUnits('1', 6), + // 1 day in seconds. + periodDuration: 86400, + startDate, + }, + { + // For native token use zeroAddress + token: zeroAddress, + // 0.01 ETH in wei. + periodAmount: parseEther('0.01'), + // 1 hour in seconds. + periodDuration: 3600, + startDate, + }, +] + +const caveats = caveatBuilder.addCaveat(CaveatType.MultiTokenPeriod, tokenConfigs) + +export const delegation: Delegation = { + delegate: 'DELEGATE_ADDRESS', + delegator: 'DELEGATOR_ADDRESS', + authority: ROOT_AUTHORITY, + caveats: caveats.build(), + salt: '0x', +} +``` + + + diff --git a/smart-accounts-kit/reference/delegation/caveats.md b/smart-accounts-kit/reference/delegation/caveats.md new file mode 100644 index 00000000000..47d823855c7 --- /dev/null +++ b/smart-accounts-kit/reference/delegation/caveats.md @@ -0,0 +1,1061 @@ +--- +description: Caveat enforcers reference. +sidebar_label: Caveats +toc_max_heading_level: 2 +keywords: [caveats, caveat enforcers, configuration, smart contracts, reference] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Caveats reference + +When [constraining a delegation scope](../../guides/delegation/use-delegation-scopes/constrain-scope.md), you can specify the following caveat types. + +You can use either a string literal or the [`CaveatType`](../types.md#caveattype) enum to define the caveat type. + +## `approvalRevocation` + +Restricts the delegate to revoking token approvals. +Set each flag to `true` to enable the corresponding revocation type. + + contract: [`ApprovalRevocationEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ApprovalRevocationEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------------------------- | --------- | -------- | ------------------------------------------------------------------ | +| `erc20Approve` | `boolean` | Yes | Whether to allow revoking ERC-20 allowances. | +| `erc721Approve` | `boolean` | Yes | Whether to allow revoking ERC-721 per-token approvals. | +| `erc721SetApprovalForAll` | `boolean` | Yes | Whether to allow revoking ERC-721 and ERC-1155 operator approvals. | +| `permit2Approve` | `boolean` | Yes | Whether to allow revoking Permit2 approvals. | +| `permit2Lockdown` | `boolean` | Yes | Whether to allow locking down Permit2. | +| `permit2InvalidateNonces` | `boolean` | Yes | Whether to allow invalidating Permit2. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.ApprovalRevocation, + erc20Approve: true, + erc721Approve: false, + erc721SetApprovalForAll: false, + permit2Approve: false, + permit2Lockdown: false, + permit2InvalidateNonces: false, + }, +] +``` + +## `allowedCalldata` + +Limits the calldata that is executed. + +You can use this caveat to enforce function parameters. +We strongly recommend using this caveat to validate static types and not dynamic types. +You can validate dynamic types through a series of `allowedCalldata` terms, but this is tedious and error-prone. + + contract: [`AllowedCalldataEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedCalldataEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------- | -------- | --------------------------------------------------------------------------------------------------------------- | +| `startIndex` | `number` | Yes | The index in the calldata byte array (including the 4-byte method selector) where the expected calldata starts. | +| `value` | `Hex` | Yes | The expected calldata that must match at the specified index. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const value = encodeAbiParameters( + [{ type: 'string' }, { type: 'uint256' }], + ['Hello Gator', 12345n] +) + +const caveats = [ + { + type: CaveatType.AllowedCalldata, + startIndex: 4, + value, + }, +] +``` + +:::note +This example uses Viem's [`encodeAbiParameters`](https://viem.sh/docs/abi/encodeAbiParameters) utility to encode the parameters as ABI-encoded hex strings. +::: + +## `allowedMethods` + +Limits what methods the delegate can call. + + contract: [`AllowedMethodsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedMethodsEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------- | ------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `selectors` | `MethodSelector[]` | Yes | The list of method selectors that the delegate is allowed to call. The selector value can be 4-byte hex string, ABI function signature, or ABI function object. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.AllowedMethods, + selectors: [ + // 4-byte Hex string. + '0xa9059cbb', + // ABI function signature. + 'transfer(address,uint256)', + // ABI function object. + { + name: 'transfer', + type: 'function', + inputs: [ + { name: 'recipient', type: 'address' }, + { name: 'amount', type: 'uint256' }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + ], + }, +] +``` + +:::note +This example adds the `transfer` function to the allowed methods in three different ways - as the 4-byte function selector, the ABI function signature, and the `ABIFunction` object. +::: + +## `allowedTargets` + +Limits what addresses the delegate can call. + + contract: [`AllowedTargetsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedTargetsEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| --------- | ----------- | -------- | ----------------------------------------------------------- | +| `targets` | `Address[]` | Yes | The list of addresses that the delegate is allowed to call. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.AllowedTargets, + targets: [ + '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + '0xB2880E3862f1024cAC05E66095148C0a9251718b', + ], + }, +] +``` + +## `argsEqualityCheck` + +Ensures that the `args` provided when redeeming the delegation are equal to the terms specified on the caveat. + + contract: [`ArgsEqualityCheckEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ArgsEqualityCheckEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------ | ----- | -------- | ----------------------------------------------------------------------------- | +| `args` | `Hex` | Yes | The expected arguments that must match exactly when redeeming the delegation. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.ArgsEqualityCheck, + args: '0xf2bef872456302645b7c0bb59dcd96ffe6d4a844f311ebf95e7cf439c9393de2', + }, +] +``` + +## `blockNumber` + +Specifies a range of blocks through which the delegation will be valid. + + contract: [`BlockNumberEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/BlockNumberEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------- | +| `afterThreshold` | `bigint` | Yes | The block number after which the delegation is valid. Set the value to `0n` to disable this threshold. | +| `beforeThreshold` | `bigint` | Yes | The block number before which the delegation is valid. Set the value to `0n` to disable this threshold. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.BlockNumber, + afterThreshold: 19426587n, + beforeThreshold: 0n, + }, +] +``` + +## `deployed` + +Ensures a contract is deployed, and if not, deploys the contract. + + contract: [`DeployedEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/DeployedEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | ------------------------------------ | +| `contractAddress` | `Address` | Yes | The contract address. | +| `salt` | `Hex` | Yes | The salt to use with the deployment. | +| `bytecode` | `Hex` | Yes | The bytecode of the contract. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Deployed, + contractAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + salt: '0x0e3e8e2381fde0e8515ed47ec9caec8ba2bc12603bc2b36133fa3e3fa4d88587', + bytecode: '0x...', // The deploy bytecode for the contract at 0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92 + }, +] +``` + +## `erc1155BalanceChange` + +Ensures that the recipient's ERC-1155 token balance has changed within the allowed bounds +(either increased by a minimum or decreased by a maximum specified amount). + + contract: [`ERC1155BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC1155BalanceChangeEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-1155 token contract address. | +| `recipient` | `Address` | Yes | The address on which the checks will be applied. | +| `tokenId` | `bigint` | Yes | The ID of the ERC-1155 token. | +| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | +| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-1155 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Erc1155BalanceChange, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + tokenId: 1n, + balance: 1000000n, + changeType: BalanceChangeType.Increase, + }, +] +``` + +## `erc20BalanceChange` + +Ensures that the recipient's ERC-20 token balance has changed within the allowed bounds +(either increased by a minimum or decreased by a maximum specified amount). + + contract: [`ERC20BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20BalanceChangeEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `recipient` | `Address` | Yes | The address on which the checks will be applied. | +| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | +| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-20 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Erc20BalanceChange, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + balance: 1000000n, + changeType: BalanceChangeType.Increase, + }, +] +``` + +## `erc20PeriodTransfer` + +Ensures that ERC-20 token transfers remain within a predefined limit during a +specified time window. At the start of each new period, the allowed transfer +amount resets. Any unused transfer allowance from the previous period does not +carry over and is forfeited. + + contract: [`ERC20PeriodTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20PeriodTransferEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ---------------- | --------- | -------- | ---------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +const caveats = [ + { + type: CaveatType.Erc20PeriodTransfer, + // Address of the ERC-20 token. + tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + // 1 ERC-20 token - 18 decimals, in wei. + periodAmount: 1000000000000000000n, + // 1 day in seconds. + periodDuration: 86400, + startDate, + }, +] +``` + +## `erc20Streaming` + +Enforces a linear streaming transfer limit for ERC-20 tokens. Block token access until the specified start timestamp. At the start timestamp, immediately release the specified initial amount. Afterward, accrue tokens linearly at the specified rate, up to the specified maximum. + + contract: [`ERC20StreamingEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20StreamingEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | --------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | +| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | Yes | The start timestamp in seconds. | + +### Example + +```typescript +import { CaveatType } from "@metamask/smart-accounts-kit"; + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000); + +const caveats = [{ + type: CaveatType.Erc20Streaming, + // Address of the ERC-20 token. + tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", + // 1 ERC-20 token - 18 decimals, in wei. + initialAmount: 1000000000000000000n, + // 10 ERC-20 token - 18 decimals, in wei. + maxAmount: 10000000000000000000n + // 0.00001 ERC-20 token - 18 decimals, in wei. + amountPerSecond: 10000000000000n, + startDate, +}]; +``` + +## `erc20TransferAmount` + +Limits the transfer of ERC-20 tokens. + + contract: [`ERC20TransferAmountEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20TransferAmountEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | --------- | -------- | ----------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // 1 ERC-20 token - 18 decimals, in wei. + maxAmount: 1000000000000000000n, + }, +] +``` + +## `erc721BalanceChange` + +Ensures that the recipient's ERC-721 token balance has changed within the allowed bounds (either increased by a minimum or decreased by a maximum specified amount). + + contract: [`ERC721BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC721BalanceChangeEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | ------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-721 token contract address. | +| `recipient` | `Address` | Yes | The address on which the checks will be applied. | +| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | +| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-721 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Erc721BalanceChange, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + balance: 1000000n, + changeType: BalanceChangeType.Increase, + }, +] +``` + +## `erc721Transfer` + +Restricts the execution to only allow ERC-721 token transfers, specifically the `transferFrom(from, to, tokenId)` function, for a specified token ID and contract. + + contract: [`ERC721TransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC721TransferEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-721 token contract address. | +| `tokenId` | `bigint` | Yes | The ID of the ERC-721 token that can be transferred by delegate. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Erc721Transfer, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + tokenId: 1n, + }, +] +``` + +## `exactCalldata` + +Verifies that the transaction calldata matches the expected calldata. For batch transactions, +see [`exactCalldataBatch`](#exactcalldatabatch). + + contract: [`ExactCalldataEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactCalldataEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ---------- | ----- | -------- | ------------------------------------------------------------------------------------------------------- | +| `calldata` | `Hex` | Yes | The calldata that the delegate is allowed to call. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.ExactCalldata, + calldata: '0x1234567890abcdef', + }, +] +``` + +## `exactCalldataBatch` + +Verifies that the provided batch execution calldata matches +the expected calldata for each individual execution in the batch. + + contract: [`ExactCalldataBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactCalldataBatchEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `executions` | `ExecutionStruct[]` | Yes | The list of executions that must be matched exactly in the batch. Each execution specifies a target address, value, and calldata. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const executions = [ + { + target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + value: 1000000000000000000n, // 1 ETH + callData: '0x', + }, + { + target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + value: 0n, + callData: '0x', + }, +] + +const caveats = [ + { + type: CaveatType.ExactCalldataBatch, + executions, + }, +] +``` + +## `exactExecution` + +Verifies that the provided execution matches the expected execution. For batch transactions, +see [`exactExecutionBatch`](#exactexecutionbatch). + + contract: [`ExactExecutionEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactExecutionEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------- | ----------------- | -------- | ---------------------------------------------------------------------------------------------- | +| `execution` | `ExecutionStruct` | Yes | The execution that must be matched exactly. Specifies the target address, value, and calldata. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.ExactExecution, + target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + value: 1000000000000000000n, + callData: '0x', + }, +] +``` + +## `exactExecutionBatch` + +Verifies that each execution in the batch matches the expected +execution parameters, including target, value, and calldata. + + contract: [`ExactExecutionBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactExecutionBatchEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `executions` | `ExecutionStruct[]` | Yes | The list of executions that must be matched exactly in the batch. Each execution specifies a target address, value, and calldata. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const executions = [ + { + target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + value: 1000000000000000000n, // 1 ETH + callData: '0x', + }, + { + target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + value: 0n, + callData: '0x', + }, +] + +const caveats = [ + { + type: CaveatType.ExactExecutionBatch, + executions, + }, +] +``` + +## `id` + +Specifies an ID for multiple delegations. Once one of them is redeemed, the other delegations with the same ID are revoked. + + contract: [`IdEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/IdEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ---- | -------- | -------- | ----------- | -------------------------------------------------------------------------------- | +| `id` | `bigint` | `number` | Yes | An ID for the delegation. Only one delegation may be redeemed with any given ID. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Id, + id: 123456, + }, +] +``` + +## `limitedCalls` + +Limits the number of times the delegate can perform executions on the delegator's behalf. + + contract: [`LimitedCallsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/LimitedCallsEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------- | -------- | -------- | ------------------------------------------------------------ | +| `limit` | `number` | Yes | The maximum number of times this delegation may be redeemed. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.LimitedCalls, + limit: 1, + }, +] +``` + +## `multiTokenPeriod` + +Ensures that token transfers for multiple tokens stay within the specified limits for the defined periods. +At the start of each new period, the allowed transfer amount for each token resets. Any unused transfer allowance from the previous period expires and does not carry over. + +When redeeming the delegation, the index of the relevant token configuration must be specified +as the `args` of this caveat (encoded as `uint256` hex value). + + contract: [`MultiTokenPeriodEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/MultiTokenPeriodEnforcer.sol) + +### Parameters + +The list of `TokenPeriodConfig` objects, where each object contains: + +| Name | Type | Required | Description | +| ---------------- | --------- | -------- | ---------------------------------------------------------------- | +| `token` | `Address` | Yes | The ERC-20 token contract address as a hex string. | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' +import { zeroAddress } from 'viem' + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +const tokenPeriodConfigs = [ + { + token: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + // 1 token with 18 decimals. + periodAmount: 1000000000000000000n, + // 1 day in seconds. + periodDuration: 86400, + startDate, + }, + { + // For native token use zeroAddress + token: zeroAddress, + // 0.01 ETH in wei. + periodAmount: 10000000000000000n, + // 1 hour in seconds. + periodDuration: 3600, + startDate, + }, +] + +const caveats = [ + { + type: CaveatType.MultiTokenPeriod, + tokenPeriodConfigs, + }, +] +``` + +## `nativeBalanceChange` + +Ensures that the recipient's native token balance has changed within the allowed bounds (either increased by a minimum or decreased by a maximum specified amount). + + contract: [`NativeBalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeBalanceChangeEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `recipient` | `Address` | Yes | The address on which the checks will be applied. | +| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | +| `changeType` | `BalanceChangeType` | Yes | The balance change type for the native token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.NativeBalanceChange, + recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + balance: 1000000n, + changeType: BalanceChangeType.Increase, + }, +] +``` + +## `nativeTokenPayment` + +Enforces payment in native token (for example, ETH) for the right to use the delegation. +A permissions context allowing payment must be provided as the `args` when +redeeming the delegation. + + contract: [`NativeTokenPaymentEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenPaymentEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------- | --------- | -------- | ----------------------------------------------- | +| `recipient` | `Address` | Yes | The recipient address who receives the payment. | +| `amount` | `bigint` | Yes | The amount that must be paid. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.NativeTokenPayment, + recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', + amount: 1000000n, + }, +] +``` + +## `nativeTokenPeriodTransfer` + +Ensures that native token transfers remain within a predefined limit during a +specified time window. At the start of each new period, the allowed transfer +amount resets. Any unused transfer allowance from the previous period does not +carry over and is forfeited. + + contract: [`NativeTokenPeriodTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenPeriodTransferEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ---------------- | -------- | -------- | ---------------------------------------------------------------- | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000) + +const caveats = [ + { + type: CaveatType.NativeTokenPeriodTransfer, + // 1 ETH in wei. + periodAmount: 1000000000000000000n, + // 1 day in seconds. + periodDuration: 86400, + startDate, + }, +] +``` + +## `nativeTokenStreaming` + +Enforces a linear streaming limit for native tokens (for example, ETH). Nothing is available before the specified start timestamp. At the start timestamp, the specified initial amount becomes immediately available. After that, tokens accrue linearly at the specified rate, capped by the specified maximum. + + contract: [`NativeTokenStreamingEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenStreamingEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | -------- | -------- | --------------------------------------------------------- | +| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | +| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | Yes | The start timestamp in seconds. | + +### Example + +```typescript +import { CaveatType } from "@metamask/smart-accounts-kit"; + +// Current time as start date. +// Since startDate is in seconds, we need to convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000); + +const caveats = [{ + type: CaveatType.NativeTokenStreaming, + // 0.01 ETH in wei. + initialAmount: 10000000000000000, + // 0.5 ETH in wei. + maxAmount: 500000000000000000n + // 0.00001 ETH in wei. + amountPerSecond: 10000000000000n, + startDate, +}]; +``` + +## `nativeTokenTransferAmount` + +Enforces an allowance of native currency (for example, ETH). + + contract: [`NativeTokenTransferAmountEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenTransferAmountEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------- | -------- | -------- | -------------------------------------------------------------------------------------------------------------------------- | +| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by the delegate. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.NativeTokenTransferAmount, + // 0.00001 ETH in wei. + maxAmount: 10000000000000000n, + }, +] +``` + +## `nonce` + +Adds a nonce to a delegation, and revokes previous delegations by incrementing the current nonce by calling `incrementNonce(address _delegationManager)`. + + contract: [`NonceEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NonceEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ------- | ----- | -------- | -------------------------------------------------- | +| `nonce` | `Hex` | Yes | The nonce to allow bulk revocation of delegations. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Nonce, + nonce: '0x1', + }, +] +``` + +## `ownershipTransfer` + +Restricts the execution to only allow ownership transfers, specifically the `transferOwnership(address _newOwner)` function, for a specified contract. + + contract: [`OwnershipTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/OwnershipTransferEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | ---------------------------------------------------------------------- | +| `contractAddress` | `Address` | Yes | The target contract address for which ownership transfers are allowed. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.OwnershipTransfer, + contractAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + }, +] +``` + +## `redeemer` + +Limits the addresses that can redeem the delegation. +This caveat is designed to restrict smart contracts or EOAs lacking delegation support, +and can be placed anywhere in the delegation chain to restrict the redeemer. + +:::note +Delegator accounts with delegation functionalities can bypass these restrictions by delegating to +other addresses. +For example, Alice makes Bob the redeemer. +This condition is enforced, but if Bob is a delegator he can create a separate delegation to Carol +that allows her to redeem Alice's delegation through Bob. +::: + + contract: [`RedeemerEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/RedeemerEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------- | ----------- | -------- | ---------------------------------------------------------------- | +| `redeemers` | `Address[]` | Yes | The list of addresses that are allowed to redeem the delegation. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.Redeemer, + redeemers: [ + '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + '0x6be97c23596ECed7170fdFb28e8dA1Ca5cdc54C5', + ], + }, +] +``` + +## `specificActionERC20TransferBatch` + +Ensures validation of a batch consisting of exactly two transactions: + +1. The first transaction must call a specific target contract with predefined calldata. +2. The second transaction must be an ERC-20 token transfer that matches specified + parameters, including the ERC-20 token contract address, amount, and recipient. + + contract: [`SpecificActionERC20TransferBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/SpecificActionERC20TransferBatchEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| -------------- | --------- | -------- | --------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `recipient` | `Address` | Yes | The address that will receive the tokens. | +| `amount` | `bigint` | Yes | The amount of tokens to transfer. | +| `target` | `Address` | Yes | The target address for the first transaction. | +| `calldata` | `Hex` | Yes | The `calldata` for the first transaction. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.SpecificActionERC20TransferBatch, + tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', + recipient: '0x027aeAFF3E5C33c4018FDD302c20a1B83aDCD96C', + // 1 ERC-20 token - 18 decimals, in wei + amount: 1000000000000000000n, + target: '0xb49830091403f1Aa990859832767B39c25a8006B', + calldata: '0x1234567890abcdef', + }, +] +``` + +## `timestamp` + +Specifies a range of timestamps through which the delegation will be valid. + + contract: [`TimestampEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/TimestampEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | -------- | -------- | -------------------------------------------------------------------------------------------------------------- | +| `afterThreshold` | `number` | Yes | The timestamp after which the delegation is valid in seconds. Set the value to `0` to disable this threshold. | +| `beforeThreshold` | `number` | Yes | The timestamp before which the delegation is valid in seconds. Set the value to `0` to disable this threshold. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +// We need to convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 hour after current time. +const afterThreshold = currentTime + 3600 +// 1 day after afterThreshold +const beforeThreshold = afterThreshold + 86400 + +const caveats = [ + { + type: CaveatType.Timestamp, + afterThreshold, + beforeThreshold, + }, +] +``` + +## `valueLte` + +Limits the value of native tokens that the delegate can spend. + + contract: [`ValueLteEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ValueLteEnforcer.sol) + +### Parameters + +| Name | Type | Required | Description | +| ---------- | -------- | -------- | ----------------------------------------------------------------------- | +| `maxValue` | `bigint` | Yes | The maximum value that may be specified when redeeming this delegation. | + +### Example + +```typescript +import { CaveatType } from '@metamask/smart-accounts-kit' + +const caveats = [ + { + type: CaveatType.ValueLte, + // 0.01 ETH in wei. + maxValue: 10000000000000000n, + }, +] +``` diff --git a/smart-accounts-kit/reference/delegation/delegation-scopes.md b/smart-accounts-kit/reference/delegation/delegation-scopes.md new file mode 100644 index 00000000000..20efcad0ed5 --- /dev/null +++ b/smart-accounts-kit/reference/delegation/delegation-scopes.md @@ -0,0 +1,361 @@ +--- +description: Delegation scopes reference. +sidebar_label: Delegation scopes +keywords: [delegation scopes, configuration, reference] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Delegation scopes + +When [creating a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md), you can configure the following scopes to define the delegation's initial authority. +Learn [how to use delegation scopes](../../guides/delegation/use-delegation-scopes/index.md). + +## Spending limit scopes + +### ERC-20 periodic scope + +Ensures a per-period limit for ERC-20 token transfers. +At the start of each new period, the allowance resets. + +#### Parameters + +| Name | Type | Required | Description | +| ---------------- | --------- | -------- | ---------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseUnits } from "viem"; + +// Since current time is in seconds, convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000); + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20PeriodTransfer, + tokenAddress: "0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da", + // 10 ERC-20 token with 6 decimals + periodAmount: parseUnits("10", 6), + periodDuration: 86400, + startDate, + }, + // Address that is granting the delegation + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### ERC-20 streaming scope + +Ensures a linear streaming transfer limit for ERC-20 tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | --------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | +| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | Yes | The start timestamp in seconds. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseUnits } from "viem"; + +// Since current time is in seconds, convert milliseconds to seconds. +const startTime = Math.floor(Date.now() / 1000); + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20Streaming, + tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", + // 0.1 ERC-20 token with 6 decimals + amountPerSecond: parseUnits("0.1", 6), + // 1 ERC-20 token with 6 decimals + initialAmount: parseUnits("1", 6), + // 10 ERC-20 token with 6 decimals + maxAmount: parseUnits("10", 6), + startTime, + }, + // Address that is granting the delegation + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### ERC-20 transfer scope + +Ensures that ERC-20 token transfers are limited to a predefined maximum amount. +This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. + +#### Parameters + +| Name | Type | Required | Description | +| -------------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | +| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseUnits } from "viem"; + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", + // 1 ERC-20 token with 6 decimals + maxAmount: parseUnits("1", 6), + }, + // Address that is granting the delegation + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### ERC-721 scope + +Limits the delegation to ERC-721 token (NFT) transfers only. + +#### Parameters + +| Name | Type | Required | Description | +| -------------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------- | +| `tokenAddress` | `Address` | Yes | The ERC-721 token contract address. | +| `tokenId` | `bigint` | Yes | The ID of the ERC-721 token that can be transferred by delegate. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc721Transfer, + tokenAddress: "0x3fF528De37cd95b67845C1c55303e7685c72F319", + tokenId: 1n, + }, + // Address that is granting the delegation + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### Native token periodic scope + +Ensures a per-period limit for native token transfers. +At the start of each new period, the allowance resets. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | ------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | +| `periodDuration` | `number` | Yes | The duration of each period in seconds. | +| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | +| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | +| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseEther } from "viem"; + +// Since current time is in seconds, convert milliseconds to seconds. +const startDate = Math.floor(Date.now() / 1000); + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenPeriodTransfer, + periodAmount: parseEther("0.01"), + periodDuration: 86400, + startDate, + }, + // Address that is granting the delegation. + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted. + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### Native token streaming scope + +Ensures a linear streaming transfer limit for native tokens. +Token transfers are blocked until the defined start timestamp. +At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | +| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | +| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | +| `startTime` | `number` | Yes | The start timestamp in seconds. | +| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | +| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseEther } from "viem"; + +// Since current time is in seconds, convert milliseconds to seconds. +const startTime = Math.floor(Date.now() / 1000); + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenStreaming, + amountPerSecond: parseEther("0.0001"), + initialAmount: parseEther("0.01"), + maxAmount: parseEther("0.1"), + startTime, + }, + // Address that is granting the delegation. + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted. + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +### Native token transfer scope + +Ensures that native token transfers are limited to a predefined maximum amount. +This scope is useful for setting simple, fixed transfer limits without any time based or streaming conditions. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | +| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | +| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; +import { parseEther } from "viem"; + +const delegation = createDelegation({ + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther("0.001"), + }, + // Address that is granting the delegation. + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted. + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +## Function call scope + +Defines the specific methods, contract addresses, and calldata that are allowed for the delegation. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `targets` | `Address[]` | Yes | The list of addresses that the delegate is allowed to call. | +| `selectors` | `MethodSelector[]` | Yes | The list of method selectors that the delegate is allowed to call. The selector value can be 4-byte hex string, ABI function signature, or ABI function object. | +| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | +| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. Cannot be used together with `allowedCalldata`. | +| `valueLte` | [`ValueLteBuilderConfig`](../types.md#valueltebuilderconfig) | No | The maximum native token amount the delegate can transfer. By default, the amount is set to `0`. | + +#### Example + +This example sets the delegation scope to allow the delegate to call the `approve` function on the USDC token contract: + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; + +const delegation = createDelegation({ + scope: { + type: ScopeType.FunctionCall, + targets: ["0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"], // USDC address on Sepolia. + selectors: ["approve(address, uint256)"] + }, + // Address that is granting the delegation. + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted. + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` + +## Ownership transfer scope + +Restricts a delegation to ownership transfer calls only. + +#### Parameters + +| Name | Type | Required | Description | +| ----------------- | --------- | -------- | ---------------------------------------------------------------------- | +| `contractAddress` | `Address` | Yes | The target contract address for which ownership transfers are allowed. | + +#### Example + +```typescript +import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; +import { sepolia } from "viem/chains"; + +const contractAddress = "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" + +const delegation = createDelegation({ + scope: { + type: ScopeType.OwnershipTransfer, + contractAddress, + }, + // Address that is granting the delegation. + from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", + // Address to which the delegation is being granted. + to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id); +}); +``` diff --git a/smart-accounts-kit/reference/delegation/index.md b/smart-accounts-kit/reference/delegation/index.md new file mode 100644 index 00000000000..60d5b432638 --- /dev/null +++ b/smart-accounts-kit/reference/delegation/index.md @@ -0,0 +1,801 @@ +--- +description: Delegation-related API methods reference. +toc_max_heading_level: 2 +keywords: [delegation, API, methods, reference] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Delegation API reference + +The following API methods are related to creating and managing [delegations](../../concepts/delegation/overview.md). + +## `createCaveatBuilder` + +Builds an array of caveats. + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------------------------------ | -------- | ----------------------------------------------------------------- | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Environment to resolve the smart contracts for the current chain. | +| `config` | [`CaveatBuilderConfig`](../types.md#caveatbuilderconfig) | No | Configuration for `CoreCaveatBuilder`. | + +### Example + +```ts +import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' + +const environment = getSmartAccountsEnvironment(sepolia.id) +const caveatBuilder = createCaveatBuilder(environment) +``` + +### Allow empty caveats + +To create an empty caveat collection, set the `CaveatBuilderConfig.allowInsecureUnrestrictedDelegation` to `true`. + +```ts title="example.ts" +import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' + +const environment = getSmartAccountsEnvironment(sepolia.id) +const caveatBuilder = createCaveatBuilder(environment, { + // add-next-line + allowInsecureUnrestrictedDelegation: true, +}) +``` + +## `createDelegation` + +Creates a delegation with a specific delegate. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------- | ------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `Hex` | Yes | The address that is granting the delegation. | +| `to` | `Hex` | Yes | The address to which the delegation is being granted. | +| `scope` | `ScopeConfig` | Yes | The scope of the delegation that defines the initial authority. See [delegation scopes](./delegation-scopes.md) for the full list of scope types and their parameters. | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment used by the toolkit to define contract addresses for interacting with the contracts. | +| `caveats` | `Caveats` | No | Caveats that further refine the authority granted by the `scope`. See [caveats reference](./caveats.md) for the full list of caveat types and their parameters. | +| `parentDelegation` | [`Delegation`](../types.md#delegation) \| `Hex` | No | The parent delegation or its corresponding hex to create a delegation chain. Mutually exclusive with `parentPermissionContext`. | +| `parentPermissionContext` | `PermissionContext` | No | Parent chain as `Hex` or as decoded [`Delegation`](../types.md#delegation) values (leaf first). Mutually exclusive with `parentDelegation`. | +| `salt` | `Hex` | No | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | + +### Example + +```typescript +import { + createDelegation, + getSmartAccountsEnvironment, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseEther } from 'viem' + +const delegation = createDelegation({ + // Address that is granting the delegation + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + // Address to which the delegation is being granted + to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id), + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + +## `createOpenDelegation` + +Creates an open delegation that can be redeemed by any delegate. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------- | ------------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `Hex` | Yes | The address that is granting the delegation. | +| `scope` | `ScopeConfig` | Conditional | Defines the delegation authority. See [delegation scopes](./delegation-scopes.md) for supported types and parameters. Required for a root open delegation. Optional when either `parentDelegation` or `parentPermissionContext` is set; if omitted, authority is inherited from the parent chain. | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment used by the toolkit to define contract addresses for interacting with the contracts. | +| `caveats` | `Caveats` | No | Caveats that further refine the authority granted by the `scope`. See [caveats reference](./caveats.md) for the full list of caveat types and their parameters. | +| `parentDelegation` | [`Delegation`](../types.md#delegation) \| `Hex` | No | The parent delegation or its corresponding hex to create a delegation chain. Mutually exclusive with `parentPermissionContext`. | +| `parentPermissionContext` | `PermissionContext` | No | Parent chain as `Hex` or as decoded [`Delegation`](../types.md#delegation) values (leaf first). Mutually exclusive with `parentDelegation`. | +| `salt` | `Hex` | No | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | + +### Example + +```typescript +import { + createOpenDelegation, + getSmartAccountsEnvironment, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseEther } from 'viem' + +const delegation = createOpenDelegation({ + // Address that is granting the delegation + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + // Alternatively you can use environment property of MetaMask smart account. + environment: getSmartAccountsEnvironment(sepolia.id), + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + +## `createExecution` + +Creates an `ExecutionStruct` instance. + +### Parameters + +| Name | Type | Required | Description | +| ---------- | --------- | -------- | ---------------------------------------------------------------------- | +| `target` | `Address` | No | Address of the contract or recipient that the call is directed to. | +| `value` | `bigint` | No | Value of native tokens to send along with the call in wei. | +| `callData` | `Hex` | No | Encoded function data or payload to be executed on the target address. | + +### Example + +```ts +import { createExecution } from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' + +// Creates an ExecutionStruct to transfer 0.01 ETH to +// 0xe3C818389583fDD5cAC32f548140fE26BcEaE907 address. +const execution = createExecution({ + target: '0xe3C818389583fDD5cAC32f548140fE26BcEaE907', + // 0.01 ETH in wei + value: parseEther('0.01'), + callData: '0x', +}) +``` + +## `decodeDelegations` + +Decodes an ABI-encoded hex string to an array of delegations. + +Use `decodeDelegations` when working with a permission context that contains a delegation +chain, such as the `context` property returned by [`requestExecutionPermissions`](../advanced-permissions/wallet-client.md#requestexecutionpermissions) response. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ----- | -------- | ------------------------------------- | +| `encoded` | `Hex` | Yes | The ABI encoded hex string to decode. | + +### Example + +```ts +import { decodeDelegations } from '@metamask/smart-accounts-kit/utils' + +const delegations = decodeDelegations('0x7f0db33d..c06aeeac') +``` + +## `decodeDelegation` + +Decodes an ABI-encoded hex string to a single delegation. + +Use `decodeDelegation` when you have a single encoded delegation rather than an encoded delegation chain. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ----- | -------- | ------------------------------------- | +| `encoded` | `Hex` | Yes | The ABI-encoded hex string to decode. | + +### Example + +```ts +import { decodeDelegation } from '@metamask/smart-accounts-kit/utils' + +const delegation = decodeDelegation('0x7f0db33d..c06aeeac') +``` + +## `decodeCaveat` + +Decodes a caveat's encoded `terms`. + +Throws an error if the caveat enforcer is not a known enforcer in [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment). + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------- | +| `caveat` | [`Caveat`](../types.md#caveat) | Yes | The caveat object containing an `enforcer` address and ABI-encoded `terms`. | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Environment to resolve the caveat enforcer addresses. | + +### Example + + + + +```ts +import { decodeCaveat } from '@metamask/smart-accounts-kit/utils' +import { delegation } from './config.ts' + +const environment = delegation.environment + +// Decode the first caveat from the delegation. +const decodedCaveat = decodeCaveat({ + caveat: delegation.caveats[0], + environment, +}) + +// Output: +// { +// type: 'erc20TransferAmount', +// tokenAddress: '0x1c7D...7238', +// maxAmount: 10000000n, +// } +``` + + + + +```ts +import { + createDelegation, + getSmartAccountsEnvironment, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseUnits } from 'viem' + +const environment = getSmartAccountsEnvironment(sepolia.id) + +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +export const delegation = createDelegation({ + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', + environment, + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress, + // 10 USDC + maxAmount: parseUnits('10', 6), + }, +}) +``` + + + + +## `decodeRevertData` + +Decodes raw ABI-encoded revert data into a [`DecodedRevertReason`](../types.md#decodedrevertreason). + +Tries standard Solidity errors, and known + ABIs, then falls back to decoding printable ASCII bytes. + +Returns `undefined` if the data could not be decoded. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ----- | -------- | -------------------------------- | +| `rawData` | `Hex` | Yes | The raw ABI-encoded revert data. | + +### Example + +```ts +import { decodeRevertData } from '@metamask/smart-accounts-kit/utils' + +const decoded = decodeRevertData('0x08c379a0...') +``` + +## `decodeRevertReason` + +Extracts revert data from an error object and decodes it using [`decodeRevertData`](#decoderevertdata). +Use this when you catch an error from any interaction +and want to decode the revert reason. + +Returns `undefined` if no revert data is found in the error. + +### Parameters + +| Name | Type | Required | Description | +| ------- | --------- | -------- | -------------------------------------------------------- | +| `error` | `unknown` | Yes | The error object to extract and decode revert data from. | + +### Example + +This example assumes you have a delegation signed by the delegator. + +```ts +import { ExecutionMode } from '@metamask/smart-accounts-kit' +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { decodeRevertReason } from '@metamask/smart-accounts-kit/utils' + +try { + await DelegationManager.execute.redeemDelegations({ + delegations: [[signedDelegation]], + modes: [ExecutionMode.SingleDefault], + executions: [[execution]], + }) +} catch (error) { + const decoded = decodeRevertReason(error) + if (decoded) { + console.log(decoded.message) + } +} +``` + +## `deploySmartAccountsEnvironment` + +Deploys the contracts to an EVM chain. + +### Parameters + +| Name | Type | Required | Description | +| ------------------- | ----------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `walletClient` | `WalletClient` | Yes | [Viem Wallet Client](https://viem.sh/docs/clients/wallet#wallet-client) to deploy the contracts. | +| `publicClient` | `PublicClient` | Yes | [Viem Public Client](https://viem.sh/docs/clients/public) to interact with the given chain. | +| `chain` | `Chain` | Yes | [Viem Chain](https://viem.sh/docs/chains/introduction) where you wish to deploy the Delegation Framework contracts. | +| `deployedContracts` | `{ [contract: string]: Hex }` | No | Allows overriding specific contract addresses when calling the function. For example, if certain contracts have already been deployed on the target chain, their addresses can be provided directly to the function. | + +### Example + + + + +```ts +import { deploySmartAccountsEnvironment } from '@metamask/smart-accounts-kit/utils' +import { walletClient, publicClient } from './config.ts' +import { sepolia as chain } from 'viem/chains' + +const environment = await deploySmartAccountsEnvironment(walletClient, publicClient, chain) +``` + + + + +```ts +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { http, createWalletClient, createPublicClient } from 'viem' + +// Your deployer wallet private key. +const privateKey = '0x123..' +const account = privateKeyToAccount(privateKey) + +export const walletClient = createWalletClient({ + account, + chain, + transport: http(), +}) + +export const publicClient = createPublicClient({ + transport: http(), + chain, +}) +``` + + + + +### Inject deployed contracts + +Once the contracts are deployed, you can use them to override the delegator +environment using `overrideDeployedEnvironment`. + +```ts title="example.ts" +import { walletClient, publicClient } from './config.ts' +import { sepolia as chain } from 'viem/chains' +import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { + overrideDeployedEnvironment, + deploySmartAccountsEnvironment, +} from '@metamask/smart-accounts-kit/utils' + +const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( + walletClient, + publicClient, + chain +) + +// add-start +overrideDeployedEnvironment(chain.id, '1.3.0', environment) +// add-end +``` + +## `disableDelegation` + +Encodes the calldata for disabling a delegation. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ------------------------------ | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be disabled. | + +### Example + + + + +```ts +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { delegation } from './delegation.ts' + +const disableDelegationData = DelegationManager.encode.disableDelegation({ + delegation, +}) +``` + + + + +```ts +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseEther } from 'viem' + +export const delegation = createDelegation({ + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', + environment: getSmartAccountsEnvironment(sepolia.id), + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + + + + +## `enableDelegation` + +Encodes the calldata to enable a disabled delegation. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be enabled. | + +### Example + +```ts +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' + +const enableDelegationData = DelegationManager.encode.enableDelegation({ + delegation, // Already disabled delegation. +}) +``` + +## `encodeDelegations` + +Encodes an array of delegations to an ABI-encoded hex string. + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------ | -------- | ----------------------------------- | +| `delegations` | [`Delegation`](../types.md#delegation)`[]` | Yes | The delegation array to be encoded. | + +### Example + + + + +```ts +import { encodeDelegations } from '@metamask/smart-accounts-kit/utils' +import { delegation } from './delegation.ts' + +const encodedDelegations = encodeDelegations([delegation]) +``` + + + + +```ts +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseEther } from 'viem' + +export const delegation = createDelegation({ + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', + environment: getSmartAccountsEnvironment(sepolia.id), + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + + + + +## `encodeDelegation` + +Encodes a single delegation to an ABI-encoded hex string. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | -------------------------------------- | -------- | ----------------------------- | +| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be encoded. | + +### Example + + + + +```ts +import { encodeDelegation } from '@metamask/smart-accounts-kit/utils' +import { delegation } from './delegation.ts' + +const encodedDelegation = encodeDelegation(delegation) +``` + + + + +```ts +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' +import { parseEther } from 'viem' + +export const delegation = createDelegation({ + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', + environment: getSmartAccountsEnvironment(sepolia.id), + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + + + + +## `hashDelegation` + +Returns the delegation hash. + +### Parameters + +| Name | Type | Required | Description | +| ------- | -------------------------------------- | -------- | ------------------------------ | +| `input` | [`Delegation`](../types.md#delegation) | Yes | The delegation object to hash. | + +### Example + + + + +```ts +import { hashDelegation } from '@metamask/smart-accounts-kit/utils' +import { delegation } from './config.ts' + +const delegationHash = hashDelegation(delegation) +``` + + + + +```ts +import { + getSmartAccountsEnvironment, + createDelegation, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { parseEther } from 'viem' +import { sepolia } from 'viem/chains' + +const environment = getSmartAccountsEnvironment(sepolia.id) + +// The address to which the delegation is granted. It can be an EOA address, or +// smart account address. +const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' + +export const delegation = createDelegation({ + to: delegate, + // Address that is granting the delegation. + from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', + environment, + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + + + + +## `getSmartAccountsEnvironment` + +Resolves the `SmartAccountsEnvironment` for a chain. + +### Parameters + +| Name | Type | Required | Description | +| --------- | ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `chainId` | `number` | Yes | The chain ID of the network for which the `SmartAccountsEnvironment` should be resolved. | +| `version` | `SupportedVersion` | No | Specifies the version of the contracts to use. If omitted, the latest supported version will be used by default. | + +### Example + +```ts +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia } from 'viem/chains' + +const environment = getSmartAccountsEnvironment(sepolia.id) +``` + +## `generateSalt` + +Generates a random 32-byte hex salt for creating delegations. This helps prevent hash collisions when creating identical delegations. + +### Example + +```ts +import { generateSalt } from '@metamask/smart-accounts-kit/utils' + +const salt = generateSalt() +``` + +## `overrideDeployedEnvironment` + +Overrides or adds the `SmartAccountsEnvironment` for a chain and supported version. + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------------------------------ | -------- | -------------------------------------------------------------------------------------------------------------- | +| `chainId` | `number` | Yes | The chain ID of the network for which the `SmartAccountsEnvironment` should be overridden. | +| `version` | `SupportedVersion` | Yes | The version of the contracts to override for the specified chain. | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment containing contract addresses to override for the given chain and version. | + +### Example + + + + +```ts +import { environment } from './environment.ts' +import { overrideDeployedEnvironment } from '@metamask/smart-accounts-kit/utils' +import { sepolia } from 'viem/chains' + +overrideDeployedEnvironment(sepolia.id, '1.3.0', environment) +``` + + + + +```ts +import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +export const environment: SmartAccountsEnvironment = { + SimpleFactory: '0x124..', + // ... + implementations: { + // ... + }, +} +``` + + + + +## `redeemDelegations` + +Encodes calldata for redeeming delegations. +This method supports batch redemption, allowing multiple delegations to be processed within a single transaction. + +### Parameters + +| Name | Type | Required | Description | +| ------------- | ------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `delegations` | [`Delegation`](../types.md#delegation)`[][]` | Yes | A nested collection representing chains of delegations. Each inner collection contains a chain of delegations to be redeemed. | +| `modes` | [`ExecutionMode`](../types.md#executionmode)`[]` | Yes | A collection specifying the [execution mode](../../concepts/delegation/delegation-manager.md#execution-modes) for each corresponding delegation chain. | +| `executions` | [`ExecutionStruct`](../types.md#executionstruct)`[][]` | Yes | A nested collection where each inner collection contains a list of `ExecutionStruct` objects associated with a specific delegation chain. | + +### Example + +This example assumes you have a delegation signed by the delegator. + +```ts +import { createExecution, ExecutionMode } from '@metamask/smart-accounts-kit' +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' +import { zeroAddress } from 'viem' + +const data = DelegationManager.encode.redeemDelegations({ + delegations: [[signedDelegation]], + modes: [ExecutionMode.SingleDefault], + executions: [[execution]], +}) +``` + +## `signDelegation` + +Signs the delegation and returns the delegation signature. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------------------- | ------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `privateKey` | `Hex` | Yes | The private key to use for signing the delegation. | +| `delegation` | `Omit<`[`Delegation`](../types.md#delegation)`, "signature">` | Yes | The unsigned delegation object to sign. | +| `chainId` | `number` | Yes | The chain ID on which the delegation manager is deployed. | +| `delegationManager` | `0x${string}` | Yes | The address of the Delegation Manager. | +| `name` | `string` | No | The name of the domain of the Delegation Manager. The default is `DelegationManager`. | +| `version` | `string` | No | The version of the domain of the Delegation Manager. The default is `1`. | +| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow insecure unrestricted delegation with no caveats. The default is `false`. | + +### Example + + + + +```ts +import { signDelegation } from '@metamask/smart-accounts-kit' +import { privateKey, delegation, delegationManager } from './config.ts' +import { sepolia } from 'viem/chains' + +const signature = signDelegation({ + privateKey, + delegation, + chainId: sepolia.id, + delegationManager, +}) +``` + + + + +```ts +import { + getSmartAccountsEnvironment, + createDelegation, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { createWalletClient, parseEther } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia } from 'viem/chains' + +const environment = getSmartAccountsEnvironment(sepolia.id) +export const delegationManager = environment.DelegationManager + +export const privateKey = `0x12141..` +const account = privateKeyToAccount(privateKey) + +// The address to which the delegation is granted. It can be an EOA address, or +// smart account address. +const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' + +export const delegation = createDelegation({ + to: delegate, + from: account.address, + environment, + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: parseEther('0.001'), + }, +}) +``` + + + diff --git a/smart-accounts-kit/reference/erc7710/bundler-client.md b/smart-accounts-kit/reference/erc7710/bundler-client.md new file mode 100644 index 00000000000..e8fd93aabfe --- /dev/null +++ b/smart-accounts-kit/reference/erc7710/bundler-client.md @@ -0,0 +1,106 @@ +--- +description: Bundler Client actions reference. +sidebar_label: Bundler Client actions +toc_max_heading_level: 2 +keywords: + [ERC-7710, Viem, bundler client, actions, reference, advanced permissions, redeem delegation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Bundler Client actions reference + +These actions extend the [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) to support [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) utilities. + +## `sendUserOperationWithDelegation` + +Sends a user operation with redeem permissions according to the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) specifications. + +:::info +To use `sendUserOperationWithDelegation`, the Viem Bundler Client must be +extended with `erc7710BundlerActions`. +::: + +### Parameters + +See the [Viem `sendUserOperation` parameters](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation). +This function has the same parameters, except it does not accept `callData`. + +Objects in the `calls` array also require the following parameters: + +| Name | Type | Required | Description | +| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | +| `delegationManager` | `Address` | Yes | The address of the . | +| `permissionContext` | `PermissionContext` | Yes | An encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming permissions. | + +### Example + + + + +```ts +import { sessionAccount, bundlerClient, publicClient } from './client.ts' + +// These properties must be extracted from the permission response. +const permissionContext = permissionsResponse[0].context +const delegationManager = permissionsResponse[0].delegationManager + +// Calls without permissionContext and delegationManager will be executed +// as a normal user operation. +const userOperationHash = await bundlerClient.sendUserOperationWithDelegation({ + publicClient, + account: sessionAccount, + calls: [ + { + to: sessionAccount.address, + data: '0x', + value: 1n, + permissionContext, + delegationManager, + }, + ], + // Appropriate values must be used for fee-per-gas. + maxFeePerGas: 1n, + maxPriorityFeePerGas: 1n, +}) +``` + + + + +```ts +import { createPublicClient, http, createBundlerClient } from 'viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { createBundlerClient } from 'viem/account-abstraction' +import { erc7710BundlerActions } from '@metamask/smart-accounts-kit/actions' +import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' + +export const publicClient = createPublicClient({ + chain: chain, + transport: http(), +}) + +// Your session account for requesting and redeeming should be the same. +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +export const sessionAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +export const bundlerClient = createBundlerClient({ + transport: http(`https://your-bundler-url`), + // Allows you to use the same Bundler Client as paymaster. + paymaster: true, +}).extend(erc7710BundlerActions()) +``` + + + diff --git a/smart-accounts-kit/reference/erc7710/wallet-client.md b/smart-accounts-kit/reference/erc7710/wallet-client.md new file mode 100644 index 00000000000..7786a90f6d0 --- /dev/null +++ b/smart-accounts-kit/reference/erc7710/wallet-client.md @@ -0,0 +1,221 @@ +--- +description: Wallet Client actions reference. +sidebar_label: Wallet Client actions +toc_max_heading_level: 2 +keywords: + [ + ERC-7710, + Viem, + wallet client, + actions, + reference, + advanced permissions, + redeem delegation, + redelegate permission context, + ] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Wallet Client actions reference + +These actions extend the [Viem Wallet Client](https://viem.sh/docs/clients/wallet) to support [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) utilities. + +## `sendTransactionWithDelegation` + +Sends a transaction to redeem delegated permissions according to the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) specifications. + +:::info +To use `sendTransactionWithDelegation`, the Viem Wallet Client must be +extended with `erc7710WalletActions`. +::: + +### Parameters + +See the [Viem `sendTransaction` parameters](https://viem.sh/docs/actions/wallet/sendTransaction#parameters). +This function has the same parameters, and it also requires the following parameters: + +| Name | Type | Required | Description | +| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | +| `delegationManager` | `Address` | Yes | The address of the . | +| `permissionContext` | `PermissionContext` | Yes | An encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming delegations. | + +### Example + + + + +```ts +import { walletClient, publicClient } from './client.ts' + +// These properties must be extracted from the permission response. See +// `grantPermissions` action to learn how to request permissions. +const permissionContext = permissionsResponse[0].context +const delegationManager = permissionsResponse[0].delegationManager + +const hash = walletClient.sendTransactionWithDelegation({ + chain, + to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', + value: 1n, + permissionContext, + delegationManager, +}) +``` + + + + +```ts +import { http, createPublicClient, createWalletClient } from 'viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +// Your session account for requesting and redeeming should be the same. +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +const walletClient = createWalletClient({ + account, + transport: http(), + chain, +}).extend(erc7710WalletActions()) +``` + + + + +## `redelegatePermissionContext` + +Creates a redelegation to a specific delegate from a delegation chain encoded as `Hex` or decoded as [`Delegation`](../types.md#delegation)`[]`. + +The action returns [`RedelegatePermissionContextReturnType`](../types.md#redelegatepermissioncontextreturntype). + +### Parameters + +| Name | Type | Required | Description | +| ------------------- | ------------------------------------------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Contract addresses for the on the target chain. | +| `permissionContext` | `PermissionContext` | Yes | Encoded delegation chain (`Hex`) or decoded chain ([`Delegation`](../types.md#delegation)`[]`), leaf first. | +| `chainId` | `number` | No | Chain ID used when signing the delegation. | +| `account` | `Account` \| `Address` | No | Account that signs the redelegation. The default is the Wallet Client's configured account. | +| `scope` | `ScopeConfig` | No | Delegation scope to restrict the authority of the redelegation. | +| `caveats` | `Caveats` | No | Additional caveats to restrict the authority of the redelegation. See [caveats reference](../delegation/caveats.md). | +| `salt` | `Hex` | No | Salt for redelegation. | +| `to` | `Address` | Yes | Address of the delegate for the redelegation. | + +### Example + + + + +```ts +import { walletClient, publicClient, environment } from './client.ts' + +// These properties must be extracted from the permission response. See +// `grantPermissions` action to learn how to request permissions. +const permissionContext = permissionsResponse[0].context + +const { permissionContext: redelegatedPermissionContext } = + walletClient.redelegatePermissionContext({ + to: 'DELEGATE_ADDRESS', + environment, + permissionContext: permissionContext, + }) +``` + + + + +```ts +import { http, createWalletClient } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' + +// Your session account for requesting and redelegating should be the same. +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +export const environment = getSmartAccountsEnvironment(chain.id) + +const walletClient = createWalletClient({ + account, + transport: http(), + chain, +}).extend(erc7710WalletActions()) +``` + + + + +## `redelegatePermissionContextOpen` + +Creates an open redelegation from a delegation chain encoded as `Hex` or decoded as [`Delegation`](../types.md#delegation)`[]`. This allows any account to redeem the inherited permissions. + +The action returns [`RedelegatePermissionContextReturnType`](../types.md#redelegatepermissioncontextreturntype). + +### Parameters + +| Name | Type | Required | Description | +| ------------------- | ------------------------------------------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Contract addresses for the on the target chain. | +| `permissionContext` | `PermissionContext` | Yes | Encoded delegation chain (`Hex`) or decoded chain ([`Delegation`](../types.md#delegation)`[]`), leaf first. | +| `chainId` | `number` | No | Chain ID used when signing the delegation. | +| `account` | `Account` \| `Address` | No | Account that signs the redelegation. The default is the Wallet Client's configured account. | +| `scope` | `ScopeConfig` | No | Delegation scope to restrict the authority of the redelegation. | +| `caveats` | `Caveats` | No | Additional caveats to restrict the authority of the redelegation. See [caveats reference](../delegation/caveats.md). | +| `salt` | `Hex` | No | Salt for redelegation. | + +### Example + + + + +```ts +import { walletClient, publicClient, environment } from './client.ts' + +// These properties must be extracted from the permission response. See +// `grantPermissions` action to learn how to request permissions. +const permissionContext = permissionsResponse[0].context + +const { permissionContext: redelegatedPermissionContext } = + walletClient.redelegatePermissionContextOpen({ + environment, + permissionContext: permissionContext, + }) +``` + + + + +```ts +import { http, createWalletClient } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' + +// Your session account for requesting and redelegating should be the same. +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +export const environment = getSmartAccountsEnvironment(chain.id) + +const walletClient = createWalletClient({ + account, + transport: http(), + chain, +}).extend(erc7710WalletActions()) +``` + + + diff --git a/smart-accounts-kit/reference/glossary.mdx b/smart-accounts-kit/reference/glossary.mdx new file mode 100644 index 00000000000..0c4aba480c2 --- /dev/null +++ b/smart-accounts-kit/reference/glossary.mdx @@ -0,0 +1,107 @@ +--- +description: Glossary of terms used across Smart Accounts Kit documentation. +title: Glossary +keywords: [glossary, smart accounts kit, delegation, advanced permissions, terms] +--- + +This glossary defines common Smart Accounts Kit terms used across the documentation. + + + + +### Account abstraction + +A conceptual model for programmable onchain accounts, including flexible validation logic, custom signature schemes, and gas abstraction. ERC-4337 defines a mechanism for account abstraction. + +### Advanced Permissions + +Fine-grained, wallet execution permissions that dapps can request from MetaMask extension users. Based on ERC-7715. + +### Bundler + +An ERC-4337 component that manages the alternate mempool: it collects user operations from smart accounts, packages them, and submits them to the network. + +### Caveat + +A restriction attached to a delegation that limits how delegated authority can be used. + +### Caveat enforcer + +A smart contract that enforces delegation rules by validating caveat conditions during redemption hooks. + +### Delegate account + +The account that receives delegated authority and can redeem a delegation under its constraints. + +### Delegation + +The ability for a MetaMask smart account to authorize another account to perform specific executions on its behalf. + +### Delegation Framework + +A set of audited smart contracts that handle smart account creation, the delegation lifecycle, and caveat enforcement. + +### Delegation Manager + +The ERC-7710 component that validates and redeems delegations, including signature checks and caveat enforcer hooks. + +### Delegation scope + +A predefined authority pattern representing a caveat or group of caveats, which sets the initial actions a delegate is allowed to perform. You can combine scopes with additional caveats. + +### Delegator account + +The account that creates and signs a delegation to grant limited authority to another account. + +### EIP-7702 smart account + +A stateless MetaMask smart account implementation that represents an upgraded EOA. + +### Externally owned account (EOA) + +A private-key-controlled account with no built-in programmable execution logic. + +### Hybrid smart account + +A smart account implementation that supports both an EOA owner and passkey signers. + +### MetaMask smart account + +A smart contract account created using the Smart Accounts Kit that supports programmable behavior, flexible signing options, and ERC-7710 delegations. + +### Multisig smart account + +A smart account implementation that requires multiple signers to generate a valid signature. + +### Open delegation + +A delegation that leaves the delegate unspecified, allowing any account to redeem it. + +### Open redelegation + +A redelegation with no specific delegate, allowing any account to redeem inherited permissions. + +### Passkey + +A cryptographic key that can be used to sign transactions instead of a private key. + +### Paymaster + +A service that pays for user operations on behalf of a smart account. + +### Redelegation + +A delegation that passes on authority granted by a previous delegation. + +### Root delegation + +The first delegation in a chain, where an account delegates its own authority directly. + +### Signer + +An account that can sign transactions for a smart account. + +### User operation + +A pseudo-transaction object defined by ERC-4337 that describes what a smart account should execute. User operations are submitted to the alternate mempool managed by bundlers. + diff --git a/smart-accounts-kit/reference/smart-account.md b/smart-accounts-kit/reference/smart-account.md new file mode 100644 index 00000000000..418158e3343 --- /dev/null +++ b/smart-accounts-kit/reference/smart-account.md @@ -0,0 +1,671 @@ +--- +description: MetaMask Smart Accounts-related API methods reference. +sidebar_label: MetaMask Smart Accounts +toc_max_heading_level: 2 +keywords: [smart accounts, API, methods, reference] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# MetaMask Smart Accounts API reference + +The following API methods are related to creating, managing, and signing with [MetaMask Smart Accounts](../concepts/smart-accounts.md). + +## `aggregateSignature` + +Aggregates multiple partial signatures into a single combined multisig signature. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | --------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | +| `signatures` | [`PartialSignature`](./types.md#partialsignature)[] | Yes | Collection of partial signatures provided by signers, to be merged into an aggregated signature. | + +### Example + + + + +```typescript +import { + bundlerClient, + aliceSmartAccount, + bobSmartAccount, + aliceAccount, + bobAccount, +} from './config.ts' +import { aggregateSignature } from '@metamask/smart-accounts-kit' + +const userOperation = await bundlerClient.prepareUserOperation({ + account: aliceSmartAccount, + calls: [ + { + target: zeroAddress, + value: 0n, + data: '0x', + }, + ], +}) + +const aliceSignature = await aliceSmartAccount.signUserOperation(userOperation) +const bobSignature = await bobSmartAccount.signUserOperation(userOperation) + +const aggregatedSignature = aggregateSignature({ + signatures: [ + { + signer: aliceAccount.address, + signature: aliceSignature, + type: 'ECDSA', + }, + { + signer: bobAccount.address, + signature: bobSignature, + type: 'ECDSA', + }, + ], +}) +``` + + + + +```typescript +import { createPublicClient, http } from 'viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { createBundlerClient } from 'viem/account-abstraction' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const alicePrivateKey = generatePrivateKey() +const aliceAccount = privateKeyToAccount(alicePrivateKey) + +const bobPrivateKey = generatePrivateKey() +const bobAccount = privateKeyToAccount(bobPrivateKey) + +const signers = [aliceAccount.address, bobAccount.address] +const threshold = 2n + +export const aliceSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [signers, threshold], + deploySalt: '0x', + signer: [{ account: aliceAccount }], +}) + +export const bobSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [signers, threshold], + deploySalt: '0x', + signer: [{ account: bobAccount }], +}) + +export const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://public.pimlico.io/v2/rpc'), +}) +``` + + + + +## `encodeCalls` + +Encodes calls for execution by a MetaMask smart account. If there's a single call directly to the smart account, it returns the call data directly. For multiple calls or calls to other addresses, it creates executions and encodes them for the smart account's `execute` function. + +The execution mode is set to `SingleDefault` for a single call to other address, or `BatchDefault` for multiple calls. + +### Parameters + +| Name | Type | Required | Description | +| ------- | -------- | -------- | ---------------------------- | +| `calls` | `Call[]` | Yes | List of calls to be encoded. | + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const calls = [ + { + to: zeroAddress, + data: '0x', + value: 0n, + }, +] + +const executeCallData = await smartAccount.encodeCalls(calls) +``` + + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const delegatorAccount = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegatorAccount }, +}) +``` + + + + +## `getFactoryArgs` + +Returns the factory address and factory data that can be used to deploy a smart account. + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const { factory, factoryData } = await smartAccount.getFactoryArgs() +``` + + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const delegatorAccount = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegatorAccount }, +}) +``` + + + + +## `getNonce` + +Returns the nonce for a smart account. + +### Parameters + +| Name | Type | Required | Description | +| ----- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `key` | `bigint` | No | The nonce key to retrieve the nonce. Different keys maintain independent nonce sequences, enabling parallel user operation execution. | + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const nonce = await smartAccount.getNonce() +``` + + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const delegatorAccount = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegatorAccount }, +}) +``` + + + + +## `signDelegation` + +Signs the delegation and returns the delegation signature. + +### Parameters + +| Name | Type | Required | Description | +| ------------ | ------------------------------- | -------- | --------------------------------------------------------- | +| `delegation` | `Omit` | Yes | The unsigned delegation object to sign. | +| `chainId` | `number` | No | The chain ID on which the Delegation Manager is deployed. | + +### Example + + + + +```ts +import { + createDelegation, + getSmartAccountsEnvironment, + ScopeType, +} from '@metamask/smart-accounts-kit' +import { delegatorSmartAccount } from './config.ts' + +// The address to which the delegation is granted. It can be an EOA address, or +// smart account address. +const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' + +const delegation = createDelegation({ + to: delegate, + from: account.address, + environment: delegatorSmartAccount.environment, + scope: { + type: ScopeType.NativeTokenTransferAmount, + // 0.001 ETH in wei format. + maxAmount: 1000000000000000n, + }, +}) + +const signature = delegatorSmartAccount.signDelegation({ delegation }) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const delegatorAccount = privateKeyToAccount('0x...') + +export const delegatorSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [delegatorAccount.address, [], [], []], + deploySalt: '0x', + signer: { account: delegatorAccount }, +}) +``` + + + + +## `signMessage` + +Generates the [EIP-191](https://eips.ethereum.org/EIPS/eip-191) signature +using the `MetaMaskSmartAccount` signer. The Smart Accounts Kit +uses Viem under the hood to provide this functionality. + +### Parameters + +See the [Viem `signMessage` parameters](https://viem.sh/account-abstraction/accounts/smart/signMessage). + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const signature = smartAccount.signMessage({ + message: 'hello world', +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const account = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + + + + +## `signTypedData` + +Generates the [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signature +using the `MetaMaskSmartAccount` signer. The Smart Accounts Kit +uses Viem under the hood to provide this functionality. + +### Parameters + +See the [Viem `signTypedData` parameters](https://viem.sh/account-abstraction/accounts/smart/signTypedData). + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const signature = smartAccount.signTypedData({ + domain, + types, + primaryType: 'Mail', + message: { + from: { + name: 'Cow', + wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', + }, + to: { + name: 'Bob', + wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', + }, + contents: 'Hello, Bob!', + }, +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const account = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + + + + +## `signUserOperation` + +Signs a user operation with the `MetaMaskSmartAccount` signer. The Delegation +Toolkit uses Viem under the hood to provide this functionality. + +### Parameters + +See the [Viem `signUserOperation` parameters](https://viem.sh/account-abstraction/accounts/smart/signUserOperation#parameters). + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const userOpSignature = smartAccount.signUserOperation({ + callData: '0xdeadbeef', + callGasLimit: 141653n, + maxFeePerGas: 15000000000n, + maxPriorityFeePerGas: 2000000000n, + nonce: 0n, + preVerificationGas: 53438n, + sender: '0xE911628bF8428C23f179a07b081325cAe376DE1f', + verificationGasLimit: 259350n, + signature: '0x', +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const account = privateKeyToAccount('0x...') + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + + + + +## `toMetaMaskSmartAccount` + +Creates a `MetaMaskSmartAccount` instance. + +### Parameters + +| Name | Type | Required | Description | +| ----------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `client` | `Client` | Yes | Viem Client to retrieve smart account data. | +| `implementation` | `TImplementation` | Yes | Implementation type for the smart account. Can be `Hybrid`, `Multisig`, or `Stateless7702`. | +| `signer` | `SignerConfigByImplementation ` | No | Signer for the smart account. Can be a Viem Account, Viem Wallet Client, or a WebAuthn Account. WebAuthn accounts are only supported for Hybrid implementations. If omitted, non-signing operations still work, but signing operations such as `signUserOperation`, `signDelegation`, `signMessage`, and `signTypedData` will throw an error. | +| `environment` | [`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment) | No | Environment to resolve the smart contracts. | +| `deployParams` | `DeployParams` | Required if `address` is not provided | The parameters that will be used to deploy the smart account and generate its deterministic address. | +| `deploySalt` | `Hex` | Required if `address` is not provided | The salt that will be used to deploy the smart account. | +| `address` | `Address` | Required if `deployParams` and `deploySalt` are not provided, or if the implementation is `Stateless7702`. | The address of the smart account. If an address is provided, the smart account will not be deployed. This should be used if you intend to interact with an existing smart account. | +| `nonceKeyManager` | `NonceManager` | No | A custom nonce key manager for managing nonces. If provided, it enables support for multiple nonce keys to avoid collisions during parallel user operation execution. | + +### Hybrid implementation + +#### `deployParams` + +All Hybrid deploy parameters are required: + +| Name | Type | Description | +| ------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | +| `owner` | `Hex` | The owner's account address. The owner can be the zero address, indicating that there is no owner configured. | +| `p256KeyIds` | `Hex[]` | An array of key identifiers for passkey signers. | +| `p256XValues` | `bigint[]` | An array of public key x-values for passkey signers. | +| `p256YValues` | `bigint[]` | An array of public key y-values for passkey signers. | + +#### Example + + + + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { publicClient, account } from './config.ts' + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account: account }, +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' + +export const account = privateKeyToAccount('0x...') +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + + + + +### Multisig implementation + +#### `deployParams` + +All Multisig deploy parameters are required: + +| Name | Type | Description | +| ----------- | -------- | -------------------------------------------------------- | +| `signers` | `Hex[]` | An array of EOA signer addresses. | +| `threshold` | `bigint` | The number of signers required to execute a transaction. | + +#### Example + + + + +```ts +import { publicClient, aliceAccount, bobAccount } from './config.ts' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const signers = [aliceAccount.address, bobAccount.address] +const threshold = 2n + +const aliceSmartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.MultiSig, + deployParams: [signers, threshold], + deploySalt: '0x', + signer: [{ account: aliceAccount }], +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const alicePrivateKey = generatePrivateKey() +export const aliceAccount = privateKeyToAccount(alicePrivateKey) + +const bobPrivateKey = generatePrivateKey() +export const bobAccount = privateKeyToAccount(bobPrivateKey) +``` + + + + +### Stateless7702 implementation example + + + + +```ts +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { publicClient, account } from './config.ts' + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Stateless7702, + address: account.address, + signer: { account }, +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { sepolia as chain } from 'viem/chains' + +export const account = privateKeyToAccount('0x...') +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + + + diff --git a/smart-accounts-kit/reference/types.md b/smart-accounts-kit/reference/types.md new file mode 100644 index 00000000000..e2916f28cd8 --- /dev/null +++ b/smart-accounts-kit/reference/types.md @@ -0,0 +1,279 @@ +--- +description: Reference for types used across the Smart Accounts Kit. +sidebar_label: Types +keywords: [types, delegation, smart accounts, reference, enums] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Types + +This page documents the TypeScript [enums](#enums) and [types](#types-1) used in Smart Accounts Kit APIs. + +## Enums + +### `CaveatType` + +Enum representing the [caveat](delegation/caveats.md) type. + +| Value | String | +| --------------------------------------------- | ------------------------------------ | +| `CaveatType.ApprovalRevocation` | `"approvalRevocation"` | +| `CaveatType.AllowedCalldata` | `"allowedCalldata"` | +| `CaveatType.AllowedMethods` | `"allowedMethods"` | +| `CaveatType.AllowedTargets` | `"allowedTargets"` | +| `CaveatType.ArgsEqualityCheck` | `"argsEqualityCheck"` | +| `CaveatType.BlockNumber` | `"blockNumber"` | +| `CaveatType.Deployed` | `"deployed"` | +| `CaveatType.Erc1155BalanceChange` | `"erc1155BalanceChange"` | +| `CaveatType.Erc20BalanceChange` | `"erc20BalanceChange"` | +| `CaveatType.Erc20PeriodTransfer` | `"erc20PeriodTransfer"` | +| `CaveatType.Erc20Streaming` | `"erc20Streaming"` | +| `CaveatType.Erc20TransferAmount` | `"erc20TransferAmount"` | +| `CaveatType.Erc721BalanceChange` | `"erc721BalanceChange"` | +| `CaveatType.Erc721Transfer` | `"erc721Transfer"` | +| `CaveatType.ExactCalldata` | `"exactCalldata"` | +| `CaveatType.ExactCalldataBatch` | `"exactCalldataBatch"` | +| `CaveatType.ExactExecution` | `"exactExecution"` | +| `CaveatType.ExactExecutionBatch` | `"exactExecutionBatch"` | +| `CaveatType.Id` | `"id"` | +| `CaveatType.LimitedCalls` | `"limitedCalls"` | +| `CaveatType.MultiTokenPeriod` | `"multiTokenPeriod"` | +| `CaveatType.NativeBalanceChange` | `"nativeBalanceChange"` | +| `CaveatType.NativeTokenPayment` | `"nativeTokenPayment"` | +| `CaveatType.NativeTokenPeriodTransfer` | `"nativeTokenPeriodTransfer"` | +| `CaveatType.NativeTokenStreaming` | `"nativeTokenStreaming"` | +| `CaveatType.NativeTokenTransferAmount` | `"nativeTokenTransferAmount"` | +| `CaveatType.Nonce` | `"nonce"` | +| `CaveatType.OwnershipTransfer` | `"ownershipTransfer"` | +| `CaveatType.Redeemer` | `"redeemer"` | +| `CaveatType.SpecificActionERC20TransferBatch` | `"specificActionERC20TransferBatch"` | +| `CaveatType.Timestamp` | `"timestamp"` | +| `CaveatType.ValueLte` | `"valueLte"` | + +### `ExecutionMode` + +Enum specifying how delegated executions are processed when [redeeming delegations](delegation/index.md#redeemdelegations). + +| Value | Description | +| ----------------------------- | --------------------------------------------------------------- | +| `ExecutionMode.SingleDefault` | Executes a single call and reverts on failure. | +| `ExecutionMode.SingleTry` | Executes a single call and silently continues on failure. | +| `ExecutionMode.BatchDefault` | Executes a batch of calls and reverts if any call fails. | +| `ExecutionMode.BatchTry` | Executes a batch of calls and silently continues past failures. | + +### `Implementation` + +Enum representing the [MetaMask smart account](../concepts/smart-accounts.md) implementation type. + +| Value | Description | +| ------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| `Implementation.Hybrid` | Supports both ECDSA and WebAuthn (passkey) signers. | +| `Implementation.MultiSig` | Supports multiple ECDSA signers with threshold-based signing. | +| `Implementation.Stateless7702` | Uses [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) to upgrade an EOA to a smart account without deployment. | + +### `ScopeType` + +Enum representing [delegation scope types](delegation/delegation-scopes.md). + +| Value | String | +| ------------------------------------- | ----------------------------- | +| `ScopeType.Erc20TransferAmount` | `"erc20TransferAmount"` | +| `ScopeType.Erc20Streaming` | `"erc20Streaming"` | +| `ScopeType.Erc20PeriodTransfer` | `"erc20PeriodTransfer"` | +| `ScopeType.NativeTokenTransferAmount` | `"nativeTokenTransferAmount"` | +| `ScopeType.NativeTokenStreaming` | `"nativeTokenStreaming"` | +| `ScopeType.NativeTokenPeriodTransfer` | `"nativeTokenPeriodTransfer"` | +| `ScopeType.Erc721Transfer` | `"erc721Transfer"` | +| `ScopeType.OwnershipTransfer` | `"ownershipTransfer"` | +| `ScopeType.FunctionCall` | `"functionCall"` | + +### `TransferWindow` + +Enum representing predefined time intervals in seconds for transfer period durations. + +| Value | Seconds | +| -------------------------- | ---------- | +| `TransferWindow.Hourly` | `3600` | +| `TransferWindow.Daily` | `86400` | +| `TransferWindow.Weekly` | `604800` | +| `TransferWindow.BiWeekly` | `1209600` | +| `TransferWindow.Monthly` | `2592000` | +| `TransferWindow.Quarterly` | `7776000` | +| `TransferWindow.Yearly` | `31536000` | + +## Types + +### `AllowedCalldataBuilderConfig` + +Defines an expected calldata segment for a single function signature. + +| Name | Type | Required | Description | +| ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | +| `startIndex` | `number` | Yes | The byte offset in the calldata (including the 4-byte selector) where the expected value starts. | +| `value` | `Hex` | Yes | The expected hex-encoded calldata at that offset. | + +### `Caveat` + +Represents a restriction or condition applied to a delegation. + +| Name | Type | Required | Description | +| ---------- | ----- | -------- | ------------------------------------------------------------------------------------------------ | +| `enforcer` | `Hex` | Yes | The contract address of the caveat enforcer. | +| `terms` | `Hex` | Yes | The terms of the caveat encoded as hex data. | +| `args` | `Hex` | Yes | Additional arguments required by the caveat enforcer, encoded as hex data. | + +### `CaveatBuilderConfig` + +Optional configuration for [`createCaveatBuilder`](delegation/index.md#createcaveatbuilder). + +| Name | Type | Required | Description | +| ------------------------------------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow unrestricted delegations with no caveats. The default is `false`. | + +### `Delegation` + +Represents a delegation that grants permissions from a delegator to a delegate. + +| Name | Type | Required | Description | +| ----------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `delegate` | `Hex` | Yes | The address to which the delegation is being granted. | +| `delegator` | `Hex` | Yes | The address that is granting the delegation. | +| `authority` | `Hex` | Yes | The parent delegation hash, or `ROOT_AUTHORITY` for creating root delegations. | +| `caveats` | [`Caveat`](#caveat)`[]` | Yes | An array of [caveats](delegation/caveats.md) that constrain the delegation. | +| `salt` | `Hex` | Yes | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | +| `signature` | `Hex` | Yes | The signature to validate the delegation. | + +### `DecodedRevertReason` + +Represents a decoded revert reason from a error. Returned by [`decodeRevertData`](delegation/index.md#decoderevertdata) and [`decodeRevertReason`](delegation/index.md#decoderevertreason). + +| Name | Type | Required | Description | +| ----------- | -------- | -------- | ---------------------------------- | +| `errorName` | `string` | Yes | The name of the decoded error. | +| `message` | `string` | Yes | The decoded revert reason message. | +| `rawData` | `Hex` | Yes | The raw ABI-encoded revert data. | + +### `ExactCalldataBuilderConfig` + +Defines the exact calldata the delegate is allowed to call. + +| Name | Type | Required | Description | +| ---------- | ----- | -------- | --------------------------------------------------- | +| `calldata` | `Hex` | Yes | The exact calldata the delegate is allowed to call. | + +### `ExecutionStruct` + +Represents a single execution to perform on behalf of a delegator. + +| Name | Type | Required | Description | +| ---------- | --------- | -------- | ------------------------------------------------------------------ | +| `target` | `Address` | Yes | Address of the contract or recipient that the call is directed to. | +| `value` | `bigint` | Yes | Value of native tokens to send along with the call in wei format. | +| `callData` | `Hex` | Yes | Encoded function data to be executed on the target address. | + +### `GetGrantedExecutionPermissionsResult` + +The return type of [`getGrantedExecutionPermissions`](advanced-permissions/wallet-client.md#getgrantedexecutionpermissions). An array of [`PermissionResponse`](#permissionresponse) objects. + +### `GetSupportedExecutionPermissionsResult` + +The return type of [`getSupportedExecutionPermissions`](advanced-permissions/wallet-client.md#getsupportedexecutionpermissions). A `Record` keyed by permission type. + +### `PartialSignature` + +Represents a single signer's contribution to a multisig aggregated signature. + +| Name | Type | Required | Description | +| ----------- | --------------- | -------- | ------------------------------------------------------------------------------------- | +| `signer` | `Address` | Yes | The address of the signer. | +| `signature` | `Hex` | Yes | The signer's signature over the user operation. | +| `type` | `SignatureType` | Yes | The signature type to represent signature algorithm. Only supported value is `ECDSA`. | + +### `RedelegatePermissionContextReturnType` + +Return type of [`redelegatePermissionContext`](erc7710/wallet-client.md#redelegatepermissioncontext) and [`redelegatePermissionContextOpen`](erc7710/wallet-client.md#redelegatepermissioncontextopen). + +| Name | Type | Description | +| ------------------- | --------------------------- | --------------------------------------------------------------- | +| `delegation` | [`Delegation`](#delegation) | The signed redelegation object. | +| `permissionContext` | `Hex` | ABI-encoded delegation chain with the new delegation prepended. | + +### `PermissionResponse` + +Represents a granted Advanced Permission. + +| Name | Type | Required | Description | +| ------------------- | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------------ | +| `chainId` | `number` | Yes | The chain ID for which the permission was granted. | +| `from` | `Address` | Yes | The account address that granted the permission. | +| `to` | `Hex` | Yes | The account address that received the permission. | +| `permission` | `PermissionTypes` | Yes | The granted [permission](advanced-permissions/permissions.md) details. | +| `rules` | `Record[]` | No | The rules applied to the permission. For example, permission expiry. | +| `context` | `Hex` | Yes | The permission context (encoded delegation list) used when redeeming the permission. | +| `dependencies` | `{ factory: Address, factoryData: Hex }[]` | Yes | Factory dependencies for account deployment. | +| `delegationManager` | `Address` | Yes | The address of the contract for the permission. | + +### `RequestExecutionPermissionsReturnType` + +The return type of [`requestExecutionPermissions`](advanced-permissions/wallet-client.md#requestexecutionpermissions). An array of [`PermissionResponse`](#permissionresponse) objects. + +### `SmartAccountsEnvironment` + +An object containing the contract addresses required to interact with the on a specific chain. + +| Name | Type | Required | Description | +| ------------------- | --------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `DelegationManager` | `Hex` | Yes | The address of the contract. | +| `EntryPoint` | `Hex` | Yes | The address of the ERC-4337 EntryPoint contract. | +| `SimpleFactory` | `Hex` | Yes | The address of the factory contract for deploying MetaMask Smart Accounts. | +| `implementations` | `Record` | Yes | A map of MetaMask smart account implementation types to their deployed addresses. | +| `caveatEnforcers` | `Record` | Yes | A map of caveat enforcer types to their deployed addresses. | + +### `SupportedPermissionInfo` + +Describes a supported Advanced Permission type. Used in [`GetSupportedExecutionPermissionsResult`](#getsupportedexecutionpermissionsresult). + +| Name | Type | Required | Description | +| ----------- | ---------- | -------- | --------------------------------------------------------------------------- | +| `chainIds` | `number[]` | Yes | The chain IDs on which the permission type is supported. | +| `ruleTypes` | `string[]` | Yes | The rule types supported for the permission type (for example, `"expiry"`). | + +### `MaybeDeferred` + +Represents a value that can be provided directly or derived at runtime from [`PaymentRequirements`](#paymentrequirements). + +```ts +type MaybeDeferred = + | TResult + | ((requirements: PaymentRequirements) => Promise | TResult) +``` + +### `PaymentRequirements` + +Represents the payment requirements returned by an x402 server. [`createx402DelegationProvider`](x402.md#createx402delegationprovider) uses these values to scope and construct the delegation. + +| Name | Type | Required | Description | +| ------------------- | ------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | +| `scheme` | `string` | Yes | The payment scheme identifier. | +| `network` | `string` | Yes | The [CAIP](https://namespaces.chainagnostic.org/eip155/caip2) network identifier. For example, `eip155:8453`. | +| `asset` | `string` | Yes | The token contract address for the payment asset. | +| `amount` | `string` | Yes | The payment amount in the token's smallest unit. | +| `payTo` | `string` | Yes | The recipient address for the payment. | +| `maxTimeoutSeconds` | `number` | Yes | The maximum time in seconds before the payment expires. | +| `extra` | `Record` | No | Additional context for x402, such as the asset transfer method. | + +### `RedeemersConfig` + +Configuration for the redeemer constraint used in [`createx402DelegationProvider`](x402.md#createx402delegationprovider). + +| Name | Type | Required | Description | +| ------------------ | ---------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------- | +| `requireRedeemers` | `boolean` | Yes | Whether at least one redeemer constraint must exist. | +| `addresses` | [`MaybeDeferred`](#maybedeferred)`` | No | The addresses that are allowed to redeem the delegation. | + +### `ValueLteBuilderConfig` + +| Name | Type | Required | Description | +| ---------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | +| `maxValue` | `bigint` | Yes | The maximum native token amount the delegate can transfer per call. | diff --git a/smart-accounts-kit/reference/x402.md b/smart-accounts-kit/reference/x402.md new file mode 100644 index 00000000000..86ee062b62e --- /dev/null +++ b/smart-accounts-kit/reference/x402.md @@ -0,0 +1,90 @@ +--- +description: Smart Accounts Kit x402 API methods reference. +sidebar_label: x402 +toc_max_heading_level: 2 +keywords: [x402, delegation provider, experimental, API, methods, reference] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# x402 API reference + +The following API methods are related to x402 to create payments using delegation. + +## `createx402DelegationProvider` + +Creates a delegation provider function too be used with `x402Erc7710Client`. + +The provider resolves creates an open delegation, signs it, and returns an ABI-encoded delegation +chain as a hex string. The provider internally appends redeemer, payee, and expiry caveats when the +existing caveats, or the root delegation doesn't have it. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `account` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | Yes | The Viem Account that signs the delegation. | +| `environment` | [`MaybeDeferred`](./types.md#maybedeferred)
`<`[`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment)`>` | No | Environment to resolve the smart contracts for the current chain. If omitted, resolved automatically from the chain ID in the payment requirements. | +| `from` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | The address that is granting the delegation. The default is `account`. | +| `salt` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | The salt for generating the delegation hash. The default is a random 32-byte value. | +| `caveats` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Caveats that further refine the authority granted by the delegation. [`redeemer`](./delegation/caveats.md#redeemer), [`allowedTargets`](./delegation/caveats.md#allowedtargets), and [`timestamp`](./delegation/caveats.md#timestamp) caveats are auto-appended if not already present. | +| `parentPermissionContext` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Parent chain as `Hex` or as decoded [`Delegation`](./types.md#delegation) values (leaf first). Use this when creating a redelegation. | +| `expirySeconds` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Relative expiry in seconds. Adds a timestamp caveat if no tighter constraint exists. | +| `redeemers` | [`MaybeDeferred`](./types.md#maybedeferred)
`<`[`RedeemersConfig`](./types.md#redeemersconfig)`>` | No | Constrains the addresses that are allowed to redeem the delegation. Use this to restrict redemption to specific facilitators. | + +### Example + + + + +```ts +import { privateKeyToAccount } from 'viem/accounts' +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' +import { x402Erc7710Client } from '@metamask/x402' + +const account = privateKeyToAccount(privateKey) + +const erc7710Client = new x402Erc7710Client({ + delegationProvider: createx402DelegationProvider({ + account, + }), +}) +``` + + + + +```ts +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' + +const parentPermissionContext = '0x...' // Previously stored/issued permission context. + +const delegationProvider = createx402DelegationProvider({ + account, + parentPermissionContext, +}) +``` + + + + +## `parseEip155ChainId` + +Parses an [EIP-155 CAIP](https://namespaces.chainagnostic.org/eip155/caip2) network identifier into a numeric chain ID. + +### Parameters + +| Name | Type | Required | Description | +| --------- | -------- | -------- | --------------------------------------------------------- | +| `network` | `string` | Yes | EIP-155 CAIP network identifier. For example, `eip155:1`. | + +### Example + +```ts +import { parseEip155ChainId } from '@metamask/smart-accounts-kit/experimental' + +// Returns 137 +const chainId = parseEip155ChainId('eip155:137') +``` diff --git a/smart-accounts-kit/troubleshooting/aa21-prefund.md b/smart-accounts-kit/troubleshooting/aa21-prefund.md new file mode 100644 index 00000000000..e3c23b91fb0 --- /dev/null +++ b/smart-accounts-kit/troubleshooting/aa21-prefund.md @@ -0,0 +1,99 @@ +--- +description: How to resolve the AA21 didn't pay prefund error when submitting user operations. +sidebar_label: AA21 didn't pay prefund +keywords: [AA21, pay prefund, user operation, troubleshooting] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# AA21 didn't pay prefund + +The `EntryPoint` contract reverts with `AA21 didn't pay prefund` when a smart account doesn't +have enough native token balance to cover the gas cost of the user operation. + +Before executing a user operation, the `EntryPoint` requires the sender account to prefund the +expected gas cost. If the account's balance is lower than the required prefund, the `EntryPoint` +reverts the operation. + +## Solution + +### Fund the smart account + +Fund the smart account with enough native tokens to cover the required prefund. +Use Viem's [`estimateUserOperationGas`](https://viem.sh/account-abstraction/actions/bundler/estimateUserOperationGas) +to get the gas estimates from your bundler, then calculate the required prefund based on the +`EntryPoint` version. + + + + +```typescript +import { formatEther } from 'viem' + +const gasEstimate = await bundlerClient.estimateUserOperationGas({ + account: smartAccount, + calls: [{ to: '0x...', value: 0n }], +}) + +const { maxFeePerGas } = await publicClient.estimateFeesPerGas() + +const requiredGas = + gasEstimate.verificationGasLimit + + gasEstimate.callGasLimit + + (gasEstimate.paymasterVerificationGasLimit ?? 0n) + + (gasEstimate.paymasterPostOpGasLimit ?? 0n) + + gasEstimate.preVerificationGas + +const requiredPrefund = requiredGas * maxFeePerGas + +const balance = await publicClient.getBalance({ + address: smartAccount.address, +}) + +if (balance < requiredPrefund) { + console.log( + `Insufficient balance: account has ${formatEther(balance)} ETH, ` + + `but needs ${formatEther(requiredPrefund)} ETH` + ) +} +``` + + + + +```typescript +import { formatEther } from 'viem' + +const gasEstimate = await bundlerClient.estimateUserOperationGas({ + account: smartAccount, + calls: [{ to: '0x...', value: 0n }], +}) + +const { maxFeePerGas } = await publicClient.estimateFeesPerGas() + +const requiredGas = + gasEstimate.callGasLimit + gasEstimate.verificationGasLimit + gasEstimate.preVerificationGas + +const requiredPrefund = requiredGas * maxFeePerGas + +const balance = await publicClient.getBalance({ + address: smartAccount.address, +}) + +if (balance < requiredPrefund) { + console.log( + `Insufficient balance: account has ${formatEther(balance)} ETH, ` + + `but needs ${formatEther(requiredPrefund)} ETH` + ) +} +``` + + + + +### Use a paymaster + +You can use a paymaster to sponsor the gas fees for the smart account, so the account doesn't +need to hold native tokens. For more information about configuring a paymaster, see [Send a gasless transaction](../guides/smart-accounts/send-gasless-transaction.md). diff --git a/smart-accounts-kit/troubleshooting/allowance-exceeded.md b/smart-accounts-kit/troubleshooting/allowance-exceeded.md new file mode 100644 index 00000000000..1d2bae098a3 --- /dev/null +++ b/smart-accounts-kit/troubleshooting/allowance-exceeded.md @@ -0,0 +1,59 @@ +--- +description: How to resolve allowance exceeded errors when redeeming delegations. +sidebar_label: Allowance exceeded +toc_max_heading_level: 2 +keywords: + [allowance, allowance exceeded, erc20 transfer amount exceeded, spending limit, troubleshooting] +--- + +# Allowance exceeded + +Spending limit [caveat enforcers](../concepts/delegation/caveat-enforcers.md) revert with an +`allowance-exceeded` error in the following cases. + +## Spending limit exceeded + +The delegation's spending limit has been fully or partially used up by previous redemptions. +Enforcers track cumulative spending onchain using the delegation hash as a key, and revert when +the next transfer exceeds the allowed limit. + +### Solution + +Use the [`CaveatEnforcerClient`](../reference/delegation/caveat-enforcer-client.md) to check the +available amount before redeeming the delegation. + +If the available amount is insufficient, you must wait for the next period (for periodic +enforcers) or for more tokens to accrue (for streaming enforcers). For fixed-limit enforcers, +create a new delegation with a higher limit. + +## Delegation hash collision + +If you create a new delegation with the same parameters as a previous delegation, both produce +the same delegation hash. + +Enforcers track spent amounts using the delegation hash as a key. When two delegations share the +same hash, they also share the same spent balance. This means the new delegation can immediately +revert with `allowance-exceeded`, even if you haven't redeemed it before. + +### Solution + +Use a unique `salt` when creating the delegation. This produces a different delegation hash, +giving the new delegation a fresh spending allowance. + +```typescript +import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' + +const delegation = createDelegation({ + scope: { + type: ScopeType.Erc20TransferAmount, + tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', + // USDC has 6 decimal places. + maxAmount: parseUnits('10', 6), + }, + salt: '0x00131412', + to: delegateAccount, + from: delegatorAccount, + environment: delegatorAccount.environment, +}) +``` diff --git a/smart-accounts-kit/troubleshooting/error-codes.md b/smart-accounts-kit/troubleshooting/error-codes.md new file mode 100644 index 00000000000..48683db9cad --- /dev/null +++ b/smart-accounts-kit/troubleshooting/error-codes.md @@ -0,0 +1,58 @@ +--- +description: Delegation Framework error codes +sidebar_label: Error codes +keywords: [error codes, errors, debug, error references, delegation framework] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Error codes + +The following tables describe error codes from the [MetaMask Delegation Framework contracts](https://github.com/metamask/delegation-framework). Use a decoder such as +[calldata.swiss-knife.xyz](https://calldata.swiss-knife.xyz/decoder) to identify error signatures from raw revert data. + +## Delegation Manager error codes + +| Error code | Error name | Description | +| ------------ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `0xb5863604` | `InvalidDelegate()` | The caller is not the delegate specified in the delegation. [Troubleshoot an invalid delegate.](./invalid-delegate.md) | +| `0xb9f0f171` | `InvalidDelegator()` | The caller is not the delegator specified in the delegation. [Troubleshoot an invalid delegator.](./invalid-delegator.md) | +| `0x05baa052` | `CannotUseADisabledDelegation()` | The delegation has been disabled by the delegator. | +| `0xded4370e` | `InvalidAuthority()` | The delegation chain authority validation failed. The authority hash of a child delegation does not match the hash of its parent delegation. | +| `0x1bcaf69f` | `BatchDataLengthMismatch()` | The array lengths do not match in a batch `redeemDelegations` contract call. | +| `0x005ecddb` | `AlreadyDisabled()` | The delegation has already been disabled. | +| `0xf2a5f75a` | `AlreadyEnabled()` | The delegation is already enabled. | +| `0xf645eedf` | `ECDSAInvalidSignature()` | Invalid ECDSA signature format. | +| `0xfce698f7` | `ECDSAInvalidSignatureLength(uint256)` | The ECDSA signature length is incorrect. | +| `0xac241e11` | `EmptySignature()` | The signature is empty. | +| `0xd93c0665` | `EnforcedPause()` | The contract is paused by the owner. | +| `0x3db6791c` | `InvalidEOASignature()` | EOA signature verification failed. [Troubleshoot an invalid EOA signature.](./invalid-signature.md) | +| `0x155ff427` | `InvalidERC1271Signature()` | Smart contract signature (ERC-1271) verification failed. | +| `0x118cdaa7` | `OwnableUnauthorizedAccount(address)` | An unauthorized account attempted an owner only action. | +| `0x1e4fbdf7` | `OwnableInvalidOwner(address)` | Invalid owner address in an ownership transfer. | +| `0xf6b6ef5b` | `InvalidShortString()` | A string parameter is too short. | +| `0xaa0ea2d8` | `StringTooLong(string)` | A string parameter exceeds the maximum length. | + +## Smart account error codes + +| Error code | Error name | Description | +| ------------ | ----------------------------- | --------------------------------------------------------------------------- | +| `0xd663742a` | `NotEntryPoint()` | The caller is not the EntryPoint contract. | +| `0x0796d945` | `NotEntryPointOrSelf()` | The caller is neither the EntryPoint contract nor the smart account itself. | +| `0x1a4b3a04` | `NotDelegationManager()` | The caller is not the contract. | +| `0xb96fcfe4` | `UnsupportedCallType(bytes1)` | The execution call type is not supported. | +| `0x1187dc06` | `UnsupportedExecType(bytes1)` | The execution type is not supported. | +| `0x29c3b7ee` | `NotSelf()` | The caller is not the smart account itself. | + +## Caveat enforcer error codes + +| Error string | Description | +| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `AllowedTargetsEnforcer:target-address-not-allowed` | When redeeming a delegation with an `allowedTargets` caveat, the execution's target address is not in the allowed list. | +| `AllowedTargetsEnforcer:invalid-terms-length` | When creating a delegation with an `allowedTargets` caveat, the encoded terms length is not a multiple of 20 bytes (Ethereum address). | +| `ERC20TransferAmountEnforcer:invalid-terms-length` | When creating a delegation with an `erc20TransferAmount` caveat, the encoded terms are not exactly 52 bytes (20 byte Ethereum address + 32 byte amount). | +| `ERC20TransferAmountEnforcer:invalid-contract` | When redeeming a delegation with an `erc20TransferAmount` caveat, the execution targets a different contract than the allowed token address. | +| `ERC20TransferAmountEnforcer:invalid-method` | When redeeming a delegation with an `erc20TransferAmount` caveat, the execution calls a function other than `transfer(address,uint256)`. | +| `ERC20TransferAmountEnforcer:allowance-exceeded` | When redeeming a delegation with an `erc20TransferAmount` caveat, the cumulative transfer amount exceeds the allowed limit. | +| `CaveatEnforcer:invalid-call-type` | When redeeming a delegation, the execution uses a batch call type, but the caveat enforcer only supports single calls. | +| `CaveatEnforcer:invalid-execution-type` | When redeeming a delegation, the execution uses a non-default [execution mode](../reference/types.md#executionmode), but the caveat enforcer only supports the default mode. | diff --git a/smart-accounts-kit/troubleshooting/invalid-delegate.md b/smart-accounts-kit/troubleshooting/invalid-delegate.md new file mode 100644 index 00000000000..225169e6f42 --- /dev/null +++ b/smart-accounts-kit/troubleshooting/invalid-delegate.md @@ -0,0 +1,63 @@ +--- +description: How to resolve the InvalidDelegate error when redeeming delegations. +sidebar_label: Invalid delegate +toc_max_heading_level: 2 +keywords: [InvalidDelegate, error code, delegation, troubleshooting] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Invalid delegate + +The reverts with `InvalidDelegate()` in the following two cases. + +## Account is not the delegate + +The account redeeming the delegation is not the delegate specified in the delegation. +The Delegation Manager checks that `msg.sender` matches the `delegate` field of +the delegation, unless it's an [open delegation](../reference/delegation/index.md#createopendelegation). + +### Solution + +Verify that the account redeeming the delegation matches the address in the +delegation's `to` field. If the delegate is a smart account, send the user operation +from that smart account. + +## Broken redelegation chain + +When Delegation Manager validates a [redelegation chain](../guides/delegation/create-redelegation.md), each child delegation's `delegator` +must match the parent delegation's `delegate`. If any link in the chain fails this check, the +authority is invalid. + +### Solution + +Verify that the redelegation chain is consistent. For each pair of adjacent +delegations, the child's `delegator` must be the parent's `delegate`. + +This error can also occur if the delegations are not passed in the correct order. The +delegation array order should be from leaf to root. + +For example, if the delegation chain is Alice to Bob to Carol, the order should be following: + +```ts +const rootDelegation = createDelegation({ + from: '0xAlice', + to: '0xBob', + //.. +}) + +const leafDelegation = createDelegation({ + from: 'OxBob', + to: '0xCarol', + parentDelegation: rootDelegation, + // ... +}) + +const data = DelegationManager.encode.redeemDelegations({ + // Make sure the order is from leaf to root. + // Passing them in the wrong order causes the authority validation to fail. + delegations: [[leafDelegation, rootDelegation]], + modes: [ExecutionMode.SingleDefault], + executions: [[execution]], +}) +``` diff --git a/smart-accounts-kit/troubleshooting/invalid-delegator.md b/smart-accounts-kit/troubleshooting/invalid-delegator.md new file mode 100644 index 00000000000..ec3ab5cfac5 --- /dev/null +++ b/smart-accounts-kit/troubleshooting/invalid-delegator.md @@ -0,0 +1,40 @@ +--- +description: How to resolve the InvalidDelegator error. +sidebar_label: Invalid delegator +toc_max_heading_level: 2 +keywords: [InvalidDelegator, error code, delegation, troubleshooting] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Invalid delegator + +The reverts with `InvalidDelegator()` when the caller is not the delegator +specified in the delegation. + +This error is thrown by the `disableDelegation` and `enableDelegation` contract functions. Only the +account that created the delegation can [disable](../guides/delegation/disable-delegation.md) +or enable it. + +## Solution + +Verify that you're sending the transaction from the delegator's account. If the delegator is a smart account, submit a user operation through the smart account. + +```typescript +import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' + +// Generate calldata to disable the delegation. +const disableCalldata = DelegationManager.encode.disableDelegation({ + delegation: signedDelegation, // Signed by delegatorSmartAccount +}) + +const userOpHash = await bundlerClient.sendUserOperation({ + account: delegatorSmartAccount, + calls: [ + { + to: delegatorSmartAccount.environment.DelegationManager, + data: disableCalldata, + }, + ], +}) +``` diff --git a/smart-accounts-kit/troubleshooting/invalid-signature.md b/smart-accounts-kit/troubleshooting/invalid-signature.md new file mode 100644 index 00000000000..24e85ed2f92 --- /dev/null +++ b/smart-accounts-kit/troubleshooting/invalid-signature.md @@ -0,0 +1,87 @@ +--- +description: How to resolve the InvalidEOASignature error when redeeming delegations. +sidebar_label: Invalid EOA signature +toc_max_heading_level: 2 +keywords: [InvalidEOASignature, error code, delegation, troubleshooting, invalid EOA signature] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Invalid EOA signature + +The reverts with `InvalidEOASignature()` in the following cases. + +## Smart account is not deployed + +The [root delegation's](../concepts/delegation/overview.md#root-delegation) delegator must be a +. The Delegation Manager checks the delegator code to determine +whether it is an EOA or a smart account. + +If the smart account is not deployed yet, its address has no contract code. The Delegation +Manager treats the address as an EOA and attempts ECDSA signature recovery. Because the +delegation was signed by the smart account, signature recovery returns a different address, +and the call reverts. + +### Solution + +Verify that the smart account used as the delegator is deployed before redeeming the delegation. The +smart account can be either an ERC-4337 smart account or an EIP-7702 upgraded EOA. + +For an ERC-4337 smart account, the first user operation sent from that account deploys it +automatically. For more information, see [Deploy a smart account](../guides/smart-accounts/deploy-smart-account.md). + +For an EIP-7702-upgraded EOA, verify that you submit the authorization to set the account code +before redeeming the delegation. + +```ts +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' +import { sepolia as chain } from 'viem/chains' + +// Get the EOA account code +const code = await publicClient.getCode({ + address, +}) + +if (code) { + // According to EIP-7702, the code format is 0xef0100 || address. + // Remove the first 8 characters (0xef0100) to get the delegator address. + const delegatorAddress = `0x${code.substring(8)}` + + const statelessDelegatorAddress = getSmartAccountsEnvironment(chain.id).implementations + .EIP7702StatelessDeleGatorImpl + + // If the account isn't upgraded to a MetaMask smart account, you can + // either upgrade programmatically or ask the user to switch to a smart account manually. + const isAccountUpgraded = + delegatorAddress.toLowerCase() === statelessDelegatorAddress.toLowerCase() +} +``` + +To upgrade an EOA to a MetaMask smart account, see the [EIP-7702 quickstart](../get-started/smart-account-quickstart/eip7702.md). + +## Incorrect signer + +The delegation was signed with an account that doesn't correspond to the delegator +address. When the delegator is an EOA, the Delegation Manager recovers the signer from +the EIP-712 typed data hash and compares it to the `delegator` field. If they don't +match, the transaction reverts. + +This occurs when redeeming a [delegation chain](../guides/delegation/create-redelegation.md). An +intermediate or leaf delegation has an EOA as the delegator, but the delegation is signed by an +account other than the expected delegator. + +### Solution + +Verify that the private key used to sign the delegation corresponds to the delegator address. For +more information, see the [`signDelegation`](../reference/delegation/index.md#signdelegation) reference. + +## Incorrect chain ID or Delegation Manager + +The EIP-712 domain separator used for signing the delegation includes the chain ID and the Delegation Manager contract +address. If the delegation was signed on a different chain or against a different +Delegation Manager, the recovered address won't match. + +### Solution + +Verify that the chain ID and Delegation Manager contract address you use when signing match the +chain and contract where you redeem the delegation. diff --git a/smart-accounts-kit/troubleshooting/user-operation-reverted.md b/smart-accounts-kit/troubleshooting/user-operation-reverted.md new file mode 100644 index 00000000000..5f4a5dc5a9c --- /dev/null +++ b/smart-accounts-kit/troubleshooting/user-operation-reverted.md @@ -0,0 +1,114 @@ +--- +description: How to resolve user operation reverted errors with 0x revert data. +sidebar_label: User operation reverted +toc_max_heading_level: 2 +keywords: [user operation, reverted, reason 0x, empty revert, execution, troubleshooting] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# User operation reverted + +A user operation reverts with reason `0x` when validation succeeds, but execution fails without a +revert reason. This differs from AA-coded `EntryPoint` contract errors such as `AA23`, `AA25`, +or `AA21`. + +When the `EntryPoint` contract calls the smart account's execution function, it performs a low-level +`call` internally. If that inner call reverts with empty data, the bundler reports +reason `0x` with no additional details. + +The following sections describe common causes and how to troubleshoot them. + +## Function doesn't exist + +The `callData` encodes a call from the smart account to a target contract, but the function +selector doesn't match any function on that contract, and no fallback function exists. The EVM +reverts with empty data. + +This commonly happens when: + +- The function selector has a typo or doesn't match the target's ABI. +- The target address is wrong or points to a different contract. +- The target contract isn't deployed on the current chain. + +### Solution + +Decode `callData` and verify the inner call. Confirm that the target address has deployed code +and that the function selector matches the target's ABI. + +```typescript +const code = await publicClient.getCode({ + address: targetAddress, +}) + +if (!code) { + console.log('No contract deployed at this address') +} +``` + +## Bare revert without a message + +The target contract uses `require(false)` or `revert` without a reason string. The revert +returns empty data. Contracts commonly use bare reverts in access control checks, reentrancy locks, +or guard functions. + +### Solution + +Look at the target contract's source code to identify which `require` or `revert` your call +parameters could trigger. + +Use [Tenderly](https://tenderly.co) to simulate the transaction and pinpoint the exact line. See the +[Tenderly debugger documentation](https://docs.tenderly.co/debugger) for details. + +## Out of gas in the inner call + +Smart accounts use a low-level `call` internally in their `execute` function. When the inner +call runs out of gas, the call returns `false` with empty return data. + +This differs from the `AA95` error code, which applies when `handleOps` itself runs out of gas. +In this case, `callGasLimit` might be enough for the smart account's execution overhead but not +enough for the actual target contract call. + +### Solution + +Increase `callGasLimit`. If you estimate gas manually, try doubling the value. Target +contracts doing complex operations often need more gas than default estimates provide. + +## Insufficient balance or allowance + +The inner call performs an ERC-20 `transferFrom` but the smart account hasn't approved the +spender, or doesn't hold enough tokens. Some ERC-20 implementations use bare `require` statements +that revert without a reason string. + +### Solution + +Check that the smart account has sufficient token balance and approvals for the operation. + +```typescript +import { erc20Abi } from 'viem' + +const balance = await publicClient.readContract({ + address: tokenAddress, + abi: erc20Abi, + functionName: 'balanceOf', + args: [smartAccount.address], +}) + +const allowance = await publicClient.readContract({ + address: tokenAddress, + abi: erc20Abi, + functionName: 'allowance', + args: [smartAccount.address, spenderAddress], +}) +``` + +## Manual debugging + +If the cause isn't immediately clear, follow these steps: + +1. Decode the inner call: Extract the `(to, value, data)` tuple from your `callData` to + confirm what the smart account executes. +2. Use Tenderly: Simulate the user operation in [Tenderly](https://tenderly.co) to get a full + execution trace. The trace view shows the exact line where the inner call reverts. +3. Check the basics: Verify the target has deployed code, the smart account has enough + ETH and tokens, and the function selector is correct. diff --git a/snaps-sidebar.js b/snaps-sidebar.js index bef177df9bb..df5ef26fa20 100644 --- a/snaps-sidebar.js +++ b/snaps-sidebar.js @@ -16,43 +16,48 @@ const sidebar = { // But you can create a sidebar manually snapsSidebar: [ - "index", + 'index', { - type: "category", - label: "Get started", - link: { type: "generated-index", slug: "/get-started" }, + type: 'category', + label: 'Get started', collapsed: false, - items: [{ type: "autogenerated", dirName: "get-started" }], + items: [{ type: 'autogenerated', dirName: 'get-started' }], }, { - type: "category", - label: "Learn", - link: { type: "generated-index", slug: "/learn" }, + type: 'category', + label: 'Learn', collapsed: false, - items: [{ type: "autogenerated", dirName: "learn" }], + items: [{ type: 'autogenerated', dirName: 'learn' }], }, { - type: "category", - label: "Features", - link: { type: "generated-index", slug: "/features" }, + type: 'category', + label: 'Features', collapsed: false, - items: [{ type: "autogenerated", dirName: "features" }], + items: [{ type: 'autogenerated', dirName: 'features' }], }, { - type: "category", - label: "How to", - link: { type: "generated-index", slug: "/how-to" }, + type: 'category', + label: 'How to', collapsed: false, - items: [{ type: "autogenerated", dirName: "how-to" }], + items: [{ type: 'autogenerated', dirName: 'how-to' }], }, { - type: "category", - label: "Reference", - link: { type: "generated-index", slug: "/reference" }, + type: 'category', + label: 'Reference', collapsed: false, - items: [{ type: "autogenerated", dirName: "reference" }], + items: [ + { + type: 'category', + label: 'Snaps API', + collapsible: true, + collapsed: true, + link: { type: 'doc', id: 'reference/snaps-api/index' }, + items: [{ type: 'autogenerated', dirName: 'reference/snaps-api' }], + }, + { type: 'autogenerated', dirName: 'reference' }, + ], }, ], -}; +} -module.exports = sidebar; +module.exports = sidebar diff --git a/snaps/assets/custom-dialog.png b/snaps/assets/custom-dialog.png new file mode 100644 index 00000000000..7bcf94bdd5f Binary files /dev/null and b/snaps/assets/custom-dialog.png differ diff --git a/snaps/assets/custom-ui-button.png b/snaps/assets/custom-ui-button.png index 8704f178244..0e1b9cf312f 100644 Binary files a/snaps/assets/custom-ui-button.png and b/snaps/assets/custom-ui-button.png differ diff --git a/snaps/assets/custom-ui-card.png b/snaps/assets/custom-ui-card.png new file mode 100644 index 00000000000..601ec1b006b Binary files /dev/null and b/snaps/assets/custom-ui-card.png differ diff --git a/snaps/assets/custom-ui-form.png b/snaps/assets/custom-ui-form.png index 0bfe4481b8a..b278f50640a 100644 Binary files a/snaps/assets/custom-ui-form.png and b/snaps/assets/custom-ui-form.png differ diff --git a/snaps/assets/custom-ui-section.png b/snaps/assets/custom-ui-section.png new file mode 100644 index 00000000000..09641951a02 Binary files /dev/null and b/snaps/assets/custom-ui-section.png differ diff --git a/snaps/features/cron-jobs.md b/snaps/features/cron-jobs.md index 92b4c32bc32..bcea198ab3e 100644 --- a/snaps/features/cron-jobs.md +++ b/snaps/features/cron-jobs.md @@ -48,17 +48,17 @@ The following example handles the `execute` method specified in the previous exa ```tsx title="index.tsx" -import type { OnCronjobHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnCronjobHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onCronjob: OnCronjobHandler = async ({ request }) => { switch (request.method) { - case "execute": + case 'execute': // Cron jobs can execute any method that is available to the Snap. return snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Cron job @@ -66,38 +66,35 @@ export const onCronjob: OnCronjobHandler = async ({ request }) => { ), }, - }); + }) default: - throw new Error("Method not found."); + throw new Error('Method not found.') } -}; +} ``` ```typescript title="index.ts" -import type { OnCronjobHandler } from "@metamask/snaps-sdk"; -import { panel, heading, text } from "@metamask/snaps-sdk"; +import type { OnCronjobHandler } from '@metamask/snaps-sdk' +import { panel, heading, text } from '@metamask/snaps-sdk' export const onCronjob: OnCronjobHandler = async ({ request }) => { switch (request.method) { - case "execute": + case 'execute': // Cron jobs can execute any method that is available to the Snap. return snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", - content: panel([ - heading("Cron job"), - text("This dialog was triggered by a cron job."), - ]), + type: 'alert', + content: panel([heading('Cron job'), text('This dialog was triggered by a cron job.')]), }, }) default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -106,18 +103,18 @@ export const onCronjob: OnCronjobHandler = async ({ request }) => {
:::tip Access data from cron jobs -When accessing [encrypted data](data-storage.md#2-use-encrypted-storage) from cron jobs, MetaMask +When accessing [encrypted data](data-storage.md#use-encrypted-storage) from cron jobs, MetaMask requires the user to enter their password if the wallet is locked. This interaction can be confusing to the user, since the Snap accesses the data in the background without the user being aware. -If the cron job requires access to encrypted state, use -[`snap_getClientStatus`](../reference/snaps-api.md#snap_getclientstatus) to ensure that MetaMask is +If the cron job requires access to encrypted data, use +[`snap_getClientStatus`](../reference/snaps-api/snap_getclientstatus.mdx) to ensure that MetaMask is unlocked before accessing state. This will prevent an unexpected password request, improving the user's experience. If the cron job does not require access to sensitive data, store that data in -[unencrypted state](data-storage.md#3-use-unencrypted-storage). +[unencrypted state](data-storage.md#use-unencrypted-storage). ::: ## Example diff --git a/snaps/features/custom-evm-accounts/create-account-snap.md b/snaps/features/custom-evm-accounts/create-account-snap.md index b3ac6efa2cc..772f0579b74 100644 --- a/snaps/features/custom-evm-accounts/create-account-snap.md +++ b/snaps/features/custom-evm-accounts/create-account-snap.md @@ -1,8 +1,6 @@ --- description: Get started by creating an account management Snap. sidebar_position: 1 -tags: - - Keyring API --- import Tabs from "@theme/Tabs"; @@ -155,10 +153,7 @@ Create an [`onKeyringRequest`](../../reference/entry-points.md#onkeyringrequest) method to expose the Account Management API methods to MetaMask and your dapp: ```typescript -export const onKeyringRequest: OnKeyringRequestHandler = async ({ - origin, - request, -}) => { +export const onKeyringRequest: OnKeyringRequestHandler = async ({ origin, request }) => { // Add custom logic here. return handleKeyringRequest(keyring, request) } diff --git a/snaps/features/custom-evm-accounts/create-companion-dapp.md b/snaps/features/custom-evm-accounts/create-companion-dapp.md index 05cd3de7938..170d64e9543 100644 --- a/snaps/features/custom-evm-accounts/create-companion-dapp.md +++ b/snaps/features/custom-evm-accounts/create-companion-dapp.md @@ -2,8 +2,6 @@ description: Call Keyring API methods from your companion dapp. sidebar_position: 2 sidebar_label: Create a companion dapp -tags: - - Keyring API --- # Create an account management companion dapp @@ -45,8 +43,8 @@ npm install @metamask/keyring-api Create a `KeyringSnapRpcClient`: ```ts -import { KeyringSnapRpcClient } from "@metamask/keyring-api" -import { defaultSnapOrigin as snapId } from "../config" +import { KeyringSnapRpcClient } from '@metamask/keyring-api' +import { defaultSnapOrigin as snapId } from '../config' let client = new KeyringSnapRpcClient(snapId, window.ethereum) ``` @@ -56,7 +54,7 @@ let client = new KeyringSnapRpcClient(snapId, window.ethereum) You can now use the `KeyringSnapRpcClient` to invoke [Account Management API](../../reference/keyring-api/account-management/index.md) methods on your Snap. -For example, to call [`keyring_listAccounts`](../../reference/keyring-api/account-management/index.md#keyringlist_accounts): +For example, to call [`keyring_listAccounts`](../../reference/keyring-api/account-management/index.md#keyring_listaccounts): ```typescript const accounts = await client.listAccounts() diff --git a/snaps/features/custom-evm-accounts/index.md b/snaps/features/custom-evm-accounts/index.md index ff9d00e76e3..21a1a8bf5cb 100644 --- a/snaps/features/custom-evm-accounts/index.md +++ b/snaps/features/custom-evm-accounts/index.md @@ -1,19 +1,21 @@ --- description: Connect to custom EVM accounts using the Keyring API. sidebar_position: 2 -tags: - - Keyring API --- # Custom EVM accounts +:::caution +MetaMask is not currently accepting allowlisting requests for Custom EVM Account Snaps. +::: + The Keyring API integrates custom EVM accounts inside MetaMask. You can use the Keyring API to display custom accounts, such as multi-party computation (MPC) accounts and [ERC-4337 accounts](#account-abstraction-erc-4337), alongside regular MetaMask accounts in the user interface:

-Account management Snap accounts in Metamask UI +Account management Snap accounts in MetaMask UI

To use the Keyring API, you first [implement the API in an account management Snap](create-account-snap.md) @@ -142,9 +144,9 @@ Site -->>- User: Done The companion dapp presents a user interface allowing the user to configure their custom account. The dapp creates an account using [`keyring_createAccount`](../../reference/keyring-api/account-management/index.md#keyring_createaccount). -The Snap keeps track of the accounts that it creates using [`snap_manageState`](../../reference/snaps-api.md#snap_managestate). +The Snap keeps track of the accounts that it creates using [`snap_manageState`](../../reference/snaps-api/snap_managestate.mdx). Once the Snap has created an account, it notifies MetaMask using -[`snap_manageAccounts`](../../reference/snaps-api.md#snap_manageaccounts). +[`snap_manageAccounts`](../../reference/snaps-api/snap_manageaccounts.mdx). Once the Snap has created an account, that account can be used to sign messages and transactions. @@ -262,7 +264,7 @@ After approval, MetaMask calls [`keyring_submitRequest`](../../reference/keyring-api/account-management/index.md#keyring_submitrequest). Since the Snap doesn't answer the request directly, it stores the pending request in its internal -state using [`snap_manageState`](../../reference/snaps-api.md#snap_managestate). +state using [`snap_manageState`](../../reference/snaps-api/snap_managestate.mdx). The Snap sends a `{ pending: true, redirect? }` response to indicate that the request will be handled asynchronously. This response can optionally contain a redirect URL that MetaMask will open in a new tab to allow @@ -272,7 +274,7 @@ The companion dapp gets the Snap's pending request using [`keyring_getRequest`](../../reference/keyring-api/account-management/index.md#keyring_getrequest). It resolves the request using [`keyring_approveRequest`](../../reference/keyring-api/account-management/index.md#keyring_approverequest), -and the Snap resolves the request using [`snap_manageAccounts`](../../reference/snaps-api.md#snap_manageaccounts), +and the Snap resolves the request using [`snap_manageAccounts`](../../reference/snaps-api/snap_manageaccounts.mdx), notifying MetaMask of the result. ## EOA methods @@ -283,7 +285,6 @@ externally owned accounts (EOAs): - [`personal_sign`](../../reference/keyring-api/chain-methods.md#personal_sign) - [`eth_signTypedData_v4`](../../reference/keyring-api/chain-methods.md#eth_signtypeddata_v4) - [`eth_signTransaction`](../../reference/keyring-api/chain-methods.md#eth_signtransaction) -- [Deprecated signing methods](/wallet/concepts/signing-methods/#deprecated-signing-methods) ## Account abstraction (ERC-4337) diff --git a/snaps/features/custom-evm-accounts/security.md b/snaps/features/custom-evm-accounts/security.md index 27cdb91479f..95598c96e24 100644 --- a/snaps/features/custom-evm-accounts/security.md +++ b/snaps/features/custom-evm-accounts/security.md @@ -2,8 +2,6 @@ description: Follow these security guidelines when creating an account management Snap. sidebar_label: Security guidelines sidebar_position: 3 -tags: - - Keyring API --- # Account management Snap security guidelines @@ -31,7 +29,7 @@ For example: const account: KeyringAccount = { id: uuid(), options: { - privateKey: "0x01234...78", // !!! DO NOT DO THIS !!! + privateKey: '0x01234...78', // !!! DO NOT DO THIS !!! }, address, methods: [ @@ -52,12 +50,12 @@ For example: ```ts await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "update", + operation: 'update', newState: { // Your Snap's state here. - privateKey: "0x01234...78", + privateKey: '0x01234...78', }, }, }) @@ -102,15 +100,15 @@ The following is an example of implementing such logic: ```ts const permissions: Record = { - "https://": [ + 'https://': [ // List of allowed methods for Dapp 1. ], - "https://": [ + 'https://': [ // List of allowed methods for Dapp 2. ], } -if (origin !== "metamask" && !permissions[origin]?.includes(request.method)) { +if (origin !== 'metamask' && !permissions[origin]?.includes(request.method)) { // Reject the request. } ``` @@ -174,7 +172,7 @@ For example: const privateKey = toBuffer(inputSecretValue) // Use privateKey here. } catch (error) { - throw new Error("Invalid private key") + throw new Error('Invalid private key') } ``` diff --git a/snaps/features/custom-name-resolution.md b/snaps/features/custom-name-resolution.md index 2b012b53c6e..00a622c90eb 100644 --- a/snaps/features/custom-name-resolution.md +++ b/snaps/features/custom-name-resolution.md @@ -41,33 +41,30 @@ At least one of these properties must be specified if `matchers` is specified. Expose an [`onNameLookup`](../reference/entry-points.md#onnamelookup) entry point, which receives a `chainId` and either a `domain` or an `address`. -The following example implements a very basic resolution from Unstoppable Domains domain names to +The following example implements a basic resolution from Unstoppable Domains domain names to Ethereum addresses in `onNameLookup`: ```typescript title="index.ts" -import type { OnNameLookupHandler } from "@metamask/snaps-types" +import type { OnNameLookupHandler } from '@metamask/snaps-sdk' -const UNSTOPPABLE_API_KEY = "xxx" +const UNSTOPPABLE_API_KEY = 'xxx' -export const onNameLookup: OnNameLookupHandler = async (request) => { +export const onNameLookup: OnNameLookupHandler = async request => { const { chainId, domain } = request - if (domain && chainId === "eip155:1") { - const response = await fetch( - `https://api.unstoppabledomains.com/resolve/domains/${domain}`, - { - headers: { - accept: "application/json", - authorization: `Bearer ${UNSTOPPABLE_API_KEY}`, - }, - } - ) + if (domain && chainId === 'eip155:1') { + const response = await fetch(`https://api.unstoppabledomains.com/resolve/domains/${domain}`, { + headers: { + accept: 'application/json', + authorization: `Bearer ${UNSTOPPABLE_API_KEY}`, + }, + }) const data = await response.json() - const resolvedAddress = data.records["crypto.ETH.address"] - if (address) { + const resolvedAddress = data.records['crypto.ETH.address'] + if (resolvedAddress) { return { resolvedAddresses: [ - { resolvedAddress, protocol: "Unstoppable Domains", domainName: domain }, + { resolvedAddress, protocol: 'Unstoppable Domains', domainName: domain }, ], } } @@ -78,9 +75,10 @@ export const onNameLookup: OnNameLookupHandler = async (request) => { ``` :::note -The response from the `onNameLookup` handler includes a `domainName` property. This can -be used to do fuzzy matching on domain names, by returning the domain that was resolved rather than -the one that was passed in. + +The `onNameLookup` handler response includes a `domainName` property. +You can use this property to perform fuzzy matching on domain names, by having the handler return the resolved domain rather than the one provided in the request. + ::: ## Example diff --git a/snaps/features/custom-ui/dialogs.md b/snaps/features/custom-ui/dialogs.md index 0cd167e7290..5014f90bd44 100644 --- a/snaps/features/custom-ui/dialogs.md +++ b/snaps/features/custom-ui/dialogs.md @@ -6,21 +6,25 @@ sidebar_position: 2 # Dialogs You can display a dialog in the MetaMask UI using the -[`snap_dialog`](../../reference/snaps-api.md#snap_dialog) API method. +[`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) API method. Dialogs can contain [custom UI](index.md) and [interactive UI](interactive-ui.md) components. -There are three types of dialogs: [alerts](#display-an-alert-dialog), -[confirmations](#display-a-confirmation-dialog), and [prompts](#display-a-prompt-dialog). +The four types of dialogs include [alerts](#display-an-alert-dialog), +[confirmations](#display-a-confirmation-dialog), [prompts](#display-a-prompt-dialog), and +[custom dialogs](#display-a-custom-dialog). + +:::warning + +- Dialogs do not work when MetaMask is locked. + To check if MetaMask is locked, use + [`snap_getClientStatus`](../../reference/snaps-api/snap_getclientstatus.mdx). +- [`metamask:` URLs](index.md#about-metamask-urls) are not supported in dialogs. -:::caution -Dialogs do not work when MetaMask is locked. -To check if MetaMask is locked, use -[`snap_getClientStatus`](../../reference/snaps-api.md#snap_getclientstatus). ::: ## Request permission to display dialogs -To display dialogs, first request the [`snap_dialog`](../../reference/snaps-api.md#snap_dialog) permission. +To display dialogs, first request the [`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) permission. Add the following to your Snap's manifest file: ```json title="snap.manifest.json" @@ -32,16 +36,16 @@ Add the following to your Snap's manifest file: ## Display an alert dialog To display an alert that can only be acknowledged, call -[`snap_dialog`](../../reference/snaps-api.md#snap_dialog) with `type: "alert"`. +[`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) with `type: "alert"`. The following example displays custom UI that alerts the user when something happens in the system: ```tsx title="index.tsx" -import { Box, Text, Heading } from "@metamask/snaps-sdk/jsx"; +import { Box, Text, Heading } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Something happened in the system @@ -49,29 +53,29 @@ await snap.request({ ), }, -}); +}) // Code that should execute after the alert has been acknowledged. ```

-Alert dialog example +Alert dialog example

## Display a confirmation dialog To display a confirmation that can be accepted or rejected, call -[`snap_dialog`](../../reference/snaps-api.md#snap_dialog) with `type: "confirmation"`. +[`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) with `type: "confirmation"`. The following example displays custom UI that asks the user to confirm whether they would like to take an action: ```tsx title="index.tsx" -import { Box, Text, Heading } from "@metamask/snaps-sdk/jsx"; +import { Box, Text, Heading } from '@metamask/snaps-sdk/jsx' const result = await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "confirmation", + type: 'confirmation', content: ( Would you like to take the action? @@ -79,7 +83,7 @@ const result = await snap.request({ ), }, -}); +}) if (result === true) { // Do the action. @@ -87,39 +91,129 @@ if (result === true) { ```

-Confirmation dialog example +Confirmation dialog example

## Display a prompt dialog To display a prompt where the user can enter a text response, call -[`snap_dialog`](../../reference/snaps-api.md#snap_dialog) with `type: "prompt"`. +[`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) with `type: "prompt"`. Prompt dialogs also accept a `placeholder` value that displays in the input field when no text is entered. The following example displays custom UI that prompts the user to enter a wallet address: ```tsx title="index.tsx" -import { Box, Text, Heading } from "@metamask/snaps-sdk/jsx"; +import { Box, Text, Heading } from '@metamask/snaps-sdk/jsx' const walletAddress = await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "prompt", + type: 'prompt', content: ( What is the wallet address? Please enter the wallet address to be monitored ), - placeholder: "0x123...", + placeholder: '0x123...', }, -}); +}) // walletAddress will be a string containing the address entered by the user. ```

-Prompt dialog example +Prompt dialog example +

+ +## Display a custom dialog + +To display a custom dialog, call [`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx) +without providing a `type`. Custom dialogs can be resolved by calling [`snap_resolveInterface`](../../reference/snaps-api/snap_resolveinterface.mdx). The UI passed to a custom dialog should contain a `Footer` element. Its buttons will be displayed at the bottom of the dialog. Here is a complete example: + +```tsx title="index.tsx" +import { + UserInputEventType, + type OnRpcRequestHandler, + type OnUserInputHandler, +} from '@metamask/snaps-sdk' +import { Box, Text, Heading, Container, Footer, Button } from '@metamask/snaps-sdk/jsx' + +/** + * Handle incoming JSON-RPC requests, sent through wallet_invokeSnap. + * + * @param args - The request handler args as object. + * @param args.origin - The origin of the request, e.g., the website that + * invoked the snap. + * @param args.request - A validated JSON-RPC request object. + * @returns The result of snap_dialog. + * @throws If the request method is not valid for this snap. + */ +export const onRpcRequest: OnRpcRequestHandler = async () => { + const result = await snap.request({ + method: 'snap_dialog', + params: { + content: ( + + + Custom Dialog + + This is a custom dialog reproducing a confirmation dialog. +
+ Do you accept? +
+
+
+ + +
+
+ ), + }, + }) + + console.log('result', result) // Result will be true or false. + + return result +} + +export const onUserInput: OnUserInputHandler = async ({ id, event }) => { + if (event.type === UserInputEventType.ButtonClickEvent) { + switch (event.name) { + case 'no': // User selected "No" in the footer. + await snap.request({ + method: 'snap_resolveInterface', + params: { + id, + value: false, + }, + }) + break + + case 'yes': { + // User selected "Yes" in the footer + await snap.request({ + method: 'snap_resolveInterface', + params: { + id, + value: true, + }, + }) + break + } + + default: + break + } + } +} +``` + +This code outputs a custom dialog with two buttons: **Yes** and **No**. +When the user selects one of the buttons, `onUserInput` is called with the button's name. From there, `snap_resolveInterface` is called. This resolves the dialog, and returns the value passed to `snap_resolveInterface` as the result of the dialog. + +

+Custom dialog example

## Example diff --git a/snaps/features/custom-ui/home-pages.md b/snaps/features/custom-ui/home-pages.md index fe6555b7f82..ff8d592b118 100644 --- a/snaps/features/custom-ui/home-pages.md +++ b/snaps/features/custom-ui/home-pages.md @@ -33,8 +33,8 @@ MetaMask calls this method when a user selects your Snap name in the Snaps menu. The following example displays custom UI that welcomes the user to the Snap's home page: ```tsx title="index.tsx" -import type { OnHomePageHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnHomePageHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onHomePage: OnHomePageHandler = async () => { return { @@ -44,12 +44,12 @@ export const onHomePage: OnHomePageHandler = async () => { Welcome to my Snap home page! ), - }; -}; + } +} ```

-Home page example +Home page example

## Example diff --git a/snaps/features/custom-ui/index.md b/snaps/features/custom-ui/index.md index 02d544ef6f4..cafe3a93af4 100644 --- a/snaps/features/custom-ui/index.md +++ b/snaps/features/custom-ui/index.md @@ -3,6 +3,9 @@ description: Display custom user interface components using JSX. sidebar_position: 4 --- +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + # Custom UI You can display custom user interface (UI) JSX components using the @@ -13,9 +16,12 @@ implementing the following features: - [Home pages](home-pages.md) - [Transaction insights](../transaction-insights.md) - [Signature insights](../signature-insights.md) +- [Notifications (expanded view)](../notifications.md#expanded-view) :::note -JSX is supported in the MetaMask extension and Flask version 12 and later. New UI components will be added as JSX components. The previous function-based library is deprecated. +JSX is supported in the MetaMask extension and Flask version 12 and later. +New UI components will be added as JSX components. +The previous function-based library is deprecated. ::: To use custom UI, first install [`@metamask/snaps-sdk`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-sdk) @@ -27,15 +33,16 @@ yarn add @metamask/snaps-sdk Then, whenever you're required to return a custom UI component, import the components from the SDK at `@metamask/snaps-sdk/jsx` and build your UI with them. -For example, to display a [`Box`](#box) using [`snap_dialog`](../../reference/snaps-api.md#snap_dialog): +For example, to display a [`Box`](#box) using +[`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx): ```javascript title="index.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Alert heading @@ -43,7 +50,7 @@ await snap.request({ ), }, -}); +}) ``` :::note @@ -56,19 +63,31 @@ The following custom UI components are available: ### `Address` -Outputs a formatted text field for an Ethereum address. -The address is automatically displayed with a jazzicon and truncated value. -Hovering the address shows the full value in a tooltip. +Outputs a formatted text field for a blockchain address. +The address is automatically displayed with a [Jazzicon](https://www.npmjs.com/package/@metamask/jazzicon) +and truncated value. + +#### Props + +- `address`: `string` - A valid Ethereum address, starting with `0x`, or a valid + [CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) address. +- `truncate`: `boolean` - (Optional) Whether to truncate the address. The default is `true`. +- `displayName`: `boolean` - (Optional) Whether to display the internally saved account label in place of the address. + The default is `true`. +- `avatar`: `boolean` - (Optional) Whether to show the address Jazzicon. The default is `true`. #### Example + + + ```javascript title="index.jsx" -import { Box, Heading, Address } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Address } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Are you sure you want to send tokens to this address? @@ -76,18 +95,117 @@ await snap.request({ ), }, -}); +}) ``` -
-
- Address UI example +
+
+ Address UI example
-
- Address tooltip UI example +
+ Address tooltip UI example
+ + + +```javascript title="index.jsx" +import { Box, Heading, Address } from '@metamask/snaps-sdk/jsx' + +await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: ( + + The following is an Ethereum address +
+ The following is a Bitcoin address +
+ + ), + }, +}) +``` + + + + +### `Avatar` + +Outputs a [Jazzicon](https://www.npmjs.com/package/@metamask/jazzicon) for an address. + +#### Props + +- `address`: `string` - A valid [CAIP-10](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) address. +- `size`: `string` - (Optional) The size of the avatar. Possible values are `"sm"`, `"md"`, and `"lg"`. The default is `"md"`. + +:::note +MetaMask automatically calculates checksums for EVM addresses (`eip155:`). +Addresses for other namespaces are not validated; you should validate them in your Snap. +::: + +#### Example + +```js +export const onHomePage: OnHomePageHandler = async () => { + return { + content: ( + + + + + ), + }; +}; +``` + +### `Banner` + +Outputs a banner that can be used to display important messages with different severity levels. + +#### Props + +- `title`: `string` - The title of the banner. +- `severity` - The severity level of the banner. + Possible values are `"danger"`, `"info"`, `"success"`, and `"warning"`. +- `children` - The content to display in the banner. + This can include [`Text`](#text), [`Link`](#link) [`Icon`](#icon), [`Button`](#button), and [`Skeleton`](#skeleton) components. + +#### Example + +```javascript title="index.jsx" +import { Box, Banner, Text, Link } from '@metamask/snaps-sdk/jsx' + +await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: ( + + + A new version is available! + Learn more + + + + Please review transaction details carefully. + + + + Transaction completed successfully. + + + + Unable to process transaction. + + + ), + }, +}) +``` + ### `Bold` Outputs bold text. @@ -95,12 +213,12 @@ Outputs bold text. #### Example ```javascript title="index.jsx" -import { Box, Heading, Text, Bold } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text, Bold } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Hello world! @@ -110,7 +228,7 @@ await snap.request({ ), }, -}); +}) ``` ### `Box` @@ -121,37 +239,36 @@ Outputs a box, which can be used as a container for other components. - `direction` - (Optional) The direction in which elements flow inside the box. Possible values are `"horizontal"` and `"vertical"`. - The default is `"vertical"`. + The default is `"vertical"`. - `alignment` - (Optional) The alignment of the elements inside the box. Possible values are `"start"`, `"center"`, `"end"`, `"space-between"`, and `"space-around"`. The default is `"start"`. +- `center`: `boolean` - (Optional) Whether to center the children within the box. + The default is `false`. #### Example ```javascript title="index.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' module.exports.onHomePage = async () => { return { content: ( Features - + Feature 1 Feature 2 Feature 3 ), - }; -}; + } +} ```

-Box UI example +Box UI example

### `Button` @@ -166,8 +283,8 @@ For use in [interactive UI](interactive-ui.md). - `type` - (Optional) The type of button. Possible values are `"button"` and `"submit"`. The default is `"button"`. -- `name`: `string` - (Optional) The name that will be sent to [`onUserInput`](../../reference/entry-points.md#onuserinput) - when a user selects the button. +- `name`: `string` - (Optional) The name that will be sent to + [`onUserInput`](../../reference/entry-points.md#onuserinput) when a user selects the button. - `variant` - (Optional) Determines the appearance of the button. Possible values are `"primary"` and `"destructive"`. The default is `"primary"`. @@ -175,10 +292,10 @@ For use in [interactive UI](interactive-ui.md). #### Example ```javascript -import { Box, Heading, Button } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Button } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( @@ -187,20 +304,81 @@ const interfaceId = await snap.request({ ), }, -}); +}) await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "Alert", + type: 'Alert', id: interfaceId, }, -}); +}) +``` + +

+Button UI example +

+ +### `Card` + +Outputs a card component which is used to display values in a card structure. + +:::info +Unlike many `Card` components from other UI libraries, the Snaps `Card` does not have any shape. +It is only used for layout. To give a shape to a `Card`, wrap it in a [`Section`](#section) +component. +::: + +#### Props + +- `title`: `Array` - The title of the card, can be a string or an + [`Address`](#address). +- `value`: `string` - The value, shown on the right side. +- `image`: `string` - (Optional) An image shown on the left side. Accepts inline SVG. +- `description`: `string` - (Optional) A description, shown below the title. +- `extra`: `string` - (Optional) Additional text shown below the value. +#### Example + +```js +import icon from "./../img/icon.svg" + +export const onHomePage: OnHomePageHandler = async () => { + return { + content: ( + + + +
+ + +
+
+ ), + }; +}; ```

-Button UI example +Card UI example

### `Checkbox` @@ -212,17 +390,16 @@ Outputs a checkbox for use in [interactive UI](interactive-ui.md). - `name`: `string` - The name sent to [`onUserInput`](../../reference/entry-points.md#onuserinput). - `checked`: `boolean` - (Optional) Whether the checkbox is checked. - `label`: `string` - (Optional) The label for the checkbox. -- `variant` - (Optional) The variant of the checkbox. - Possible values are `"default"` and `"toggle"`. +- `variant` - (Optional) The variant of the checkbox. Possible values are `"default"` and `"toggle"`. The default is `"default"`. #### Example ```js -import { Checkbox } from "@metamask/snaps-sdk/jsx"; +import { Checkbox } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( @@ -231,13 +408,65 @@ const interfaceId = await snap.request({ ), }, -}); +}) ```

-Checkbox UI example +Checkbox UI example

+### `Container` + +Outputs a container component that can hold a box of content and an optional footer. This is useful for creating structured layouts with action buttons at the bottom in [custom dialogs](dialogs.md#display-a-custom-dialog). + +#### Props + +- `backgroundColor` - (Optional) The background color of the container. + Possible values are `"default"` and `"alternative"`. + The default is `"default"`. +- `children`: The contents of the container. + This can be a single [`Box`](#box) component, or an array containing a [`Box`](#box) component and a [`Footer`](#footer) component. + +#### Example + +```javascript title="index.jsx" +import { Container, Box, Footer, Text, Button } from '@metamask/snaps-sdk/jsx' + +await snap.request({ + method: 'snap_dialog', + params: { + content: ( + + + Are you sure you want to proceed with this transaction? + Gas fees: 0.005 ETH + +
+ + +
+
+ ), + }, +}) + +// Example without footer +await snap.request({ + method: 'snap_dialog', + params: { + content: ( + + + Simple container without footer + + + ), + }, +}) +``` + ### `Copyable` Outputs a read-only text field with a copy-to-clipboard shortcut. @@ -245,17 +474,18 @@ Outputs a read-only text field with a copy-to-clipboard shortcut. #### Props - `value`: `string` - The value to copy when the user clicks on the copyable element. -- `sensitive`: `boolean` - (Optional) Indicates whether the value is sensitive. If `true`, the value will be hidden when the user is not interacting with the copyable element. +- `sensitive`: `boolean` - (Optional) Indicates whether the value is sensitive. If `true`, the + value will be hidden when the user is not interacting with the copyable element. #### Example ```javascript title="index.jsx" -import { Box, Text, Copyable } from "@metamask/snaps-sdk/jsx"; +import { Box, Text, Copyable } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Your address: @@ -263,11 +493,11 @@ await snap.request({ ), }, -}); +}) ```

-Copyable UI example +Copyable UI example

### `Divider` @@ -277,7 +507,7 @@ Outputs a horizontal divider. #### Example ```javascript title="index.jsx" -import { Box, Heading, Divider, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Divider, Text } from '@metamask/snaps-sdk/jsx' module.exports.onHomePage = async () => { return { @@ -288,12 +518,12 @@ module.exports.onHomePage = async () => { Welcome to my Snap home page!
), - }; -}; + } +} ```

-Divider UI example +Divider UI example

### `Dropdown` @@ -310,10 +540,10 @@ Outputs a dropdown for use in [interactive UI](interactive-ui.md). #### Example ```js -import { Box, Text, Dropdown } from "@metamask/snaps-sdk/jsx"; +import { Box, Text, Dropdown } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( @@ -325,23 +555,23 @@ const interfaceId = await snap.request({ ), }, -}); +}) await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "Alert", + type: 'Alert', id: interfaceId, }, -}); +}) ``` -
-
- Dropdown UI example +
+
+ Dropdown UI example
-
- Active dropdown UI example +
+ Active dropdown UI example
@@ -352,17 +582,19 @@ Outputs a form field, wrapping an element to give it a label and optional error. #### Props - `label`: `string` - The label for the wrapped element. -- `error`: `string` - (Optional) Any error for the wrapped element. Setting this changes the style of the wrapped element to show that there is an error. +- `error`: `string` - (Optional) Any error for the wrapped element. Setting this changes the style + of the wrapped element to show that there is an error. - `children` - The element to be wrapped. - This can be a [`Dropdown`](#dropdown), [`Input`](#input), [`Selector`](#selector), or [`RadioGroup`](#radiogroup) component. + This can be a [`Dropdown`](#dropdown), [`Input`](#input), [`Selector`](#selector), or + [`RadioGroup`](#radiogroup) component. #### Example ```js -import { Field, Form, Input, Button } from "@metamask/snaps-sdk/jsx"; +import { Field, Form, Input, Button } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: (
@@ -373,19 +605,19 @@ const interfaceId = await snap.request({
), }, -}); +}) await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "Alert", + type: 'Alert', id: interfaceId, }, -}); +}) ```

-Field example +Field example

### `FileInput` @@ -396,92 +628,148 @@ Outputs a file input component for use in [interactive UI](interactive-ui.md). - `name`: `string` - The name that will be sent to [`onUserInput`](../../reference/entry-points.md#onuserinput) when a user interacts with the form. -- `accept`: `string[]` - (Optional) The file types that the file input field accepts. If not -specified, the file input field accepts all file types. For examples of -valid values, see the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept). +- `accept`: `string[]` - (Optional) The file types that the file input field accepts. If not + specified, the file input field accepts all file types. For examples of + valid values, see the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept). - `compact`: `boolean` - (Optional) Whether the file input field is compact. #### Example ```js -import { FileInput } from "@metamask/snaps-sdk/jsx"; +import { FileInput } from '@metamask/snaps-sdk/jsx' export const onHomePage = async () => { const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( File Upload -
- - - - -
-
+
+ + + + +
+ ), }, - }); + }) return { id: interfaceId, } -}; +} export const onUserInput = async ({ id, event }) => { - if (event.type === UserInputEventType.FileUploadEvent && event.file !== null) { - console.log(event.file); + if (event.type === UserInputEventType.FileUploadEvent && event.file !== null) { + console.log(event.file) } -}; +} ```

-File input UI example +File input UI example

+### `Footer` + +Outputs a footer that can contain one or two buttons. This component is typically used within a [`Container`](#container) to create action buttons at the bottom of a dialog or panel. + +#### Props + +- `children` - The contents of the footer. + This can be one or two [`Button`](#button) components. + +#### Example + +```javascript title="index.jsx" +import { Container, Box, Footer, Text, Button } from '@metamask/snaps-sdk/jsx' + +// Example with two buttons +await snap.request({ + method: 'snap_dialog', + params: { + content: ( + + + Delete this item? + +
+ + +
+
+ ), + }, +}) + +// Example with single button +await snap.request({ + method: 'snap_dialog', + params: { + content: ( + + + Operation completed successfully. + +
+ +
+
+ ), + }, +}) +``` + ### `Form` Outputs a form for use in [interactive UI](interactive-ui.md). #### Props -- `name`: `string` - The name that will be sent to [`onUserInput`](../../reference/entry-points.md#onuserinput) - when a user interacts with the form. +- `name`: `string` - The name that will be sent to + [`onUserInput`](../../reference/entry-points.md#onuserinput) when a user interacts with the form. - `children`: `array` - An array of [`Input`](#input) or [`Button`](#button) components. #### Example ```js -import { Form, Input, Button } from "@metamask/snaps-sdk/jsx"; +import { Box, Section, Form, Input, Button } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( -
- - - - -
+ +
+
+ + + + +
+
+
), }, -}); +}) await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "Alert", + type: 'Alert', id: interfaceId, }, -}); +}) ```

-Form UI example +Form UI example

### `Heading` @@ -489,10 +777,15 @@ await snap.request({ Outputs a heading. This is useful for [`Box`](#box) titles. +#### Props + +- `size`: `string` - (Optional) The size of the heading. Possible values are `"sm"`, `"md"`, and + `"lg"`. The default is `"sm"`. + #### Example ```javascript title="index.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' module.exports.onHomePage = async () => { return { @@ -502,12 +795,12 @@ module.exports.onHomePage = async () => { Welcome to my Snap home page! ), - }; -}; + } +} ```

-Divider UI example +Divider UI example

### `Icon` @@ -529,12 +822,12 @@ Outputs an icon. #### Example ```javascript title="index.jsx" -import { Icon } from "@metamask/snaps-sdk/jsx"; +import { Icon } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( @@ -542,27 +835,28 @@ await snap.request({ ), }, -}); +}) ```

-Icon UI example +Icon UI example

### `Image` -Outputs an image. +Outputs an image. This component takes an inline SVG. It does not support remote URLs. You can import SVG, PNG, and JPEG files using an import statement. -These files are automatically imported as SVG strings, so you can pass them directly to the `Image` component. +These files are automatically imported as SVG strings, so you can pass them directly to the +`Image` component. The SVG is rendered within an `` tag, which prevents JavaScript or interaction events from being supported. :::note -To disable image support, set the [`features.images`](../../reference/cli/options.md#featuresimages) +To disable image support, set the [`features.images`](../../reference/config-options.md#featuresimages) configuration option to `false`. The default is `true`. ::: @@ -575,8 +869,8 @@ The default is `true`. #### Example ```javascript title="index.jsx" -import { Box, Heading, Text, Image } from "@metamask/snaps-sdk/jsx"; -import svgIcon from "./path/to/icon.svg"; +import { Box, Heading, Text, Image } from '@metamask/snaps-sdk/jsx' +import svgIcon from './path/to/icon.svg' module.exports.onHomePage = async () => { return { @@ -587,12 +881,12 @@ module.exports.onHomePage = async () => { ), - }; -}; + } +} ```

-Divider UI example +Divider UI example

:::note @@ -607,21 +901,28 @@ Outputs an input component for use in [interactive UI](interactive-ui.md). #### Props - `name`: `string` - The name that will be used as a key to the event sent to - [`onUserInput`](../../reference/entry-points.md#onuserinput) when the containing form is submitted. + [`onUserInput`](../../reference/entry-points.md#onuserinput) when the containing form is + submitted. - `type` - (Optional) The type of input. Possible values are `"text"`, `"number"`, and `"password"`. The default is `"text"`. - `placeholder`: `string` - (Optional) The text displayed when the input is empty. - `label`: `string` - (Optional) The text displayed alongside the input to label it. - `value`: `string` - (Optional) The default value of the input. +- `min`: `string` - (Optional) The minimum value of the input field. Only applicable to the input + type `"number"`. +- `max`: `string` - (Optional) The maximum value of the input field. Only applicable to the input + type `"number"`. +- `step`: `string` - (Optional) The step value of the input field. Only applicable to the input + type `"number"`. #### Example ```js -import { Form, Input, Button } from "@metamask/snaps-sdk/jsx"; +import { Form, Input, Button } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: (
@@ -632,19 +933,19 @@ const interfaceId = await snap.request({
), }, -}); +}) await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "Alert", + type: 'Alert', id: interfaceId, }, -}); +}) ```

-Form UI example +Form UI example

### `Italic` @@ -654,12 +955,12 @@ Outputs italic text. #### Example ```javascript title="index.jsx" -import { Box, Heading, Text, Italic } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text, Italic } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Hello world! @@ -669,7 +970,7 @@ await snap.request({ ), }, -}); +}) ``` ### `Link` @@ -678,13 +979,35 @@ Outputs a clickable link. #### Props -- `href`: `string` - The URL to point to. This must be an HTTPS URL. -- `children`: `Array` - The link text. +- `href`: `string` - The URL to point to. Supported schemes are `https:`, `mailto:`, and + `metamask:`. `http:` is not allowed. +- `children`: `Array` - The link text, or an + [`Address`](#address). + +#### About `metamask:` URLs + +A Snap can link to the following screens using the `metamask:` scheme: + +- `metamask://client/` - Leads to the main screen of MetaMask. +- `metamask://snap/[Snap ID]/home/` - Leads to the Snap's + [home page](../custom-ui/home-pages.md), or the Snap's settings page if it does not have a home + page. Valid Snap IDs are npm IDs beginning with `npm:`, such as + `metamask://snap/npm:@consensys/starknet-snap/home`, or `local:`, such as + `metamask://snap/local:http://localhost:8080/home`. Consider using + [environment variables](../../how-to/use-environment-variables.md) so you can have different + Snap IDs for local testing and production. + +:::warning + +- MetaMask will throw an error if the URL is not valid or if the URL leads to a Snap that is not + installed. +- `metamask:` URLs are not supported in [dialogs](dialogs.md). + ::: #### Example ```javascript title="index.jsx" -import { Box, Heading, Link, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Link, Text } from '@metamask/snaps-sdk/jsx' module.exports.onHomePage = async () => { return { @@ -699,12 +1022,12 @@ module.exports.onHomePage = async () => { ), - }; -}; + } +} ```

-Links UI example +Links UI example

### `RadioGroup` @@ -720,10 +1043,10 @@ Outputs a radio group component for use in [interactive UI](interactive-ui.md). #### Example ```js -import { RadioGroup, Radio } from "@metamask/snaps-sdk/jsx"; +import { RadioGroup, Radio } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: (
@@ -736,11 +1059,11 @@ const interfaceId = await snap.request({
), }, -}); +}) ```

-RadioGroup UI example +RadioGroup UI example

### `Row` @@ -753,18 +1076,18 @@ Outputs a row with a label and value, which can be used for key-value data. - `variant` - (Optional) The variant of the label. Possible values are `"default"`, `"error"`, and `"warning"`. The default is `"default"`. -- `children` - The value of the row, which can be a [`Text`](#text), [`Image`](#image), or - [`Address`](#address) component. +- `children` - The value of the row, which can be a [`Text`](#text), [`Image`](#image), + [`Address`](#address), [`Link`](#link), or [`Value`](#value) component. #### Example ```javascript title="index.jsx" -import { Box, Row, Text, Address } from "@metamask/snaps-sdk/jsx"; +import { Box, Row, Text, Address } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( @@ -776,11 +1099,45 @@ await snap.request({ ), }, -}); +}) +``` + +

+Row UI example +

+ +### `Section` + +Outputs a styled container for use in [dialogs](dialogs.md) and [home pages](home-pages.md). + +#### Props + +- `direction` - (Optional) The direction in which elements flow inside the box. + Possible values are `"horizontal"` and `"vertical"`. + The default is `"vertical"`. +- `alignment` - (Optional) The alignment of the elements inside the box. + Possible values are `"start"`, `"center"`, `"end"`, `"space-between"`, and `"space-around"`. + The default is `"start"`. + +#### Example + +```js +export const onHomePage: OnHomePageHandler = async () => { + return { + content: ( + +
+ Hello world! + This text appears in a container with rounded corners. +
+
+ ), + }; +}; ```

-Row UI example +Section UI example

### `Selector` @@ -789,7 +1146,7 @@ Outputs a selector component for use in [interactive UI](interactive-ui.md). #### Props -- `name`: `string` - The name that will be used as a key to the event sent to +- `name`: `string` - The name that will be used as a key to the event sent to [`onUserInput`](../../reference/entry-points.md#onuserinput) when the containing form is submitted. - `title`: `string` - The title of the selector, displayed when the selector is opened. - `children`: `SelectorOption[]` - One or more `SelectorOption` components, each with a `Card` child. @@ -797,10 +1154,10 @@ Outputs a selector component for use in [interactive UI](interactive-ui.md). #### Example ```js -import { Selector, SelectorOption, Card } from "@metamask/snaps-sdk/jsx"; +import { Selector, SelectorOption, Card } from '@metamask/snaps-sdk/jsx' const interfaceId = await snap.request({ - method: "snap_createInterface", + method: 'snap_createInterface', params: { ui: ( @@ -813,26 +1170,56 @@ const interfaceId = await snap.request({ ), }, -}); +}) ```

Selector UI example

+### `Skeleton` + +Outputs an animated loading container. + +#### Props + +- `width`: `Array` - (Optional) The width of the skeleton. The default is `"100%"`. +- `height`: `Array` - (Optional) The height of the skeleton. The default is `22`. +- `borderRadius`: `string` - (Optional) The radius of the corners. Possible values are `"none"`, `"medium"` or `"full"`. + The default is `"medium"`. + +#### Example + +```javascript title="index.jsx" +import { Box, Heading, Skeleton } from '@metamask/snaps-sdk/jsx' + +await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: ( + + Please wait... + + + ), + }, +}) +``` + ### `Spinner` -Outputs a loading indicator. +Outputs an animated loading indicator. #### Example ```javascript title="index.jsx" -import { Box, Heading, Spinner } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Spinner } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Please wait... @@ -840,11 +1227,11 @@ await snap.request({ ), }, -}); +}) ```

-Spinner UI example +Spinner UI example

### `Text` @@ -854,17 +1241,24 @@ Outputs text. #### Props - `color` - (Optional) The color of the text. - Possible values are `"default"`, "`alternative`", `"muted"`, `"error"`, `"success"`, and `"warning"`. + Possible values are `"default"`, `"alternative"`, `"muted"`, `"error"`, `"success"`, and `"warning"`. The default is `"default"`. - `alignment` - (Optional) The alignment of the text. Possible values are `"start"`, `"center"`, and `"end"`. The default is `"start"`. - +- `children` - The content to display. + This can include strings, and [`Bold`](#bold), [`Italic`](#italic), [`Icon`](#icon), [`Link`](#link), and [`Skeleton`](#skeleton) components. +- `size` - (Optional) The size of the text. + Possible values are `"sm"` and `"md"`. + The default is `"md"`. +- `fontWeight` - (Optional) The font weight of the text. + Possible values are `"regular"`, `"medium"`, and `"bold"`. + The default is `"regular"`. #### Example ```javascript title="index.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' module.exports.onHomePage = async () => { return { @@ -874,12 +1268,12 @@ module.exports.onHomePage = async () => { Welcome to my Snap home page! ), - }; -}; + } +} ```

-Text UI example +Text UI example

### `Tooltip` @@ -894,12 +1288,12 @@ Outputs a tooltip when the wrapped element is hovered over. #### Example ```javascript title="index.jsx" -import { Tooltip, Text } from "@metamask/snaps-sdk/jsx"; +import { Tooltip, Text } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Tooltip text - } - > + }> Hello world! ), }, -}); +}) ```

-Tooltip UI example +Tooltip UI example

+### `Value` + +Outputs a component that displays two text values side by side. This component can only be used as a child of the [`Row`](#row) component. + +#### Props + +- `value` - The value shown on the right side. + This can be a string or a [`Text`](#text) component. +- `extra` - The extra text shown on the left side. + This can be a string or a [`Text`](#text) component. + +#### Example + +```javascript title="index.jsx" +import { Box, Row, Text, Value } from '@metamask/snaps-sdk/jsx' + +await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: ( + + + + + + {/* Example with styled text */} + + 0.003 ETH} + extra={$12} + /> + + + {/* Example with different text colors */} + + 1.25 ETH} + extra={$2,500} + /> + + + ), + }, +}) +``` + ## Emojis Text-based components (such as [`Heading`](#heading) and [`Text`](#text)) accept emojis. @@ -928,12 +1368,12 @@ Text-based components (such as [`Heading`](#heading) and [`Text`](#text)) accept #### Example ```javascript title="index.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Hello world! @@ -941,11 +1381,11 @@ await snap.request({ ), }, -}); +}) ```

-Emojis UI example +Emojis UI example

## User-defined components @@ -957,46 +1397,44 @@ In addition to the components provided by the SDK, you can [define your own comp If you have a Snap that uses the deprecated function-based custom UI library, follow these steps to upgrade it to use JSX: -1. Upgrade dependencies in `packages/snap/package.json`: +1. Update dependencies in `packages/snap/package.json`: + - Upgrade `@metamask/snaps-sdk` to `^6.1.1` or later. + - Upgrade `@metamask/snaps-cli` to `^6.2.1` or later. + - Upgrade `@metamask/snaps-jest` to `^8.2.0` or later. + - Add `@types/react` with version `18.2.4` (without caret range) under `devDependencies`. + - Add `@types/react-dom` with version `18.2.4` (without caret range) under `devDependencies`. - - Upgrade `@metamask/snaps-sdk` to `^6.1.1` or later. - - Upgrade `@metamask/snaps-cli` to `^6.2.1` or later. - - Upgrade `@metamask/snaps-jest` to `^8.2.0` or later. - Run `yarn install` to install the new versions. 2. Update `packages/snap/.eslintrc.js`: - - - Add a new section in `overrides` with the following configuration: - ```json - { - "files": ["**/*.ts", "**/*.tsx"], - "extends": ["@metamask/eslint-config-typescript"], - "rules": { - // This allows importing the `Text` JSX component. - "@typescript-eslint/no-shadow": [ - "error", - { - "allow": ["Text"], - }, - ], - }, - } - ``` - - Replace `["*.test.ts"]` with `["*.test.ts", "*.test.tsx"]`. + - Add a new section in `overrides` with the following configuration: + ```json + { + "files": ["**/*.ts", "**/*.tsx"], + "extends": ["@metamask/eslint-config-typescript"], + "rules": { + // This allows importing the `Text` JSX component. + "@typescript-eslint/no-shadow": [ + "error", + { + "allow": ["Text"] + } + ] + } + } + ``` + - Replace `["*.test.ts"]` with `["*.test.ts", "*.test.tsx"]`. 3. Update `packages/snap/src/index.ts`, if it will have JSX: - - - Rename the file to `index.tsx`. - - Modify the `input` field in `packages/snap/snap.config.ts` to `src/index.tsx`. + - Rename the file to `index.tsx`. + - Modify the `input` field in `packages/snap/snap.config.ts` to `src/index.tsx`. 4. Update `packages/snap/tsconfig.json`: - - - Under `compilerOptions`, add: - ```json - "jsx": "react-jsx", - "jsxImportSource": "@metamask/snaps-sdk" - ``` - - Change the `include` property from `["**/*.ts"]` to `["**/*.ts", "**/*.tsx"]`. + - Under `compilerOptions`, add: + ```json + "jsx": "react-jsx", + "jsxImportSource": "@metamask/snaps-sdk" + ``` + - Change the `include` property from `["**/*.ts"]` to `["**/*.ts", "**/*.tsx"]`. 5. Replace all custom UI in your code with JSX components, renaming the target files with the `.tsx` extension. diff --git a/snaps/features/custom-ui/interactive-ui.md b/snaps/features/custom-ui/interactive-ui.md index 6f0613cdacc..aedc8c0099c 100644 --- a/snaps/features/custom-ui/interactive-ui.md +++ b/snaps/features/custom-ui/interactive-ui.md @@ -21,27 +21,27 @@ The following interactive UI components are available: ## Create an interactive interface Create an interactive interface using the -[`snap_createInterface`](../../reference/snaps-api.md#snap_createinterface) method. +[`snap_createInterface`](../../reference/snaps-api/snap_createinterface.mdx) method. This method returns the ID of the created interface. -You can pass this ID to [`snap_dialog`](../../reference/snaps-api.md#snap_dialog), returned from +You can pass this ID to [`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx), returned from [`onTransaction`](../../reference/entry-points.md#ontransaction), or from [`onHomePage`](../../reference/entry-points.md#onhomepage). If you need to [update the interface](#update-an-interactive-interface) or -[get its state](#get-an-interactive-interfaces-state) at a future time, you should store its ID in +[get its state](#get-an-interactive-interfaces-state-and-context) at a future time, you should store its ID in the Snap's storage. ### Add context to an interface You can optionally add context to an interface by passing a `context` object to the -[`snap_createInterface`](../../reference/snaps-api.md#snap_createinterface) method. +[`snap_createInterface`](../../reference/snaps-api/snap_createinterface.mdx) method. This object can contain any data you want to pass to the interface. This context will be passed to [`onUserInput`](../../reference/entry-points.md#onuserinput) when the user interacts with the interface. ## Update an interactive interface To update an interactive interface that is still active, use the -[`snap_updateInterface`](../../reference/snaps-api.md#snap_updateinterface) method. +[`snap_updateInterface`](../../reference/snaps-api/snap_updateinterface.mdx) method. Pass the ID of the interface to be updated, and the new UI. Updating an interface can be done as part of the @@ -58,11 +58,13 @@ The following is an example flow: 5. Custom logic sends the funds. 6. `snap_updateInterface` is called again, replacing the whole UI with a success message. -## Get an interactive interface's state +## Get an interactive interface's state and context -At any point you can retrieve an interactive interface's state. -To do this, call the [`snap_getInterfaceState`](../../reference/snaps-api.md#snap_getinterfacestate) -method with the ID of the interface. +At any point, you can retrieve an interactive interface's state and context. +To retrieve its state, call the [`snap_getInterfaceState`](../../reference/snaps-api/snap_getinterfacestate.mdx) +method with the interface ID. +To retrieve its context, call [`snap_getInterfaceContext`](../../reference/snaps-api/snap_getinterfacecontext.mdx) +with the interface ID. ## Example diff --git a/snaps/features/custom-ui/user-defined-components.md b/snaps/features/custom-ui/user-defined-components.md index a96cf2f3ffe..499170055c9 100644 --- a/snaps/features/custom-ui/user-defined-components.md +++ b/snaps/features/custom-ui/user-defined-components.md @@ -14,7 +14,7 @@ In this first, basic example, the user-defined component is static. It does not accept any props (parameters) and returns the contents of a static home page. ```jsx title="Home.jsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const Home = () => { return ( @@ -22,19 +22,19 @@ export const Home = () => { Welcome to my Snap Hello, world! - ); -}; + ) +} ``` Once the component is defined, you can use it anywhere in the Snap. For example, to display the home page, you can use the following code: ```jsx title="index.jsx" -import { Home } from "./Home"; +import { Home } from './Home' export const onHomepage = () => { - return ; -}; + return +} ``` ## Example with props @@ -44,18 +44,16 @@ Props are passed to the component as an object and can be accessed using the fir component's definition function: ```jsx title="Insight.jsx" -export const Insight = (props) => { +export const Insight = props => { return (
- - {to ?
: None} - + {to ?
: None} - ); -}; + ) +} ``` This example contains two usages of props: @@ -72,11 +70,11 @@ This example contains two usages of props: To use the `Insight` component, you can pass the `from` and `to` addresses as props: ```jsx title="index.jsx" -import { Insight } from "./Insight"; +import { Insight } from './Insight' export const onTransaction = ({ transaction }) => { - return { content: }; -}; + return { content: } +} ``` You can also access props using destructuring. @@ -89,12 +87,10 @@ export const Insight = ({ from, to }) => {
- - {to ?
: None} - + {to ?
: None} - ); -}; + ) +} ``` ## Return multiple elements @@ -122,7 +118,7 @@ export const Insight = ({ from, to }) => { ## Return a list To return a list of elements, you can use an array. -In the following example, the `Accounts` components receives an array of accounts as props, and uses +In the following example, the `Accounts` component receives an array of accounts as props, and uses the array to display a list of accounts using `Array.map`: ```jsx title="Accounts.jsx" @@ -130,34 +126,34 @@ export const Accounts = ({ accounts }) => { return ( Accounts - {accounts.map((account) => ( + {accounts.map(account => (
))} - ); -}; + ) +} ``` To use the `Accounts` component, you can pass an array of accounts as props: ```jsx title="index.jsx" -import { Accounts } from "./Accounts"; +import { Accounts } from './Accounts' export const onHomepage = () => { const accounts = [ { - name: "Account 1", - address: "0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405" + name: 'Account 1', + address: '0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405', }, { - name: "Account 2", - address: "0x71C7656EC7ab88b098defB751B7401B5f6d8976F" - } - ]; - return ; -}; + name: 'Account 2', + address: '0x71C7656EC7ab88b098defB751B7401B5f6d8976F', + }, + ] + return +} ``` ## Spread props @@ -168,19 +164,21 @@ For example, given the following component: ```jsx title="Account.jsx" export const Account = ({ name, address }) => { - return -
- -}; + return ( + +
+ + ) +} ``` Instead of writing: ```jsx title="index.jsx" const myAccount = { - name: "Account 1", - address: "0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405" -}; + name: 'Account 1', + address: '0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405', +} // ... return @@ -201,13 +199,13 @@ the props object. For example: ```tsx title="Insight.tsx" -import type { SnapComponent } from "@metamask/snaps-sdk/jsx"; -import { Button, Box, Text, Row, Address } from "@metamask/snaps-sdk/jsx"; +import type { SnapComponent } from '@metamask/snaps-sdk/jsx' +import { Button, Box, Text, Row, Address } from '@metamask/snaps-sdk/jsx' type InsightProps = { - from: string; - to?: string; -}; + from: string + to?: string +} export const Insight: SnapComponent = ({ from, to }) => { return ( @@ -215,12 +213,10 @@ export const Insight: SnapComponent = ({ from, to }) => {
- - {to ?
: None} - + {to ?
: None} - ); -}; + ) +} ``` Use the following steps to create user-defined components with TypeScript: @@ -228,7 +224,7 @@ Use the following steps to create user-defined components with TypeScript: 1. Import the `SnapComponent` type: ```tsx - import type { SnapComponent } from "@metamask/snaps-sdk/jsx"; + import type { SnapComponent } from '@metamask/snaps-sdk/jsx' ``` 2. Define a type for the props of your component. @@ -236,9 +232,9 @@ Use the following steps to create user-defined components with TypeScript: ```tsx type InsightProps = { - from: string; - to?: string; - }; + from: string + to?: string + } ``` 3. Annotate the type of your component. @@ -247,11 +243,10 @@ Use the following steps to create user-defined components with TypeScript: ```tsx export const Insight: SnapComponent = ({ from, to }) => { // ... - }; + } ``` This has two effects: - - It allows TypeScript to infer the types of the props inside your component. - It ensures that the props passed to the component match the expected props. In this example, using the `Insight` component without the `from` prop, or passing a `number` diff --git a/snaps/features/data-storage.md b/snaps/features/data-storage.md index d66229e071e..3905ac09f38 100644 --- a/snaps/features/data-storage.md +++ b/snaps/features/data-storage.md @@ -7,7 +7,7 @@ sidebar_position: 5 You can store and manage sensitive information within a Snap using encrypted storage, or non-sensitive information using unencrypted storage. -Use the [`snap_manageState`](../reference/snaps-api.md#snap_managestate) API method to persist up to +Use the [`snap_manageState`](../reference/snaps-api/snap_managestate.mdx) API method to persist up to 100 MB of data to the user's disk and retrieve it at will. We recommend using this method for storing data in a Snap long term. @@ -21,7 +21,7 @@ Do not assume that the data a Snap stores is unique to a single dapp unless it i ## Request permission to store data To store data within a Snap, first request the -[`snap_manageState`](../reference/snaps-api.md#snap_managestate) permission. +[`snap_manageState`](../reference/snaps-api/snap_managestate.mdx) permission. Add the following to your Snap's manifest file: ```json title="snap.manifest.json" @@ -32,7 +32,7 @@ Add the following to your Snap's manifest file: ## Use encrypted storage -By default, [`snap_manageState`](../reference/snaps-api.md#snap_managestate) automatically encrypts +By default, [`snap_manageState`](../reference/snaps-api/snap_managestate.mdx) automatically encrypts data using a Snap-specific key before storing it on the user's disk, and automatically decrypts it when retrieved. This is useful to store sensitive information, such as passwords. @@ -44,17 +44,17 @@ When the data is no longer required, the Snap's state is cleared using the `clea ```javascript title="index.js" // Persist some data. await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "update", - newState: { hello: "world" }, + operation: 'update', + newState: { hello: 'world' }, }, }) // At a later time, get the stored data. const persistedData = await snap.request({ - method: "snap_manageState", - params: { operation: "get" }, + method: 'snap_manageState', + params: { operation: 'get' }, }) console.log(persistedData) @@ -62,9 +62,9 @@ console.log(persistedData) // If data storage is no longer necessary, clear it. await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "clear", + operation: 'clear', }, }) ``` @@ -72,14 +72,14 @@ await snap.request({ :::tip Accessing encrypted state requires MetaMask to be unlocked. If you need to access encrypted state in a background task such as a [cron job](cron-jobs.md), use -[`snap_getClientStatus`](../reference/snaps-api.md#snap_getclientstatus) to ensure that MetaMask is +[`snap_getClientStatus`](../reference/snaps-api/snap_getclientstatus.mdx) to ensure that MetaMask is unlocked before accessing state, preventing an unexpected password request. ::: ## Use unencrypted storage To use unencrypted storage, set `encrypted` to `false` when storing, retrieving, or clearing data -using [`snap_manageState`](../reference/snaps-api.md#snap_managestate). +using [`snap_manageState`](../reference/snaps-api/snap_managestate.mdx). The Snap will use a storage section separate from the encrypted storage, and will not encrypt the data. This is useful to access non-sensitive data from background operations such as [cron jobs](cron-jobs.md), without requiring the user to enter their password in the case that @@ -88,19 +88,19 @@ MetaMask is locked. ```javascript title="index.js" // Persist some data. await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "update", - newState: { hello: "world" }, + operation: 'update', + newState: { hello: 'world' }, encrypted: false, }, }) // At a later time, get the stored data. const persistedData = await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "get", + operation: 'get', encrypted: false, }, }) @@ -110,9 +110,9 @@ console.log(persistedData) // If data storage is no longer necessary, clear it. await snap.request({ - method: "snap_manageState", + method: 'snap_manageState', params: { - operation: "clear", + operation: 'clear', encrypted: false, }, }) @@ -121,6 +121,6 @@ await snap.request({ ## Example See the [`@metamask/manage-state-example-snap`](https://github.com/MetaMask/snaps/tree/main/packages/examples/packages/manage-state) -package for a full example of storing data using [`snap_manageState`](../reference/snaps-api.md#snap_managestate). +package for a full example of storing data using [`snap_manageState`](../reference/snaps-api/snap_managestate.mdx). This example exposes a [custom JSON-RPC API](../learn/about-snaps/apis.md#custom-json-rpc-apis) for dapps to store, retrieve, and clear data. diff --git a/snaps/features/lifecycle-hooks.md b/snaps/features/lifecycle-hooks.md index f748b857f87..3a5193c47e8 100644 --- a/snaps/features/lifecycle-hooks.md +++ b/snaps/features/lifecycle-hooks.md @@ -38,44 +38,43 @@ The following example displays an [alert dialog](custom-ui/dialogs.md#display-an ```tsx title="index.tsx" -import type { OnInstallHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnInstallHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onInstall: OnInstallHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Installation successful - To use this Snap, visit the companion dapp at metamask.io. + To use this Snap, visit the companion dapp at{' '} + metamask.io. ), }, - }); -}; + }) +} ``` ```typescript title="index.ts" -import type { OnInstallHandler } from "@metamask/snaps-sdk" -import { heading, panel, text } from "@metamask/snaps-sdk" +import type { OnInstallHandler } from '@metamask/snaps-sdk' +import { heading, panel, text } from '@metamask/snaps-sdk' export const onInstall: OnInstallHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: panel([ - heading("Installation successful"), - text( - "To use this Snap, visit the companion dapp at [metamask.io](https://metamask.io)." - ), + heading('Installation successful'), + text('To use this Snap, visit the companion dapp at [metamask.io](https://metamask.io).'), ]), }, }) @@ -98,14 +97,14 @@ The following example displays an [alert dialog](custom-ui/dialogs.md#display-an ```tsx title="index.tsx" -import type { OnUpdateHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnUpdateHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onUpdate: OnUpdateHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Update successful @@ -114,26 +113,26 @@ export const onUpdate: OnUpdateHandler = async () => { ), }, - }); -}; + }) +} ``` ```typescript title="index.ts" -import type { OnUpdateHandler } from "@metamask/snaps-sdk" -import { heading, panel, text } from "@metamask/snaps-sdk" +import type { OnUpdateHandler } from '@metamask/snaps-sdk' +import { heading, panel, text } from '@metamask/snaps-sdk' export const onUpdate: OnUpdateHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: panel([ - heading("Update successful"), - text("New features added in this version:"), - text("Added a dialog that appears when updating."), + heading('Update successful'), + text('New features added in this version:'), + text('Added a dialog that appears when updating.'), ]), }, }) diff --git a/snaps/features/localization.md b/snaps/features/localization.md index c474623460f..757cbc6550f 100644 --- a/snaps/features/localization.md +++ b/snaps/features/localization.md @@ -13,17 +13,17 @@ title and description) in the user's language. ### 1. Get the user's language In your Snap's code, determine the user's language by using the -[`snap_getLocale`](../reference/snaps-api.md#snap_getlocale) API method. -To call `snap_getLocale`, first request the required permission by adding it to the +[`snap_getPreferences`](../reference/snaps-api/snap_getpreferences.mdx) API method. +To call `snap_getPreferences`, first request the required permission by adding it to the `initialPermissions` field in your manifest file: ```json title="snap.manifest.json" "initialPermissions": { - "snap_getLocale": {} + "snap_getPreferences": {} } ``` -Your Snap can then call `snap_getLocale` to get the user's language code (for example, `en` or `es`). +Your Snap can then call `snap_getPreferences` to get the user's language code (for example, `en` or `es`). ### 2. Localize the Snap's UI @@ -48,13 +48,13 @@ You can then use these files in a localization module. The following is an example module: ```ts -import da from "../locales/da.json" -import en from "../locales/en.json" -import nl from "../locales/nl.json" +import da from '../locales/da.json' +import en from '../locales/en.json' +import nl from '../locales/nl.json' // Default language, to be used if there is not a valid translation in // the requested locale. -const FALLBACK_LANGUAGE: Locale = "en" +const FALLBACK_LANGUAGE: Locale = 'en' export const locales = { da: da.messages, @@ -65,7 +65,9 @@ export const locales = { export type Locale = keyof typeof locales export async function getMessage(id: keyof (typeof locales)[Locale]) { - const locale = (await snap.request({ method: "snap_getLocale" })) as Locale + const { locale } = (await snap.request({ method: 'snap_getPreferences' })) as { + locale: Locale + } const { message } = locales[locale]?.[id] ?? locales[FALLBACK_LANGUAGE][id] return message @@ -78,15 +80,15 @@ English as the default if the user's locale isn't available. The following is an example of using `getMessage` in a Snap's RPC request handler: ```ts title="index.ts" -import { rpcErrors } from "@metamask/rpc-errors" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" +import { rpcErrors } from '@metamask/rpc-errors' +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' -import { getMessage } from "./locales" +import { getMessage } from './locales' export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { switch (request.method) { - case "hello": - return await getMessage("hello") + case 'hello': + return await getMessage('hello') default: throw rpcErrors.methodNotFound({ @@ -113,7 +115,7 @@ The following is an example of a localized manifest file: "locales": ["locales/da.json", "locales/en.json", "locales/nl.json"] }, "initialPermissions": { - "snap_getLocale": {} + "snap_getPreferences": {} }, "manifestVersion": "0.1" } diff --git a/snaps/features/non-evm-networks.md b/snaps/features/non-evm-networks.md index 2cde35e36fa..55ea10c4cde 100644 --- a/snaps/features/non-evm-networks.md +++ b/snaps/features/non-evm-networks.md @@ -6,7 +6,7 @@ sidebar_position: 9 # Non-EVM networks You can manage users' non-EVM accounts and assets with their approval, using -[Snaps API](../reference/snaps-api.md) methods. +[Snaps API](../reference/snaps-api/index.md) methods. :::caution important Managing users' keys comes with great responsibility: Misplaced or stolen @@ -33,7 +33,7 @@ The general rule is: **Don't create a situation where your users can lose assets - Allowing extraction of private keys outside the Snap in any way, especially through RPC or network connections. - Executing arbitrary or untrusted code with access to private keys. -- Not getting properly informed consent before performing irreversible operations. +- Not getting informed consent before performing irreversible operations. - Asking for consent but ignoring the decision. - Exposing key material in clear-text. - Producing a bug that leads to any of the above. @@ -44,11 +44,11 @@ The general rule is: **Don't create a situation where your users can lose assets To derive a user's private keys: -1. Choose between the BIP-32 or BIP-44 specifications to derive the user's private keys. +1. Choose between the [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) or [BIP-44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) specifications to derive the user's private keys. If the keys you want to derive conform to the [BIP-44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) structure, use - [`snap_getBip44Entropy`](../reference/snaps-api.md#snap_getbip44entropy) to derive them. - Otherwise, use [`snap_getBip32Entropy`](../reference/snaps-api.md#snap_getbip32entropy). + [`snap_getBip44Entropy`](../reference/snaps-api/snap_getbip44entropy.mdx) to derive them. + Otherwise, use [`snap_getBip32Entropy`](../reference/snaps-api/snap_getbip32entropy.mdx). 2. Add the required permission to your manifest file. 3. Find out the derivation path to use. This is dependent on the application you're building. @@ -60,7 +60,7 @@ To derive a user's private keys: For example, to derive Dogecoin keys: 1. Dogecoin uses the BIP-44 scheme, so you'll use - [`snap_getBip44Entropy`](../reference/snaps-api.md#snap_getbip44entropy). + [`snap_getBip44Entropy`](../reference/snaps-api/snap_getbip44entropy.mdx). 2. Dogecoin has coin type `3`, so add the following to the manifest file: ```json title="snap.manifest.json" @@ -82,11 +82,11 @@ For example, to derive Dogecoin keys: To get the second Dogecoin account, add the following code to your Snap: ```javascript title="index.js" - import { getBIP44AddressKeyDeriver } from "@metamask/key-tree" + import { getBIP44AddressKeyDeriver } from '@metamask/key-tree' // Get the Dogecoin node, corresponding to the path m/44'/3'. const dogecoinNode = await snap.request({ - method: "snap_getBip44Entropy", + method: 'snap_getBip44Entropy', params: { coinType: 3, }, diff --git a/snaps/features/notifications.md b/snaps/features/notifications.md index 93e8386b1cc..994c9a48144 100644 --- a/snaps/features/notifications.md +++ b/snaps/features/notifications.md @@ -6,13 +6,13 @@ sidebar_position: 10 # Notifications You can display notifications directly in MetaMask or natively in a user's operating system (OS) -using the [`snap_notify`](../reference/snaps-api.md#snap_notify) API method. +using the [`snap_notify`](../reference/snaps-api/snap_notify.mdx) API method. ## Steps ### 1. Request permission to notify users -Request the [`snap_notify`](../reference/snaps-api.md#snap_notify) permission. +Request the [`snap_notify`](../reference/snaps-api/snap_notify.mdx) permission. Add the following to your Snap's manifest file: ```json title="snap.manifest.json" @@ -23,7 +23,7 @@ Add the following to your Snap's manifest file: ### 2. Create a notification -Create a notification by calling [`snap_notify`](../reference/snaps-api.md#snap_notify), which takes +Create a notification by calling [`snap_notify`](../reference/snaps-api/snap_notify.mdx), which takes a notification `type` and `message`. Specify `type: "inApp"` to display the notification in the MetaMask UI, or `type: "native"` to display the notification in the user's OS. @@ -31,7 +31,7 @@ display the notification in the user's OS. :::note We recommend using `type: "inApp"` because there's no guarantee that native notifications are displayed to the user. -You can also call `snap_notify` twice, which each notification type, to trigger both an in-app and +You can also call `snap_notify` twice, with each notification type, to trigger both an in-app and native notification. ::: @@ -39,20 +39,20 @@ The following example displays a notification in MetaMask, with the message "Hel ```javascript title="index.js" await snap.request({ - method: "snap_notify", + method: 'snap_notify', params: { - type: "inApp", - message: "Hello, world!", + type: 'inApp', + message: 'Hello, world!', }, }) ``` -
-
- Notification alert +
+
+ Notification alert
-
- Notification message +
+ Notification message
@@ -63,11 +63,39 @@ Each Snap can trigger up to: - Two native notifications per five minutes. ::: +## Expanded view + +In-app notifications can include an optional expanded view that displays when selected. +The expanded view includes a title, [custom UI](custom-ui/index.md) content, and an optional footer link. + +The following example displays a notification in MetaMask, with the message "Hello, world!" +When the user selects the notification, the expanded view displays a page with a title, a paragraph, and a link to the MetaMask Snaps directory: + +```javascript title="index.js" +await snap.request({ + method: 'snap_notify', + params: { + type: 'inApp', + message: 'Hello, world!', + title: 'Hello', + content: ( + + Did you know you can find more Snaps in the MetaMask Snaps Directory? + + ), + footerLink: { + text: 'Visit the directory', + href: 'https://snaps.metamask.io', + }, + }, +}) +``` + ## Example See the [`@metamask/notifications-example-snap`](https://github.com/MetaMask/snaps/tree/main/packages/examples/packages/notifications) package for a full example of implementing notifications using -[`snap_notify`](../reference/snaps-api.md#snap_notify). +[`snap_notify`](../reference/snaps-api/snap_notify.mdx). This example exposes a [custom JSON-RPC API](../learn/about-snaps/apis.md#custom-json-rpc-apis) for dapps to display in-app and native notifications. diff --git a/snaps/features/signature-insights.md b/snaps/features/signature-insights.md index 4c70c39d575..6e79479352c 100644 --- a/snaps/features/signature-insights.md +++ b/snaps/features/signature-insights.md @@ -1,8 +1,6 @@ --- description: Provide insights to your users in MetaMask's signature confirmation flow. sidebar_position: 11 -sidebar_custom_props: - flask_only: true --- import Tabs from "@theme/Tabs"; @@ -10,11 +8,8 @@ import TabItem from "@theme/TabItem"; # Signature insights -:::flaskOnly -::: - You can provide signature insights before a user signs a message. -For example, you can warn the user about potentially dangerous signature requests. +For example, you can warn the user about risky signature requests. ## Steps @@ -57,7 +52,7 @@ shapes, depending on the signing method used: interface EthSignature { from: string data: string - signatureMethod: "eth_sign" + signatureMethod: 'eth_sign' } ``` @@ -68,7 +63,7 @@ interface EthSignature { interface PersonalSignature { from: string data: string - signatureMethod: "personal_sign" + signatureMethod: 'personal_sign' } ``` @@ -79,7 +74,7 @@ interface PersonalSignature { interface SignTypedDataSignature { from: string data: Record[] - signatureMethod: "eth_signTypedData" + signatureMethod: 'eth_signTypedData' } ``` @@ -90,7 +85,7 @@ interface SignTypedDataSignature { interface SignTypedDataV3Signature { from: string data: Record - signatureMethod: "eth_signTypedData_v3" + signatureMethod: 'eth_signTypedData_v3' } ``` @@ -101,7 +96,7 @@ interface SignTypedDataV3Signature { interface SignTypedDataV4Signature { from: string data: Record - signatureMethod: "eth_signTypedData_v4" + signatureMethod: 'eth_signTypedData_v4' } ``` @@ -112,16 +107,10 @@ Your Snap should use `signatureMethod` as the source of truth to identify the si providing insights for. Once you've identified the signature object, your Snap can run any logic, including calling APIs. -Then, your Snap must either return `null` if it has no insights to provide, or an object with a -`content` property and an optional `severity` property as specified in the +Then, your Snap must either return `null` if it has no insights to provide, or an object with +[custom UI](custom-ui/index.md) content and an optional `severity` property as specified in the [`onSignature`](../reference/entry-points.md#onsignature) entry point. -:::caution -Due to current MetaMask UI limitations, signature insights will only be displayed if your Snap's -logic deems the signature to be one that a user shouldn't sign, that is, if you return a severity -level of `SeverityLevel.Critical`. -::: - The following is an example implementation of `onSignature`: diff --git a/snaps/features/static-files.md b/snaps/features/static-files.md index d2dd1dfc312..2c691be3de0 100644 --- a/snaps/features/static-files.md +++ b/snaps/features/static-files.md @@ -6,7 +6,7 @@ sidebar_position: 12 # Static files You can handle static files in your Snap bundle using the -[`snap_getFile`](../reference/snaps-api.md#snap_getfile) API method. +[`snap_getFile`](../reference/snaps-api/snap_getfile.mdx) API method. This is useful to load Wasm modules, ZK circuits, or any other files that must be lazily loaded. ## Steps @@ -32,16 +32,16 @@ For example: ### 2. Load static files using `snap_getFile` -In your Snap code, load static files using [`snap_getFile`](../reference/snaps-api.md#snap_getfile). +In your Snap code, load static files using [`snap_getFile`](../reference/snaps-api/snap_getfile.mdx). This method returns a string in the encoding specified, with a default of Base64 if no encoding is specified. For example: ```javascript title="index.js" const contents = await snap.request({ - method: "snap_getFile", + method: 'snap_getFile', params: { - path: "./files/myfile.bin", - encoding: "hex", + path: './files/myfile.bin', + encoding: 'hex', }, }) diff --git a/snaps/features/transaction-insights.md b/snaps/features/transaction-insights.md index 99f8ffd28bb..f8e1315f5db 100644 --- a/snaps/features/transaction-insights.md +++ b/snaps/features/transaction-insights.md @@ -31,7 +31,7 @@ permission object, and set it to `true`: ```json title="snap.manifest.json" "initialPermissions": { - "endowment:signature-insight": { + "endowment:transaction-insight": { "allowTransactionOrigin": true } } @@ -40,7 +40,8 @@ permission object, and set it to `true`: ### 2. Implement the `onTransaction` entry point Expose an [`onTransaction`](../reference/entry-points.md#ontransaction) entry point, which receives -a raw unsigned transaction payload, the chain ID, and the optional transaction origin. +a raw unsigned transaction payload, the chain ID, and the optional transaction origin, +and returns [custom UI](custom-ui/index.md) content. When a user submits a transaction using the MetaMask extension, MetaMask calls the `onTransaction` handler method. @@ -99,11 +100,10 @@ export const onTransaction: OnTransactionHandler = async ({ - The Snap tab in the transaction confirmation window displays the transaction insights:

-Transaction insights +Transaction insights

#### Transaction severity level diff --git a/snaps/get-started/install-flask.md b/snaps/get-started/install-flask.md index 5493aa5639b..76c73cb9ff7 100644 --- a/snaps/get-started/install-flask.md +++ b/snaps/get-started/install-flask.md @@ -5,21 +5,20 @@ sidebar_position: 1 # Install MetaMask Flask -To get started building your own Snaps, install the MetaMask Flask browser extension on -[Google Chrome](https://chromewebstore.google.com/detail/metamask-flask-developmen/ljfoeinjpaedjfecbmggjgodbgkmjkjk) -or -[Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/metamask-flask/). +To build your own Snaps or test upcoming MetaMask features, install the MetaMask Flask browser +extension on [Google Chrome](https://chromewebstore.google.com/detail/metamask-flask-developmen/ljfoeinjpaedjfecbmggjgodbgkmjkjk) +or [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/metamask-flask/). Install Flask in a new browser profile, or disable any existing installed versions of MetaMask before installing Flask. Running multiple instances of MetaMask in the same browser profile can break dapp interactions. -:::caution Developers only +:::note Developers only MetaMask Flask is an experimental tool only for developers. If you are not a developer, you should not install MetaMask Flask. ::: -:::danger Do not import accounts with funds to Flask +:::warning Do not import accounts with funds to Flask We do not recommend importing your Secret Recovery Phrase from MetaMask stable to MetaMask Flask. If you import accounts with funds into Flask, you do so at your own risk. ::: @@ -27,8 +26,16 @@ If you import accounts with funds into Flask, you do so at your own risk. ## About MetaMask Flask MetaMask Flask is an experimental playground that provides developers access to upcoming MetaMask features. -While a small set of audited Snaps are allowlisted in the stable version of the MetaMask browser extension, MetaMask Flask is intended for developers building and testing Snaps locally or from npm. -Also, new Snaps API features are enabled in Flask for testing and developer feedback before they're enabled in MetaMask stable. +While a small set of audited Snaps are allowlisted in the stable version of the MetaMask browser +extension, MetaMask Flask is intended for developers building and testing Snaps locally or from npm. +Also, new MetaMask features are enabled in Flask for testing and developer feedback before they're +enabled in MetaMask stable. These features appear in the documentation with the **Flask** or **FLASK ONLY** tag. You can also view Flask-specific features by looking for the **\[FLASK\]** label in the [MetaMask Extension changelog](https://github.com/MetaMask/metamask-extension/blob/develop/CHANGELOG.md). + +:::note +You should not encourage end users to install Flask. +It is not guaranteed to be reliable. +Also, if you do not [submit your Snap for the allowlist](../how-to/get-allowlisted.md), it will not be listed in the [MetaMask Snaps Directory](https://snaps.metamask.io), so users will not be able to find your Snap. +::: diff --git a/snaps/get-started/quickstart.md b/snaps/get-started/quickstart.md index 2479e2889ec..3d2c3544325 100644 --- a/snaps/get-started/quickstart.md +++ b/snaps/get-started/quickstart.md @@ -57,7 +57,7 @@ yarn install You may get a warning like the following: ```bash -@lavamoat/allow-scripts has detected dependencies without configuration. explicit configuration required. +@lavamoat/allow-scripts has detected dependencies without configuration. An explicit configuration is required. run "allow-scripts auto" to automatically populate the configuration. ``` @@ -89,14 +89,14 @@ Open the project in a text editor. You can customize your Snap by editing `index.ts` in the `packages/snap/src` folder. `index.ts` contains an example request that uses the -[`snap_dialog`](../reference/snaps-api.md#snapdialog) method to display a custom confirmation screen: +[`snap_dialog`](../reference/snaps-api/snap_dialog.mdx) method to display a custom confirmation screen: ```tsx title="index.tsx" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk"; -import { Box, Text, Bold } from "@metamask/snaps-sdk/jsx"; +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' +import { Box, Text, Bold } from '@metamask/snaps-sdk/jsx' /** * Handle incoming JSON-RPC requests, sent through wallet_invokeSnap. @@ -107,37 +107,38 @@ import { Box, Text, Bold } from "@metamask/snaps-sdk/jsx"; * @returns The result of snap_dialog. * @throws If the request method is not valid for this Snap. */ -export const onRpcRequest: OnRpcRequestHandler = async ({ - origin, - request, -}) => { +export const onRpcRequest: OnRpcRequestHandler = async ({ origin, request }) => { switch (request.method) { - case "hello": + case 'hello': return snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "confirmation", + type: 'confirmation', content: ( - Hello, {origin}! + + Hello, {origin}! + This custom confirmation is just for display purposes. - But you can edit the Snap source code to make it do something, if you want to! + + But you can edit the Snap source code to make it do something, if you want to! + ), }, - }); + }) default: - throw new Error("Method not found."); + throw new Error('Method not found.') } -}; +} ``` ```ts title="index.ts" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" -import { panel, text } from "@metamask/snaps-sdk" +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' +import { panel, text } from '@metamask/snaps-sdk' /** * Handle incoming JSON-RPC requests, sent through wallet_invokeSnap. @@ -148,27 +149,22 @@ import { panel, text } from "@metamask/snaps-sdk" * @returns The result of snap_dialog. * @throws If the request method is not valid for this Snap. */ -export const onRpcRequest: OnRpcRequestHandler = async ({ - origin, - request, -}) => { +export const onRpcRequest: OnRpcRequestHandler = async ({ origin, request }) => { switch (request.method) { - case "hello": + case 'hello': return snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "confirmation", + type: 'confirmation', content: panel([ text(`Hello, **${origin}**!`), - text("This custom confirmation is just for display purposes."), - text( - "But you can edit the Snap source code to make it do something, if you want to!" - ), + text('This custom confirmation is just for display purposes.'), + text('But you can edit the Snap source code to make it do something, if you want to!'), ]), }, }) default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -189,9 +185,7 @@ You've now successfully connected, installed, interacted with, and customized yo ## Next steps -- Fill out the [Snap Builders Onboarding Form](https://feedback.metamask.io/snaps-onboarding) to - allow the MetaMask Snaps team to engage with you and provide support as you begin to develop your Snap. -- To learn more about the Snaps system, review [fundamental Snaps concepts](/snaps/learn/about-snaps) - and try the [Snaps tutorials](/snaps/learn/tutorials). -- To implement specific features and use cases, see the [Snaps feature guides](/snaps/features). -- To follow best practices for developing a Snap, see the [Snaps how-to guides](/snaps/how-to). +- To learn more about the Snaps system, review [fundamental Snaps concepts](../learn/about-snaps/index.md) + and try the [Snaps tutorials](../learn/tutorials/gas-estimation.md). +- To implement specific features and use cases, see the [Snaps feature guides](../features/cron-jobs.md). +- To follow best practices for developing a Snap, see the Snaps [best practices](../learn/best-practices/design-guidelines.md) and [how-to guides](../how-to/request-permissions.md). diff --git a/snaps/how-to/allow-automatic-connections.md b/snaps/how-to/allow-automatic-connections.md index 099402985a6..a1ed8bea248 100644 --- a/snaps/how-to/allow-automatic-connections.md +++ b/snaps/how-to/allow-automatic-connections.md @@ -7,7 +7,7 @@ sidebar_position: 5 You can authorize specific dapps or Snaps to automatically connect to your Snap, skipping the need for users to manually confirm a connection when the dapp or Snap calls -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps). +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx). This is useful, for example, for [Snaps used by multiple dapps](#snap-used-by-multiple-dapps) or [Snaps installed from the Snaps directory](#snap-installed-from-the-snaps-directory). @@ -44,14 +44,14 @@ We recommend removing local sites before deploying your Snap to production. ### 2. Connect to the Snap from an authorized dapp When you visit a dapp specified in the Snap's `initialConnections`, and the dapp calls -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps), if the Snap is +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx), if the Snap is already installed, the dapp connects immediately and can make further calls to the Snap. If the Snap is not installed, you see a confirmation to install the Snap. Additionally, since the connection between the Snap and a dapp listed in `initialConnections` -is automatic, calling [`wallet_getSnaps`](../reference/wallet-api-for-snaps.md#wallet_getsnaps) from +is automatic, calling [`wallet_getSnaps`](../reference/snaps-api/wallet_getsnaps.mdx) from the dapp returns the Snap even if the dapp never called -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps). +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx). This makes the flow of using the Snap from an authorized dapp completely seamless. ## Example @@ -63,21 +63,21 @@ of connecting to a Snap from a dapp authorized in `initialConnections`. While the code is exactly the same as it would be without the dapp being listed in `initialConnections`, the comments show how the flow is different from the user's perspective. -The key is that calling [`wallet_getSnaps`](../reference/wallet-api-for-snaps.md#wallet_getsnaps) +The key is that calling [`wallet_getSnaps`](../reference/snaps-api/wallet_getsnaps.mdx) from an authorized dapp when the Snap is already installed returns that Snap even if the dapp never explicitly connected to it by calling -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps). +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx). ```js title="script.js" -const snapId = "npm:@myorg/mysnap" +const snapId = 'npm:@myorg/mysnap' // This function is called when the EIP-6963 process of finding MetaMask is successful. -const MetaMaskFound = async (providerDetail) => { +const MetaMaskFound = async providerDetail => { const { provider } = providerDetail // This call returns the Snap ID if it is already installed. const snaps = await provider.request({ - method: "wallet_getSnaps", + method: 'wallet_getSnaps', }) if (Object.keys(snaps).includes(snapId)) { @@ -89,7 +89,7 @@ const MetaMaskFound = async (providerDetail) => { // Since the Snap is not installed, the user still sees a confirmation to install the Snap. try { const result = await provider.request({ - method: "wallet_requestSnaps", + method: 'wallet_requestSnaps', params: { [snapId]: {}, }, @@ -124,7 +124,7 @@ interact with your Snap. This flow is as follows: -1. You build a Snap that is only really useful for one dapp, its companion dapp. +1. You build a Snap that is only useful for one dapp, its companion dapp. You authorize an automatic connection to the companion dapp by listing it in `initialConnections`. 2. A user finds your Snap through the [Snaps directory](https://snaps.metamask.io) and installs it. 3. The user lands on your Snap's companion dapp. diff --git a/snaps/how-to/communicate-errors.md b/snaps/how-to/communicate-errors.md index 61df8470baa..f381291486a 100644 --- a/snaps/how-to/communicate-errors.md +++ b/snaps/how-to/communicate-errors.md @@ -17,13 +17,13 @@ then throw them where needed. For example: ```typescript title="index.ts" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" -import { MethodNotFoundError } from "@metamask/snaps-sdk" +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' +import { MethodNotFoundError } from '@metamask/snaps-sdk' export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => { switch (request.method) { - case "hello": - return "Hello World!" + case 'hello': + return 'Hello World!' default: // Throw a known error to avoid crashing the Snap. throw new MethodNotFoundError() diff --git a/snaps/how-to/connect-to-a-snap.md b/snaps/how-to/connect-to-a-snap.md index bb383c737f3..7a38e5e2bd2 100644 --- a/snaps/how-to/connect-to-a-snap.md +++ b/snaps/how-to/connect-to-a-snap.md @@ -15,14 +15,13 @@ This is possible because Snaps can expose a [custom JSON-RPC API](../learn/about ## Detect wallet To connect to a Snap, dapps must first detect MetaMask in the user's browser. -See the Wallet documentation on [how to connect to MetaMask](/wallet/how-to/connect). ### Detect MetaMask Flask When developing your Snap, you might need to require [MetaMask Flask](../get-started/install-flask.md) in your dapp. We recommend detecting MetaMask Flask using the -[multi-wallet detection mechanism](/wallet/concepts/wallet-interoperability) specified by EIP-6963. +multi-wallet detection mechanism specified by EIP-6963. Alternatively, you can use the `window.ethereum` injected provider, but this might fail if the user is running multiple wallet extensions simultaneously. @@ -32,20 +31,20 @@ To detect MetaMask Flask, you can add the following to `window.onload`: ```js title="index.js" -window.addEventListener("eip6963:announceProvider", (event) => { +window.addEventListener('eip6963:announceProvider', event => { /* event.detail contains the discovered provider interface. */ const providerDetail = event.detail /* providerDetail.info.rdns is the best way to distinguish a wallet extension. */ - if (providerDetail.info.rdns === "io.metamask.flask") { - console.log("MetaMask Flask successfully detected!") + if (providerDetail.info.rdns === 'io.metamask.flask') { + console.log('MetaMask Flask successfully detected!') // Now you can use Snaps! } else { - console.error("Please install MetaMask Flask!") + console.error('Please install MetaMask Flask!') } }) -window.dispatchEvent(new Event("eip6963:requestProvider")) +window.dispatchEvent(new Event('eip6963:requestProvider')) ``` @@ -54,15 +53,13 @@ window.dispatchEvent(new Event("eip6963:requestProvider")) ```js title="index.js" const provider = window.ethereum -const isFlask = ( - await provider?.request({ method: "web3_clientVersion" }) -)?.includes("flask") +const isFlask = (await provider?.request({ method: 'web3_clientVersion' }))?.includes('flask') if (provider && isFlask) { - console.log("MetaMask Flask successfully detected!") + console.log('MetaMask Flask successfully detected!') // Now you can use Snaps! } else { - console.error("Please install MetaMask Flask!", error) + console.error('Please install MetaMask Flask!', error) } ``` @@ -71,7 +68,7 @@ if (provider && isFlask) { ## Connect to a Snap -Connect to a Snap by calling the [`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps) +Connect to a Snap by calling the [`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx) method from your dapp. If a user doesn't have the Snap installed in their MetaMask wallet, MetaMask prompts the user to install the Snap. @@ -118,7 +115,7 @@ new installation of the Snap, but the user won't see a confirmation pop-up askin ## Determine whether a Snap is installed Determine whether a Snap is installed by calling the -[`wallet_getSnaps`](../reference/wallet-api-for-snaps.md#wallet_getsnaps) method from your dapp. +[`wallet_getSnaps`](../reference/snaps-api/wallet_getsnaps.mdx) method from your dapp. This method returns a list of only those Snaps that are connected to your current dapp. The response is in the form of an object keyed by the ID of the Snap. @@ -133,10 +130,10 @@ The following example verifies whether a Snap with ID `npm:super-snap` is instal ```ts title="index.ts" const snaps = await ethereum.request({ - method: "wallet_getSnaps", + method: 'wallet_getSnaps', }) -const isMySnapInstalled = Object.keys(snaps).includes("npm:super-snap") +const isMySnapInstalled = Object.keys(snaps).includes('npm:super-snap') ``` If you need to work with a specific version of a Snap, you can instead iterate over @@ -155,7 +152,7 @@ to work with that version. At any time, a user can open their MetaMask Snaps settings menu and see all the dapps connected to a Snap. From that menu they can revoke a dapp connection. If your dapp loses the connection to a Snap, you can reconnect by calling -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps). +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx). Since the Snap is already installed, this returns a success response without MetaMask showing a pop-up. However, if the user has disabled the Snap, the response has `enabled` set to `false` for your `SNAP_ID`: diff --git a/snaps/how-to/debug-a-snap/common-issues.md b/snaps/how-to/debug-a-snap/common-issues.md index 13eae68c543..a09e8c328e2 100644 --- a/snaps/how-to/debug-a-snap/common-issues.md +++ b/snaps/how-to/debug-a-snap/common-issues.md @@ -1,5 +1,5 @@ --- -description: Solve common issues. +description: Solve common issues encountered by Snap developers. sidebar_position: 1 --- @@ -18,10 +18,10 @@ If you encounter any issues that you can't solve on your own, please Because [Secure ECMAScript (SES)](../../learn/about-snaps/execution-environment.md) adds additional restrictions on the JavaScript runtime on top of strict mode, code that executes normally under strict mode might not under SES. -[`yarn mm-snap build`](../../reference/cli/subcommands.md#b-build) by default attempts to execute a +[`yarn mm-snap build`](../../reference/cli.md#b-build) by default attempts to execute a Snap in a stubbed SES environment. You can also disable this behavior and run the evaluation step separately using -[`yarn mm-snap eval`](../../reference/cli/subcommands.md#e-eval). +[`yarn mm-snap eval`](../../reference/cli.md#e-eval). If an error is thrown during this step, it's likely due to a SES incompatibility, and you must fix the issues manually. These incompatibilities tend to occur in dependencies. @@ -34,7 +34,7 @@ If the problem is in a dependency, you can try a different version or to fix the using tools such as [`patch-package`](https://npmjs.com/package/patch-package) (see how to [patch dependencies](#patch-dependencies)) or by modifying the bundle file directly. -To give you an idea of a common error and how to fix it, "sloppily" declared variables (i.e. +To give you an idea of a common error and how to fix it, "sloppily" declared variables (that is, assigning to a new variable without an explicit variable declaration) are forbidden in strict mode, and therefore in SES as well. If you get an error during the `eval` step that says something like `variableName is not defined`, @@ -43,9 +43,9 @@ simply prepending `var variableName;` to your Snap bundle may solve the problem. `yarn mm-snap build` automatically handles that one.) :::caution -Run [`yarn mm-snap manifest --fix`](../../reference/cli/subcommands.md#m-manifest) if you modified +Run [`yarn mm-snap manifest --fix`](../../reference/cli.md#m-manifest) if you modified your Snap bundle after building. -Otherwise your manifest `shasum` value won't be correct, and attempting to install your Snap fails. +Otherwise, your manifest `shasum` value won't be correct, and attempting to install your Snap fails. ::: ### Use other build tools @@ -60,9 +60,9 @@ plugins for several other build systems: For examples on how to set up these build systems yourself, see the [examples](https://github.com/MetaMask/snaps/tree/main/packages/examples). -We recommend running [`yarn mm-snap manifest --fix`](../../reference/cli/subcommands.md#m-manifest) +We recommend running [`yarn mm-snap manifest --fix`](../../reference/cli.md#m-manifest) after creating your bundle to make sure your manifest `shasum` value is correct. -You might also benefit from running [`yarn mm-snap eval`](../../reference/cli/subcommands.md#e-eval) +You might also benefit from running [`yarn mm-snap eval`](../../reference/cli.md#e-eval) to detect any SES issues up front. ## Patch dependencies @@ -94,7 +94,7 @@ Then add a postinstall script to your `package.json`: Now you can make changes to your dependencies inside `node_modules` and run `yarn patch-package package-name` to save the changes as a patch. This creates a `.patch` file containing your dependency patch. -These patches can be committed to your Git repository and are replayed when you re-install your dependencies. +These patches can be committed to your Git repository and are replayed when you reinstall your dependencies. ### Patch the use of `XMLHttpRequest` @@ -106,13 +106,13 @@ The following are examples of popular libraries that use `XMLHttpRequest` and ar compatible with the Snaps execution environment. This section also describes patching strategies for fixing dependencies that try to use these libraries. -#### cross-fetch +#### `cross-fetch` `cross-fetch` is a popular library used for cross-platform access to the `fetch` API across multiple environments. Under the hood, however, the library uses `XMLHttpRequest` and thus causes issues when used in a Snap. -You can easily patch this issue using `patch-package`. +You can patch this issue using `patch-package`. Open `node_modules/cross-fetch/browser-ponyfill.js` and find the following lines near the bottom of the file: @@ -126,9 +126,7 @@ You can replace that with the following snippet: ```javascript title="browser-ponyfill.js" // Choose between native implementation (global) or custom implementation (__self__) -var ctx = global.fetch - ? { ...global, fetch: global.fetch.bind(global) } - : __self__ +var ctx = global.fetch ? { ...global, fetch: global.fetch.bind(global) } : __self__ // var ctx = __self__; // this line disable service worker support temporarily ``` @@ -158,7 +156,7 @@ index f216aa3..6b3263b 100644 Using either of these methods allows your dependencies to access the `fetch` API correctly and `cross-fetch` compatible with the Snaps execution environment. -#### axios +#### `axios` `axios` is a popular networking library that uses `XMLHttpRequest` under the hood. @@ -177,21 +175,21 @@ In a production environment this may be a large task depending on the usage of ` ```javascript const instance = axios.create({ - baseURL: "https://api.github.com/", + baseURL: 'https://api.github.com/', }) instance - .get("users/MetaMask") - .then((res) => { + .get('users/MetaMask') + .then(res => { if (res.status >= 400) { - throw new Error("Bad response from server") + throw new Error('Bad response from server') } return res.data }) - .then((user) => { + .then(user => { console.log(user) }) - .catch((err) => { + .catch(err => { console.error(err) }) ``` @@ -200,15 +198,15 @@ instance ```javascript -fetch("https://api.github.com/users/MetaMask") - .then((res) => { +fetch('https://api.github.com/users/MetaMask') + .then(res => { if (!res.ok) { - throw new Error("Bad response from server") + throw new Error('Bad response from server') } return res.json() }) - .then((json) => console.log(json)) - .catch((err) => console.error(err)) + .then(json => console.log(json)) + .catch(err => console.error(err)) ``` diff --git a/snaps/how-to/debug-a-snap/index.md b/snaps/how-to/debug-a-snap/index.md index e1272070c06..54e1975c7ed 100644 --- a/snaps/how-to/debug-a-snap/index.md +++ b/snaps/how-to/debug-a-snap/index.md @@ -1,5 +1,6 @@ --- sidebar_position: 7 +description: Debug a Snap by inspecting the background process. --- # Debug a Snap @@ -11,7 +12,7 @@ You can also see the [common issues](common-issues.md) encountered by Snap devel ::: You can add your log statements in your source code and build your Snap, or add them directly -to your Snap bundle and use [`yarn mm-snap manifest --fix`](../../reference/cli/subcommands.md#m-manifest) +to your Snap bundle and use [`yarn mm-snap manifest --fix`](../../reference/cli.md#m-manifest) to update the `shasum` in your Snap manifest file. The manifest `shasum` must match the contents of your bundle at the time MetaMask fetches your Snap. diff --git a/snaps/how-to/get-allowlisted.md b/snaps/how-to/get-allowlisted.md index c0ebd75263a..ff44597300b 100644 --- a/snaps/how-to/get-allowlisted.md +++ b/snaps/how-to/get-allowlisted.md @@ -22,24 +22,25 @@ Always do your own research before installing a Snap. ## Prerequisites -- Ensure you have filled out the [Snap Builders Onboarding Form](https://feedback.metamask.io/snaps-onboarding). - - Ensure that your Snap: - - Has publicly available source code. You don't need to publish your code with an open source license, but users should be able to read the source code of the Snap package. - Is [published](publish-a-snap.md) to npm. - Does not impair MetaMask's compliance with laws or regulations. +- Remove any `console` logs, "to-do" comments, and unused permissions or methods. + +- Scan your Snap for security vulnerabilities using [Snapper](https://github.com/sayfer-io/Snapper) and + resolve any reported issues. + - If your Snap uses any of the following API methods related to key management, you must provide evidence of a third-party audit from an approved auditor: - - - [`snap_getBip32Entropy`](../reference/snaps-api.md#snap_getbip32entropy) - - [`snap_getBip32PublicKey`](../reference/snaps-api.md#snap_getbip32publickey) - - [`snap_getBip44Entropy`](../reference/snaps-api.md#snap_getbip44entropy) - - [`snap_getEntropy`](../reference/snaps-api.md#snap_getentropy) - - [`snap_manageAccounts`](../reference/snaps-api.md#snap_manageaccounts) + - [`snap_getBip32Entropy`](../reference/snaps-api/snap_getbip32entropy.mdx) + - [`snap_getBip32PublicKey`](../reference/snaps-api/snap_getbip32publickey.mdx) + - [`snap_getBip44Entropy`](../reference/snaps-api/snap_getbip44entropy.mdx) + - [`snap_getEntropy`](../reference/snaps-api/snap_getentropy.mdx) + - [`snap_manageAccounts`](../reference/snaps-api/snap_manageaccounts.mdx) The audit must cover the Snap source code that is to run within the Snaps system, and any modules used for key management. @@ -48,7 +49,7 @@ Always do your own research before installing a Snap. :::info A list of approved third-party auditors and details about the audit process are available on the - [MetaMask Snaps Builder Engagement Program](https://consensys.notion.site/Audit-process-1acbc67819dc4631b7a3d6c664e387a3). + [MetaMask Snaps Wiki](https://github.com/MetaMask/snaps/wiki/Audits). ::: ## Steps @@ -71,14 +72,12 @@ The form requests information about your Snap, including the following: **long description**, but this URL should be an official website designed to interact with your Snap. - **Snap short description** - A one or two sentence description of your Snap. - Try not to say "is a MetaMask Snap" – users already know this! + Try not to say "is a MetaMask Snap." Users already know this! - **Snap long description** - A description of your Snap's features and how to use them. You can use line breaks, lists, and URLs. You cannot use HTML. If applicable, describe quick steps to onboard and use the Snap. - For example: _After installing the Snap, visit the companion dapp at - https://voyager-snap.linea.build to connect an account and track your Linea Voyage progress._ - **GitHub repository and npm package URLs** - The public GitHub repo that hosts your Snap's source code, and the npm package of your [published Snap](../how-to/publish-a-snap.md). @@ -98,7 +97,7 @@ The form requests information about your Snap, including the following: ::: - **Customer support details** - - [Customer support information](https://consensys.notion.site/Providing-User-Support-Information-cff79a7d896e4da6a2f8a17ce074e585) + [Customer support information](https://github.com/MetaMask/snaps/wiki/User-Support-Information) to ensure a smooth user experience for your Snap. This allows MetaMask to escalate any issues that a user might encounter with your Snap. The escalation contact will be kept confidential within MetaMask, and the rest of the information @@ -148,7 +147,7 @@ Users will not be able to install a new version until it is allowlisted. You can also update any information about your Snap using the form. For fields that you don't need to update, you can leave them blank or enter "N/A." When providing the new version to be allowlisted, you should also note whether previous versions of -your Snap should be removed from the allowlist (effectively, replaced with the new version). +your Snap should be removed from the allowlist (that is, replaced with the new version). ## Open permissions @@ -160,10 +159,10 @@ The following is a list of permissions that do not require allowlisting: - [`endowment:page-home`](../reference/permissions.md#endowmentpage-home) - [`endowment:signature-insight`](../reference/permissions.md#endowmentsignature-insight) - [`endowment:transaction-insight`](../reference/permissions.md#endowmenttransaction-insight) -- [`snap_dialog`](../reference/snaps-api.md#snap_dialog) -- [`snap_getLocale`](../reference/snaps-api.md#snap_getlocale) -- [`snap_manageState`](../reference/snaps-api.md#snap_managestate) -- [`snap_notify`](../reference/snaps-api.md#snap_notify) +- [`snap_dialog`](../reference/snaps-api/snap_dialog.mdx) +- [`snap_getPreferences`](../reference/snaps-api/snap_getpreferences.mdx) +- [`snap_manageState`](../reference/snaps-api/snap_managestate.mdx) +- [`snap_notify`](../reference/snaps-api/snap_notify.mdx) If your Snap only uses permissions from this list, it can be installed in the MetaMask extension without inclusion on the allowlist. diff --git a/snaps/how-to/publish-a-snap.md b/snaps/how-to/publish-a-snap.md index 4e04d7b5104..b3c61e11b06 100644 --- a/snaps/how-to/publish-a-snap.md +++ b/snaps/how-to/publish-a-snap.md @@ -1,5 +1,5 @@ --- -description: Develop, test, and publish a Snap. +description: Publish a Snap to npm. sidebar_position: 8 --- @@ -19,15 +19,14 @@ The following details are specific to Snaps: installing the Snap, in custom dialogs, and in the settings menu. - This icon should be a valid SVG. - The icon will be cropped in a circle when displayed in MetaMask; you do not need to make the icon circular. + - The icon should only have a transparent background if the icon is clearly visible on both light and dark backgrounds. After publishing the Snap, any dapp can connect to the Snap by using the Snap ID `npm:[packageName]`. +You can use the [Snap Install Tester](https://montoya.github.io/snap-install-tester/) with [MetaMask Flask](../get-started/install-flask.md) to verify that your Snap package was published correctly. :::caution If you are using the Snap monorepo project generated in the [quickstart](../get-started/quickstart.md), make sure to only publish the Snap package in `/packages/snap`. -You can use the [Snaps Simulator](https://metamask.github.io/snaps/snaps-simulator/staging/#/manifest) to verify -that your Snap was published correctly — just select **localhost** in the top right corner and change the -Snap location to **npm** and the ID of your Snap. Also, make sure to update the manifest file, icon file, and README to differentiate your Snap from the template. ::: diff --git a/snaps/how-to/request-permissions.md b/snaps/how-to/request-permissions.md index f1b71eec312..070e6d4971e 100644 --- a/snaps/how-to/request-permissions.md +++ b/snaps/how-to/request-permissions.md @@ -16,9 +16,9 @@ Snaps and dapps follow the [EIP-2255 wallet permissions specification](https://e ### Snaps API methods -Request permission to call [Snaps API methods](../reference/snaps-api.md) in the +Request permission to call [Snaps API methods](../reference/snaps-api/index.md) in the `initialPermissions` field of the Snap [manifest file](../learn/about-snaps/files.md#manifest-file). -For example, to request to call [`snap_dialog`](../reference/snaps-api.md#snap_dialog), add the +For example, to request to call [`snap_dialog`](../reference/snaps-api/snap_dialog.mdx), add the following to the manifest file: ```json title="snap.manifest.json" @@ -32,9 +32,9 @@ following to the manifest file: All Snaps API methods except the following interactive UI methods require requesting permission in the manifest file: -- [`snap_createInterface`](../reference/snaps-api.md#snap_createinterface) -- [`snap_getInterfaceState`](../reference/snaps-api.md#snap_getinterfacestate) -- [`snap_updateInterface`](../reference/snaps-api.md#snap_updateInterface) +- [`snap_createInterface`](../reference/snaps-api/snap_createinterface.mdx) +- [`snap_getInterfaceState`](../reference/snaps-api/snap_getinterfacestate.mdx) +- [`snap_updateInterface`](../reference/snaps-api/snap_updateinterface.mdx) ::: @@ -59,16 +59,16 @@ permission, add the following to the manifest file: Dynamic permissions are not requested in the manifest file. Instead, your Snap can acquire dynamic permissions during its lifecycle. -For example, request permission to call the [`eth_accounts`](/wallet/reference/eth_accounts) -MetaMask JSON-RPC API method by calling [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts). +For example, request permission to call the [`eth_accounts`](/metamask-connect/evm/reference/json-rpc-api) +MetaMask JSON-RPC API method by calling [`eth_requestAccounts`](/metamask-connect/evm/reference/json-rpc-api). See the [`eth_accounts` dynamic permission](../reference/permissions.md#eth_accounts) for more information. ## Request permissions from a dapp -Dapps that communicate with Snaps using [`wallet_snap`](../reference/wallet-api-for-snaps.md#wallet_snap) -or [`wallet_invokeSnap`](../reference/wallet-api-for-snaps.md#wallet_invokesnap) must request +Dapps that communicate with Snaps using [`wallet_snap`](../reference/snaps-api/wallet_snap.mdx) +or [`wallet_invokeSnap`](../reference/snaps-api/wallet_invokesnap.mdx) must request permission to do so by calling -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps) first. +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx) first. The following example calls `wallet_requestSnaps` to request permission to connect to the `hello-snap` Snap, then calls `wallet_invokeSnap` to invoke the `hello` JSON-RPC method exposed by the Snap: @@ -76,17 +76,17 @@ The following example calls `wallet_requestSnaps` to request permission to conne ```js title="index.js" // If the Snap is not already installed, the user will be prompted to install it. await window.ethereum.request({ - method: "wallet_requestSnaps", + method: 'wallet_requestSnaps', params: { // Assuming the Snap is published to npm using the package name "hello-snap". - "npm:hello-snap": {}, + 'npm:hello-snap': {}, }, }) // Invoke the "hello" JSON-RPC method exposed by the Snap. const response = await window.ethereum.request({ - method: "wallet_invokeSnap", - params: { snapId: "npm:hello-snap", request: { method: "hello" } }, + method: 'wallet_invokeSnap', + params: { snapId: 'npm:hello-snap', request: { method: 'hello' } }, }) console.log(response) // "world!" diff --git a/snaps/how-to/restrict-rpc-api.md b/snaps/how-to/restrict-rpc-api.md index 325d0922c02..8f47474863b 100644 --- a/snaps/how-to/restrict-rpc-api.md +++ b/snaps/how-to/restrict-rpc-api.md @@ -26,44 +26,34 @@ You can restrict by method and origin using the `origin` parameter of the For example: ```typescript title="index.ts" -import type { - OnRpcRequestHandler, - UnauthorizedError, -} from "@metamask/snaps-sdk" +import type { OnRpcRequestHandler, UnauthorizedError } from '@metamask/snaps-sdk' -type MethodPermission = "*" | string[] +type MethodPermission = '*' | string[] const RPC_PERMISSIONS: Record = { - hello: "*", - secureMethod: ["https://metamask.io", "https://www.mydomain.com"], + hello: '*', + secureMethod: ['https://metamask.io', 'https://www.mydomain.com'], } const isAllowed = (method: string, origin: string) => { - return ( - RPC_PERMISSIONS[method] === "*" || RPC_PERMISSIONS[method].includes(origin) - ) + return RPC_PERMISSIONS[method] === '*' || RPC_PERMISSIONS[method].includes(origin) } -export const onRpcRequest: OnRpcRequestHandler = async ({ - origin, - request, -}) => { +export const onRpcRequest: OnRpcRequestHandler = async ({ origin, request }) => { // Check permissions. if (!isAllowed(request.method, origin)) { - throw new UnauthorizedError( - `Method ${request.method} not authorized for origin ${origin}.` - ) + throw new UnauthorizedError(`Method ${request.method} not authorized for origin ${origin}.`) } switch (request.method) { - case "hello": - return "world!" + case 'hello': + return 'world!' - case "secureMethod": - return "The secret is: 42" + case 'secureMethod': + return 'The secret is: 42' default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` diff --git a/snaps/how-to/test-a-snap.md b/snaps/how-to/test-a-snap.md index 383f54a1164..991cd9defdf 100644 --- a/snaps/how-to/test-a-snap.md +++ b/snaps/how-to/test-a-snap.md @@ -5,18 +5,43 @@ sidebar_position: 6 # Test a Snap -You can test your Snap by hosting it locally using `yarn start`, installing it in Flask, and calling -its API methods from a dapp. +You can test your Snap [locally](#test-locally), in the [Snaps sandbox](#test-in-the-sandbox), and [end-to-end using Jest](#test-end-to-end). -For end-to-end Snap testing in a Jest environment, use the -[`@metamask/snaps-jest`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-jest) package -as follows. +## Test locally -## Steps +1. Host your Snap locally: -### 1. Install @metamask/snaps-jest + ```bash + yarn start + ``` -Install the `@metamask/snaps-jest` package into your Snap project using [Yarn](https://yarnpkg.com/) +2. Install your Snap in Flask. + +3. Test your Snap by calling its API methods from a dapp. + +## Test in the sandbox + +Use the Snaps sandbox to test and debug your Snap in an easy-to-use interface. + +1. Run the [`sandbox`](../reference/cli.md#sandbox) subcommand to start the sandbox server: + + ```bash + yarn mm-snap sandbox + ``` + + Navigate to the `localhost` URL displayed in the terminal. + +2. Install your Snap in Flask. + +3. Test your Snap by calling its API methods from the sandbox interface. + +## Test end-to-end + +Follow these steps to test your Snap end-to-end in a Jest environment. + +### 1. Install `@metamask/snaps-jest` + +Install the [`@metamask/snaps-jest`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-jest) package into your Snap project using [Yarn](https://yarnpkg.com/) or [npm](https://www.npmjs.com/): ```bash @@ -29,14 +54,14 @@ or npm i @metamask/snaps-jest ``` -### 2. Configure @metamask/snaps-jest +### 2. Configure `@metamask/snaps-jest` The easiest way to configure this package is to add it to your Jest configuration as a preset. In the `jest.config.js` file, add the following: ```js title="jest.config.js" module.exports = { - preset: "@metamask/snaps-jest", + preset: '@metamask/snaps-jest', } ``` @@ -47,7 +72,7 @@ You can then run the `jest` command as usual. :::note `@metamask/snaps-jest` assumes the Snap is built in the directory you run Jest from. If you use a different directory, you can specify the path using the -[`root`](../reference/cli/options.md#r-root) option, or by running your own HTTP server. +[`server.root`](../reference/config-options.md#serverroot) option, or by running your own HTTP server. It's currently not possible to use `@metamask/snaps-jest` with a Snap that is not built. ::: @@ -56,8 +81,8 @@ environment and matchers to your Jest configuration manually: ```js title="jest.config.js" module.exports = { - testEnvironment: "@metamask/snaps-jest", - setupFilesAfterEnv: ["@metamask/snaps-jest/dist/cjs/setup.js"], + testEnvironment: '@metamask/snaps-jest', + setupFilesAfterEnv: ['@metamask/snaps-jest/dist/cjs/setup.js'], } ``` @@ -67,7 +92,7 @@ For example: ```js title="jest.config.js" module.exports = { - preset: "@metamask/snaps-jest", + preset: '@metamask/snaps-jest', testEnvironmentOptions: { // Options go here. }, @@ -76,17 +101,15 @@ module.exports = { All options are optional. -### 3. Use @metamask/snaps-jest +### 3. Use `@metamask/snaps-jest` Use the package by calling any of the [API methods](../reference/jest.md#api-methods). -You can: +For example, you can: - [Install a Snap.](../reference/jest.md#installsnap) -- [Send a transaction to the Snap.](../reference/jest.md#sendtransaction) -- [Run a cronjob in the Snap.](../reference/jest.md#runcronjob) +- [Send a transaction to the Snap.](../reference/jest.md#ontransaction) +- [Run a cron job in the Snap.](../reference/jest.md#oncronjob) - [Interact with user interfaces.](../reference/jest.md#getinterface) -- [Mock the response of a network request.](../reference/jest.md#mock) -- [Close the testing page.](../reference/jest.md#close) You can also use [Jest matchers](../reference/jest.md#jest-matchers) to assert that a response from a Snap matches an expected value. diff --git a/snaps/how-to/use-environment-variables.md b/snaps/how-to/use-environment-variables.md index 16ba0abec71..e7c6ec41e35 100644 --- a/snaps/how-to/use-environment-variables.md +++ b/snaps/how-to/use-environment-variables.md @@ -1,5 +1,6 @@ --- sidebar_position: 3 +description: Set environment variables on the command line or in a `.env` file. --- import Tabs from "@theme/Tabs"; @@ -14,13 +15,15 @@ You can use environment variables [on the command line](#use-environment-variabl or [in a `.env` file](#use-environment-variables-in-a-env-file). :::note + In addition to the environment variables you set, the following environment variables are set by the Snaps CLI: - `NODE_ENV="production"` - `NODE_DEBUG=false` - `DEBUG=false` - ::: + +::: ## Use environment variables on the command line @@ -31,7 +34,7 @@ Snaps CLI: PUBLIC_KEY=abc123 SNAP_ENV=dev ``` -2. Build your Snap using the [Snaps CLI](../reference/cli/subcommands.md): +2. Build your Snap using the [Snaps CLI](../reference/cli.md): ```bash yarn mm-snap build @@ -55,7 +58,7 @@ Snaps CLI: ```javascript title="snap.config.js" - require("dotenv").config() + require('dotenv').config() module.exports = { environment: { @@ -70,8 +73,8 @@ Snaps CLI: ```typescript title="snap.config.ts" - import type { SnapConfig } from "@metamask/snaps-cli" - import * as dotenv from "dotenv" + import type { SnapConfig } from '@metamask/snaps-cli' + import * as dotenv from 'dotenv' dotenv.config() const config: SnapConfig = { @@ -91,47 +94,45 @@ Snaps CLI: 3. You can also use environment variables directly in your Snap. For example: - - - - ```tsx title="index.tsx" - import { Box, Text, Heading } from "@metamask/snaps-sdk/jsx"; - - await snap.request({ - method: "snap_dialog", - params: { - type: "alert", - content: ( - - This custom alert is just for display purposes. - - SNAP_ENV is {process.env.SNAP_ENV}, PUBLIC_KEY is {process.env.PUBLIC_KEY} - - - ), - }, - }); - ``` - - - - - ```typescript title="index.ts" - import { panel, text, heading } from "@metamask/snaps-sdk" - - await snap.request({ - method: "snap_dialog", - params: { - type: "alert", - content: panel([ - heading("This custom alert is just for display purposes."), - text( - `SNAP_ENV is ${process.env.SNAP_ENV}, PUBLIC_KEY is ${process.env.PUBLIC_KEY}` - ), - ]), - }, - }) - ``` - - - + + + + ```tsx title="index.tsx" + import { Box, Text, Heading } from '@metamask/snaps-sdk/jsx' + + await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: ( + + This custom alert is just for display purposes. + + SNAP_ENV is {process.env.SNAP_ENV}, PUBLIC_KEY is {process.env.PUBLIC_KEY} + + + ), + }, + }) + ``` + + + + + ```typescript title="index.ts" + import { panel, text, heading } from '@metamask/snaps-sdk' + + await snap.request({ + method: 'snap_dialog', + params: { + type: 'alert', + content: panel([ + heading('This custom alert is just for display purposes.'), + text(`SNAP_ENV is ${process.env.SNAP_ENV}, PUBLIC_KEY is ${process.env.PUBLIC_KEY}`), + ]), + }, + }) + ``` + + + diff --git a/snaps/index.mdx b/snaps/index.mdx index c08e5c169b2..d842383856a 100644 --- a/snaps/index.mdx +++ b/snaps/index.mdx @@ -1,96 +1,104 @@ --- -title: Introduction +sidebar_label: Introduction +title: Snaps introduction +description: Introduction to MetaMask Snaps documentation. Learn how to build and integrate custom Snaps to extend MetaMask with new blockchain protocols, APIs, and advanced wallet functionality. --- -import CardList from "@site/src/components/CardList" -import YoutubeEmbed from "@site/src/components/YoutubeEmbed" - -# Extend the functionality of MetaMask using Snaps - -Snaps is an open source system that allows anyone to safely extend the functionality of -[MetaMask](https://metamask.io/), creating new web3 end user experiences. +import Head from '@docusaurus/Head' +import CardList from '@site/src/components/CardList' +import YoutubeEmbed from '@site/src/components/YoutubeEmbed' + + + + + + + + + + + + + + + + + + + + +# Create a custom mini app using Snaps + +Snaps is an open source system that allows anyone to safely create a mini app that runs inside the MetaMask extension, +enabling new web3 end user experiences. Get started building your own Snaps by [installing MetaMask Flask](get-started/install-flask.md). ## What can you do with a Snap? -A Snap can add new API methods to MetaMask, add support for different blockchain protocols, or -modify existing functionalities using the [Snaps API](reference/snaps-api.md). -Learn more in this video: +A Snap can add new API methods to MetaMask, add support for different blockchain protocols, or modify existing functionalities using the [Snaps API](reference/snaps-api). Learn more in this video: -
The following Snaps features are available in the stable version of MetaMask: Access the internet using the fetch function. @@ -98,52 +106,41 @@ The following Snaps features are available in the stable version of MetaMask: ), }, { - icon: require("./assets/features/manage-keys.png").default, - href: "features/non-evm-networks", - title: "Non-EVM networks", - description: "Manage non-EVM accounts and assets in MetaMask.", + href: '/snaps/features/non-evm-networks', + title: 'Non-EVM networks', + description: 'Manage non-EVM accounts and assets in MetaMask.', }, { - icon: require("./assets/features/notifications.png").default, - href: "features/notifications", - title: "Notifications", - description: - "Notify users directly in MetaMask, or natively in their OS.", + href: '/snaps/features/notifications', + title: 'Notifications', + description: 'Notify users directly in MetaMask, or natively in their OS.', }, { - icon: require("./assets/features/getfile.png").default, - href: "features/static-files", - title: "Static files", - description: - "Lazy-load static files such as Wasm modules or ZK circuits.", + href: '/snaps/features/signature-insights', + title: 'Signature insights', + description: 'Provide signature insights before a user signs a message.', }, { - icon: require("./assets/features/insights.png").default, - href: "features/transaction-insights", - title: "Transaction insights", - description: - "Provide transaction insights in MetaMask's transaction confirmation window.", + href: '/snaps/features/static-files', + title: 'Static files', + description: 'Lazy-load static files such as Wasm modules or ZK circuits.', + }, + { + href: '/snaps/features/transaction-insights', + title: 'Transaction insights', + description: "Provide transaction insights in MetaMask's transaction confirmation window.", }, ]} /> -The following Snaps features are only available in [MetaMask Flask](get-started/install-flask.md), -the canary distribution of MetaMask: +The following Snaps features are only available in [MetaMask Flask](get-started/install-flask.md), the canary distribution of MetaMask: ## Questions? -If you have questions about using MetaMask Snaps or want to propose a new feature, you can interact with the -MetaMask Snaps team and community on [GitHub discussions](https://github.com/MetaMask/snaps/discussions) -and the **mm-snaps-dev** channel on [Consensys Discord](https://discord.gg/consensys). +If you have questions about using MetaMask Snaps or want to propose a new feature, you can interact with the MetaMask Snaps team and community on [GitHub discussions](https://github.com/MetaMask/snaps/discussions) and the **mm-snaps-dev** channel on [Consensys Discord](https://discord.gg/consensys). See the full list of [Snaps resources](learn/resources.md) for more information. diff --git a/snaps/learn/about-snaps/apis.md b/snaps/learn/about-snaps/apis.md index 50a1bf10259..68c9cd1f089 100644 --- a/snaps/learn/about-snaps/apis.md +++ b/snaps/learn/about-snaps/apis.md @@ -7,17 +7,17 @@ sidebar_label: Snaps APIs # About the Snaps APIs Snaps, dapps, and MetaMask can communicate with each other using the [Snaps API](#snaps-api), -[MetaMask JSON-RPC API](#metamask-json-rpc-api), and [custom JSON-RPC APIs](#custom-json-rpc-apis). +[Wallet API](#wallet-api), and [custom JSON-RPC APIs](#custom-json-rpc-apis). ## Snaps API Snaps can access the global object `snap`, which has one method: `request`. -You can use this object to make [Snaps API](../../reference/snaps-api.md) requests. +You can use this object to make [Snaps API](../../reference/snaps-api/index.md) requests. These API methods allow Snaps to extend or modify the functionality of MetaMask. -To call each method (except the [interactive UI methods](../../reference/snaps-api.md#interactive-ui-methods)), +To call each method (except the [interactive UI methods](../../features/custom-ui/interactive-ui.md)), you must first [request permission](../../how-to/request-permissions.md) in the Snap manifest file. -For example, to call [`snap_notify`](../../reference/snaps-api.md#snap_notify), first request the +For example, to call [`snap_notify`](../../reference/snaps-api/snap_notify.mdx), first request the `snap_notify` permission: ```json title="snap.manifest.json" @@ -30,10 +30,10 @@ Your Snap can then call `snap_notify` in its source code: ```typescript title="index.ts" await snap.request({ - method: "snap_notify", + method: 'snap_notify', params: { - type: "inApp", - message: "Hello, world!", + type: 'inApp', + message: 'Hello, world!', }, }) ``` @@ -43,15 +43,15 @@ await snap.request({ ### Dapp requests Dapps can install and communicate with Snaps using the following -[Wallet API methods for Snaps](../../reference/wallet-api-for-snaps.md): +Wallet API methods for Snaps: -- [`wallet_getSnaps`](../../reference/wallet-api-for-snaps.md#wallet_getsnaps) - Gets the dapp's +- [`wallet_getSnaps`](../../reference/snaps-api/wallet_getsnaps.mdx) - Gets the dapp's permitted Snaps. -- [`wallet_requestSnaps`](../../reference/wallet-api-for-snaps.md#wallet_requestsnaps) - Requests +- [`wallet_requestSnaps`](../../reference/snaps-api/wallet_requestsnaps.mdx) - Requests permission to communicate with the specified Snaps. -- [`wallet_snap`](../../reference/wallet-api-for-snaps.md#wallet_snap) - (Restricted) Calls the +- [`wallet_snap`](../../reference/snaps-api/wallet_snap.mdx) - (Restricted) Calls the specified custom JSON-RPC API method of the specified Snap. -- [`wallet_invokeSnap`](../../reference/wallet-api-for-snaps.md#wallet_invokesnap) - (Restricted) +- [`wallet_invokeSnap`](../../reference/snaps-api/wallet_invokesnap.mdx) - (Restricted) Synonymous with `wallet_snap`. A dapp must first [request permission](../../how-to/request-permissions.md#request-permissions-from-a-dapp) @@ -62,19 +62,19 @@ For example, to call `wallet_snap`: ```js title="index.js" // Request permission to connect to the Snap. await window.ethereum.request({ - method: "wallet_requestSnaps", + method: 'wallet_requestSnaps', params: { - "npm:hello-snap": {}, + 'npm:hello-snap': {}, }, }) // Call the "hello" method of the Snap using wallet_snap. const response = await window.ethereum.request({ - method: "wallet_snap", + method: 'wallet_snap', params: { - snapId: "npm:hello-snap", + snapId: 'npm:hello-snap', request: { - method: "hello", + method: 'hello', }, }, }) @@ -89,7 +89,7 @@ Snaps can also call some Wallet JSON-RPC API methods using the `ethereum` global To expose `ethereum` to the Snap execution environment, a Snap must first request the [`endowment:ethereum-provider`](../../reference/permissions.md#endowmentethereum-provider) permission. -For example, to call [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts), first request +For example, to call [`eth_requestAccounts`](/metamask-connect/evm/reference/json-rpc-api), first request the required permission: ```json title="snap.manifest.json" @@ -101,26 +101,23 @@ the required permission: Your Snap can then call `eth_requestAccounts` in its source code: ```typescript title="index.ts" -await ethereum.request({ method: "eth_requestAccounts" }) +await ethereum.request({ method: 'eth_requestAccounts' }) ``` The `ethereum` global available to Snaps has fewer capabilities than `window.ethereum` for dapps. Snaps can only use it to make read requests, not to write to the blockchain or initiate transactions. Snaps can call all Wallet JSON-RPC API methods **except** the following: -- [`wallet_requestSnaps`](../../reference/wallet-api-for-snaps.md#wallet_requestsnaps) -- [`wallet_requestPermissions`](/wallet/reference/wallet_requestPermissions) -- [`wallet_revokePermissions`](/wallet/reference/wallet_revokePermissions) -- [`wallet_addEthereumChain`](/wallet/reference/wallet_addEthereumChain) -- [`wallet_switchEthereumChain`](/wallet/reference/wallet_switchEthereumChain) -- [`wallet_watchAsset`](/wallet/reference/wallet_watchAsset) -- [`wallet_registerOnboarding`](/wallet/reference/wallet_registerOnboarding) -- [`wallet_scanQRCode`](/wallet/reference/wallet_scanQRCode) -- [`eth_sendRawTransaction`](/wallet/reference/eth_sendRawTransaction) -- [`eth_sendTransaction`](/wallet/reference/eth_sendTransaction) -- [`eth_signTypedData_v4`](/wallet/reference/eth_signTypedData_v4) -- [`eth_decrypt`](/wallet/reference/eth_decrypt) -- [`eth_getEncryptionPublicKey`](/wallet/reference/eth_getEncryptionPublicKey) +- `wallet_requestPermissions` +- `wallet_revokePermissions` +- `wallet_addEthereumChain` +- `wallet_switchEthereumChain` +- `wallet_watchAsset` +- `wallet_registerOnboarding` +- `wallet_scanQRCode` +- `eth_sendTransaction` +- `eth_decrypt` +- `eth_getEncryptionPublicKey` ## Custom JSON-RPC APIs @@ -131,7 +128,7 @@ point and request the [`endowment:rpc`](../../reference/permissions.md#endowment The Snap's custom API is entirely up to you, as long as it's a valid [JSON-RPC](https://www.jsonrpc.org/specification) API. -:::note Does my Snap need a custom API? +:::note If your Snap can do something useful without receiving and responding to JSON-RPC requests, such as providing [transaction insights](../../reference/entry-points.md#ontransaction), you do not need to implement a custom API. @@ -156,11 +153,11 @@ Your Snap can then implement and expose a custom API using the `onRpcRequest` fu module.exports.onRpcRequest = async ({ origin, request }) => { switch (request.method) { // Expose a "hello" JSON-RPC method to dapps. - case "hello": - return "world!" + case 'hello': + return 'world!' default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -171,20 +168,20 @@ A dapp can then install the Snap and call the exposed method: // Request permission to connect to the Snap. // If the Snap is not already installed, the user will be prompted to install it. await window.ethereum.request({ - method: "wallet_requestSnaps", + method: 'wallet_requestSnaps', params: { // Assuming the Snap is published to npm using the package name "hello-snap". - "npm:hello-snap": {}, + 'npm:hello-snap': {}, }, }) // Invoke the "hello" JSON-RPC method exposed by the Snap. const response = await window.ethereum.request({ - method: "wallet_invokeSnap", + method: 'wallet_invokeSnap', params: { - snapId: "npm:hello-snap", + snapId: 'npm:hello-snap', request: { - method: "hello", + method: 'hello', }, }, }) diff --git a/snaps/learn/about-snaps/execution-environment.md b/snaps/learn/about-snaps/execution-environment.md index 2b96ef6abcb..a3275d4e122 100644 --- a/snaps/learn/about-snaps/execution-environment.md +++ b/snaps/learn/about-snaps/execution-environment.md @@ -26,7 +26,7 @@ how it's executed. ## Supported globals A Snap can access the [Snaps API](apis.md#snaps-api) using the `snap` global, and the -[MetaMask JSON-RPC API](apis.md#metamask-json-rpc-api) using the `ethereum` global. +[Wallet API](apis.md#wallet-api) using the `ethereum` global. To access the `ethereum` global, a Snap must request the [`endowment:ethereum-provider`](../../reference/permissions.md#endowmentethereum-provider) permission. @@ -51,12 +51,12 @@ The following globals are also available: :::info note To use Node.js built-in modules such as `crypto` and `path`, set the -[`polyfills`](../../reference/cli/options.md#polyfills) configuration option to `true`. +[`polyfills`](../../reference/config-options.md#polyfills) configuration option to `true`. ::: ## Secure ECMAScript (SES) -[Secure ECMAScript (SES)](https://github.com/endojs/endo/tree/master/packages/ses) is an implementation of the [Hardened JavaScript](https://hardenedjs.org/) proposal. +[Secure ECMAScript (SES)](https://github.com/endojs/endo/tree/master/packages/ses) is an implementation of the [Hardened JavaScript](https://hardenedjs.org/) proposal. Hardened JavaScript is a subset of JavaScript designed to enable mutually suspicious programs to execute in the same JavaScript process (or the same [realm](https://tc39.es/ecma262/#realm)). You can think of it as a more severe form of diff --git a/snaps/learn/about-snaps/files.md b/snaps/learn/about-snaps/files.md index fc9eab02f1c..58373383b44 100644 --- a/snaps/learn/about-snaps/files.md +++ b/snaps/learn/about-snaps/files.md @@ -78,9 +78,9 @@ reproduce the `source.shasum` value), and what You might need to modify some manifest fields manually. For example, if you change the location of the icon SVG file, you must update `source.location.npm.iconPath` to match. -You can also use the [Snaps CLI](../../reference/cli/subcommands.md) to update some fields for you. -For example, running [`yarn mm-snap build`](../../reference/cli/subcommands.md#b-build) or -[`yarn mm-snap manifest --fix`](../../reference/cli/subcommands.md#m-manifest) updates `source.shasum`. +You can also use the [Snaps CLI](../../reference/cli.md) to update some fields for you. +For example, running [`yarn mm-snap build`](../../reference/cli.md#b-build) or +[`yarn mm-snap manifest --fix`](../../reference/cli.md#m-manifest) updates `source.shasum`. :::caution important Some manifest fields must match the corresponding fields of the `/snap/package.json` file. @@ -105,7 +105,7 @@ expand to support different publishing solutions. The Snap configuration file, `snap.config.js` or `snap.config.ts`, must be placed in the project root directory. You can override the default values of the -[Snaps configuration options](../../reference/cli/options.md) by specifying them in the +[Snaps configuration options](../../reference/config-options.md) by specifying them in the configuration file. For example: @@ -114,9 +114,9 @@ For example: ```javascript title="snap.config.js" module.exports = { - input: "src/index.js", + input: 'src/index.js', output: { - path: "dist", + path: 'dist', }, server: { port: 9000, @@ -128,12 +128,12 @@ module.exports = { ```typescript title="snap.config.ts" -import type { SnapConfig } from "@metamask/snaps-cli" +import type { SnapConfig } from '@metamask/snaps-cli' const config: SnapConfig = { - input: "src/index.js", + input: 'src/index.js', output: { - path: "dist", + path: 'dist', }, server: { port: 9000, @@ -163,7 +163,7 @@ built-ins must be bundled along with the Snap. Running `yarn start` bundles your Snap for you. -You can also run [`yarn mm-snap build`](../../reference/cli/subcommands.md#b-build) to bundle your -Snap using [webpack](https://webpack.js.org/) or [Browserify](https://browserify.org). +You can also run [`yarn mm-snap build`](../../reference/cli.md#b-build) to bundle your +Snap using [webpack](https://webpack.js.org/). This command finds all dependencies using your specified main entry point and outputs a bundle file to your specified output path. diff --git a/snaps/learn/about-snaps/index.md b/snaps/learn/about-snaps/index.md index a76d0f39ea1..64319b78dec 100644 --- a/snaps/learn/about-snaps/index.md +++ b/snaps/learn/about-snaps/index.md @@ -5,8 +5,8 @@ sidebar_position: 1 # About Snaps -MetaMask Snaps is an open source system that allows anyone to safely extend the functionality of -MetaMask, creating new web3 end user experiences. +MetaMask Snaps is an open source system that allows anyone to safely create a mini app that runs inside the MetaMask extension, +enabling new web3 end user experiences. For example, a Snap can add support for different blockchain networks, add custom account types, or provide additional functionality using its own APIs. This allows MetaMask to be used with a far more diverse set of protocols, dapps, and services. @@ -16,9 +16,9 @@ The following diagram outlines the high-level architecture of the Snaps system: ![Snaps architecture diagram](../../assets/snaps-architecture.png) The following diagram illustrates how Snaps can [derive non-EVM keys](../../features/non-evm-networks.md) using -[`snap_getBip32Entropy`](../../reference/snaps-api.md#snap_getbip32entropy), -[`snap_getBip44Entropy`](../../reference/snaps-api.md#snap_getbip44entropy), and -[`snap_getEntropy`](../../reference/snaps-api.md#snap_getentropy): +[`snap_getBip32Entropy`](../../reference/snaps-api/snap_getbip32entropy.mdx), +[`snap_getBip44Entropy`](../../reference/snaps-api/snap_getbip44entropy.mdx), and +[`snap_getEntropy`](../../reference/snaps-api/snap_getentropy.mdx): ![Snaps get entropy diagram](../../assets/snaps-getentropy.png) @@ -44,12 +44,12 @@ of MetaMask core unless given permission to do so. ### APIs -A Snap can communicate with MetaMask using the [Snaps API](../../reference/snaps-api.md) and some -[MetaMask JSON-RPC API](/wallet/reference/json-rpc-api) methods. +A Snap can communicate with MetaMask using the [Snaps API](../../reference/snaps-api) and some +[MetaMask JSON-RPC API](/metamask-connect/evm/reference/json-rpc-api) methods. The Snaps API allows Snaps to extend or modify the functionality of MetaMask, and communicate with other Snaps. -Dapps can use the [Wallet API for Snaps](../../reference/wallet-api-for-snaps.md) to install and +Dapps can use the [Wallet API for Snaps](../../reference/snaps-api/wallet_invokesnap.mdx) to install and communicate with Snaps. A Snap can implement its own custom JSON-RPC API to communicate with dapps and other Snaps. @@ -69,13 +69,15 @@ For each Snap, the user can: A Snap can also display a [home page](../../features/custom-ui/home-pages.md) within MetaMask that the user can access using the Snaps menu. -Other than the settings page and home page, a Snap can -[modify the MetaMask UI](../../features/custom-ui/index.md) only -by displaying [dialogs](../../features/custom-ui/dialogs.md), -[transaction insights](../../reference/entry-points.md#ontransaction), or -[signature insights](../../features/signature-insights.md). +Other than the settings page and home page, a Snap can modify the MetaMask UI by displaying +[custom UI](../../features/custom-ui/index.md) in +[dialogs](../../features/custom-ui/dialogs.md), +[transaction insights](../../features/transaction-insights.md), +[signature insights](../../features/signature-insights.md), and +[notifications (expanded view)](../../features/notifications.md#expanded-view). +An [account management Snap](../../features/custom-evm-accounts/index.md) can also modify the MetaMask UI by leveraging native account UX. -This means that many Snaps must use companion dapps and custom JSON-RPC API methods to +Many Snaps must use companion dapps and custom JSON-RPC API methods to present data to the user. :::note diff --git a/snaps/learn/best-practices/_category_.json b/snaps/learn/best-practices/_category_.json index 81c88ab22c0..ae28d47b7bb 100644 --- a/snaps/learn/best-practices/_category_.json +++ b/snaps/learn/best-practices/_category_.json @@ -1,8 +1,4 @@ { "label": "Best practices", - "position": 3, - "link": { - "type": "generated-index", - "slug": "learn/best-practices" - } + "position": 3 } diff --git a/snaps/learn/best-practices/design-guidelines.md b/snaps/learn/best-practices/design-guidelines.md index 8e582a5c7b5..c64a3449c7b 100644 --- a/snaps/learn/best-practices/design-guidelines.md +++ b/snaps/learn/best-practices/design-guidelines.md @@ -76,7 +76,7 @@ Important details to include when introducing your Snap: - Descriptions of the features that make your Snap appealing to the intended users. Use conversational language when describing your Snap. -If you need to use a technical term, briefly define it first. +If you need to use a technical term, define it first. For example: | Don't do this | Do this instead | @@ -107,7 +107,7 @@ These are also a key part of your Snap's identity, so it's worth spending time o Your Snap's icon should fit in a **32px circular frame in SVG format**. Avoid using images with small details, as they won't be impactful in the allotted space. -Use something bold, simple, and easily understood. +Use something bold, simple, and easy to understand. The icon must be a valid SVG. It should be clearly visible on both light and dark backgrounds. @@ -123,7 +123,7 @@ on small screens. Use a descriptive name to help users understand how they benefit from installing your Snap, and increase the likelihood that they will install and use it. -Don't use the word "Snap" in your name—your name should be specific and memorable, differentiating +Don't use the word "Snap" in your name; your name should be specific and memorable, differentiating your Snap from others. For example: diff --git a/snaps/learn/best-practices/security-guidelines.md b/snaps/learn/best-practices/security-guidelines.md index ad500c8e891..d438ce42835 100644 --- a/snaps/learn/best-practices/security-guidelines.md +++ b/snaps/learn/best-practices/security-guidelines.md @@ -15,8 +15,6 @@ The following are guidelines for [managing permissions](../../how-to/request-per - **Minimum permissions** - Follow the principle of least authority by only adding the minimum permissions needed by your Snap in the manifest file. Before publishing your Snap, check the permissions again and remove any unused permissions. - You can validate your permissions using the [Snaps Simulator Manifest - Validator](https://metamask.github.io/snaps/snaps-simulator/staging/#/manifest). - **Minimum RPC access** - When adding the [`endowment:rpc`](../../reference/permissions.md#endowmentrpc) permission for Snaps or dapps, ask yourself if both are necessary. @@ -52,7 +50,6 @@ The following are guidelines for user notifications, dialogs, and authorizations - **Transparent and consentful actions** - Before performing any of the following actions, display a [confirmation dialog](../../features/custom-ui/dialogs.md#display-a-confirmation-dialog) that contains detailed information about the action and asks the user to reject or accept it: - - **Modifying or reading state.** (In general, notify the user about any state changes.) - **Switching networks or accounts.** - **Deriving or generating key pairs, accounts, or smart contracts.** @@ -66,8 +63,7 @@ The following are guidelines for user notifications, dialogs, and authorizations - **Limit access to sensitive methods** - When building a Snap with sensitive RPC methods, use a companion dapp as an "admin interface" to interact with your Snap's sensitive methods. - There are two ways to do this: - + You can do this in two ways: 1. Restrict the [`endowment:rpc`](../../reference/permissions.md#endowmentrpc) permission to specific URLs using the `allowedOrigins` caveat. 2. Filter specific methods to specific URLs using the built-in [URL @@ -77,12 +73,12 @@ The following are guidelines for user notifications, dialogs, and authorizations const referrer = new URL(origin) if ( - referrer.protocol === "https:" && - (referrer.host.endsWith(".metamask.io") || referrer.host === "metamask.io") + referrer.protocol === 'https:' && + (referrer.host.endsWith('.metamask.io') || referrer.host === 'metamask.io') ) { - console.log("URL is valid") + console.log('URL is valid') } else { - console.log("URL is NOT valid") + console.log('URL is NOT valid') } ``` @@ -110,7 +106,7 @@ user IPs, emails, passwords, and private keys: - **Private keys** - Avoid retrieving the user's private key from the Snap unless absolutely necessary, such as to sign a transaction. - If you only need the user's public key, use [`snap_getBip32PublicKey`](../../reference/snaps-api.md#snap_getbip32publickey) + If you only need the user's public key, use [`snap_getBip32PublicKey`](../../reference/snaps-api/snap_getbip32publickey.mdx) instead of deriving it from the private key. Never return the private key in an RPC method to a dapp or another Snap. To give users a way to view their private key, display it in a dialog. @@ -119,7 +115,7 @@ user IPs, emails, passwords, and private keys: For example, you might have a method that intends to return sensitive information only in specific cases, but due to a typo or bad logic, it returns the information incorrectly, leaking data. Even if you have a legitimate reason for allowing a user to export sensitive information, you - should prevent that information from being revealed carelessly (similar to how MetaMask makes it + should make that information difficult to reveal (similar to how MetaMask makes it difficult to reveal a Secret Recovery Phrase and for an observer looking over a user's shoulder to see it). @@ -149,13 +145,13 @@ The following are guidelines for validating RPC parameters and handling values: mislead the user. For example: - Example not using copyable with Markdown rendering + Example not using copyable with Markdown rendering The special characters `*` and `_` render Markdown formatting, so what the user sees does not match the content. To avoid this, use `copyable` instead: - Example using copyable with clean rendering + Example using copyable with clean rendering `copyable` does not render Markdown and has the added benefit that the user can select to copy the content. Also, the formatting provides a visual delineator to separate arbitrary input or fields from user @@ -176,9 +172,9 @@ The following are guidelines for validating RPC parameters and handling values: Avoid using the following deprecated methods: - `wallet_enable`, which is deprecated in favor of - [`wallet_requestSnaps`](../../reference/wallet-api-for-snaps.md#wallet_requestsnaps). + [`wallet_requestSnaps`](../../reference/snaps-api/wallet_requestsnaps.mdx). -- `snap_confirm`, which is deprecated in favor of [`snap_dialog`](../../reference/snaps-api.md#snap_dialog). +- `snap_confirm`, which is deprecated in favor of [`snap_dialog`](../../reference/snaps-api/snap_dialog.mdx). - `endowment:long-running`, which is deprecated for MetaMask stable but still allowed in MetaMask Flask. @@ -201,7 +197,7 @@ The following are coding security tips and warnings: Do not use insufficient hashing algorithms such as `md5` or `sha2`. Do not roll your own cryptography or use custom or unproven cryptography methods or libraries. - We recommend using [`snap_getEntropy`](../../reference/snaps-api.md#snap_getentropy) for entropy, the + We recommend using [`snap_getEntropy`](../../reference/snaps-api/snap_getentropy.mdx) for entropy, the built-in [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) or [Noble cryptography libraries](https://paulmillr.com/noble/), and safe hashing algorithms such as `sha256`. Choose audited, widely used libraries over obscure, untested implementations. @@ -214,7 +210,7 @@ The following are guidelines for securing your supply chain: to exact versions. If you don't, a supply chain attacker can trick you into including a malicious version of a package instead of the original, legitimate one. - You can quickly check the status of your dependencies by running `npm audit` in your Snap directory. + You can check the status of your dependencies by running `npm audit` in your Snap directory. - **Secure your stack** - Your Snap companion dapp and any remote servers are part of your security model. We recommend using [LavaMoat](https://github.com/LavaMoat/LavaMoat) to secure relevant parts of diff --git a/snaps/learn/resources.md b/snaps/learn/resources.md index 36ff774b203..572520f833e 100644 --- a/snaps/learn/resources.md +++ b/snaps/learn/resources.md @@ -10,30 +10,54 @@ View the following Snaps resources in addition to this documentation site. ## Primary resources - [Snaps homepage](https://metamask.io/snaps/) -- [Snaps directory](https://snaps.metamask.io/) - A directory of allowlisted Snaps you can try in the MetaMask extension. -- [SIPs](https://github.com/MetaMask/SIPs) - Suggest new Snaps APIs with Snaps Improvement Proposals. -- [Builder Engagement Program](https://go.metamask.io/snaps-builders) - Connect with the Snaps builder engagement team and get support while building your Snap. +- [Snaps directory](https://snaps.metamask.io/) - A directory of allowlisted + Snaps you can try in the MetaMask extension. +- [SIPs](https://github.com/MetaMask/SIPs) - Suggest new Snaps APIs with + Snaps Improvement Proposals. ## Example Snaps -- [Example Snaps](https://github.com/MetaMask/snaps/tree/main/packages/examples) - A directory of - Snaps maintained by MetaMask. -- [Linea Voyager](https://github.com/Consensys/linea-voyager-snap) - View Linea XP balance, PoH status, and current Linea Voyage activations from within MetaMask. -- [Starknet](https://github.com/Consensys/starknet-snap) - Adds Starknet account and transaction functionality to MetaMask. -- [Simple Keyring Snap](https://github.com/MetaMask/snap-simple-keyring) - An example account management Snap using the [Keyring API](../reference/keyring-api/index.md). -- [Mystery Fox](https://github.com/Montoya/mystery-fox) - Provides random answers to questions and showcases interactive UI and images. -- [Farcaster Insights](https://github.com/Montoya/farcaster-insights) - Shows if the recipient in a transaction request has a Farcaster account and their stats. -- [Smart Account Template](https://github.com/bcnmy/smart-account-keyring-template) - Template for integrating the Biconomy Smart Account with the [Keyring API](../reference/keyring-api/index.md). +- [Example Snaps](https://github.com/MetaMask/snaps/tree/main/packages/examples) - + A directory of Snaps maintained by MetaMask. +- [Linea Voyager](https://github.com/Consensys/linea-voyager-snap) - View Linea + XP balance, PoH status, and current Linea Voyage activations from within MetaMask. +- [Starknet](https://github.com/Consensys/starknet-snap) - Adds Starknet account + and transaction functionality to MetaMask. +- [Simple Keyring Snap](https://github.com/MetaMask/snap-simple-keyring) - An + example account management Snap using the [Keyring API](../reference/keyring-api/index.md). +- [Mystery Fox](https://github.com/Montoya/mystery-fox) - Provides random answers to + questions and showcases interactive UI and images. +- [Farcaster Insights](https://github.com/Montoya/farcaster-insights) - Shows if + the recipient in a transaction request has a Farcaster account and their stats. +- [Smart Account Template](https://github.com/bcnmy/smart-account-keyring-template) - + Template for integrating the Biconomy Smart Account with the + [Keyring API](../reference/keyring-api/index.md). +- [Text Transformer](https://github.com/Montoya/transformer-snap) - Transforms + strings into Unicode bold, italic, and strikethrough characters for use on social + media. Demonstrates [interactive JSX UI](../features/custom-ui/index.md) in a home page. +- [Social Names](https://github.com/Montoya/social-names-snap) - Adds Farcaster and + Lens handles to the send flow and petnames using + [custom name resolution](../features/custom-name-resolution.md). ## Developer tools - [Template Snap](https://github.com/MetaMask/template-snap-monorepo) - A rich template that includes TypeScript/React and vanilla JavaScript options, a CLI for building, packaging, and deploying your Snap, and a companion dapp UI you can build on. -- [Snaps Simulator](https://metamask.github.io/snaps/snaps-simulator/latest) - A tool for simulating - Snaps in the browser, streamlining the development process. - [Test Snaps](https://github.com/MetaMask/snaps/tree/main/packages/test-snaps) - A collection of test Snaps and [a dapp for evaluating them](https://metamask.github.io/snaps/test-snaps/latest/). +- [`snaps-jest`](https://www.npmjs.com/package/@metamask/snaps-jest) - A Jest preset for end-to-end + testing MetaMask Snaps, including a Jest environment, and a set of Jest matchers. + See [how to test a Snap](../how-to/test-a-snap.md) using `snaps-jest`. +- [Snapper](https://github.com/sayfer-io/Snapper) - A tool for detecting security vulnerabilities, + identifying potential issues, and ensuring best coding practices in your Snap. +- [MetaMask Testing Tools](https://hugomrdias.github.io/metamask/) - A collection of tools for + testing MetaMask, MetaMask Flask, and MetaMask Snaps with [Playwright](https://playwright.dev/), + delivered as an npm package that provides a `createFixture` function that returns a `test` and + `expect` function that can be used to write tests. +- [Snap Install Tester](https://montoya.github.io/snap-install-tester/) - A simple web tool for loading and installing any Snap from npm. + Just provide an npm package ID and (optional) version number, then click to install in MetaMask Flask. +- [Snap Connect Example](https://github.com/Montoya/snap-connect-example) - Example code for connecting to MetaMask from a website and interfacing with a Snap in a reliable way. ## Blog posts @@ -45,7 +69,8 @@ View the following Snaps resources in addition to this documentation site. Here](https://metamask.io/news/latest/snaps-in-metamask-stable-and-where-we-go-from-here/) by Dan Finlay - [MetaMask Snaps Launch with Hardened JavaScript Under the - Hood](https://agoric.com/blog/announcements/metamask-snaps-launch-with-hardened-javascript-under-the-hood) by Agoric + Hood](https://agoric.com/blog/announcements/metamask-snaps-launch-with-hardened-javascript-under-the-hood) + by Agoric - [Navigating the Security Landscape of MetaMask Snaps](https://metamask.io/news/developers/navigating-the-security-landscape-of-metamask-snaps/) by Martin Ortner & Valentin Quelquejay - [Going Beyond The Secret Recovery Phrase In MetaMask With Account Management Snaps](https://metamask.io/news/latest/going-beyond-the-secret-recovery-phrase-in-metamask-with-account-management/) by Alex Jupiter @@ -63,21 +88,29 @@ View the following Snaps resources in addition to this documentation site. ([Slides](https://docs.google.com/presentation/d/1LG8MqRrbb9qSg4m8ZjJXPQFccb9YPc-6387hSNpscpY/edit?usp=sharing)) - [MetaMask Snaps YouTube playlist](https://www.youtube.com/playlist?list=PLJ8kQp5OiaEM6ad6mC1NmJCGJSZm7cBfI) - [How to Build Your Own Polkadot MetaMask Snap](https://www.youtube.com/watch?v=vyb1wVFahvM) (32 min) +- [How to Build and Customize a MetaMask Snap](https://www.youtube.com/watch?v=4bt8udi7po0) (47 min) ## Community -- [Snaps GitHub discussions](https://github.com/MetaMask/snaps/discussions) - Browse discussions and - ask questions about Snaps. -- [Consensys Discord](https://discord.gg/consensys) - Ask questions about Snaps on the **mm-snaps-dev** channel. -- [Snaps GitHub issues](https://github.com/MetaMask/snaps/issues) - If you encounter any issues with - Snaps, open a GitHub issue. +- [Snaps GitHub discussions](https://github.com/MetaMask/snaps/discussions) - Browse + discussions and ask questions about Snaps. +- [Consensys Discord](https://discord.gg/consensys) - Ask questions about Snaps on + the **mm-snaps-dev** channel. +- [Snaps GitHub issues](https://github.com/MetaMask/snaps/issues) - If you encounter + any issues with Snaps, open a GitHub issue. ## Snaps for developers Many Snaps are designed to be used by developers. -- [CubeSigner](https://cubist.dev/cubesigner-snap-hardware-backed-key-management-for-metamask-developers) - Enables dapp developers to manage keys for Ethereum, Bitcoin, Solana, and more using secure remote hardware. -- [Galactica ZK Vault](https://docs.galactica.com/galactica-developer-documentation) - Integrates the Galactica Network for dapps to leverage ZK-proofs for compliant privacy. -- [Hedera Wallet](https://docs.tuum.tech/hedera-wallet-snap) - Build Hedera dapps with the methods provided by Hedera Wallet. -- [Leap Wallet](https://docs.leapwallet.io/cosmos/leap-metamask-snap/integrating-snaps) - Connect Cosmos dapps to MetaMask with Leap Wallet. -- [MinaPortal](https://github.com/sotatek-dev/mina-snap/tree/master/packages/snap#methods) - Build ZkApps on Mina Network with the dapp methods provided by MinaPortal. +- [CubeSigner](https://cubist.dev/cubesigner-snap-hardware-backed-key-management-for-metamask-developers) - + Enables dapp developers to manage keys for Ethereum, Bitcoin, Solana, and more using + secure remote hardware. +- [Galactica ZK Vault](https://docs.galactica.com/galactica-developer-documentation) - + Integrates the Galactica Network for dapps to leverage ZK-proofs for compliant privacy. +- [Hedera Wallet](https://docs.tuum.tech/hedera-wallet-snap) - Build Hedera dapps with + the methods provided by Hedera Wallet. +- [Leap Wallet](https://docs.leapwallet.io/cosmos/leap-metamask-snap/integrating-snaps) - + Connect Cosmos dapps to MetaMask with Leap Wallet. +- [MinaPortal](https://github.com/sotatek-dev/mina-snap/tree/master/packages/snap#methods) - + Build ZkApps on Mina Network with the dapp methods provided by MinaPortal. diff --git a/snaps/learn/tutorials/_category_.json b/snaps/learn/tutorials/_category_.json index d389817fe56..c57773eba40 100644 --- a/snaps/learn/tutorials/_category_.json +++ b/snaps/learn/tutorials/_category_.json @@ -1,8 +1,4 @@ { "label": "Tutorials", - "position": 2, - "link": { - "type": "generated-index", - "slug": "learn/tutorials" - } + "position": 2 } diff --git a/snaps/learn/tutorials/gas-estimation.md b/snaps/learn/tutorials/gas-estimation.md index c82dfb215e4..375d7efbc32 100644 --- a/snaps/learn/tutorials/gas-estimation.md +++ b/snaps/learn/tutorials/gas-estimation.md @@ -37,30 +37,31 @@ Next, `cd` into the `gas-estimation-snap` project directory and run: yarn install ``` -This initializes your development environment with the required dependencies. +This initializes your development environment with the required dependencies.
Did you get a warning?
-You may get a warning such as: +You may get a warning such as: ```bash @lavamoat/allow-scripts has detected dependencies without configuration. explicit configuration required. run "allow-scripts auto" to automatically populate the configuration. ``` + You can resolve this error by running: - + ```bash yarn run allow-scripts auto ``` +
- ### 2. (Optional) Customize your Snap's UX -This Snap is generated from a TypeScript template Snap. We recommend customizing your -Snap to improve its UX, but this is optional for testing. If you don't wish to customize your Snap, +This Snap is generated from a TypeScript template Snap. We recommend customizing your +Snap to improve its UX, but this is optional for testing. If you don't wish to customize your Snap, skip to [Step 3](#3-enable-network-access). #### 2.1. Provide an icon @@ -75,7 +76,7 @@ mkdir packages/snap/images Download [this `gas.svg` icon file](https://raw.githubusercontent.com/Montoya/gas-fee-snap/main/packages/snap/images/gas.svg) -into that `ìmages` folder. +into that `images` folder.
Icon attribution @@ -108,8 +109,8 @@ gas-estimation-snap/ ├─ ... (other stuff) ``` -Open `packages/snap/snap.manifest.json` in a text editor. This file contains the main configuration -details for your Snap. Edit the `npm` object, within the `location` object, and add `iconPath` with +Open `packages/snap/snap.manifest.json` in a text editor. This file contains the main configuration +details for your Snap. Edit the `npm` object, within the `location` object, and add `iconPath` with the value `"images/gas.svg"` to point to your new icon: ```json title="snap.manifest.json" @@ -123,7 +124,7 @@ the value `"images/gas.svg"` to point to your new icon: } ``` -Open `packages/snap/package.json` in a text editor. Edit the `files` array and reference the +Open `packages/snap/package.json` in a text editor. Edit the `files` array and reference the `images/` folder: ```json title="package.json" @@ -141,7 +142,7 @@ your Snap's name in MetaMask. MetaMask uses the `proposedName` of the Snap, currently "TypeScript Example" in the template. Open `packages/snap/snap.manifest.json` in a text editor. -Edit the `"proposedName"` property within the metadata to provide a functional name such as +Edit the `"proposedName"` property within the metadata to provide a functional name such as "Gas Estimator": ```json title="snap.manifest.json" @@ -162,7 +163,7 @@ Edit the `Button` property to provide functional label text such as "Estimate Ga export const SendHelloButton = (props: ComponentProps) => { return ; }; -```` +``` These three updates are the minimum required to ensure that each user interaction with your Snap is well-informed. However, your Snap will function without these tweaks. @@ -192,21 +193,21 @@ To get a gas fee estimate, use the public API endpoint provided by [Open Source Ethereum Explorer](https://beaconcha.in/). Add the following `getFees()` function to the beginning of the `/packages/snap/src/index.tsx` file: -```typescript title="index.ts" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" -import { Box, Text } from "@metamask/snaps-sdk/jsx" +```typescript title="index.tsx" +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' +import { Box, Text } from '@metamask/snaps-sdk/jsx' async function getFees() { - const response = await fetch("https://beaconcha.in/api/v1/execution/gasnow") + const response = await fetch('https://beaconcha.in/api/v1/execution/gasnow') return response.text() } ``` Next, add the `Copyable` component to the second import of the file: -```typescript title="index.ts" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" -import { Box, Text, Copyable } from "@metamask/snaps-sdk/jsx" +```typescript title="index.tsx" +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' +import { Box, Text, Copyable } from '@metamask/snaps-sdk/jsx' ``` Modify the Snap RPC message handler that displays the dialog. @@ -235,7 +236,7 @@ case "hello": }); ``` -### 5. Build and test the Snap +### 5. Build and test your Snap Complete the following steps to build and test your Snap: @@ -253,7 +254,7 @@ You can now view site in the browser. Open [`localhost:8000`](http://localhost:8000/) in your browser (with MetaMask Flask installed). A page like the following displays: -Test dapp with template Snap +Test dapp with template Snap This is a template test dapp for installing and testing your Snap. @@ -271,7 +272,7 @@ Next, select **Confirm** > **OK**. Select the **Send message** button (or **Estimate gas** button, if you followed Step 2). A dialog prompt displays with the response from the gas fee API:

-Gas estimation dialog +Gas estimation dialog

Congratulations, you have integrated a public API into MetaMask and displayed real-time gas fee estimates. @@ -279,20 +280,21 @@ Congratulations, you have integrated a public API into MetaMask and displayed re ### Next steps You can improve your Snap's UX by: + - Completing [Step 2](#2-optional-customize-your-snaps-ux). - Parsing the JSON response from the remote API. - Formatting the fees for better readability. -Before publishing a Snap, it's also important to customize the metadata and properties of your Snap: +Before publishing a Snap, it's also important to customize the metadata and properties of your Snap: - Update the `location` in `snap.manifest.json` to your Snap's published location. - Update the `description` in `snap.manifest.json` to a description of your Snap. - Update the `name`, `version`, `description`, and `repository` fields of -`/packages/snap/package.json` (even if you do not plan to publish your Snap to npm). + `/packages/snap/package.json` (even if you do not plan to publish your Snap to npm). - Update the content of `/packages/site/src/pages/index.tsx` by changing the -name of the method for showing gas fee estimates. If you change the method name in -`/packages/site/src/pages/index.tsx`, ensure you change the method name in -`/packages/snap/src/index.ts` to match. + name of the method for showing gas fee estimates. If you change the method name in + `/packages/site/src/pages/index.tsx`, ensure you change the method name in + `/packages/snap/src/index.ts` to match. :::note When editing `source`, the `shasum` is set automatically when you build from the command line. diff --git a/snaps/learn/tutorials/transaction-insights.md b/snaps/learn/tutorials/transaction-insights.md index 64471842b1c..8dcf943aff9 100644 --- a/snaps/learn/tutorials/transaction-insights.md +++ b/snaps/learn/tutorials/transaction-insights.md @@ -8,11 +8,11 @@ import TabItem from "@theme/TabItem"; # Create a Snap to calculate gas fee percentages -This tutorial walks you through creating a Snap that calculates the percentage of gas fees they would +This tutorial walks you through creating a Snap that calculates the percentage of gas fees they would pay for their transaction. -It gets the current gas price by calling the [`eth_gasPrice`](/wallet/reference/eth_gasPrice) RPC -method using the global Ethereum provider made available to Snaps, and displays this as a percentage +It gets the current gas price by calling the [`eth_gasPrice`](/metamask-connect/evm/reference/json-rpc-api) RPC +method using the global Ethereum provider made available to Snaps, and displays this as a percentage of gas fees in a tab in MetaMask's transaction confirmation window. ## Prerequisites @@ -44,35 +44,36 @@ Next, `cd` into the `transaction-insights-snap` project directory and run: yarn install ``` -This initializes your development environment with the required dependencies. +This initializes your development environment with the required dependencies.
Did you get a warning?
-You may get a warning such as: +You may get a warning such as: ```bash @lavamoat/allow-scripts has detected dependencies without configuration. explicit configuration required. run "allow-scripts auto" to automatically populate the configuration. ``` -You can resolve the issue by running: +You can resolve the issue by running: ```bash yarn run allow-scripts auto -``` +``` +
### 2. (Optional) Customize your Snap's UX -This Snap is generated from a TypeScript template Snap. We recommend customizing your -Snap to improve its UX, but this is optional for testing. If you don't wish to customize your Snap, +This Snap is generated from a TypeScript template Snap. We recommend customizing your +Snap to improve its UX, but this is optional for testing. If you don't wish to customize your Snap, skip to [Step 3](#3-enable-transaction-insights-and-the-ethereum-provider). -#### 2.1. Provide an icon +#### 2.1. Provide an icon -[Optimize your metadata](../best-practices/design-guidelines.md#optimize-your-metadata) and display an +[Optimize your metadata](../best-practices/design-guidelines.md#optimize-your-metadata) and display an icon for your Snap in MetaMask. Create a new folder `images` in the Snap package `packages/snap/`: @@ -83,7 +84,7 @@ mkdir packages/snap/images Download [this `gas.svg` icon file](https://raw.githubusercontent.com/Montoya/gas-fee-snap/main/packages/snap/images/gas.svg) -into that `ìmages` folder. +into that `images` folder.
Icon attribution @@ -116,8 +117,8 @@ transaction-insights-snap/ ├─ ... (other stuff) ``` -Open `packages/snap/snap.manifest.json` in a text editor. This file contains the main configuration -details for your Snap. Edit the `npm` object, within the `location` object, and add `iconPath` with +Open `packages/snap/snap.manifest.json` in a text editor. This file contains the main configuration +details for your Snap. Edit the `npm` object, within the `location` object, and add `iconPath` with the value `"images/gas.svg"` to point to your new icon: ```json title="snap.manifest.json" @@ -131,7 +132,7 @@ the value `"images/gas.svg"` to point to your new icon: } ``` -Open `packages/snap/package.json` in a text editor. Edit the `files` array and reference the +Open `packages/snap/package.json` in a text editor. Edit the `files` array and reference the `images/` folder: ```json title="package.json" @@ -173,7 +174,7 @@ button: ( disabled={true} /> ), -```` +``` These three updates are the minimum required to ensure that each user interaction with your Snap is well-informed. However, your Snap will function without these tweaks. @@ -207,35 +208,31 @@ replace the code in `packages/snap/src/index.ts` with the following: ```tsx title="index.tsx" -import type { OnTransactionHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text, Bold } from "@metamask/snaps-sdk/jsx"; +import type { OnTransactionHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text, Bold } from '@metamask/snaps-sdk/jsx' // Handle outgoing transactions. export const onTransaction: OnTransactionHandler = async ({ transaction }) => { - // Use the Ethereum provider to fetch the gas price. - const currentGasPrice = await ethereum.request({ - method: "eth_gasPrice", - }) as string; + const currentGasPrice = (await ethereum.request({ + method: 'eth_gasPrice', + })) as string // Get fields from the transaction object. - const transactionGas = parseInt(transaction.gas as string, 16); - const currentGasPriceInWei = parseInt(currentGasPrice ?? "", 16); - const maxFeePerGasInWei = parseInt(transaction.maxFeePerGas as string, 16); - const maxPriorityFeePerGasInWei = parseInt( - transaction.maxPriorityFeePerGas as string, - 16, - ); + const transactionGas = parseInt(transaction.gas as string, 16) + const currentGasPriceInWei = parseInt(currentGasPrice ?? '', 16) + const maxFeePerGasInWei = parseInt(transaction.maxFeePerGas as string, 16) + const maxPriorityFeePerGasInWei = parseInt(transaction.maxPriorityFeePerGas as string, 16) // Calculate gas fees the user would pay. const gasFees = Math.min( maxFeePerGasInWei * transactionGas, - (currentGasPriceInWei + maxPriorityFeePerGasInWei) * transactionGas, - ); + (currentGasPriceInWei + maxPriorityFeePerGasInWei) * transactionGas + ) // Calculate gas fees as percentage of transaction. - const transactionValueInWei = parseInt(transaction.value as string, 16); - const gasFeesPercentage = (gasFees / (gasFees + transactionValueInWei)) * 100; + const transactionValueInWei = parseInt(transaction.value as string, 16) + const gasFeesPercentage = (gasFees / (gasFees + transactionValueInWei)) * 100 // Display percentage of gas fees in the transaction insights UI. return { @@ -248,32 +245,29 @@ export const onTransaction: OnTransactionHandler = async ({ transaction }) => { ), - }; -}; + } +} ``` ```typescript title="index.ts" -import type { OnTransactionHandler } from "@metamask/snaps-sdk" -import { heading, panel, text } from "@metamask/snaps-sdk" +import type { OnTransactionHandler } from '@metamask/snaps-sdk' +import { heading, panel, text } from '@metamask/snaps-sdk' // Handle outgoing transactions. export const onTransaction: OnTransactionHandler = async ({ transaction }) => { // Use the Ethereum provider to fetch the gas price. const currentGasPrice = (await ethereum.request({ - method: "eth_gasPrice", + method: 'eth_gasPrice', })) as string // Get fields from the transaction object. const transactionGas = parseInt(transaction.gas as string, 16) - const currentGasPriceInWei = parseInt(currentGasPrice ?? "", 16) + const currentGasPriceInWei = parseInt(currentGasPrice ?? '', 16) const maxFeePerGasInWei = parseInt(transaction.maxFeePerGas as string, 16) - const maxPriorityFeePerGasInWei = parseInt( - transaction.maxPriorityFeePerGas as string, - 16 - ) + const maxPriorityFeePerGasInWei = parseInt(transaction.maxPriorityFeePerGas as string, 16) // Calculate gas fees the user would pay. const gasFees = Math.min( @@ -288,7 +282,7 @@ export const onTransaction: OnTransactionHandler = async ({ transaction }) => { // Display percentage of gas fees in the transaction insights UI. return { content: panel([ - heading("Transaction insights Snap"), + heading('Transaction insights Snap'), text( `As set up, you are paying **${gasFeesPercentage.toFixed(2)}%** in gas fees for this transaction.` @@ -301,11 +295,13 @@ export const onTransaction: OnTransactionHandler = async ({ transaction }) => { -:::tip -If you have previously developed a dapp, you're likely familiar with accessing the Ethereum provider -using `window.ethereum`. In a Snap, the `window` object is not available. Instead, when you request -the `endowment:ethereum-provider` permission, your Snap is granted access to the +:::note Notes + +If you have previously developed a dapp, you're likely familiar with accessing the Ethereum provider +using `window.ethereum`. In a Snap, the `window` object is not available. Instead, when you request +the `endowment:ethereum-provider` permission, your Snap is granted access to the [`ethereum` global object](../about-snaps/apis.md#snap-requests). + ::: ### 5. Build and test your Snap @@ -331,12 +327,13 @@ A template test dapp displays, for installing and testing your Snap. Select **Connect** and accept the permission request. After connecting, you're prompted to install the Snap with the following permissions: -- **Access the Ethereum provider** + +- **Access the Ethereum provider** - **Fetch and display transaction insights** Next, select **Confirm** > **OK**. -From MetaMask Flask, create a new testnet ETH transfer. +From MetaMask Flask, create a new testnet ETH transfer. :::tip @@ -349,7 +346,7 @@ Switching to the tab activates the [`onTransaction`](../../reference/entry-point entry point of your Snap and displays the percentage of gas fees in the transaction insights UI:

-Transaction insights UI +Transaction insights UI

:::warning @@ -375,17 +372,15 @@ For contract interactions, add the following code to the beginning of the `onTra ```tsx title="index.tsx" -if (typeof transaction.data === "string" && transaction.data !== "0x") { +if (typeof transaction.data === 'string' && transaction.data !== '0x') { return { content: ( Gas Percentage Calculator - - This Snap only provides transaction insights for simple ETH transfers. - + This Snap only provides transaction insights for simple ETH transfers. ), - }; + } } ``` @@ -393,13 +388,11 @@ if (typeof transaction.data === "string" && transaction.data !== "0x") { ```typescript title="index.ts" -if (typeof transaction.data === "string" && transaction.data !== "0x") { +if (typeof transaction.data === 'string' && transaction.data !== '0x') { return { content: panel([ - heading("Gas Percentage Calculator"), - text( - "This Snap only provides transaction insights for simple ETH transfers." - ), + heading('Gas Percentage Calculator'), + text('This Snap only provides transaction insights for simple ETH transfers.'), ]), } } @@ -410,16 +403,17 @@ if (typeof transaction.data === "string" && transaction.data !== "0x") { #### Customize your Snap -You can improve your Snap's UX by completing [Step 2](#2-optional-customize-your-snaps-ux). Consider -updating `packages/site/src/pages/index.tsx` to remove the +You can improve your Snap's UX by completing [Step 2](#2-optional-customize-your-snaps-ux). Consider +updating `packages/site/src/pages/index.tsx` to remove the non-functional **Send message** button. -Before publishing a Snap, it's also important to customize the metadata and properties of your Snap, +Before publishing a Snap, it's also important to customize the metadata and properties of your Snap, for example: + - Update the `location` in `snap.manifest.json` to your Snap's published location. - Update the `description` in `snap.manifest.json` to a description of your Snap. - Update the `name`, `version`, `description`, and `repository` fields of -`/packages/snap/package.json` (even if you do not plan to publish your Snap to npm). + `/packages/snap/package.json` (even if you do not plan to publish your Snap to npm). :::note When editing `source`, the `shasum` is set automatically when you build from the command line. diff --git a/snaps/reference/cli.md b/snaps/reference/cli.md new file mode 100644 index 00000000000..9da61972f3f --- /dev/null +++ b/snaps/reference/cli.md @@ -0,0 +1,216 @@ +--- +sidebar_label: Snaps CLI +sidebar_position: 3 +toc_max_heading_level: 4 +description: See the Snaps CLI subcommands reference. +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Snaps CLI + +This reference describes the syntax of the Snaps command line interface (CLI) subcommands and +subcommand options. + +You can specify subcommands and their options using the `yarn mm-snap` command: + +```bash +yarn mm-snap [SUBCOMMAND] [SUBCOMMAND OPTIONS] +``` + +:::note +This documentation assumes you created your Snap using the [`@metamask/create-snap`](https://github.com/MetaMask/snaps/tree/main/packages/create-snap) starter kit, which includes the Snaps CLI. +You can also install the CLI directly using the [`@metamask/snaps-cli`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-cli) package. +::: + +### `b`, `build` + +```bash +yarn mm-snap build +``` + +Builds a Snap from source. + +`b` is an alias for `build`. + +#### `analyze` + + + + +```bash +yarn mm-snap build --analyze +``` + + + + +Enables analyzing the Snap [bundle](../learn/about-snaps/files.md#bundle-file). +This uses [`webpack-bundle-analyzer`](https://github.com/webpack-contrib/webpack-bundle-analyzer) under the hood, +which creates an interactive visualization of the contents of your bundle. +The visualization is located at the URL displayed in the command line output (for example, `http://localhost:8888`). + +:::info +This option requires [`@metamask/snaps-cli`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-cli) version 6.7.0 or later. +::: + +#### `c`, `config` + + + + +```bash +yarn mm-snap build --config +``` + + + + +```bash +yarn mm-snap build --config ./snap.config.build.ts +``` + + + + +Path to the [configuration file](../learn/about-snaps/files.md#configuration-file), +which specifies [options](config-options.md) with which to the build the Snap. + +`-c` is an alias for `--config`. + +### `e`, `eval` + +```bash +yarn mm-snap eval +``` + +Attempts to evaluate the Snap bundle in +[Secure ECMAScript (SES)](../learn/about-snaps/execution-environment.md#secure-ecmascript-ses). + +`e` is an alias for `eval`. + +### `m`, `manifest` + +```bash +yarn mm-snap manifest +``` + +Validates the Snap [manifest file](../learn/about-snaps/files.md#manifest-file). + +`m` is an alias for `manifest`. + +#### `fix` + + + + +```bash +yarn mm-snap manifest --fix +``` + + + + +Enables making any changes to fix the manifest file. + +### `sandbox` + +```bash +yarn mm-snap sandbox +``` + +Starts a [Snaps sandbox](../how-to/test-a-snap.md#test-in-the-sandbox) server, where you can interact with and test a Snap. + +:::info +This option requires [`@metamask/snaps-cli`](https://github.com/MetaMask/snaps/tree/main/packages/snaps-cli) version 7.1.0 or later. +::: + +### `s`, `serve` + +```bash +yarn mm-snap serve +``` + +Locally serves Snap files for testing. + +`s` is an alias for `serve`. + +#### `p`, `port` + + + + +```bash +yarn mm-snap serve --port +``` + + + + +```bash +yarn mm-snap serve --port 9000 +``` + + + + +The local server port for testing. +The default is `8081`. + +`-p` is an alias for `--port`. + +### `w`, `watch` + +```bash +yarn mm-snap watch +``` + +Rebuilds a Snap from source upon changes. + +`w` is an alias for `watch`. + +#### `p`, `port` + + + + +```bash +yarn mm-snap watch --port +``` + + + + +```bash +yarn mm-snap watch --port 9000 +``` + + + + +The local server port for testing. +The default is `8081`. + +`-p` is an alias for `--port`. + +## Global options + +#### `h`, `help` + +```bash +-h, --help +``` + +Displays the help message and exits. +You can use this option with `mm-snap` or any subcommand. + +`-h` is an alias for `--help`. + +#### `version` + +```bash +--version +``` + +Displays the version number and exits. diff --git a/snaps/reference/cli/_category_.json b/snaps/reference/cli/_category_.json deleted file mode 100644 index 1ab199f895f..00000000000 --- a/snaps/reference/cli/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Snaps command line", - "position": 3, - "link": { - "type": "generated-index", - "slug": "reference/cli" - } -} diff --git a/snaps/reference/cli/options.md b/snaps/reference/cli/options.md deleted file mode 100644 index 11b66092110..00000000000 --- a/snaps/reference/cli/options.md +++ /dev/null @@ -1,629 +0,0 @@ ---- -sidebar_label: Options -sidebar_position: 1 -toc_max_heading_level: 4 -description: See the Snaps CLI options reference. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Snaps configuration options - -This reference describes the syntax of the Snaps command line interface (CLI) configuration options. -You can specify these options in the -[configuration file](../../learn/about-snaps/files.md#configuration-file). - -### `bundler` - - - - -```javascript -bundler: , -``` - - - - -```javascript -bundler: "webpack", -``` - - - - -The bundler to use. -The options are `"webpack"` and `"browserify"`. -The default is `"webpack"`. - -:::caution important -We recommend using the Webpack bundler. -The Browserify-based configuration is deprecated and will be removed in the future. -This reference describes the configuration options for Webpack. -For Browserify, see the -[legacy options](https://github.com/MetaMask/snaps/tree/455366f19281801ed4220431100e45237dd5cf1e/packages/snaps-cli#legacy-options). -::: - -### `customizeWebpackConfig` - - - - -```typescript -customizeWebpackConfig: , -``` - - - - -```typescript -customizeWebpackConfig: (config) => - merge(config, { - plugins: [ - // Add a plugin. - ], - module: { - rules: [ - // Add a loader. - ], - }, - }), -``` - - - - -A function that customizes the Webpack configuration. -For example, you can use this option to add a Webpack plugin, provide a polyfill, or add a loader. - -The function should receive the Webpack configuration object and return the modified configuration object. -For convenience, the Snaps CLI exports a `merge` function that you can use to merge the -configuration object with the -[default Webpack configuration](https://github.com/MetaMask/snaps/blob/main/packages/snaps-cli/src/webpack/config.ts). - -### `environment` - - - - -```javascript -environment: , -``` - - - - -```javascript -environment: { - SNAP_ENV: process.env.SNAP_ENV, - PUBLIC_KEY: process.env.PUBLIC_KEY, -}, -``` - - - - -The environment configuration. -You can use this to [set environment variables for the Snap](../../how-to/use-environment-variables.md), -which can be accessed using `process.env`. - -### `evaluate` - - - - -```javascript -evaluate: , -``` - - - - -```javascript -evaluate: true, -``` - - - - -Enables or disables evaluating the bundle. -When set to `true`, the bundle is checked for compatibility issues with the Snaps runtime. -If there are any issues, the CLI exits with an error. - -### `experimental` - -Experimental features. - -:::caution -These features are not stable, and might change in the future. -::: - -#### `experimental.wasm` - - - - -```javascript -experimental: { - wasm: , -}, -``` - - - - -```javascript -experimental: { - wasm: true, -}, -``` - - - - -Enables or disables WebAssembly support. -When set to `true`, WebAssembly files can be imported in the Snap. -For example: - -```typescript -import program from "./program.wasm" - -// Program is initialized synchronously. -// ... -``` - -### `features` - -#### `features.images` - - - - -```javascript -features: { - images: , -}, -``` - - - - -```javascript -features: { - images: false, -}, -``` - - - - -Enables or disables [image support](../../features/custom-ui/index.md#image). -The default is `true`. - -### `input` - - - - -```javascript -input: , -``` - - - - -```javascript -input: "src/index.js", -``` - - - - -The entry point of the Snap. -This is the file that will be bundled. -The default is `"src/index.js"`. - -### `manifest` - -The Snap [manifest file](../../learn/about-snaps/files.md#manifest-file) configuration. - -#### `manifest.path` - - - - -```javascript -manifest: { - path: , -}, -``` - - - - -```javascript -manifest: { - path: "snap.manifest.json", -}, -``` - - - - -Path to the Snap manifest file. -The default is `"snap.manifest.json"`. - -#### `manifest.update` - - - - -```javascript -manifest: { - update: , -}, -``` - - - - -```javascript -manifest: { - update: false, -}, -``` - - - - -Enables or disables updating the manifest file with the bundle shasum, and making any other possible updates. -If set to `false`, the manifest is not updated, and an error is thrown if the manifest is not up-to-date. -The default is `true`. - -### `output` - -The output configuration. - -#### `output.clean` - - - - -```javascript -output: { - clean: , -}, -``` - - - - -```javascript -output: { - clean: true, -}, -``` - - - - -Enables or disables cleaning the output directory before building. -The default is `false`. - -#### `output.filename` - - - - -```javascript -output: { - filename: , -}, -``` - - - - -```javascript -output: { - filename: "bundle.js", -}, -``` - - - - -The output filename. -The default is `"bundle.js"`. - -#### `output.minimize` - - - - -```javascript -output: { - minimize: , -}, -``` - - - - -```javascript -output: { - minimize: false, -}, -``` - - - - -Enables or disables minimizing the bundle. -Minimizing the bundle removes comments and whitespace, mangles variable names, and performs other optimizations. -The default is `true`. - -#### `output.path` - - - - -```javascript -output: { - path: , -}, -``` - - - - -```javascript -output: { - path: "dist", -}, -``` - - - - -Path to the output directory. -The default is `"dist"`. - -### `polyfills` - - - - -```javascript -polyfills: -``` - - - - -```javascript -polyfills: { - buffer: true, - crypto: true, - path: true, -} -``` - - - - -Enables or disables providing polyfills for Node.js built-in modules. -If set to `true`, all available polyfills are provided. -The default is `false`. - -You can also set this option to an object with specific polyfills set to `true`. -See [the list of available polyfills](https://github.com/MetaMask/snaps/blob/51a1d04ea50c5c286262df1959ef0b1ced84b6e2/packages/snaps-cli/src/config.ts#L383-L416). - -### `server` - -The development server configuration. -The development server is used to test the Snap during development, using the -[`watch`](subcommands.md#w-watch) and [`serve`](subcommands.md#s-serve) subcommands. - -#### `server.enabled` - - - - -```javascript -server: { - enabled: , -}, -``` - - - - -```javascript -server: { - enabled: false, -}, -``` - - - - -Enables or disables the development server. - -#### `server.port` - - - - -```javascript -server: { - port: , -}, -``` - - - - -```javascript -server: { - port: 9000, -}, -``` - - - - -The port to run the development server on. -If set to `0`, a random port is used. -The default is `8081`. - -#### `server.root` - - - - -```javascript -server: { - root: , -}, -``` - - - - -```javascript -server: { - root: "snap", -}, -``` - - - - -The root directory of the development server. -This is the directory that is served by the development server. -The default is the current working directory. - -### `sourceMap` - - - - -```javascript -sourceMap: , -``` - - - - -```javascript -sourceMap: "inline", -``` - - - - -Enables or disables generating a source map. -If set to `"inline"`, the source map is inlined in the bundle. -If set to `true` or not specified, it is written to a separate file. -The default is `true`. - -### `stats` - -The stats configuration, which controls the log output of the CLI. - -#### `stats.buffer` - - - - -```javascript -stats: { - buffer: , -}, -``` - - - - -```javascript -stats: { - buffer: false, -}, -``` - - - - -Enables or disables showing a warning if the `Buffer` global is used but not provided. -The `Buffer` global is not available in the Snaps runtime by default. -To use `Buffer`, set [`polyfills`](#polyfills) to `true`. - -The default is `true`. - -#### `stats.builtIns` - - - - -```javascript -stats: { - builtIns: , -}, -``` - - - - -```javascript -stats: { - builtIns: { - ignore: [ - // Built-in modules to ignore. - ], - }, -}, -``` - - - - -Enables or disables checking for missing built-in modules. - -Not specifying this option, or specifying an ignore list, enables checking for missing built-in modules. -When enabled, the CLI shows a warning if a built-in is used but not provided. -The Snaps CLI does not support Node.js built-ins out of the box. -To use built-ins, set [`polyfills`](#polyfills) to `true`. - -You can specify a list of built-ins to ignore when checking for missing built-ins. -This is useful if the built-in is not actually used in the Snap, but is added by a dependency. - -The default is an empty ignore list. - -#### `stats.verbose` - - - - -```javascript -stats: { - verbose: , -}, -``` - - - - -```javascript -stats: { - verbose: true, -}, -``` - - - - -Enables or disables verbose logging. -If set to `true`, the CLI logs more information. -The default is `false`. diff --git a/snaps/reference/cli/subcommands.md b/snaps/reference/cli/subcommands.md deleted file mode 100644 index 717dec526b2..00000000000 --- a/snaps/reference/cli/subcommands.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -sidebar_label: Subcommands -sidebar_position: 2 -toc_max_heading_level: 4 -description: See the Snaps CLI subcommands reference. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Snaps subcommands - -This reference describes the syntax of the Snaps command line interface (CLI) subcommands and -subcommand options. - -You can specify subcommands and their options using the `yarn mm-snap` command: - -```bash -yarn mm-snap [SUBCOMMAND] [SUBCOMMAND OPTIONS] -``` - -### `b`, `build` - -```bash -yarn mm-snap build -``` - -Builds a Snap from source. - -`b` is an alias for `build`. - -#### `c`, `config` - - - - -```bash -yarn mm-snap build --config -``` - - - - -```bash -yarn mm-snap build --config ./snap.config.build.ts -``` - - - - -Path to the [configuration file](../../learn/about-snaps/files.md#configuration-file). - -`-c` is an alias for `--config`. - -### `e`, `eval` - -```bash -yarn mm-snap eval -``` - -Attempts to evaluate the Snap bundle in -[Secure ECMAScript (SES)](../../learn/about-snaps/execution-environment.md#secure-ecmascript-ses). - -`e` is an alias for `eval`. - -### `m`, `manifest` - -```bash -yarn mm-snap manifest -``` - -Validates the Snap [manifest file](../../learn/about-snaps/files.md#manifest-file). - -`m` is an alias for `manifest`. - -#### `fix` - - - - -```bash -yarn mm-snap manifest --fix -``` - - - - -```bash -yarn mm-snap manifest --fix false -``` - - - - -Enables or disables making any changes to fix the manifest file. -The default is `true`. - -### `s`, `serve` - -```bash -yarn mm-snap serve -``` - -Locally serves Snap files for testing. - -`s` is an alias for `serve`. - -#### `p`, `port` - - - - -```bash -yarn mm-snap serve --port -``` - - - - -```bash -yarn mm-snap serve --port 9000 -``` - - - - -The local server port for testing. -The default is `8081`. - -`-p` is an alias for `--port`. - -### `w`, `watch` - -```bash -yarn mm-snap watch -``` - -Rebuilds a Snap from source upon changes. - -`w` is an alias for `watch`. - -#### `p`, `port` - - - - -```bash -yarn mm-snap watch --port -``` - - - - -```bash -yarn mm-snap watch --port 9000 -``` - - - - -The local server port for testing. -The default is `8081`. - -`-p` is an alias for `--port`. - -## Global options - -#### `h`, `help` - -```bash --h, --help -``` - -Displays the help message and exits. -You can use this option with `mm-snap` or any subcommand. - -`-h` is an alias for `--help`. - -#### `version` - -```bash ---version -``` - -Displays the version number and exits. diff --git a/snaps/reference/config-options.md b/snaps/reference/config-options.md new file mode 100644 index 00000000000..507f19a1261 --- /dev/null +++ b/snaps/reference/config-options.md @@ -0,0 +1,598 @@ +--- +sidebar_label: Configuration options +sidebar_position: 4 +toc_max_heading_level: 4 +description: See the Snaps configuration options reference. +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Snaps configuration options + +This reference describes the syntax of the Snaps command line interface (CLI) configuration options. +You can specify these options in the +[configuration file](../learn/about-snaps/files.md#configuration-file). + +### `customizeWebpackConfig` + + + + +```typescript +customizeWebpackConfig: , +``` + + + + +```typescript +customizeWebpackConfig: (config) => + merge(config, { + plugins: [ + // Add a plugin. + ], + module: { + rules: [ + // Add a loader. + ], + }, + }), +``` + + + + +A function that customizes the Webpack configuration. +For example, you can use this option to add a Webpack plugin, provide a polyfill, or add a loader. + +The function should receive the Webpack configuration object and return the modified configuration object. +For convenience, the Snaps CLI exports a `merge` function that you can use to merge the +configuration object with the +[default Webpack configuration](https://github.com/MetaMask/snaps/blob/main/packages/snaps-cli/src/webpack/config.ts). + +### `environment` + + + + +```javascript +environment: , +``` + + + + +```javascript +environment: { + SNAP_ENV: process.env.SNAP_ENV, + PUBLIC_KEY: process.env.PUBLIC_KEY, +}, +``` + + + + +The environment configuration. +You can use this to [set environment variables for the Snap](../how-to/use-environment-variables.md), +which can be accessed using `process.env`. + +### `evaluate` + + + + +```javascript +evaluate: , +``` + + + + +```javascript +evaluate: true, +``` + + + + +Enables or disables evaluating the bundle. +When set to `true`, the bundle is checked for compatibility issues with the Snaps runtime. +If there are any issues, the CLI exits with an error. + +### `experimental` + +Experimental features. + +:::caution +These features are not stable, and might change in the future. +::: + +#### `experimental.wasm` + + + + +```javascript +experimental: { + wasm: , +}, +``` + + + + +```javascript +experimental: { + wasm: true, +}, +``` + + + + +Enables or disables WebAssembly support. +When set to `true`, WebAssembly files can be imported in the Snap. +For example: + +```typescript +import program from './program.wasm' + +// Program is initialized synchronously. +// ... +``` + +### `features` + +#### `features.images` + + + + +```javascript +features: { + images: , +}, +``` + + + + +```javascript +features: { + images: false, +}, +``` + + + + +Enables or disables [image support](../features/custom-ui/index.md#image). +The default is `true`. + +### `input` + + + + +```javascript +input: , +``` + + + + +```javascript +input: "src/index.js", +``` + + + + +The entry point of the Snap. +This is the file that will be bundled. +The default is `"src/index.js"`. + +### `manifest` + +The Snap [manifest file](../learn/about-snaps/files.md#manifest-file) configuration. + +#### `manifest.path` + + + + +```javascript +manifest: { + path: , +}, +``` + + + + +```javascript +manifest: { + path: "snap.manifest.json", +}, +``` + + + + +Path to the Snap manifest file. +The default is `"snap.manifest.json"`. + +#### `manifest.update` + + + + +```javascript +manifest: { + update: , +}, +``` + + + + +```javascript +manifest: { + update: false, +}, +``` + + + + +Enables or disables updating the manifest file with the bundle shasum, and making any other possible updates. +If set to `false`, the manifest is not updated, and an error is thrown if the manifest is not up-to-date. +The default is `true`. + +### `output` + +The output configuration. + +#### `output.clean` + + + + +```javascript +output: { + clean: , +}, +``` + + + + +```javascript +output: { + clean: true, +}, +``` + + + + +Enables or disables cleaning the output directory before building. +The default is `false`. + +#### `output.filename` + + + + +```javascript +output: { + filename: , +}, +``` + + + + +```javascript +output: { + filename: "bundle.js", +}, +``` + + + + +The output filename. +The default is `"bundle.js"`. + +#### `output.minimize` + + + + +```javascript +output: { + minimize: , +}, +``` + + + + +```javascript +output: { + minimize: false, +}, +``` + + + + +Enables or disables minimizing the bundle. +Minimizing the bundle removes comments and whitespace, mangles variable names, and performs other optimizations. +The default is `true`. + +#### `output.path` + + + + +```javascript +output: { + path: , +}, +``` + + + + +```javascript +output: { + path: "dist", +}, +``` + + + + +Path to the output directory. +The default is `"dist"`. + +### `polyfills` + + + + +```javascript +polyfills: +``` + + + + +```javascript +polyfills: { + buffer: true, + crypto: true, + path: true, +} +``` + + + + +Enables or disables providing polyfills for Node.js built-in modules. +If set to `true`, all available polyfills are provided. +The default is `false`. + +You can also set this option to an object with specific polyfills set to `true`. +See [the list of available polyfills](https://github.com/MetaMask/snaps/blob/51a1d04ea50c5c286262df1959ef0b1ced84b6e2/packages/snaps-cli/src/config.ts#L383-L416). + +### `server` + +The development server configuration. +The development server is used to test the Snap during development, using the +[`watch`](cli.md#w-watch) and [`serve`](cli.md#s-serve) subcommands. + +#### `server.enabled` + + + + +```javascript +server: { + enabled: , +}, +``` + + + + +```javascript +server: { + enabled: false, +}, +``` + + + + +Enables or disables the development server. + +#### `server.port` + + + + +```javascript +server: { + port: , +}, +``` + + + + +```javascript +server: { + port: 9000, +}, +``` + + + + +The port to run the development server on. +If set to `0`, a random port is used. +The default is `8081`. + +#### `server.root` + + + + +```javascript +server: { + root: , +}, +``` + + + + +```javascript +server: { + root: "snap", +}, +``` + + + + +The root directory of the development server. +This is the directory that is served by the development server. +The default is the current working directory. + +### `sourceMap` + + + + +```javascript +sourceMap: , +``` + + + + +```javascript +sourceMap: "inline", +``` + + + + +Enables or disables generating a source map. +If set to `"inline"`, the source map is inlined in the bundle. +If set to `true` or not specified, it is written to a separate file. +The default is `true`. + +### `stats` + +The stats configuration, which controls the log output of the CLI. + +#### `stats.buffer` + + + + +```javascript +stats: { + buffer: , +}, +``` + + + + +```javascript +stats: { + buffer: false, +}, +``` + + + + +Enables or disables showing a warning if the `Buffer` global is used but not provided. +The `Buffer` global is not available in the Snaps runtime by default. +To use `Buffer`, set [`polyfills`](#polyfills) to `true`. + +The default is `true`. + +#### `stats.builtIns` + + + + +```javascript +stats: { + builtIns: , +}, +``` + + + + +```javascript +stats: { + builtIns: { + ignore: [ + // Built-in modules to ignore. + ], + }, +}, +``` + + + + +Enables or disables checking for missing built-in modules. + +Not specifying this option, or specifying an ignore list, enables checking for missing built-in modules. +When enabled, the CLI shows a warning if a built-in is used but not provided. +The Snaps CLI does not support Node.js built-ins out of the box. +To use built-ins, set [`polyfills`](#polyfills) to `true`. + +You can specify a list of built-ins to ignore when checking for missing built-ins. +This is useful if the built-in is not actually used in the Snap, but is added by a dependency. + +The default is an empty ignore list. + +#### `stats.verbose` + + + + +```javascript +stats: { + verbose: , +}, +``` + + + + +```javascript +stats: { + verbose: true, +}, +``` + + + + +Enables or disables verbose logging. +If set to `true`, the CLI logs more information. +The default is `false`. diff --git a/snaps/reference/entry-points.md b/snaps/reference/entry-points.md index dfddfa22a0b..7ac2df7ab27 100644 --- a/snaps/reference/entry-points.md +++ b/snaps/reference/entry-points.md @@ -31,21 +31,21 @@ An object containing an RPC request specified in the `endowment:cronjob` permiss ```typescript title="index.ts" -import type { OnCronjobHandler } from "@metamask/snaps-sdk" +import type { OnCronjobHandler } from '@metamask/snaps-sdk' export const onCronjob: OnCronjobHandler = async ({ request }) => { switch (request.method) { - case "exampleMethodOne": + case 'exampleMethodOne': return snap.request({ - method: "snap_notify", + method: 'snap_notify', params: { - type: "inApp", - message: "Hello, world!", + type: 'inApp', + message: 'Hello, world!', }, }) default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -56,17 +56,17 @@ export const onCronjob: OnCronjobHandler = async ({ request }) => { ```js title="index.js" module.exports.onCronjob = async ({ request }) => { switch (request.method) { - case "exampleMethodOne": + case 'exampleMethodOne': return snap.request({ - method: "snap_notify", + method: 'snap_notify', params: { - type: "inApp", - message: "Hello, world!", + type: 'inApp', + message: 'Hello, world!', }, }) default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -94,7 +94,7 @@ None. One of the following: - A `content` object displayed using [custom UI](../features/custom-ui/index.md). -- An `id` returned by [`snap_createInterface`](./snaps-api.md#snap_createinterface) for +- An `id` returned by [`snap_createInterface`](./snaps-api/snap_createinterface.mdx) for [interactive UI](../features/custom-ui/interactive-ui.md). #### Example @@ -103,8 +103,8 @@ One of the following: ```tsx title="index.tsx" -import type { OnHomePageHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnHomePageHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onHomePage: OnHomePageHandler = async () => { return { @@ -114,22 +114,19 @@ export const onHomePage: OnHomePageHandler = async () => { Welcome to my Snap home page! ), - }; -}; + } +} ``` ```js title="index.js" -import { panel, text, heading } from "@metamask/snaps-sdk" +import { panel, text, heading } from '@metamask/snaps-sdk' module.exports.onHomePage = async () => { return { - content: panel([ - heading("Hello world!"), - text("Welcome to my Snap home page!"), - ]), + content: panel([heading('Hello world!'), text('Welcome to my Snap home page!')]), } } ``` @@ -158,43 +155,42 @@ None. ```tsx title="index.tsx" -import type { OnInstallHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnInstallHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onInstall: OnInstallHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Thank you for installing my Snap - To use this Snap, visit the companion dapp at metamask.io. + To use this Snap, visit the companion dapp at{' '} + metamask.io. ), }, - }); -}; + }) +} ``` ```js title="index.js" -import { heading, panel, text } from "@metamask/snaps-sdk" +import { heading, panel, text } from '@metamask/snaps-sdk' module.exports.onInstall = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: panel([ - heading("Thank you for installing my Snap"), - text( - "To use this Snap, visit the companion dapp at [metamask.io](https://metamask.io)." - ), + heading('Thank you for installing my Snap'), + text('To use this Snap, visit the companion dapp at [metamask.io](https://metamask.io).'), ]), }, }) @@ -204,7 +200,6 @@ module.exports.onInstall = async () => { - ## `onKeyringRequest` To implement the [Account Management API](keyring-api/account-management/index.md) to integrate @@ -235,10 +230,7 @@ A promise containing the return of the implemented method. ```typescript title="index.ts" -export const onKeyringRequest: OnKeyringRequestHandler = async ({ - origin, - request, -}) => { +export const onKeyringRequest: OnKeyringRequestHandler = async ({ origin, request }) => { // Any custom logic or extra security checks here. return handleKeyringRequest(keyring, request) } @@ -282,22 +274,22 @@ An object containing: ```typescript title="index.ts" -import type { OnNameLookupHandler } from "@metamask/snaps-sdk" +import type { OnNameLookupHandler } from '@metamask/snaps-sdk' -export const onNameLookup: OnNameLookupHandler = async (request) => { +export const onNameLookup: OnNameLookupHandler = async request => { const { chainId, address, domain } = request if (address) { const shortAddress = address.substring(2, 5) - const chainIdDecimal = parseInt(chainId.split(":")[1], 10) + const chainIdDecimal = parseInt(chainId.split(':')[1], 10) const resolvedDomain = `${shortAddress}.${chainIdDecimal}.test.domain` - return { resolvedDomains: [{ resolvedDomain, protocol: "test protocol" }] } + return { resolvedDomains: [{ resolvedDomain, protocol: 'test protocol' }] } } if (domain) { - const resolvedAddress = "0xc0ffee254729296a45a3885639AC7E10F9d54979" + const resolvedAddress = '0xc0ffee254729296a45a3885639AC7E10F9d54979' return { - resolvedAddresses: [{ resolvedAddress, protocol: "test protocol", domainName: domain }], + resolvedAddresses: [{ resolvedAddress, protocol: 'test protocol', domainName: domain }], } } @@ -314,15 +306,15 @@ module.exports.onNameLookup = async ({ request }) => { if (address) { const shortAddress = address.substring(2, 5) - const chainIdDecimal = parseInt(chainId.split(":")[1], 10) + const chainIdDecimal = parseInt(chainId.split(':')[1], 10) const resolvedDomain = `${shortAddress}.${chainIdDecimal}.test.domain` - return { resolvedDomains: [{ resolvedDomain, protocol: "test protocol" }] } + return { resolvedDomains: [{ resolvedDomain, protocol: 'test protocol' }] } } if (domain) { - const resolvedAddress = "0xc0ffee254729296a45a3885639AC7E10F9d54979" + const resolvedAddress = '0xc0ffee254729296a45a3885639AC7E10F9d54979' return { - resolvedAddresses: [{ resolvedAddress, protocol: "test protocol", domainName: domain }], + resolvedAddresses: [{ resolvedAddress, protocol: 'test protocol', domainName: domain }], } } @@ -361,18 +353,15 @@ A promise containing the return of the implemented method. ```typescript title="index.ts" -import type { OnRpcRequestHandler } from "@metamask/snaps-sdk" +import type { OnRpcRequestHandler } from '@metamask/snaps-sdk' -export const onRpcRequest: OnRpcRequestHandler = async ({ - origin, - request, -}) => { +export const onRpcRequest: OnRpcRequestHandler = async ({ origin, request }) => { switch (request.method) { - case "hello": - return "world!" + case 'hello': + return 'world!' default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -383,11 +372,11 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ ```js title="index.js" module.exports.onRpcRequest = async ({ origin, request }) => { switch (request.method) { - case "hello": - return "world!" + case 'hello': + return 'world!' default: - throw new Error("Method not found.") + throw new Error('Method not found.') } } ``` @@ -397,12 +386,9 @@ module.exports.onRpcRequest = async ({ origin, request }) => { ## `onSignature` -:::flaskOnly -::: - To provide [signature insights](../features/signature-insights.md) before a user signs a message, a Snap must expose the `onSignature` entry point. -Whenever a [signing method](/wallet/concepts/signing-methods) is called, such as `personal_sign` or +Whenever a signing method is called, such as `personal_sign` or `eth_signTypedData_v4`, MetaMask passes the raw unsigned signature payload to the `onSignature` handler method. @@ -482,7 +468,6 @@ export const onSignature: OnSignatureHandler = async ({ - ## `onTransaction` To provide [transaction insights](../features/transaction-insights.md) before a user signs a @@ -506,6 +491,10 @@ An object containing: - `transactionOrigin` - The transaction origin if [`allowTransactionOrigin`](permissions.md#endowmenttransaction-insight) is set to `true`. +:::note +When interacting with EVM chain IDs, the provided chain ID uses the format `namespace:reference`, where the `reference` is a base 10 integer. +::: + #### Returns - An optional `severity` property that, if present, must be set to `"critical"`. @@ -513,7 +502,7 @@ An object containing: - One of the following: - A `content` object displayed using [custom UI](../features/custom-ui/index.md), alongside the confirmation for the transaction that `onTransaction` was called with. - - An `id` returned by [`snap_createInterface`](./snaps-api.md#snap_createinterface) for + - An `id` returned by [`snap_createInterface`](./snaps-api/snap_createinterface.mdx) for [interactive UI](../features/custom-ui/interactive-ui.md). #### Example @@ -592,14 +581,14 @@ None. ```tsx title="index.tsx" -import type { OnUpdateHandler } from "@metamask/snaps-sdk"; -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; +import type { OnUpdateHandler } from '@metamask/snaps-sdk' +import { Box, Heading, Text } from '@metamask/snaps-sdk/jsx' export const onUpdate: OnUpdateHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: ( Thank you for updating my Snap @@ -616,18 +605,18 @@ export const onUpdate: OnUpdateHandler = async () => { ```typescript title="index.ts" -import type { OnUpdateHandler } from "@metamask/snaps-sdk"; -import { heading, panel, text } from "@metamask/snaps-sdk"; +import type { OnUpdateHandler } from '@metamask/snaps-sdk' +import { heading, panel, text } from '@metamask/snaps-sdk' export const onUpdate: OnUpdateHandler = async () => { await snap.request({ - method: "snap_dialog", + method: 'snap_dialog', params: { - type: "alert", + type: 'alert', content: panel([ - heading("Thank you for updating my Snap"), - text("New features added in this version:"), - text("Added a dialog that appears when updating."), + heading('Thank you for updating my Snap'), + text('New features added in this version:'), + text('Added a dialog that appears when updating.'), ]), }, }) @@ -639,9 +628,6 @@ export const onUpdate: OnUpdateHandler = async () => { ## `onUserInput` -:::flaskOnly -::: - To respond to [interactive UI](../features/custom-ui/interactive-ui.md) events, a Snap must export `onUserInput`. #### Parameters @@ -654,7 +640,7 @@ To respond to [interactive UI](../features/custom-ui/interactive-ui.md) events, - `name` - The name of the component that fired the event. Optional when the event type is `ButtonClickEvent`. - `value` - When the event type is `FormSubmitEvent`, the values in the form as an object. -- `context` - The context object passed to the interface when calling [`snap_createInterface`](./snaps-api.md#snap_createinterface), or `null`. +- `context` - The context object passed to the interface when calling [`snap_createInterface`](./snaps-api/snap_createinterface.mdx), or `null`. #### Example @@ -662,12 +648,12 @@ To respond to [interactive UI](../features/custom-ui/interactive-ui.md) events, ```typescript title="index.ts" -import type { OnUserInputHandler } from "@metamask/snaps-sdk" -import { UserInputEventType } from "@metamask/snaps-sdk" +import type { OnUserInputHandler } from '@metamask/snaps-sdk' +import { UserInputEventType } from '@metamask/snaps-sdk' export const onUserInput: OnUserInputHandler = async ({ id, event }) => { if (event.type === UserInputEventType.FormSubmitEvent) { - console.log("The submitted form values are", event.value) + console.log('The submitted form values are', event.value) } } ``` @@ -676,11 +662,11 @@ export const onUserInput: OnUserInputHandler = async ({ id, event }) => { ```js title="index.js" -const { UserInputEventType } = require("@metamask/snaps-sdk") +const { UserInputEventType } = require('@metamask/snaps-sdk') module.exports.onUserInput = async ({ id, event }) => { if (event.type === UserInputEventType.FormSubmitEvent) { - console.log("The submitted form values are", event.value) + console.log('The submitted form values are', event.value) } } ``` diff --git a/snaps/reference/jest.md b/snaps/reference/jest.md index 6e765cf096a..2b1e8aea144 100644 --- a/snaps/reference/jest.md +++ b/snaps/reference/jest.md @@ -14,7 +14,7 @@ and [options](#options). ### `installSnap` Installs a Snap in the execution environment. -We recommend using this function in each test to ensure that it starts with a clean slate. +We recommend using this function in each test to ensure that it starts with a new Snap installation. #### Parameters @@ -28,10 +28,10 @@ An object with functions that can be used to interact with the Snap. #### Example ```javascript -import { installSnap } from "@metamask/snaps-jest" +import { installSnap } from '@metamask/snaps-jest' -describe("MySnap", () => { - it("should do something", async () => { +describe('MySnap', () => { + it('should do something', async () => { await installSnap(/* optional Snap ID */) // ... }) @@ -54,21 +54,21 @@ which can be checked using [Jest matchers](#jest-matchers). #### Example ```javascript -import { installSnap } from "@metamask/snaps-jest" +import { installSnap } from '@metamask/snaps-jest' -describe("MySnap", () => { - it("should respond to foo with bar", async () => { +describe('MySnap', () => { + it('should respond to foo with bar', async () => { const { request } = await installSnap(/* Optional snap ID */) const response = await request({ - origin: "http://localhost:8080", - method: "foo", + origin: 'http://localhost:8080', + method: 'foo', params: [], }) /* Check the response using Jest matchers. Since the response is a standard JSON-RPC response, * you can use any standard Jest matchers to check it, including snapshot matchers. */ - expect(response).toRespondWith("bar") - expect(response).not.toRespondWithError("baz") + expect(response).toRespondWith('bar') + expect(response).not.toRespondWithError('baz') expect(response).toMatchSnapshot() }) }) @@ -105,32 +105,32 @@ An object with the user interface that was shown by the Snap, in the #### Example ```javascript -import { installSnap } from "@metamask/snaps-jest" -import { panel, text } from "@metamask/snaps-sdk" +import { installSnap } from '@metamask/snaps-jest' +import { panel, text } from '@metamask/snaps-sdk' -describe("MySnap", () => { - it("should return insights", async () => { +describe('MySnap', () => { + it('should return insights', async () => { const { onTransaction } = await installSnap(/* Optional Snap ID */) const response = await onTransaction({ - value: "0x0", - data: "0x", - gasLimit: "0x5208", - maxFeePerGas: "0x5208", - maxPriorityFeePerGas: "0x5208", - nonce: "0x0", + value: '0x0', + data: '0x', + gasLimit: '0x5208', + maxFeePerGas: '0x5208', + maxPriorityFeePerGas: '0x5208', + nonce: '0x0', }) - expect(response).toRender(panel([text("Hello, world!")])) + expect(response).toRender(panel([text('Hello, world!')])) }) }) ``` ### `onCronjob` -Runs a cronjob in the Snap. +Runs a cron job in the Snap. The request is normally specified in the Snap manifest file under the [`endowment:cronjob`](permissions.md#endowmentcronjob) permission, but this method allows you to -run cronjobs that are not specified in the manifest as well. +run cron jobs that are not specified in the manifest as well. #### Parameters @@ -144,19 +144,19 @@ which can be checked using [Jest matchers](#jest-matchers). #### Example ```javascript -import { installSnap } from "@metamask/snaps-jest" +import { installSnap } from '@metamask/snaps-jest' -describe("MySnap", () => { - it("should end foo cronjobs with response bar", async () => { +describe('MySnap', () => { + it('should end foo cron jobs with response bar', async () => { const { onCronjob } = await installSnap(/* Optional snap ID */) const response = await onCronjob({ - method: "foo", + method: 'foo', params: [], }) // Check the response using Jest matchers. - expect(response).toRespondWith("bar") - expect(response).not.toRespondWithError("baz") + expect(response).toRespondWith('bar') + expect(response).not.toRespondWithError('baz') }) }) ``` @@ -169,22 +169,22 @@ takes no arguments, and returns a promise that resolves to the response from the entry point. ```js -import { installSnap } from "@metamask/snaps-jest" -import { panel, text } from "@metamask/snaps-sdk" +import { installSnap } from '@metamask/snaps-jest' +import { panel, text } from '@metamask/snaps-sdk' -describe("MySnap", () => { - it("should render the home page", async () => { +describe('MySnap', () => { + it('should render the home page', async () => { const { onHomePage } = await installSnap(/* Optional snap ID */) const response = await onHomePage() - expect(response).toRender(panel([text("Hello, world!")])) + expect(response).toRender(panel([text('Hello, world!')])) }) }) ``` ### `getInterface` -If your Snap uses [`snap_dialog`](snaps-api.md#snap_dialog) to show user interfaces, you can use the +If your Snap uses [`snap_dialog`](snaps-api/snap_dialog.mdx) to show user interfaces, you can use the `request.getInterface` method to interact with the user interfaces. This method is present on the return value of the [`request`](#request) method. @@ -196,31 +196,31 @@ be used to interact with the user interface. #### Example ```javascript -import { installSnap } from "@metamask/snaps-jest" -import { text } from "@metamask/snaps-sdk" -import { assert } from "@metamask/utils" +import { installSnap } from '@metamask/snaps-jest' +import { text } from '@metamask/snaps-sdk' +import { assert } from '@metamask/utils' -describe("MySnap", () => { - it("should render an alert with hello world", async () => { +describe('MySnap', () => { + it('should render an alert with hello world', async () => { const { request } = await installSnap(/* Optional Snap ID */) // Note: You cannot resolve the promise yet! const response = request({ - method: "foo", + method: 'foo', }) const ui = await response.getInterface() // This is useful if you're using TypeScript, since it infers the type of the user interface. - assert(ui.type === "alert") - expect(ui).toRender(text("Hello, world!")) + assert(ui.type === 'alert') + expect(ui).toRender(text('Hello, world!')) // Select the OK button. await ui.ok() // Now you can resolve the promise. const result = await response - expect(result).toRespondWith("bar") + expect(result).toRespondWith('bar') }) }) ``` @@ -238,7 +238,7 @@ response from a Snap matches an expected value: If the response is not an error, this matcher fails. - `toSendNotification(notificationText)` - Checks if a Snap sent a notification. - `toRender(expectedInterface)` - Checks if a Snap rendered an interface. - This is useful for testing the user interface of a Snap, either for a [`snap_dialog`](snaps-api.md#snap_dialog) + This is useful for testing the user interface of a Snap, either for a [`snap_dialog`](snaps-api/snap_dialog.mdx) or a user interface rendered by the [transaction insights API](entry-points.md#ontransaction). ## Options @@ -254,7 +254,8 @@ This server serves the execution environment, simulator, and the Snap bundle dur The server options are: - `enabled` - Enables or disables the built-in HTTP server. - Set to `false` to use your own HTTP server, which you can specify when calling [`installSnap`](#installsnap), e.g. `installSnap("local:http://my-server")`. + Set to `false` to use your own HTTP server, which you can specify when calling [`installSnap`](#installsnap), + for example, `installSnap("local:http://my-server")`. The default is `true`. - `port` - The port to use for the built-in HTTP server. The default is a random available (unprivileged) port. @@ -267,11 +268,11 @@ The server options are: ```javascript title="jest.config.js" module.exports = { - preset: "@metamask/snaps-jest", + preset: '@metamask/snaps-jest', testEnvironmentOptions: { server: { port: 8080, - root: "/path/to/snap/files", + root: '/path/to/snap/files', }, }, } diff --git a/snaps/reference/keyring-api/account-management/events.md b/snaps/reference/keyring-api/account-management/events.md index a69b45c0260..722cfaa0f1f 100644 --- a/snaps/reference/keyring-api/account-management/events.md +++ b/snaps/reference/keyring-api/account-management/events.md @@ -1,8 +1,6 @@ --- sidebar_position: 2 sidebar_label: Events -tags: - - Keyring API --- # Account Management API events diff --git a/snaps/reference/keyring-api/account-management/index.md b/snaps/reference/keyring-api/account-management/index.md index 699b5040fc4..eb67416047d 100644 --- a/snaps/reference/keyring-api/account-management/index.md +++ b/snaps/reference/keyring-api/account-management/index.md @@ -1,7 +1,5 @@ --- sidebar_position: 1 -tags: - - Keyring API --- import Tabs from "@theme/Tabs"; @@ -56,12 +54,7 @@ An object containing: { "address": "0xd1f5279be4b4dd94133a23dee1b23f5bfc0db1d0", "id": "091bbc2e-6625-44d0-ac5c-658670ca649a", - "methods": [ - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v4", - "personal_sign" - ], + "methods": ["eth_sign", "eth_signTransaction", "eth_signTypedData_v4", "personal_sign"], "options": { "signerCount": 5, "threshold": 3 @@ -241,12 +234,7 @@ An object containing: { "address": "0xd1f5279be4b4dd94133a23dee1b23f5bfc0db1d0", "id": "091bbc2e-6625-44d0-ac5c-658670ca649a", - "methods": [ - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v4", - "personal_sign" - ], + "methods": ["eth_sign", "eth_signTransaction", "eth_signTypedData_v4", "personal_sign"], "options": { "signerCount": 5, "threshold": 3 @@ -289,12 +277,7 @@ An array of [account objects](objects.md#keyringaccount) handled by the Snap. { "address": "0xd1f5279be4b4dd94133a23dee1b23f5bfc0db1d0", "id": "091bbc2e-6625-44d0-ac5c-658670ca649a", - "methods": [ - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v4", - "personal_sign" - ], + "methods": ["eth_sign", "eth_signTransaction", "eth_signTypedData_v4", "personal_sign"], "options": { "signerCount": 5, "threshold": 3 @@ -304,11 +287,7 @@ An array of [account objects](objects.md#keyringaccount) handled by the Snap. { "address": "0x84674cffb6146d19b986fc88ec70a441b570a45b", "id": "17a87b4a-286c-444d-aebb-1fed89021419", - "methods": [ - "eth_prepareUserOperation", - "eth_patchUserOperation", - "eth_signUserOperation" - ], + "methods": ["eth_prepareUserOperation", "eth_patchUserOperation", "eth_signUserOperation"], "type": "eip155:erc4337" } ] @@ -340,12 +319,7 @@ Updates an account. "params": { "address": "0xd1f5279be4b4dd94133a23dee1b23f5bfc0db1d0", "id": "091bbc2e-6625-44d0-ac5c-658670ca649a", - "methods": [ - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v4", - "personal_sign" - ], + "methods": ["eth_sign", "eth_signTransaction", "eth_signTypedData_v4", "personal_sign"], "options": { "signerCount": 7, "threshold": 4 diff --git a/snaps/reference/keyring-api/account-management/objects.md b/snaps/reference/keyring-api/account-management/objects.md index d5e4c59293c..92233d7fc3e 100644 --- a/snaps/reference/keyring-api/account-management/objects.md +++ b/snaps/reference/keyring-api/account-management/objects.md @@ -1,8 +1,6 @@ --- sidebar_position: 1 sidebar_label: Objects -tags: - - Keyring API --- # Account Management API objects @@ -29,12 +27,7 @@ An account object contains: { "address": "0xd1f5279be4b4dd94133a23dee1b23f5bfc0db1d0", "id": "091bbc2e-6625-44d0-ac5c-658670ca649a", - "methods": [ - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v4", - "personal_sign" - ], + "methods": ["eth_sign", "eth_signTransaction", "eth_signTypedData_v4", "personal_sign"], "options": { "signerCount": 5, "threshold": 3 diff --git a/snaps/reference/keyring-api/chain-methods.md b/snaps/reference/keyring-api/chain-methods.md index 7b6926f1115..6cd96f7ac34 100644 --- a/snaps/reference/keyring-api/chain-methods.md +++ b/snaps/reference/keyring-api/chain-methods.md @@ -1,7 +1,5 @@ --- sidebar_position: 2 -tags: - - Keyring API --- import Tabs from "@theme/Tabs"; @@ -68,7 +66,7 @@ Signs a transaction that can be submitted to the network later using An array containing: 1. Transaction object to sign, which contains: - - `type`: `string` - [Transaction type.](https://docs.infura.io/api/networks/ethereum/concepts/transaction-types) + - `type`: `string` - [Transaction type.](/services/concepts/transaction-types/) - `nonce`: `string` - Anti-replay parameter. - `to`: `string` - Recipient address, or `null` if this is a contract creation transaction. - `from`: `string` - Sender address. @@ -168,7 +166,7 @@ An array containing: 2. Typed data: `object` - Typed data object containing: - `types`: `object` - Types object containing: - `EIP712Domain`: `array` - Array specifying one or more of the following domain separator values: - - `name` - User-readable name of the signing domain, i.e., name of the dapp or the protocol. + - `name` - User-readable name of the signing domain, that is, name of the dapp or the protocol. - `version` - Current major version of the signing domain. - `chainId` - Chain ID of the network. - `verifyingContract` - Address of the contract that will verify the signature. @@ -242,11 +240,6 @@ Signature: `string` - Hex-encoded signature. -### Deprecated methods - -Snaps can also implement [deprecated signing -methods](/wallet/concepts/signing-methods/#deprecated-signing-methods) that some dapps might use. - ## ERC-4337 methods :::flaskOnly @@ -273,14 +266,14 @@ An array containing: A user operation details object containing: - `callData`: `string` - Data to pass to the sender during the main execution call. -- `initCode`: `string` - Account bytecode (needed if and only if the account is not yet on-chain and +- `initCode`: `string` - Account bytecode (needed if and only if the account is not yet onchain and needs to be created). - `nonce`: `string` - Anti-replay parameter. - `gasLimits` - (Optional) Gas limits object containing: - `callGasLimit`: `string` - Amount of gas to allocate to the main execution call. - `verificationGasLimit`: `string` - Amount of gas to allocate to the verification step. - `preVerificationGas`: `string` - Amount of gas to compensate the bundler for pre-verification - execution, to pay for `callData`, and to account for overhead that can't be tracked on-chain. + execution, to pay for `callData`, and to account for overhead that can't be tracked onchain. - `dummySignature`: `string` - Dummy `signature`. - `dummyPaymasterAndData`: `string` - Dummy `paymasterAndData`. - `bundlerUrl`: `string` - Bundler URL. @@ -341,13 +334,13 @@ An array containing: 1. User operation object, which contains: - `sender`: `string` - Account making the operation. - `callData`: `string` - Data to pass to the sender during the main execution call. - - `initCode`: `string` - Account bytecode (needed if and only if the account is not yet on-chain + - `initCode`: `string` - Account bytecode (needed if and only if the account is not yet onchain and needs to be created). - `nonce`: `string` - Anti-replay parameter. - `callGasLimit`: `string` - Amount of gas to allocate to the main execution call. - `verificationGasLimit`: `string` - Amount of gas to allocate to the verification step. - `preVerificationGas`: `string` - Amount of gas to compensate the bundler for pre-verification - execution, to pay for callData, and to account for overhead that can't be tracked on-chain. + execution, to pay for `callData`, and to account for overhead that can't be tracked onchain. - `maxFeePerGas`: `string` - Maximum total fee the sender is willing to pay per gas. - `maxPriorityFeePerGas`: `string` - Maximum fee the sender is willing to pay per gas above the base fee. @@ -365,7 +358,7 @@ A partial user operation object containing: - `callGasLimit`: `string` - (Optional) Amount of gas to allocate to the main execution call. - `verificationGasLimit`: `string` - (Optional) Amount of gas to allocate to the verification step. - `preVerificationGas`: `string` - (Optional) Amount of gas to compensate the bundler for - pre-verification execution, to pay for callData, and to account for overhead that can't be tracked on-chain. + pre-verification execution, to pay for `callData`, and to account for overhead that can't be tracked onchain. #### Example @@ -419,13 +412,13 @@ An array containing: 1. User operation object, which contains: - `sender`: `string` - Account making the operation. - `callData`: `string` - Data to pass to the sender during the main execution call. - - `initCode`: `string` - Account bytecode (needed if and only if the account is not yet on-chain + - `initCode`: `string` - Account bytecode (needed if and only if the account is not yet onchain and needs to be created). - `nonce`: `string` - Anti-replay parameter. - `callGasLimit`: `string` - Amount of gas to allocate to the main execution call. - `verificationGasLimit`: `string` - Amount of gas to allocate to the verification step. - `preVerificationGas`: `string` - Amount of gas to compensate the bundler for pre-verification - execution, to pay for callData, and to account for overhead that can't be tracked on-chain. + execution, to pay for `callData`, and to account for overhead that can't be tracked onchain. - `maxFeePerGas`: `string` - Maximum total fee the sender is willing to pay per gas. - `maxPriorityFeePerGas`: `string` - Maximum fee the sender is willing to pay per gas above the base fee. diff --git a/snaps/reference/keyring-api/index.md b/snaps/reference/keyring-api/index.md index 021c5607cda..4e32c90e9b2 100644 --- a/snaps/reference/keyring-api/index.md +++ b/snaps/reference/keyring-api/index.md @@ -1,8 +1,6 @@ --- description: See the Keyring API reference. sidebar_position: 7 -tags: - - Keyring API --- # Keyring API @@ -11,7 +9,7 @@ This section provides a detailed reference on the Keyring API methods, objects, enable [custom EVM accounts](../../features/custom-evm-accounts/index.md). The Keyring API consists of: -- [**Account Management API**](account-management/index.md) – An API for dapps to communicate with +- [**Account Management API**](account-management/index.md) - An API for dapps to communicate with account management Snaps. Dapps can manage accounts and signature requests using this API. - [**Chain Methods API**](chain-methods.md) - An API that contains chain-specific EVM methods that diff --git a/snaps/reference/permissions.md b/snaps/reference/permissions.md index f24dd37d2dd..2fcb7a755b0 100644 --- a/snaps/reference/permissions.md +++ b/snaps/reference/permissions.md @@ -12,8 +12,8 @@ Snaps can [request the following permissions](../how-to/request-permissions.md). ## RPC API permissions -You must request permission to call [Snaps API methods](snaps-api.md). -For example, to request to call [`snap_dialog`](snaps-api.md#snap_dialog), add the following to the +You must request permission to call [Snaps API methods](snaps-api/index.md). +For example, to request to call [`snap_dialog`](snaps-api/snap_dialog.mdx), add the following to the manifest file: ```json title="snap.manifest.json" @@ -74,7 +74,7 @@ Specify this permission in the manifest file as follows: To communicate with a node using MetaMask, a Snap must request the `endowment:ethereum-provider` permission. This permission exposes the `ethereum` global to the Snap execution environment, allowing Snaps to -call some [MetaMask JSON-RPC API](/wallet/reference/json-rpc-api) methods. +call some [MetaMask JSON-RPC API](/metamask-connect/evm/reference/json-rpc-api) methods. This global is an [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) provider. Specify this permission in the manifest file as follows: @@ -87,7 +87,7 @@ Specify this permission in the manifest file as follows: :::note The `ethereum` global available to Snaps has fewer capabilities than `window.ethereum` for dapps. -See the [list of methods](../learn/about-snaps/apis.md#metamask-json-rpc-api) not available to Snaps. +See the [list of methods](../learn/about-snaps/apis.md#snap-requests) not available to Snaps. ::: ### `endowment:page-home` @@ -255,6 +255,28 @@ If you specify `allowedOrigins`, you should not specify `dapps` or `snaps`. If you want to grant a dapp or Snap an automatic connection to your Snap, skipping the need for users to confirm a connection, you can use [`initialConnections`](#initial-connections). +### `endowment:signature-insight` + +To provide [signature insights](../features/signature-insights.md), a Snap must request the +`endowment:signature-insight` permission. +This permission grants a Snap read-only access to raw signature payloads, before they're accepted +for signing by the user, by exposing the [`onSignature`](./entry-points.md#onsignature) entry point. + +This permission requires an object with an `allowSignatureOrigin` property to signal if the Snap +should pass the `signatureOrigin` property as part of the `onSignature` parameters. +This property represents the signature initiator origin. +The default is `false`. + +Specify this permission in the manifest file as follows: + +```json title="snap.manifest.json" +"initialPermissions": { + "endowment:signature-insight": { + "allowSignatureOrigin": true + } +}, +``` + ### `endowment:transaction-insight` To provide [transaction insights](../features/transaction-insights.md) before a user signs a @@ -282,31 +304,6 @@ Specify this permission in the manifest file as follows: } ``` -### `endowment:signature-insight` - -:::flaskOnly -::: - -To provide [signature insights](../features/signature-insights.md), a Snap must request the -`endowment:signature-insight` permission. -This permission grants a Snap read-only access to raw signature payloads, before they're accepted -for signing by the user, by exposing the [`onSignature`](./entry-points.md#onsignature) entry point. - -This permission requires an object with an `allowSignatureOrigin` property to signal if the Snap -should pass the `signatureOrigin` property as part of the `onSignature` parameters. -This property represents the signature initiator origin. -The default is `false`. - -Specify this permission in the manifest file as follows: - -```json title="snap.manifest.json" -"initialPermissions": { - "endowment:signature-insight": { - "allowSignatureOrigin": true - } -}, -``` - ### `endowment:webassembly` To use WebAssembly, a Snap must request the `endowment:webassembly` permission. @@ -351,8 +348,8 @@ The following endowments accept this caveat: ### `eth_accounts` -A Snap can request permission to call the [`eth_accounts`](/wallet/reference/eth_accounts) MetaMask -JSON-RPC API method by calling [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts). +A Snap can request permission to call the [`eth_accounts`](/metamask-connect/evm/reference/json-rpc-api) MetaMask +JSON-RPC API method by calling [`eth_requestAccounts`](/metamask-connect/evm/reference/json-rpc-api). Calling `eth_requestAccounts` requires the [`endowment:ethereum-provider`](#endowmentethereum-provider) permission: @@ -369,14 +366,14 @@ Calling `eth_requestAccounts` requires the ```js title="index.js" -await ethereum.request({ method: "eth_requestAccounts" }) +await ethereum.request({ method: 'eth_requestAccounts' }) ``` You can check the presence of the permission by calling -[`wallet_getPermissions`](/wallet/reference/wallet_getpermissions). +[`wallet_getPermissions`](/metamask-connect/evm/reference/json-rpc-api). If the permission is present, the result contains a permission with a `parentCapability` of `eth_accounts`. The permission contains a `restrictReturnedAccounts` caveat, an array of all the accounts the user allows for this Snap. @@ -403,7 +400,7 @@ The user can revoke this permission by going to the Snap's settings under **Snap A Snap can authorize specific dapps or Snaps to automatically connect, skipping the need for users to manually confirm a connection when the dapp or Snap calls -[`wallet_requestSnaps`](../reference/wallet-api-for-snaps.md#wallet_requestsnaps). +[`wallet_requestSnaps`](../reference/snaps-api/wallet_requestsnaps.mdx). The following is an example of specifying `initialConnections` for a dapp: diff --git a/snaps/reference/snaps-api.md b/snaps/reference/snaps-api.md deleted file mode 100644 index 270a43123ed..00000000000 --- a/snaps/reference/snaps-api.md +++ /dev/null @@ -1,988 +0,0 @@ ---- -description: See the Snaps API reference. -sidebar_position: 1 ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Snaps API - -Snaps can communicate with and modify the functionality of MetaMask using the [Snaps API](../learn/about-snaps/apis.md#snaps-api). -To call each method (except the [interactive UI methods](#interactive-ui-methods)), you must first -[request permission](../how-to/request-permissions.md) in the Snap manifest file. - -:::note -See the [Wallet API for Snaps](wallet-api-for-snaps.md) for methods that dapps can call to -communicate with Snaps. -::: - -## `snap_dialog` - -Displays a [dialog](../features/custom-ui/dialogs.md) in the MetaMask UI. - -#### Parameters - -An object containing the contents of the dialog: - -- `type` - The type of dialog. - Possible values are: - - `"alert"` - An alert that can only be acknowledged. - - `"confirmation"` - A confirmation that can be accepted or rejected. - - `"prompt"` - A prompt where the user can enter a text response. -- One of: - - `content` - The content of the alert, as a [custom UI](../features/custom-ui/index.md) component. - - `id` - The ID of an [interactive interface](#snap_createinterface). -- `placeholder` - Only used for `"prompt"` dialogs. - Text that will be in the input field when nothing is typed. - -#### Returns - -Return value depends on the dialog `type`: - -- `"alert"` - None. -- `"confirmation"` - `true` if the confirmation was accepted, `false` otherwise. -- `"prompt"` - The text entered by the user if the prompt was submitted or `null` if the prompt was - rejected or closed. - If the user does not enter any text and submits the prompt, the value is an empty string. - -#### Example - - - - -```tsx title="index.tsx" -import { Box, Heading, Text } from "@metamask/snaps-sdk/jsx"; - -const walletAddress = await snap.request({ - method: "snap_dialog", - params: { - type: "prompt", - content: ( - - What is the wallet address? - Please enter the wallet address to be monitored - - ), - placeholder: "0x123...", - }, -}); - -// walletAddress will be a string containing the address entered by the user. -``` - - - - -```typescript title="index.ts" -import { panel, text, heading } from "@metamask/snaps-sdk"; - -const walletAddress = await snap.request({ - method: "snap_dialog", - params: { - type: "prompt", - content: panel([ - heading("What is the wallet address?"), - text("Please enter the wallet address to be monitored"), - ]), - placeholder: "0x123...", - }, -}) - -// walletAddress will be a string containing the address entered by the user. -``` - - - - -## `snap_getBip32Entropy` - -:::danger important -If you call this method, you receive the user's parent key for the derivation path they request. -You're managing the user's keys and assets on their behalf. -Their safety is your responsibility. -::: - -Gets the [SLIP-10](https://github.com/satoshilabs/slips/blob/master/slip-0010.md) key for the `path` -and `curve` specified by the method name. - -This method is designed to be used with the -[`@metamask/key-tree`](https://npmjs.com/package/@metamask/key-tree) module. -`@metamask/key-tree` can help you get the -[extended private keys](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys) -for user addresses, but it's your responsibility to know how to use those keys to, for example, -derive an address for the relevant protocol or sign a transaction for the user. - -#### Parameters - -An object containing: - -- `path` - An array, starting with `m`, containing the BIP-32 derivation path to the key to - retrieve. - For example, `["m", "44'", "60'"]`. -- `curve` - The curve to use for the key derivation. - Must be `"ed25519"` or `"secp256k1"`. - -#### Returns - -An object representing the -[SLIP-10](https://github.com/satoshilabs/slips/blob/master/slip-0010.md) HD tree node and containing -its corresponding key material: - -- `depth` - The 0-indexed path depth of the node. -- `parentFingerprint` - The fingerprint of the parent key, or 0 if this is a master node. -- `index` - The index of the node, or 0 if this is a master node. -- `privateKey` - The private key of the node. -- `publicKey` - The public key of the node. -- `chainCode` - The chain code of the node. -- `curve` - The name of the curve used by the node: `"ed25519"` or `"secp256k1"`. - -#### Example - - - - -```json title="snap.manifest.json" -"initialPermissions": { - "snap_getBip32Entropy": [ - { - "path": ["m", "44'", "3'"], - "curve": "secp256k1" // Or "ed25519" - } - ] -} -``` - - - - -```javascript title="index.js" -import { SLIP10Node } from "@metamask/key-tree" - -// This example uses Dogecoin, which has a derivation path starting with m/44'/3'. -const dogecoinNode = await snap.request({ - method: "snap_getBip32Entropy", - params: { - // The path and curve must be specified in the initial permissions. - path: ["m", "44'", "3'"], - curve: "secp256k1", - }, -}) - -// Next, create an instance of a SLIP-10 node for the Dogecoin node. -const dogecoinSlip10Node = await SLIP10Node.fromJSON(dogecoinNode) - -// m/44'/3'/0' -const accountKey0 = await dogecoinSlip10Node.derive(["bip32:0'"]) - -// m/44'/3'/1' -const accountKey1 = await dogecoinSlip10Node.derive(["bip32:1'"]) - -// Now, you can ask the user to sign transactions, etc. -``` - - - - -## `snap_getBip32PublicKey` - -Gets the [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) public key for the -derivation path specified by the `path` parameter. -Note that this returns the public key, not the extended public key (`xpub`), or Ethereum address. - -#### Parameters - -An object containing: - -- `path` - An array, starting with `m`, containing the BIP-32 derivation path to the public key to - retrieve. - For example, `["m", "44'", "60'"]`. -- `curve` - The curve to use for the key derivation. - Must be `"ed25519"` or `"secp256k1"`. -- `compressed` - Indicates whether the public key should be compressed. - The default is `false`. - -#### Returns - -The public key as hexadecimal string. - -#### Example - - - - -```json title="snap.manifest.json" -"initialPermissions": { - "snap_getBip32PublicKey": [ - { - "path": ["m", "44'", "3'", "0'", "0", "0"], - "curve": "secp256k1" - } - ] -} -``` - - - - -```javascript title="index.js" -// This example uses Dogecoin, which has a derivation path starting with m/44'/3'. -const dogecoinPublicKey = await snap.request({ - method: "snap_getBip32PublicKey", - params: { - // The path and curve must be specified in the initial permissions. - path: ["m", "44'", "3'", "0'", "0", "0"], - curve: "secp256k1", - compressed: false, - }, -}) - -// "0x..." -console.log(dogecoinPublicKey) -``` - - - - -## `snap_getBip44Entropy` - -:::danger important -If you call this method, you receive the user's parent key for the protocol they request. -You're managing the user's keys and assets on their behalf. -Their safety is your responsibility. -::: - -Gets the [BIP-44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) `coin_type` key -for the `coin_type` number specified by the method name. -See [SLIP-44](https://github.com/satoshilabs/slips/blob/master/slip-0044.md) for the list of -available protocols and their `coin_type` values. - -This method is designed to be used with the -[`@metamask/key-tree`](https://npmjs.com/package/@metamask/key-tree) module. -`@metamask/key-tree` can help you get the -[extended private keys](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys) -for user addresses, but it's your responsibility to know how to use those keys to, for example, -derive an address for the relevant protocol or sign a transaction for the user. - -#### Parameters - -An object containing `coinType`, the BIP-44 coin type to get the entropy for. - -:::caution -Coin type 60 is reserved for MetaMask externally owned accounts and blocked for Snaps. -If you wish to connect to MetaMask accounts in a Snap, use -[`endowment:ethereum-provider`](../reference/permissions.md/#endowmentethereum-provider) and -[`eth_requestAccounts`](/wallet/reference/eth_requestAccounts). -::: - -#### Returns - -An object representing the -[BIP-44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) `coin_type` HD tree node -and containing its corresponding key material: - -- `coin_type` - The BIP-44 [coin type](https://github.com/satoshilabs/slips/blob/master/slip-0044.md) - value of the node. -- `depth` - The 0-indexed BIP-44 path depth of the node. - Since this is a `coin_type` node, the depth is `2`. -- `privateKey` - The hexadecimal-encoded string representation of the private key for the node. -- `publicKey` - The hexadecimal-encoded string representation of the public key for the node. -- `chainCode` - The hexadecimal-encoded string representation of the chain code for the node. -- `path` - A human-readable representation of the BIP-44 HD tree path of the node. - Since this is a `coin_type` node, the path is of the form `m/44'/coin_type'`. - -#### Example - - - - -```json title="snap.manifest.json" -"initialPermissions": { - "snap_getBip44Entropy": [ - { - "coinType": 3 - } - ] -} -``` - - - - -```javascript title="index.js" -import { getBIP44AddressKeyDeriver } from "@metamask/key-tree" - -// This example uses Dogecoin, which has coin_type 3. -const dogecoinNode = await snap.request({ - method: "snap_getBip44Entropy", - params: { - coinType: 3, - }, -}) - -// Next, create an address key deriver function for the Dogecoin coin_type node. -// In this case, its path is: m/44'/3'/0'/0/address_index -const deriveDogecoinAddress = await getBIP44AddressKeyDeriver(dogecoinNode) - -// These are BIP-44 nodes containing the extended private keys for the respective derivation paths. - -// m/44'/3'/0'/0/0 -const addressKey0 = await deriveDogecoinAddress(0) - -// m/44'/3'/0'/0/1 -const addressKey1 = await deriveDogecoinAddress(1) - -// Now, you can ask the user to sign transactions, etc. -``` - - - - -## `snap_getClientStatus` - -Gets the locked status of the Snaps client. - -It is useful to check if MetaMask is locked in the following situations: - -- When running background operations that require MetaMask to be unlocked, for example, - [accessing encrypted state](../features/data-storage.md#2-use-encrypted-storage). - If MetaMask is locked, the user gets an unexpected password request. -- When [displaying a dialog](#snap_dialog). Dialogs do not work when MetaMask is locked. - -#### Returns - -`true` if MetaMask is locked, `false` if MetaMask is unlocked. - -#### Example - -```typescript title="index.js" -import type { OnCronjobHandler } from "@metamask/snaps-sdk" -import { MethodNotFoundError } from "@metamask/snaps-sdk" - -export const onCronjob: OnCronjobHandler = async ({ request }) => { - switch (request.method) { - case "execute": - // Find out if MetaMask is locked. - const { locked } = await snap.request({ - method: "snap_getClientStatus", - }) - - if (!locked) { - // Do something that requires MetaMask to be unlocked, such as access encrypted state. - } - - default: - throw new MethodNotFoundError() - } -} -``` - -## `snap_getEntropy` - -Gets a deterministic 256-bit entropy value, specific to the Snap and the user's account. -You can use this entropy to generate a private key, or any other value that requires a high level of -randomness. -Other Snaps can't access this entropy, and it changes if the user's secret recovery phrase changes. - -You can optionally specify a salt to generate different entropy for different purposes. -Using a salt results in entropy unrelated to the entropy generated without a salt. - -This value is deterministic: it's always the same for the same Snap, user account, and salt. - -#### Parameters - -An object containing: - -- `version` - The number `1`. - This is reserved for future use. -- `salt` (optional) - An arbitrary string to be used as a salt for the entropy. - This can be used to generate different entropy for different purposes. - -#### Returns - -The entropy as a hexadecimal string. - -#### Example - - - - -```json title="snap.manifest.json" -"initialPermissions": { - "snap_getEntropy": {} -} -``` - - - - -```javascript title="index.js" -const entropy = await snap.request({ - method: "snap_getEntropy", - params: { - version: 1, - salt: "foo", // Optional. - }, -}) - -// "0x..." -console.log(entropy) -``` - - - - -## `snap_getFile` - -Gets a static file's content in UTF-8, Base64, or hexadecimal. -The file must be [specified in the Snap's manifest file](../features/static-files.md). - -#### Parameters - -An object containing: - -- `path` - The path to the file, relative to the Snap's package directory (that is, one level above `src`). -- `encoding` (optional) - One of `utf8`, `base64`, or `hex`. The default is `base64`. - -#### Returns - -The file content as a string in the requested encoding. - -#### Example - - - - -```json title="snap.manifest.json" -"source": { - "shasum": "xxx", - "location": { - // ... - }, - "files": [ - "./files/myfile.bin" - ] -} -``` - - - - -```javascript title="index.js" -const contents = await snap.request({ - method: "snap_getFile", - params: { - path: "./files/myfile.bin", - encoding: "hex", - }, -}) - -// "0x..." -console.log(contents) -``` - - - - -## `snap_getLocale` - -Gets the user's locale setting. You can use this method to localize text in your snap. - -#### Returns - -The user's locale setting as a [language code](https://github.com/MetaMask/metamask-extension/blob/develop/app/_locales/index.json). - -#### Example - - - - -```tsx title="index.tsx" -import { Box, Text } from "@metamask/snaps-sdk/jsx"; - -const locale = await snap.request({ method: "snap_getLocale" }); - -let greeting = "Hello"; -if(locale === "es") { - greeting = "Hola"; -} - -await snap.request({ - method: "snap_dialog", - params: { - type: "alert", - content: ( - - {greeting} - - ), - }, -}); -``` - - - - -```typescript title="index.ts" -import { panel, text } from "@metamask/snaps-sdk"; - -const locale = await snap.request({ method: "snap_getLocale" }) - -let greeting = "Hello" -if (locale === "es") { - greeting = "Hola" -} - -await snap.request({ - method: "snap_dialog", - params: { - type: "alert", - content: panel([text(greeting)]), - }, -}) -``` - - - - -## `snap_manageAccounts` - -Manages [account management Snap](../features/custom-evm-accounts/index.md) accounts. -This method is organized into multiple sub-methods which each take their own parameters: - -- [`createAccount`](#createaccount) -- [`updateAccount`](#updateaccount) -- [`deleteAccount`](#deleteaccount) -- [`listAccounts`](#listaccounts) -- [`submitResponse`](#submitresponse) - -### createAccount - -Creates a new Snap account. - -:::note -The Snap is responsible for maintaining its own record of accounts. -This can be done using [`snap_manageState`](#snap_managestate). -::: - -#### Parameters - -`account` - [An account object.](keyring-api/account-management/objects.md#keyringaccount) - -#### Returns - -`null` - -#### Example - -```typescript title="index.ts" -import { Keyring, KeyringAccount } from "@metamask/keyring-api" - -class MyKeyring implements Keyring { - // Other methods. - - async createAccount( - name: string, - options: Record | null = null - ): Promise { - const account: KeyringAccount = { - id: uuid(), - name, - options, - address, - supportedMethods: [ - "eth_sendTransaction", - "eth_sign", - "eth_signTransaction", - "eth_signTypedData_v1", - "eth_signTypedData_v2", - "eth_signTypedData_v3", - "eth_signTypedData_v4", - "eth_signTypedData", - "personal_sign", - ], - type: "eip155:eoa", - } - - // Store the account in state. - - await snap.request({ - method: "snap_manageAccounts", - params: { - method: "createAccount", - params: { account }, - }, - }) - - return account - } -} -``` - -### updateAccount - -Updates an existing Snap account. - -:::note -The Snap is responsible for maintaining its own record of accounts. -This can be done using [`snap_manageState`](#snap_managestate). -::: - -#### Parameters - -`account` - [An account object.](keyring-api/account-management/objects.md#keyringaccount) - -#### Returns - -`null` - -#### Example - -```typescript title="index.ts" -import { Keyring, KeyringAccount } from "@metamask/keyring-api" - -class MyKeyring implements Keyring { - // Other methods. - - async updateAccount(account: KeyringAccount): Promise { - // Store the new account details in state. - - await snap.request({ - method: "snap_manageAccounts", - params: { - method: "updateAccount", - params: { account }, - }, - }) - } -} -``` - -### deleteAccount - -Deletes a Snap account. - -:::note -The Snap is responsible for maintaining its own record of accounts. -This can be done using [`snap_manageState`](#snap_managestate). -::: - -#### Parameters - -`id` - The ID of the account to be deleted. - -#### Returns - -`null` - -#### Example - -```typescript title="index.ts" -import { Keyring } from "@metamask/keyring-api" - -class MyKeyring implements Keyring { - // Other methods. - - async deleteAccount(id: string): Promise { - // Delete the account from state. - - await snap.request({ - method: "snap_manageAccounts", - params: { - method: "deleteAccount", - params: { id }, - }, - }) - } -} -``` - -### listAccounts - -Lists the calling Snap's accounts that are known to MetaMask. -This method does not call back to the Snap. -Instead, the Snap can use it to check whether there's a discrepancy between the Snap's internal -state of accounts and the state known to MetaMask. - -#### Returns - -An array of [account objects](keyring-api/account-management/objects.md#keyringaccount). - -#### Example - -```typescript title="index.ts" -import { Keyring, KeyringAccount } from "@metamask/keyring-api"; - -class MyKeyring implements Keyring { - // Other methods. - - async checkIfAccountsInSync(): Promise { - - const knownAccounts: KeyringAccount[] = /* Grab accounts from Snap state. */; - - const listedAccounts: KeyringAccount[] = await snap.request({ - method: "snap_manageAccounts", - params: { - method: "listAccounts", - }, - }); - - // Compare the arrays and return the response. - } -} -``` - -### submitResponse - -Finalizes a signing request. -This is usually called as part of the -[`keyring_approveRequest`](keyring-api/account-management/index.md#keyring_approverequest) method. - -#### Parameters - -- `id` - The ID of the request to finalize. -- `result` - The result that should be returned to the original JSON-RPC caller. - -#### Returns - -`null` - -#### Example - -```typescript title="index.ts" -import { Keyring } from "@metamask/keyring-api" -import { Json } from "@metamask/utils" - -class MyKeyring implements Keyring { - // Other methods. - - async approveRequest(id: string, result?: Json): Promise { - // Do any Snap-side logic to finish approving the request. - - await snap.request({ - method: "snap_manageAccounts", - params: { - method: "submitResponse", - params: { id, result }, - }, - }) - } -} -``` - -## `snap_manageState` - -Allows the Snap to persist up to 100 MB of data to disk and retrieve it at will. -By default, the data is automatically encrypted using a Snap-specific key and automatically -decrypted when retrieved. -You can set `encrypted` to `false` to use unencrypted storage. - -#### Parameters - -An object containing: - -- `operation` - The state operation to perform (`"clear"`, `"get"`, or `"update"`). -- `newState` - The value to update state with if the operation is `"update"`, and nothing otherwise. -- `encrypted` (optional) - Indicates whether the Snap will encrypt the data. - The default is `true`. - -#### Returns - -The value stored in state if the operation is `get`, and `null` otherwise. - -#### Example - -```javascript title="index.js" -// Persist some data. -await snap.request({ - method: "snap_manageState", - params: { - operation: "update", - newState: { hello: "world" }, - }, -}) - -// At a later time, get the stored data. -const persistedData = await snap.request({ - method: "snap_manageState", - params: { operation: "get" }, -}) - -console.log(persistedData) -// { hello: "world" } - -// If there's no need to store data anymore, clear it out. -await snap.request({ - method: "snap_manageState", - params: { - operation: "clear", - }, -}) -``` - -## `snap_notify` - -Displays a [notification](../features/notifications.md) in MetaMask or natively in the OS. -Snaps can trigger a short notification text for actionable or time sensitive information. - -#### Parameters - -An object containing the contents of the notification: - -- `type` - The notification type (`"inApp"` or `"native"`). - We recommend using `type: "inApp"` because there's no guarantee that native notifications are - displayed to the user. -- `message` - A message to show in the notification. - -#### Example - -```javascript title="index.js" -await snap.request({ - method: "snap_notify", - params: { - type: "inApp", - message: "Hello, world!", - }, -}) -``` - -## Interactive UI methods - -The following methods are used in [interactive UI](../features/custom-ui/interactive-ui.md). -These methods do not require requesting permission in the Snap manifest file. - -### `snap_createInterface` - -Creates an interactive interface for use in [interactive UI](../features/custom-ui/interactive-ui.md). - -#### Parameters - -An object containing: - -- `ui` - The [custom UI](../features/custom-ui/index.md) to create. -- `context` (optional) - A custom context object that will be passed to [`onUserInput`](./entry-points.md#onuserinput) when the user interacts with the interface. - -#### Returns - -The interface's ID to be used in [`snap_dialog`](#snap_dialog), returned from -[`onTransaction`](./entry-points.md#ontransaction) or [`onHomePage`](./entry-points.md#onhomepage). - -#### Example - -```js title="index.js" -const interfaceId = await snap.request({ - method: "snap_createInterface", - params: { - ui: panel([ - heading("Interactive interface"), - button({ - value: "Click me", - name: "interactive-button", - }), - ]), - }, -}) - -await snap.request({ - method: "snap_dialog", - params: { - type: "Alert", - id: interfaceId, - }, -}) -``` - -### `snap_getInterfaceState` - -Gets the state of an interactive interface by its ID. -For use in [interactive UI](../features/custom-ui/interactive-ui.md). - -#### Parameters - -- `id` - The ID of the interface. - -#### Returns - -An object where each top-level property can be one of the following: - -- The `name` of an [`input`](../features/custom-ui/index.md#input) with its current value. -- The `name` of a [`form`](../features/custom-ui/index.md#form), with a nested object containing the - current values of all [`inputs`](../features/custom-ui/index.md#input) in the form. - -#### Example - -```js title="index.js" -const interfaceId = await snap.request({ - method: "snap_createInterface", - params: { - ui: panel([ - heading("Interactive UI Example Snap"), - // A top-level input. - input({ - name: "top-level-input", - placeholder: "Enter something", - }), - // A top-level form... - form({ - name: "example-form", - children: [ - // ...with a nested input. - input({ - name: "nested-input", - placeholder: "Enter something", - }), - button("Submit", ButtonType.Submit, "submit"), - ], - }), - ]), - }, -}) - -const state = await snap.request({ - method: "snap_getInterfaceState", - params: { - id: interfaceId, - }, -}) - -console.log(state) -/* -{ - "top-level-input": "What the user typed in that field", - "example-form": { - "nested-input": "What the user typed in that field" - } -} -*/ -``` - -### `snap_updateInterface` - -Updates an interactive interface. -For use in [interactive UI](../features/custom-ui/interactive-ui.md). - -#### Parameters - -An object containing: - -- `id` - The ID of the interface to be updated, usually received in the - [`onUserInput`](./entry-points.md#onuserinput) entry point. -- `ui` - The [custom UI](../features/custom-ui/index.md) to create. - -#### Example - -```js title="index.js" -export function onUserInput({ id, event }) { - console.log("Received input event", event); - - await snap.request({ - method: "snap_updateInterface", - params: { - id, - ui: panel([ - heading("New interface"), - ]), - }, - }); -}; -``` diff --git a/snaps/reference/snaps-api/index.md b/snaps/reference/snaps-api/index.md new file mode 100644 index 00000000000..59abf96470f --- /dev/null +++ b/snaps/reference/snaps-api/index.md @@ -0,0 +1,9 @@ +--- +sidebar_class_name: 'hidden' +description: See the Snaps API reference. +--- + +# JSON-RPC API + +This section provides a reference for the JSON-RPC methods available in the +MetaMask Snaps API. diff --git a/snaps/reference/wallet-api-for-snaps.md b/snaps/reference/wallet-api-for-snaps.md deleted file mode 100644 index 5bb6eff542a..00000000000 --- a/snaps/reference/wallet-api-for-snaps.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -description: See the Wallet API for Snaps reference. -sidebar_position: 2 -toc_max_heading_level: 2 ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Wallet API for Snaps - -Dapps can install and communicate with Snaps using a subset of the -[Wallet JSON-RPC API](/wallet/concepts/wallet-api/#json-rpc-api). -This page is a reference for those Snaps-specific methods. - -:::note -See the [Wallet JSON-RPC API interactive reference](/wallet/reference/json-rpc-api) for the other -methods dapps can call. -::: - -## `wallet_getSnaps` - -Returns the IDs of the dapp's permitted Snaps and some relevant metadata. - -### Returns - -An object mapping the IDs of permitted Snaps to their metadata: - -- `id`: `string` - The ID of the Snap. -- `initialPermissions`: `string` - The initial permissions of the Snap, which will be requested when - the Snap is installed. -- `version`: `string` - The version of the Snap. -- `enabled`: `boolean` - Indicates whether the Snap is enabled. -- `blocked`: `boolean` - Indicates whether the Snap is blocked. - -### Example - - - - -```js -await window.ethereum.request({ - method: "wallet_getSnaps", - params: [], -}) -``` - - - - -```json -{ - "npm:@metamask/example-snap": { - "version": "1.0.0", - "id": "npm:@metamask/example-snap", - "enabled": true, - "blocked": false - } -} -``` - - - - -## `wallet_requestSnaps` - -[Requests permission](../how-to/request-permissions.md#request-permissions-from-a-dapp) for a dapp -to communicate with the specified Snaps and attempts to install them if they're not already installed. - -If the Snap version range is specified, MetaMask attempts to install a version of the Snap that -satisfies the range. -If a compatible version of the Snap is already installed, the request succeeds. -If an incompatible version is installed, MetaMask attempts to update the Snap to the latest version -that satisfies the range. -The request succeeds if the Snap is successfully installed. - -If the installation of any Snap fails, this method returns the error that caused the failure. - -:::note -A dapp must call this method on Snap before calling [`wallet_snap`](#wallet_snap) or -[`wallet_invokeSnap`](#wallet_invokesnap) on the Snap. -::: - -### Parameters - -An object mapping the IDs of the requested Snaps to optional SemVer version ranges. -The SemVer version ranges use the same semantics as npm `package.json` ranges. - -### Returns - -An object mapping the IDs of permitted Snaps to their metadata: - -- `id`: `string` - The ID of the Snap. -- `initialPermissions`: `string` - The initial permissions of the Snap, which will be request when - the Snap is installed. -- `version`: `string` - The version of the Snap. -- `enabled`: `boolean` - Indicates whether the Snap is enabled. -- `blocked`: `boolean` - Indicates whether the Snap is blocked. - -### Example - - - - -```js -await window.ethereum.request({ - method: "wallet_requestSnaps", - params: { - "npm:@metamask/example-snap": {}, - "npm:foo-snap": { - version: "^1.0.2", - }, - }, -}) -``` - - - - -```json -{ - "npm:@metamask/example-snap": { - "version": "1.0.0", - "id": "npm:@metamask/example-snap", - "enabled": true, - "blocked": false - }, - "npm:fooSnap": { - "version": "1.0.5", - "id": "npm:foo-snap", - "enabled": true, - "blocked": false - } -} -``` - - - - -## `wallet_snap` - -Calls the specified JSON-RPC API method of the specified Snap. -The Snap must be installed and the dapp must have permission to communicate with the Snap, or the -request is rejected. -The dapp can install the Snap and request permission to communicate with it using -[`wallet_requestSnaps`](#wallet_requestsnaps). - -This method is synonymous to [`wallet_invokeSnap`](#wallet_invokesnap). - -### Parameters - -An object containing: - -- `snapId`: `string` - The ID of the Snap to invoke. -- `request`: `object` - The JSON-RPC request object to send to the invoked Snap. - -### Returns - -The result of the Snap method call. - -### Example - - - - -```js -await window.ethereum.request({ - method: "wallet_snap", - params: { - snapId: "npm:@metamask/example-snap", - request: { - method: "hello", - }, - }, -}) -``` - - - - -```json -{} -``` - - - - -## `wallet_invokeSnap` - -Calls the specified JSON-RPC API method of the specified Snap. -The Snap must be installed and the dapp must have permission to communicate with the Snap, or the -request is rejected. -The dapp can install the Snap and request permission to communicate with it using -[`wallet_requestSnaps`](#wallet_requestsnaps). - -This method is synonymous to [`wallet_snap`](#wallet_snap). - -### Parameters - -An object containing: - -- `snapId`: `string` - The ID of the Snap to invoke. -- `request`: `object` - The JSON-RPC request object to send to the invoked Snap. - -### Returns - -The result of the Snap method call. - -### Example - - - - -```js -await window.ethereum.request({ - method: "wallet_invokeSnap", - params: { - snapId: "npm:@metamask/example-snap", - request: { - method: "hello", - }, - }, -}) -``` - - - - -```json -{} -``` - - - diff --git a/src/client/scroll-fix.js b/src/client/scroll-fix.js new file mode 100644 index 00000000000..0dbeaec1d74 --- /dev/null +++ b/src/client/scroll-fix.js @@ -0,0 +1,24 @@ +export function onRouteDidUpdate({ location, previousLocation }) { + if (!previousLocation && location.hash) { + return + } + if (previousLocation && location.pathname === previousLocation.pathname && location.hash) { + return + } + function handleScroll() { + const items = document.querySelectorAll('.menu__link--active') + if (items?.length === 0) return + + const item = items[items.length - 1] + const bounding = item.getBoundingClientRect() + const isVisible = + bounding.top >= 0 && + bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) + if (!isVisible) { + item.scrollIntoView({ block: 'start', inline: 'nearest' }) + window.scrollTo(0, 0) + } + } + + setTimeout(handleScroll, 0) +} diff --git a/src/components/Accordion/accordion.module.scss b/src/components/Accordion/accordion.module.scss index 60e06d25f46..64018598a64 100644 --- a/src/components/Accordion/accordion.module.scss +++ b/src/components/Accordion/accordion.module.scss @@ -1,18 +1,17 @@ -:root[data-theme="dark"] { - --accordion-background: #24272a; +:root[data-theme='dark'] { + --accordion-background: #393d46; --accordion-border: rgba(132, 140, 150, 0.16); } -:root[data-theme="light"] { +:root[data-theme='light'] { --accordion-background: #ffffff; --accordion-border: rgba(187, 192, 197, 0.4); } .accordion { background: var(--accordion-background); - border: 1px solid var(--accordion-border); border-radius: 8px; - margin-bottom: 24px; + margin-bottom: 2rem; .header { display: flex; @@ -22,17 +21,17 @@ .closeButton { cursor: pointer; - margin-left: 24px; - margin-right: 24px; - display: block; - height: 16px; + margin-left: 2rem; + margin-right: 2rem; + display: flex; + height: 1rem; line-height: 1; .image { - min-width: 16px; - width: 16px; - min-height: 16px; - height: 16px; + min-width: 1rem; + width: 1rem; + min-height: 1rem; + height: 1rem; transition: all 0.5s; transform: rotate(45deg); diff --git a/src/components/Accordion/index.tsx b/src/components/Accordion/index.tsx index 8b55e24d218..b121d42746b 100644 --- a/src/components/Accordion/index.tsx +++ b/src/components/Accordion/index.tsx @@ -1,31 +1,19 @@ -import React, { useState } from "react"; -import clsx from "clsx"; -import styles from "./accordion.module.scss"; -import CloseImg from "./close.svg"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; +import React, { useState } from 'react' +import clsx from 'clsx' +import styles from './accordion.module.scss' +import CloseImg from './close.svg' interface IAccordion { - children: [React.ReactElement, React.ReactElement]; - opened?: boolean; + children: [React.ReactElement, React.ReactElement] + opened?: boolean } -export default function Accordion({ - children: [title, body], - opened = false, -}: IAccordion) { - const [isOpened, setIsOpened] = useState(opened); +export default function Accordion({ children: [title, body], opened = false }: IAccordion) { + const [isOpened, setIsOpened] = useState(opened) const handleToggle = () => { - trackClickForSegment({ - eventName: `${isOpened ? "Expanded" : "Collapsed"} - ${title}`, - clickType: "Accordion", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - setIsOpened((value) => !value); - }; + setIsOpened(value => !value) + } return (
@@ -33,20 +21,13 @@ export default function Accordion({ role="button" data-testid="accordion-title" onClick={handleToggle} - className={styles.header} - > + className={styles.header}> {title} - +
-
- {body} -
+
{body}
- ); + ) } diff --git a/src/components/Alert/alert.module.scss b/src/components/Alert/alert.module.scss index 9327c763272..3a3275a4296 100644 --- a/src/components/Alert/alert.module.scss +++ b/src/components/Alert/alert.module.scss @@ -1,4 +1,4 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --alert-error-background: rgb(53, 40, 41); --alert-error-border: #e06470; --alert-success-background: rgb(34, 48, 36); @@ -7,7 +7,7 @@ --alert-info-border: #ffdf70; } -:root[data-theme="light"] { +:root[data-theme='light'] { --alert-error-background: rgb(248, 235, 237); --alert-error-border: #d73847; --alert-success-background: rgb(234, 242, 235); diff --git a/src/components/Alert/index.tsx b/src/components/Alert/index.tsx index 9ea7acb3f8d..177775defed 100644 --- a/src/components/Alert/index.tsx +++ b/src/components/Alert/index.tsx @@ -1,36 +1,27 @@ -import React from "react"; -import { positions, types } from "react-alert"; -import clsx from "clsx"; -import CloseImg from "./close.svg"; -import InfoImg from "./info.svg"; -import SuccessImg from "./success.svg"; -import ErrorImg from "./error.svg"; -import Text from "@site/src/components/Text"; -import styles from "./alert.module.scss"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; +import React from 'react' +import { positions, types } from 'react-alert' +import clsx from 'clsx' +import CloseImg from './close.svg' +import InfoImg from './info.svg' +import SuccessImg from './success.svg' +import ErrorImg from './error.svg' +import Text from '@site/src/components/Text' +import styles from './alert.module.scss' export const options = { position: positions.TOP_CENTER, timeout: 10000, - offset: "5px", + offset: '5px', containerStyle: { zIndex: 1000, marginTop: 64, }, -}; +} export const AlertTemplate = ({ style, options, message, close }) => { const handleCloseAlert = () => { - trackClickForSegment({ - eventName: "Close", - clickType: "Alert", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - close(); - }; + close() + } return (
{ styles.alert, options.type === types.INFO && styles.info, options.type === types.SUCCESS && styles.success, - options.type === types.ERROR && styles.error, - )} - > + options.type === types.ERROR && styles.error + )}> {options.type === types.INFO && } {options.type === types.SUCCESS && } {options.type === types.ERROR && } @@ -50,30 +40,21 @@ export const AlertTemplate = ({ style, options, message, close }) => { role="button" data-testid="alert-close" onClick={handleCloseAlert} - className={styles.closeButton} - > + className={styles.closeButton}>
- ); -}; + ) +} -export const AlertTitle = ({ - children, -}: { - children: string | React.ReactElement; -}) => ( +export const AlertTitle = ({ children }: { children: string | React.ReactElement }) => ( {children} -); +) -export const AlertText = ({ - children, -}: { - children: string | React.ReactElement; -}) => ( +export const AlertText = ({ children }: { children: string | React.ReactElement }) => ( {children} -); +) diff --git a/src/components/AuthLogin/AuthModal.tsx b/src/components/AuthLogin/AuthModal.tsx index 2cbd4021e39..2712207fb83 100644 --- a/src/components/AuthLogin/AuthModal.tsx +++ b/src/components/AuthLogin/AuthModal.tsx @@ -1,45 +1,44 @@ -import React, { useContext, useEffect } from "react"; -import Modal from "react-modal"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import { useLocation } from "@docusaurus/router"; -import styles from "./styles.module.css"; -import global from "../ParserOpenRPC/global.module.css"; -import Icon from "../Icon/Icon"; +import React, { useContext, useEffect } from 'react' +import Modal from 'react-modal' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { useLocation } from '@docusaurus/router' +import styles from './styles.module.scss' +import Icon from '../Icon/Icon' import { authenticateAndAuthorize, - AUTH_WALLET_PAIRING, - AUTH_WALLET_SESSION_NAME, - AUTH_WALLET_PROJECTS, saveTokenString, getUserIdFromJwtToken, + AUTH_WALLET_PAIRING, + AUTH_WALLET_PROJECTS, + AUTH_WALLET_SESSION_NAME, AUTH_WALLET_USER_PLAN, -} from "../../lib/siwsrp/auth"; -import { DASHBOARD_URL, REQUEST_PARAMS } from "@site/src/lib/constants"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; +} from '@site/src/lib/siwsrp/auth' +import { REQUEST_PARAMS } from '@site/src/lib/constants' +import { MetamaskProviderContext } from '@site/src/theme/Root' +import Button from '@site/src/components/elements/buttons/button' +import Text from '@site/src/components/Text' -Modal.setAppElement("#__docusaurus"); +Modal.setAppElement('#__docusaurus') type AuthModalProps = { - open: boolean; - setOpen: (arg: boolean) => void; - setUser: (arg: string) => void; - setToken: (arg: string) => void; - step: AUTH_LOGIN_STEP; - setStep: (arg: AUTH_LOGIN_STEP) => void; - setUksTier: (arg: string) => void; -}; + open: boolean + setOpen: (arg: boolean) => void + setUser: (arg: string) => void + setToken: (arg: string) => void + step: AUTH_LOGIN_STEP + setStep: (arg: AUTH_LOGIN_STEP) => void + setUksTier: (arg: string) => void +} export enum AUTH_LOGIN_STEP { - CONNECTING = "connecting", - WALLET_LOGIN_MULTI_USER = "wallet-login-multi-user", - WALLET_LOGIN_EMAIL_PASSWORD = "wallet-login-email-password", - CONNECTION_ERROR = "connection-error", - CONNECTION_SUCCESS = "connection-success", + CONNECTING = 'connecting', + CONNECTION_ERROR = 'connection-error', + CONNECTION_SUCCESS = 'connection-success', } export enum WALLET_LINK_TYPE { - NO = "NO", - ONE = "ONE", - MULTIPLE = "MULTIPLE", + NO = 'NO', + ONE = 'ONE', + MULTIPLE = 'MULTIPLE', } const ConnectingModal = () => { @@ -49,28 +48,15 @@ const ConnectingModal = () => {
-
Waiting for MetaMask
-
- Don’t close or exit this window. Please continue connecting on your - extension. -
- + + Waiting for MetaMask + + + Don’t close or exit this window. Please continue connecting on your extension. + - ); -}; + ) +} const ConnectionSuccessModal = () => { return ( @@ -79,61 +65,54 @@ const ConnectionSuccessModal = () => {
-
Wallet Connected!
-
- Your wallet is successfully connected. -
- You’re all set! -
+ + Wallet Connected! + + + + Your wallet is successfully connected. +
+ You’re all set! +
+
- ); -}; + ) +} const ConnectionErrorModal = ({ setOpen, login, metaMaskDisconnect, }: { - setOpen: (arg: boolean) => void; - login: () => void; - metaMaskDisconnect: () => void; + setOpen: (arg: boolean) => void + login: () => void + metaMaskDisconnect: () => void }) => { const handleCancel = () => { - metaMaskDisconnect(); - setOpen(false); - }; + metaMaskDisconnect() + setOpen(false) + } return ( <>
-
+ There was an issue connecting your wallet -
-
- Please try again or{" "} - contact us. -
+ + + + Please try again or contact us. + +
- - +
- ); -}; + ) +} const AuthModal = ({ open, @@ -144,168 +123,193 @@ const AuthModal = ({ setToken, setUksTier, }: AuthModalProps) => { - const { siteConfig } = useDocusaurusContext(); - const { DASHBOARD_PREVIEW_URL, VERCEL_ENV } = siteConfig?.customFields || {}; + const { siteConfig } = useDocusaurusContext() + const { DASHBOARD_URL, VERCEL_ENV } = siteConfig?.customFields || {} const { sdk, + setNeedsMfa, setWalletLinked, - setWalletLinkUrl, + setWalletAuthUrl, metaMaskDisconnect, setProjects, setMetaMaskAccount, setMetaMaskProvider, - } = useContext(MetamaskProviderContext); - const location = useLocation(); - const { pathname } = location; + fetchLineaEns, + } = useContext(MetamaskProviderContext) + const location = useLocation() + const { pathname } = location const login = async () => { - setStep(AUTH_LOGIN_STEP.CONNECTING); + setStep(AUTH_LOGIN_STEP.CONNECTING) try { if (!sdk.isExtensionActive()) { - setOpen(false); + setOpen(false) } // Try to connect wallet first - const accounts = await sdk.connect(); - setMetaMaskAccount(accounts); + const accounts = await sdk.connect() + if (accounts && accounts.length > 0) { - setMetaMaskAccount(accounts[0]); - const provider = sdk.getProvider(); - setMetaMaskProvider(provider); + setMetaMaskAccount(accounts[0]) + fetchLineaEns(accounts[0]) + const provider = sdk.getProvider() + setMetaMaskProvider(provider) } + const customProvider = sdk.getProvider() // Call Profile SDK API to retrieve Hydra Access Token & Wallet userProfile // Hydra Access Token will be used to fetch Infura API const { accessToken, userProfile } = await authenticateAndAuthorize( VERCEL_ENV as string, - ); + customProvider + ) const loginResponse = await ( - await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/wallet/login`, - { - ...REQUEST_PARAMS("POST", { - hydra_token: accessToken, - token: "true", - }), - body: JSON.stringify({ - profileId: userProfile.profileId, - redirect_to: window.location.href, - }), - }, - ) - ).json(); + await fetch(`${DASHBOARD_URL}/api/wallet/login`, { + ...REQUEST_PARAMS('POST', { + hydra_token: accessToken, + token: 'true', + }), + body: JSON.stringify({ + profileId: userProfile.profileId, + redirect_to: window.location.href, + }), + }) + ).json() - if (!loginResponse) throw new Error("Something went wrong"); + if (!loginResponse) throw new Error('Something went wrong') - const { data, session, token } = loginResponse; - localStorage.setItem(AUTH_WALLET_PAIRING, JSON.stringify({ data })); + const { data, session, token } = loginResponse + sessionStorage.setItem(AUTH_WALLET_PAIRING, JSON.stringify({ data })) if (data.step) { // Handling no wallet pairing or multiple pairing const mm_auth = Buffer.from( JSON.stringify({ step: data.step, - mmAuthSession: localStorage.getItem(AUTH_WALLET_SESSION_NAME), + mmAuthSession: sessionStorage.getItem(AUTH_WALLET_SESSION_NAME), walletPairing: data.pairing, token: true, - }), - ).toString("base64"); + }) + ).toString('base64') - const walletLinkUrl = `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/login?mm_auth=${mm_auth}&redirect_to=${session.redirect_to}`; + const walletAuthUrl = `${DASHBOARD_URL}/login?mm_auth=${mm_auth}&redirect_to=${session.redirect_to}` - setWalletLinkUrl(walletLinkUrl); + setWalletAuthUrl(walletAuthUrl) if (data.pairing && !data.pairing.length) { - setWalletLinked(WALLET_LINK_TYPE.NO); + setWalletLinked(WALLET_LINK_TYPE.NO) } if (data.pairing && data.pairing.length > 1) { - setWalletLinked(WALLET_LINK_TYPE.MULTIPLE); + setWalletLinked(WALLET_LINK_TYPE.MULTIPLE) } - setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS); - setOpen(false); - return; + setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS) + setOpen(false) + return + } + + if (data.mfa?.enabled) { + const mm_auth = Buffer.from( + JSON.stringify({ + step: 'verify', + mmAuthSession: sessionStorage.getItem(AUTH_WALLET_SESSION_NAME), + dashboardSessionToken: token, + }) + ).toString('base64') + + const walletAuthUrl = `${DASHBOARD_URL}/login?mm_auth=${mm_auth}&redirect_to=${session.redirect_to}` + + setWalletAuthUrl(walletAuthUrl) + + setNeedsMfa(true) + setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS) + setOpen(false) + return } - setWalletLinked(WALLET_LINK_TYPE.ONE); + setWalletLinked(WALLET_LINK_TYPE.ONE) if (!token) { - setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR); - return; + setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR) + return } - saveTokenString(token); + saveTokenString(token) if (setToken) { - setToken(token); + setToken(token) } - setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS); - const userId = getUserIdFromJwtToken(); + setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS) + const userId = getUserIdFromJwtToken() if (setUser) { - setUser(userId); + setUser(userId) } // You can use Infura Access Token to fetch any Infura API endpoint - const projectsResponse = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/v1/users/${userId}/projects`, - { - ...REQUEST_PARAMS("GET", { Authorization: `Bearer ${token}` }), - }, - ); + const projectsResponse = await fetch(`${DASHBOARD_URL}/api/v1/users/${userId}/projects`, { + ...REQUEST_PARAMS('GET', { Authorization: `Bearer ${token}` }), + }) + if (!projectsResponse.ok) { + throw new Error( + `Failed to fetch projects: ${projectsResponse.status} ${projectsResponse.statusText}` + ) + } const { result: { projects }, - } = await projectsResponse.json(); - sessionStorage.setItem(AUTH_WALLET_PROJECTS, JSON.stringify(projects)); - setProjects(projects); - - const uksUserRawResp = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/v1/users/${userId}`, - { - ...REQUEST_PARAMS("GET", { Authorization: `Bearer ${token}` }), - }, - ); + } = await projectsResponse.json() + sessionStorage.setItem(AUTH_WALLET_PROJECTS, JSON.stringify(projects)) + setProjects(projects) + + const uksUserRawResp = await fetch(`${DASHBOARD_URL}/api/v1/users/${userId}`, { + ...REQUEST_PARAMS('GET', { Authorization: `Bearer ${token}` }), + }) + if (!uksUserRawResp.ok) { + throw new Error( + `Failed to fetch user info: ${uksUserRawResp.status} ${uksUserRawResp.statusText}` + ) + } const { result: { servicePlan: { tier }, }, - } = await uksUserRawResp.json(); - sessionStorage.setItem(AUTH_WALLET_USER_PLAN, JSON.stringify(tier)); + } = await uksUserRawResp.json() + sessionStorage.setItem(AUTH_WALLET_USER_PLAN, JSON.stringify(tier)) if (setUser) { - setUksTier(tier); + setUksTier(tier) } - setOpen(false); + setOpen(false) } catch (e: any) { - if (pathname.startsWith("/wallet/reference")) { - setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS); - setOpen(true); + if (pathname.startsWith('/wallet/reference')) { + setStep(AUTH_LOGIN_STEP.CONNECTION_SUCCESS) + setOpen(true) } else { - setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR); - setOpen(true); + setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR) + setOpen(true) } } - }; + } useEffect(() => { if (open && step == AUTH_LOGIN_STEP.CONNECTING) { - (async () => { + ;(async () => { try { - await login(); + await login() } catch (e: any) { - setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR); + setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR) } - })(); + })() } - if (!open) setStep(AUTH_LOGIN_STEP.CONNECTING); - }, [open]); + if (!open) setStep(AUTH_LOGIN_STEP.CONNECTING) + }, [open]) const handleClose = () => { if (step === AUTH_LOGIN_STEP.CONNECTION_ERROR) { - metaMaskDisconnect(); + metaMaskDisconnect() } - setOpen(false); - }; + setOpen(false) + } return ( + overlayClassName={styles.modalOverlay}>
- {step === AUTH_LOGIN_STEP.CONNECTING ? : null} - {step === AUTH_LOGIN_STEP.CONNECTION_SUCCESS ? ( - - ) : null} + {step === AUTH_LOGIN_STEP.CONNECTION_SUCCESS ? : null} {step === AUTH_LOGIN_STEP.CONNECTION_ERROR ? ( - ); -}; + ) +} -export default AuthModal; +export default AuthModal diff --git a/src/components/AuthLogin/styles.module.css b/src/components/AuthLogin/styles.module.css deleted file mode 100644 index b3e9a95ae90..00000000000 --- a/src/components/AuthLogin/styles.module.css +++ /dev/null @@ -1,114 +0,0 @@ -.modalOverlay { - z-index: 300; - position: fixed; - inset: 0px; - background-color: rgba(0, 0, 0, 0.75); -} - -.modalWrapper { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - overflow: auto; - outline: none; - background: var(--background-default, #24272A); - width: 360px; - padding: 16px; - border-radius: 8px; - margin: auto; - text-align: center; -} - -.modalContent { - color: #FFF; - --font-family-sans: "Euclid Circular B", "Roboto", sans-serif; - position: relative; -} - -.modalClose { - position: absolute; - top: 0; - right: 0; - width: 24px; - height: 24px; - border: 0; - background: transparent; -} - -.spinnerContainer { - display: flex; - align-items: center; - position: relative; - width: 60px; - height: 60px; - margin: auto; -} - -.spinner { - display: inline; - position: absolute; - top: 0; - left: 0; - width: 60px; - height: 60px; - - -webkit-animation: rotating 3s linear infinite; - -moz-animation: rotating 3s linear infinite; - -ms-animation: rotating 3s linear infinite; - -o-animation: rotating 3s linear infinite; - animation: rotating 3s linear infinite; -} - -@-webkit-keyframes spinner /* Safari and Chrome */ { - from { - -webkit-transform: rotate(360deg); - -o-transform: rotate(360deg); - transform: rotate(360deg); - } - to { - -webkit-transform: rotate(-360deg); - -o-transform: rotate(-360deg); - transform: rotate(-360deg); - } -} -@keyframes rotating { - from { - -ms-transform: rotate(360deg); - -moz-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - -o-transform: rotate(360deg); - transform: rotate(360deg); - } - to { - -ms-transform: rotate(-360deg); - -moz-transform: rotate(-360deg); - -webkit-transform: rotate(-360deg); - -o-transform: rotate(-360deg); - transform: rotate(-360deg); - } -} - -.metamask { - display: block; - margin: auto; - width: 30px; - height: 28px; -} - -.heading { - font-size: 18px; - font-weight: 700; - line-height: 24px; - margin: 12px 0 0 0; -} - -.content { - margin: 12px 0; -} - -.flexButton { - display: flex; - justify-content: space-between; - padding: 10px; -} \ No newline at end of file diff --git a/src/components/AuthLogin/styles.module.scss b/src/components/AuthLogin/styles.module.scss new file mode 100644 index 00000000000..346ebfcfccf --- /dev/null +++ b/src/components/AuthLogin/styles.module.scss @@ -0,0 +1,135 @@ +:root[data-theme='dark'] { + --modal-bg-color-primary: var(--general-gray-dark); + --modal-font-color-primary: var(--general-white); +} + +:root[data-theme='light'] { + --modal-bg-color-primary: var(--general-white); + --modal-font-color-primary: var(--general-black); +} + +.modalOverlay { + z-index: 300; + position: fixed; + inset: 0; + background-color: rgb(0 0 0 / 75%); +} + +.modalWrapper { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + overflow: auto; + outline: none; + background: var(--modal-bg-color-primary); + width: 60%; + padding: 1.4rem; + border-radius: 1rem; + margin: auto; + text-align: center; + @include bp(desktop) { + width: 20%; + } +} + +.modalContent { + color: #fff; + position: relative; +} + +.modalClose { + position: absolute; + top: 0; + right: 0; + width: 2rem; + height: 2rem; + border: 0; + background: transparent; + cursor: pointer; + svg { + width: 2rem; + height: 2rem; + path { + fill: var(--modal-font-color-primary); + } + } +} + +.spinnerContainer { + display: flex; + align-items: center; + position: relative; + width: 5rem; + height: 5rem; + margin: auto; +} + +.spinner { + display: inline; + position: absolute; + top: 0; + left: 0; + width: 5rem; + height: 5rem; + animation: rotating 3s linear infinite; + svg { + width: 5rem; + height: 5rem; + } +} + +@keyframes spinner /* Safari and Chrome */ { + from { + transform: rotate(360deg); + } + + to { + transform: rotate(-360deg); + } +} + +@keyframes rotating { + from { + transform: rotate(360deg); + } + + to { + transform: rotate(-360deg); + } +} + +.metamask { + display: block; + margin: auto; + width: 2rem; + height: 2.4rem; + svg { + width: 2rem; + height: 2.4rem; + } +} + +.heading { + font-weight: 500; + margin: 1rem 0 0; + color: var(--modal-font-color-primary); +} + +.content { + margin: 12px 0; + color: var(--modal-font-color-primary); +} + +.flexButton { + display: flex; + justify-content: center; + gap: 1rem; + padding: 1rem; + button { + &:hover { + --button-color-hover: var(--general-black); + --button-text-color-hover: var(--general-white); + } + } +} diff --git a/src/components/AuthRedirect/AuthRedirect.jsx b/src/components/AuthRedirect/AuthRedirect.jsx index 2a2efb5f402..3443dc21cd8 100644 --- a/src/components/AuthRedirect/AuthRedirect.jsx +++ b/src/components/AuthRedirect/AuthRedirect.jsx @@ -1,34 +1,34 @@ -import React, { useEffect, useState } from "react"; -import { Redirect, useLocation } from "@docusaurus/router"; -import useUser from "@site/src/hooks/useUser"; -import { NO_FOUND_PAGE, AUTH_ROUTES } from "@site/src/lib/constants"; +import React, { useEffect, useState } from 'react' +import { Redirect, useLocation } from '@docusaurus/router' +import useUser from '@site/src/hooks/useUser' +import { NO_FOUND_PAGE, AUTH_ROUTES } from '@site/src/lib/constants' const AuthRedirect = () => { - const location = useLocation(); - const { user, loading } = useUser(); - const [currentPage, setCurrentPage] = useState(location.pathname); + const location = useLocation() + const { user, loading } = useUser() + const [currentPage, setCurrentPage] = useState(location.pathname) useEffect(() => { - const authRoute = location.pathname.includes(AUTH_ROUTES.GAS_API); - const isAuth = user && user?.email.includes("@consensys.net"); + const authRoute = location.pathname.includes(AUTH_ROUTES.GAS_API) + const isAuth = user && user?.email.includes('@consensys.net') if (authRoute) { if (!isAuth && !loading) { - setCurrentPage(NO_FOUND_PAGE); - document.body.setAttribute("links", ""); + setCurrentPage(NO_FOUND_PAGE) + document.body.setAttribute('links', '') } if (isAuth && !loading) { - setCurrentPage(location.pathname); - document.body.setAttribute("links", "visible"); + setCurrentPage(location.pathname) + document.body.setAttribute('links', 'visible') } } else { - setCurrentPage(location.pathname); + setCurrentPage(location.pathname) if (isAuth) { - document.body.setAttribute("links", "visible"); + document.body.setAttribute('links', 'visible') } } - }, [location.pathname, loading, user]); + }, [location.pathname, loading, user]) - return ; -}; + return +} -export default AuthRedirect; +export default AuthRedirect diff --git a/src/components/Badge/badge.module.scss b/src/components/Badge/badge.module.scss index 363bdcb8367..7d91d5de1ab 100644 --- a/src/components/Badge/badge.module.scss +++ b/src/components/Badge/badge.module.scss @@ -8,7 +8,7 @@ --badge-error-bg-color: rgba(215, 56, 71, 0.1); } -:root[data-theme="dark"] { +:root[data-theme='dark'] { --badge-default-color: #bbc0c5; --badge-default-bg-color: #24272a; --badge-default-border-color: #bbc0c5; @@ -30,7 +30,7 @@ padding: 2px 8px; color: var(--badge-default-color); background-color: var(--badge-default-bg-color); - text-transform: capitalize; + text-transform: none; &.success { color: var(--badge-success-color); diff --git a/src/components/Badge/index.tsx b/src/components/Badge/index.tsx index a0c14c7cec4..263eae87e9d 100644 --- a/src/components/Badge/index.tsx +++ b/src/components/Badge/index.tsx @@ -1,14 +1,14 @@ -import React from "react"; -import styles from "./badge.module.scss"; -import clsx from "clsx"; +import React from 'react' +import styles from './badge.module.scss' +import clsx from 'clsx' -type variant = "error" | "success" | "default"; +type variant = 'error' | 'success' | 'default' interface IBadge { - variant?: variant; - label: string; + variant?: variant + label: string } -export default function Badge({ variant = "default", label }: IBadge) { - return {label}; +export default function Badge({ variant = 'default', label }: IBadge) { + return {label} } diff --git a/src/components/Banner/banner.module.css b/src/components/Banner/banner.module.css deleted file mode 100644 index 13a4d57b8aa..00000000000 --- a/src/components/Banner/banner.module.css +++ /dev/null @@ -1,38 +0,0 @@ -.banner { - /* Change this to your preferred color */ - padding: 20px; - text-align: center; - margin-bottom: 20px; - box-shadow: inset 0 0 10px rgb(180 179 179 / 50%); /* Light grey shading */ - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - background-color: var(--ifm-background-color); - color: var(--ifm-font-color-base); - border-bottom: 2px solid transparent; - border-right: 2px solid transparent; - transition: - border-color 0.3s ease, - box-shadow 0.3s ease; - border-radius: 15px; -} - -.button { - display: inline-block; - padding: 10px 20px; - text-decoration: none; - transition: background-color 0.3s ease; - margin-top: 20px; - text-align: center; - color: var(--ifm-color-white); - background-color: #f8883b; - border-radius: 0.3rem; - font-weight: bold; - font-size: 0.9rem; -} - -.button:hover { - color: var(--ifm-color-white); - background-color: #faa66c; -} diff --git a/src/components/Banner/banner.module.scss b/src/components/Banner/banner.module.scss new file mode 100644 index 00000000000..e6440a5bba3 --- /dev/null +++ b/src/components/Banner/banner.module.scss @@ -0,0 +1,25 @@ +.banner { + @include bp(desktop) { + padding-top: 0.8rem; + padding-bottom: 0rem; + } + p { + margin: 0; + } +} + +.inner { + background-color: var(--general-gray-light); + padding: 2.4rem; + text-align: center; +} + +.button { + margin-top: 1.4rem; +} + +html[data-theme='dark'] { + .inner { + background-color: var(--general-black-light); + } +} diff --git a/src/components/Banner/index.tsx b/src/components/Banner/index.tsx index 83a1cb0fce4..d12ff92e063 100644 --- a/src/components/Banner/index.tsx +++ b/src/components/Banner/index.tsx @@ -1,38 +1,52 @@ -import React from "react"; -import Link from "@docusaurus/Link"; -import styles from "./banner.module.css"; +import { ReactNode, FC, useState, useEffect } from 'react' +import { useColorMode } from '@docusaurus/theme-common' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import Button from '@site/src/components/elements/buttons/button' + +import styles from './banner.module.scss' interface BannerProps { - children: React.ReactNode; + children: ReactNode } -const Banner: React.FC = ({ children }) => { +const Banner: FC = ({ children }) => { + const { colorMode } = useColorMode() + const [theme, setTheme] = useState('') + + useEffect(() => { + setTheme(colorMode) + }, [colorMode]) + return (
- {children} - -
- Sign up  - + +
+ {children} +
- +
- ); -}; + ) +} -export default Banner; +export default Banner diff --git a/src/components/Button/button.module.scss b/src/components/Button/button.module.scss index de71208ae00..5aed34a667f 100644 --- a/src/components/Button/button.module.scss +++ b/src/components/Button/button.module.scss @@ -1,4 +1,4 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --button-primary-background-color: #1098fc; --button-secondary-background-color: transparent; --button-background-color: #1098fc; @@ -6,10 +6,10 @@ --button-hover-background-color: #036ab5; --button-hover-shadow: 0px 2px 8px 0px rgba(16, 152, 252, 0.4); --button-active-background-color: #3baafd; - --button-danger: #e88f97 + --button-danger: #e88f97; } -:root[data-theme="light"] { +:root[data-theme='light'] { --button-primary-background-color: #0376c9; --button-secondary-background-color: transparent; --button-background-color: #0376c9; @@ -17,7 +17,7 @@ --button-hover-background-color: #036ab5; --button-hover-shadow: 0px 2px 8px 0px rgba(3, 118, 201, 0.2); --button-active-background-color: #025ea1; - --button-danger: #D73847 + --button-danger: #d73847; } :root { @@ -50,7 +50,7 @@ a.button { justify-content: center; align-items: center; min-width: 145px; - transition-property: "box-shadow", "background-color"; + transition-property: 'box-shadow', 'background-color'; transition-duration: 0.2s; transition-timing-function: ease; @@ -61,12 +61,18 @@ a.button { --button-hover-background-color: #26a2fc; } + /* Dark mode: Ensure primary buttons use proper dark theme colors */ + [data-theme='dark'] &.primary { + background-color: var(--button-primary-background-color); + color: var(--button-color); + } + &.secondary { border: 1px solid rgba(3, 118, 201, 1); --button-color: rgba(3, 118, 201, 1); background-color: var(--button-secondary-background-color); &:hover { - --button-color: #141618 + --button-color: #141618; } } diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx index 8fea17e551a..5ad95859488 100644 --- a/src/components/Button/index.tsx +++ b/src/components/Button/index.tsx @@ -1,23 +1,23 @@ -import React from "react"; -import LoadingImg from "./loading.svg"; -import clsx from "clsx"; +import React from 'react' +import LoadingImg from './loading.svg' +import clsx from 'clsx' -import styles from "./button.module.scss"; +import styles from './button.module.scss' interface IButton { - testId?: string; - onClick?: VoidFunction; - children: string | React.ReactElement; - disabled?: boolean; - isLoading?: boolean; - className?: string; - href?: string; - target?: string; - thin?: boolean; - type?: "default" | "danger"; - variant?: "primary" | "secondary"; - wrapText?: boolean; - textColor?: "dark" | "light", + testId?: string + onClick?: VoidFunction + children: string | React.ReactElement + disabled?: boolean + isLoading?: boolean + className?: string + href?: string + target?: string + thin?: boolean + type?: 'default' | 'danger' + variant?: 'primary' | 'secondary' + wrapText?: boolean + textColor?: 'dark' | 'light' } export const Button = ({ @@ -28,47 +28,37 @@ export const Button = ({ disabled = false, isLoading, href, - target = "_blank", + target = '_blank', thin = false, - type = "default", - variant="primary", + type = 'default', + variant = 'primary', wrapText = true, - textColor = "dark" + textColor = 'dark', }: IButton) => { const buttonRootClass = clsx( styles.button, thin && styles.thin, - type === "danger" && styles.danger, - variant === "primary" ? styles.primary : styles.secondary, + type === 'danger' && styles.danger, + variant === 'primary' ? styles.primary : styles.secondary, !wrapText && styles.nowrap, - textColor === "light" && styles.textLight, - className, - ); - const isLoadingChild = !isLoading ? ( - children - ) : ( - - ); + textColor === 'light' && styles.textLight, + className + ) + const isLoadingChild = !isLoading ? children : return !href ? ( ) : ( - + {isLoadingChild} - ); -}; + ) +} -export default Button; +export default Button diff --git a/src/components/CallToAction/CallToAction.js b/src/components/CallToAction/CallToAction.js new file mode 100644 index 00000000000..164c586122a --- /dev/null +++ b/src/components/CallToAction/CallToAction.js @@ -0,0 +1,52 @@ +import { clsx } from 'clsx' +import Button from '@site/src/components/elements/buttons/button' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import Heading from '@theme/Heading' + +import Shape from '@site/static/img/shapes/hero/shape.svg' + +import styles from './CallToAction.module.scss' + +const CallToAction = ({ title, description, button }) => { + return ( +
+
+
+
+ +
+
+ + {title} + + + {description && ( +

{description}

+ )} + + {button && ( +
+
+ +
+
+
+
+
+
+
+ ) +} + +export default CallToAction diff --git a/src/components/CallToAction/CallToAction.module.scss b/src/components/CallToAction/CallToAction.module.scss new file mode 100644 index 00000000000..1d03bd65733 --- /dev/null +++ b/src/components/CallToAction/CallToAction.module.scss @@ -0,0 +1,145 @@ +.call-to-action { + position: relative; + padding: 3rem 0; + overflow: hidden; + + @include bp(tablet) { + padding: 4rem 0; + } + + @include bp(desktop) { + padding: 6rem 0; + } +} + +.container { + position: relative; + color: var(--color-secondary); +} + +.grid-wrapper { + @include bp('tablet') { + @include grid; + } +} + +.grid-col-center { + position: relative; + + @include bp('tablet') { + @include grid-column-span(8); + } + + @include bp('desktop') { + @include grid-column-span(14); + @include grid-column-start(2); + } +} + +.grid-inner { + display: flex; + background-color: var(--general-black-light); + color: var(--general-white); + + @include bp-max(tablet) { + flex-direction: column; + } + + @include bp('tablet') { + gap: 4rem; + } + + @include bp('desktop') { + gap: 2.85rem; + } +} + +.grid-col-left { + padding: 3.2rem 3.2rem 5rem; + flex: 0 0 auto; + + @include bp('tablet') { + position: relative; + width: calc(50% - $grid-gutter-width-desktop / 2); + padding: 8rem 0 7.1rem 5.2rem; + } + + @include bp('desktop') { + padding: 10rem 8.8rem; + } +} + +.grid-col-right { + position: relative; + + @include bp-max(tablet) { + height: 18.7rem; + order: -1; + } + + @include bp('tablet') { + position: relative; + width: calc(50% - $grid-gutter-width-desktop / 2); + padding: 10rem 0 7.1rem 10.2rem; + } + + @include bp('desktop') { + padding: 10rem 8.8rem; + } +} + +.shape { + position: absolute; + left: 11rem; + bottom: -1.8rem; + width: 34.3rem; + height: 39.8rem; + + @include bp(tablet) { + width: 51.2rem; + height: 59.5rem; + left: -1.6rem; + bottom: 0; + } + + @include bp(desktop) { + left: 10.2rem; + bottom: -8.5rem; + width: 65.5rem; + height: 76.1rem; + } +} + +.title { + color: var(--developer-purple-light); + font-size: 2.8rem; + line-height: 133.333%; + + @include bp('tablet') { + font-size: 3.6rem; + line-height: 125%; + } +} + +.description { + margin-top: 2.2rem; + padding-right: 2rem; + font-size: 1.7rem; + + @include bp('tablet') { + margin-top: 2.6rem; + padding-right: 0; + } +} + +.button { + margin-top: 1.8rem; + + @include bp('tablet') { + margin-top: 3rem; + } + + @include bp('desktop') { + margin-top: 3.2rem; + } +} diff --git a/src/components/Card.module.scss b/src/components/Card.module.scss new file mode 100644 index 00000000000..af39764573f --- /dev/null +++ b/src/components/Card.module.scss @@ -0,0 +1,189 @@ +.item { + margin-bottom: 1.6rem; + transition: filter calc(var(--motion) * var(--motion-speed)) $gentle-ease; + + > div { + background-color: var(--general-gray-light); + position: relative; + transition: background-color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease; + + > div:not(.holder) { + position: absolute; + top: 0.1rem; + left: 0.1rem; + width: calc(100% - 0.2rem); + height: calc(100% - 0.2rem); + background-color: var(--general-white); + } + } + + &.active { + filter: drop-shadow(0 0.8rem 2rem rgba(0, 0, 0, 0.1)); + + > div { + background-color: var(--general-white); + } + } + + &:last-child { + margin-bottom: 0; + } +} + +.holder { + position: relative; + z-index: 1; + height: 100%; +} + +.inner { + display: flex; + flex-direction: column; + justify-content: flex-start; + padding: 2.4rem; + gap: 0.5rem; + min-height: 20rem; + padding: 3.2rem; + position: relative; + height: 100%; + color: var(--general-black); + + @include bp('tablet') { + padding-bottom: 3rem; + } + + @include bp('desktop') { + padding-right: 3.8rem; + } + + &::before { + position: absolute; + content: ''; + top: 0; + left: 0; + width: 1rem; + height: 100%; + opacity: 0; + transition: opacity calc(var(--motion) * var(--motion-speed)) $gentle-ease; + background-color: var(--color-palette, var(--general-gray-mid)); + } + + &:hover { + text-decoration: none !important; + color: currentColor; + + &::before { + opacity: 1; + } + } +} + +.shape { + position: absolute; + right: 0; + top: 0; + height: 100%; + width: 18.8rem; + color: var(--color-palette, var(--general-gray-mid)); + + @include bp(tablet) { + width: 14.2rem; + } + + @include bp(desktop) { + width: 13rem; + } +} + +/* Override global `.type-heading-sm` (3rem on desktop) for homepage / product cards */ +.item-title:global(.type-heading-sm) { + flex: 1; + min-width: 0; + margin: 0; + font-size: 2.2rem; + line-height: 140%; + + @include bp('desktop') { + font-size: 2.2rem; + line-height: 140%; + } +} + +.header { + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 1.2rem; + position: relative; +} + +.footer { + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: 1.6rem; + position: relative; + + @include bp-max(tablet) { + flex-direction: column; + align-items: flex-start; + gap: 1.4rem; + } +} + +.icon { + flex: 0 0 auto; + width: 2.4rem; + height: 2.4rem; + margin-top: 0.2rem; /* align with first line of title cap height */ + color: var(--color-palette, var(--general-gray-mid)); + transition: color calc(var(--motion) * var(--motion-speed)) $gentle-ease; +} + +.item-description { + font-size: 1.7rem; + + /* Reset applies `font: inherit` to `strong`, which strips default bold */ + strong { + font-weight: 600; + } + + @include bp(tablet) { + max-width: 82%; + } +} + +.button { + flex: 0 0 auto; +} + +html[data-theme='dark'] { + .item { + > div { + background-color: var(--general-black-light); + + > div:not(.holder) { + display: none; + } + } + + &.active { + > div { + background-color: var(--general-black); + } + + .shape { + color: var(--color-palette, var(--general-gray-mid)); + } + } + } + + .inner { + color: var(--general-white); + } + + .shape { + color: var(--general-black); + transition: color calc(var(--motion) * var(--motion-speed)) $gentle-ease; + } +} diff --git a/src/components/Card.tsx b/src/components/Card.tsx index 62775d60ccb..9138b843463 100644 --- a/src/components/Card.tsx +++ b/src/components/Card.tsx @@ -1,24 +1,115 @@ -import React from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import Heading from "@theme/Heading"; -import styles from "./card.module.css"; +import clsx from 'clsx' +import { ReactNode, useState } from 'react' +import Link from '@docusaurus/Link' +import Heading from '@theme/Heading' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import Button from '@site/src/components/elements/buttons/button' + +import SvgControls from '@site/static/img/icons/controls.svg' +import SvgGlobe from '@site/static/img/icons/globe.svg' +import SvgShield from '@site/static/img/icons/shield.svg' +import SvgStar from '@site/static/img/icons/star.svg' +import SvgUser from '@site/static/img/icons/user.svg' +import SvgWallet from '@site/static/img/icons/wallet.svg' +import SvgCommunity from '@site/static/img/icons/community.svg' +import SvgMultichain from '@site/static/img/icons/multichain.svg' +import Shape from '@site/static/img/shapes/intro-cards/shape.svg' + +import styles from './Card.module.scss' + +/** Optional lead icon for product cards (defaults to star). */ +export type CardLeadIcon = + | 'wallet' + | 'user' + | 'shield' + | 'globe' + | 'controls' + | 'community' + | 'multichain' + | 'star' + +const LEAD_ICON_COMPONENTS: Record< + CardLeadIcon, + React.ComponentType> +> = { + wallet: SvgWallet, + user: SvgUser, + shield: SvgShield, + globe: SvgGlobe, + controls: SvgControls, + community: SvgCommunity, + multichain: SvgMultichain, + star: SvgStar, +} export type CardItem = { - title: string; - link: string; - description: JSX.Element; -}; + title: string | ReactNode + href: string + description?: string | ReactNode + theme?: string + buttonIcon?: 'arrow-right' | 'external-arrow' + leadIcon?: CardLeadIcon +} + +export default function Card({ + title, + href, + description, + theme, + buttonIcon = 'arrow-right', + leadIcon = 'star', +}: CardItem) { + const [isHovered, setIsHovered] = useState(false) + const LeadIcon = LEAD_ICON_COMPONENTS[leadIcon] ?? LEAD_ICON_COMPONENTS.star -export default function Card({ title, link, description }: CardItem) { return ( -
- -
- {title} +
+ +
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)}> + + + +
+ + + {title} + +
+ +
+ {description && ( +

+ {description} +

+ )} + + {href && ( +
+
-
{description}
- +
- ); + ) } diff --git a/src/components/CardList/CardList.module.scss b/src/components/CardList/CardList.module.scss new file mode 100644 index 00000000000..0c552b245c6 --- /dev/null +++ b/src/components/CardList/CardList.module.scss @@ -0,0 +1,22 @@ +.wrapper { + padding-top: 0.1rem; + margin-bottom: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); +} + +.list { + display: flex; + flex-wrap: wrap; + padding: 0; + list-style: none; + + @include bp('tablet') { + margin-left: -0.8rem; + margin-right: -0.8rem; + } +} + +html[data-theme='dark'] { + .wrapper { + border-color: var(--general-black-light); + } +} diff --git a/src/components/CardList/CardListItem/index.tsx b/src/components/CardList/CardListItem/index.tsx index 4f4c57f74ff..8697c588507 100644 --- a/src/components/CardList/CardListItem/index.tsx +++ b/src/components/CardList/CardListItem/index.tsx @@ -1,45 +1,89 @@ -import React, { ReactNode } from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import Heading from "@theme/Heading"; -import styles from "./styles.module.css"; +import React, { ReactNode } from 'react' +import clsx from 'clsx' +import Link from '@docusaurus/Link' + +import { useState, useEffect } from 'react' +import { useColorMode } from '@docusaurus/theme-common' +import Heading from '@theme/Heading' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import Button from '@site/src/components/elements/buttons/button' + +import styles from './styles.module.scss' export interface CardItem { - title?: ReactNode; - description?: ReactNode; - href?: string; - icon?: string; - flaskOnly?: boolean; + title?: ReactNode + description?: ReactNode + href?: string + flaskOnly?: boolean + buttonIcon?: 'arrow-right' | 'external-arrow' } interface CardListItemProps { - item: CardItem; + item: CardItem } -export default function CardListItem({ item }: CardListItemProps): JSX.Element { - const cardContent = ( - <> - {item.title && ( - - {item.icon && } - {item.title} - - )} - {item.description &&

{item.description}

} - - ); - - const rootClassName = clsx("card", "padding--lg", styles.cardContainer, { - [styles.flaskOnly]: item.flaskOnly, - }); - - if (item.href) { - return ( - - {cardContent} - - ); - } - - return
{cardContent}
; +export default function CardListItem({ item }: CardListItemProps) { + const { title, description, href, flaskOnly, buttonIcon = 'arrow-right' } = item + const [isHovered, setIsHovered] = useState(false) + const { colorMode } = useColorMode() + const [theme, setTheme] = useState('') + + useEffect(() => { + setTheme(colorMode) + }, [colorMode]) + + return ( +
  • + +
    setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)}> + + {flaskOnly && ( +
    + + + Flask + + +
    + )} + +
    + + {title} + + +

    {description}

    +
    + {href && ( +
    +
    +
  • + ) } diff --git a/src/components/CardList/CardListItem/styles.module.css b/src/components/CardList/CardListItem/styles.module.css deleted file mode 100644 index e7623b3550b..00000000000 --- a/src/components/CardList/CardListItem/styles.module.css +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - .cardContainer { - --ifm-link-color: var(--ifm-color-emphasis-800); - --ifm-link-hover-color: var(--ifm-color-emphasis-700); - --ifm-link-hover-decoration: none; - - box-shadow: 0 1.5px 3px 0 rgb(0 0 0 / 15%); - border: 1px solid var(--ifm-color-emphasis-200); - position: relative; - transition: all var(--ifm-transition-fast) ease; - transition-property: border, box-shadow; -} - -.flaskOnly::after { - content: "Flask"; - border-bottom-left-radius: var(--ifm-card-border-radius); - position: absolute; - top: 0; - right: 0; - padding: 0.1rem 0.75rem; - font-weight: 500; - background-color: var(--mm-flask-background-color); - color: var(--mm-flask-color); -} - -.cardContainer:hover { - border-color: var(--ifm-color-primary); - box-shadow: 0 3px 6px 0 rgb(0 0 0 / 20%); -} - -.cardContainer *:last-child { - margin-bottom: 0; -} - -.cardTitle { - font-size: 1.2rem; - display: flex; - align-items: center; -} - -.cardIcon { - width: 24px; - height: 24px; - margin-right: 8px; -} \ No newline at end of file diff --git a/src/components/CardList/CardListItem/styles.module.scss b/src/components/CardList/CardListItem/styles.module.scss new file mode 100644 index 00000000000..8337e12dddc --- /dev/null +++ b/src/components/CardList/CardListItem/styles.module.scss @@ -0,0 +1,152 @@ +.item { + --color-palette: var(--developer-purple); + margin-bottom: 1.6rem; + transition: filter calc(var(--motion) * var(--motion-speed)) $gentle-ease; + width: 100%; + margin-top: 0; + + @include bp('tablet') { + } + + @include bp(tablet) { + width: 50%; + padding: 0 0.8rem; + } + + > div { + background-color: var(--general-gray-light); + position: relative; + transition: background-color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease; + } + + &.active { + filter: drop-shadow(0 0.8rem 2rem rgba(0, 0, 0, 0.1)); + + > div { + background-color: var(--general-white); + } + } +} + +.holder { + height: 100%; +} + +.inner { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + gap: 1.6rem; + padding: 2.4rem; + position: relative; + height: 100%; + text-decoration: none; + color: var(--general-black); + + &::before { + position: absolute; + content: ''; + top: 0; + left: 0; + width: 1rem; + height: 100%; + opacity: 0; + transition: opacity calc(var(--motion) * var(--motion-speed)) $gentle-ease; + background-color: var(--color-palette); + } + + &:hover { + color: currentColor; + text-decoration: none !important; + + &::before { + opacity: 1; + } + } +} + +.header { + display: flex; + flex-direction: column; + gap: 0.6rem; + position: relative; +} + +.title { + .flask & { + max-width: 22.4rem; + } +} + +.description { + margin: 0; + font-size: 1.5rem; +} + +.tag-holder { + position: absolute; + z-index: 1; + top: 0.8rem; + right: 0.8rem; + + .extra-small & { + top: 0.8rem; + right: 0.8rem; + } + + @include bp('tablet') { + top: 1.6rem; + right: 1.6rem; + } +} + +.tag { + display: flex; + align-items: center; + + width: auto; + height: 2.6rem; + font-weight: 500; + padding: 0.7rem 0.9rem; + + line-height: 0.8; + color: var(--general-black); + + background: var(--ifm-color-primary-light); + + @include bp('tablet') { + height: 2.6rem; + line-height: 1.15; + } + + @include bp('desktop') { + height: 2.3rem; + line-height: 0.85; + } +} + +[data-theme='dark'] .tag { + color: var(--developer-purple-light); + + background: var(--developer-purple-dark); +} + +html[data-theme='dark'] { + .item { + --color-palette: var(--developer-green); + > div { + background-color: var(--general-black-light); + } + + &.active { + > div { + background-color: var(--general-black); + } + } + } + + .inner { + color: var(--general-white); + } +} diff --git a/src/components/CardList/index.tsx b/src/components/CardList/index.tsx index 637af86a8c4..6fabe323fc4 100644 --- a/src/components/CardList/index.tsx +++ b/src/components/CardList/index.tsx @@ -1,20 +1,22 @@ -import React from "react"; -import CardListItem, { CardItem } from "./CardListItem"; +import clsx from 'clsx' +import CardListItem, { CardItem } from './CardListItem' + +import styles from './CardList.module.scss' interface CardListProps { - items: CardItem[]; + items: CardItem[] } export default function CardList(props: CardListProps): JSX.Element { - const { items } = props; + const { items } = props return ( -
    - {items.map((item, index) => ( -
    - -
    - ))} +
    +
      + {items.map((item, index) => ( + + ))} +
    - ); + ) } diff --git a/src/components/CardSection.module.scss b/src/components/CardSection.module.scss new file mode 100644 index 00000000000..195c0d936f2 --- /dev/null +++ b/src/components/CardSection.module.scss @@ -0,0 +1,115 @@ +.wrapper { + position: relative; + padding-top: 2rem; + overflow: visible; + + @include bp(tablet) { + padding-top: 2.4rem; + } + + @include bp(desktop) { + padding-top: 3rem; + } +} + +.container { + position: relative; +} + +.grid-wrapper { + @include bp('tablet') { + @include grid; + } +} + +.grid-col-center { + position: relative; + + @include bp('tablet') { + @include grid-column-span(8); + } + + @include bp('desktop') { + @include grid-column-span(14); + @include grid-column-start(2); + } +} + +.section-grid { + display: flex; + flex-direction: column; + gap: 2rem; + + @include bp('desktop') { + display: grid; + grid-template-columns: 1fr 2fr; + gap: 4rem; + align-items: start; + } + + // When there's no title or description, use full width for cards + &.cards-only { + @include bp('desktop') { + grid-template-columns: 1fr; + } + } +} + +.content-column { + display: flex; + flex-direction: column; +} + +.cards-wrapper { + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + @include bp('tablet') { + grid-template-columns: repeat(2, 1fr); + } + + @include bp('desktop') { + grid-template-columns: repeat(3, 1fr); + } +} + +.card-column { + display: flex; +} + +.header { + margin-bottom: 0; + + h2 { + font-size: 2.4rem; + font-weight: 500; + margin: 0 0 2rem 0; + color: var(--color-text-heading); + line-height: 1.2; + + @include bp(tablet) { + font-size: 2.8rem; + } + + @include bp(desktop) { + font-size: 3.2rem; + } + } + + p { + font-size: 1.6rem; + font-weight: 400; + margin: 0; + color: var(--color-text-paragraph); + line-height: 1.5; + + @include bp(tablet) { + font-size: 1.7rem; + } + + @include bp(desktop) { + font-size: 1.8rem; + } + } +} diff --git a/src/components/CardSection.tsx b/src/components/CardSection.tsx index 2aeb58f2256..65b03897d77 100644 --- a/src/components/CardSection.tsx +++ b/src/components/CardSection.tsx @@ -1,49 +1,72 @@ -import React from "react"; -import Card, { type CardItem } from "@site/src/components/Card"; -import styles from "./cardsection.module.css"; +import clsx from 'clsx' +import { CSSProperties, JSX } from 'react' +import { useColorMode } from '@docusaurus/theme-common' +import Card, { CardItem } from '@site/src/components/Card' -const CardList: CardItem[] = [ - { - title: "📱 Integrate your dapp with the MetaMask wallet", - link: "/wallet", - description: ( - <> - Integrate your dapp with MetaMask using the Wallet API. You can interact - with your users' Ethereum accounts from multiple dapp platforms. - - ), - }, - { - title: "🛠️ Extend the functionality of MetaMask using Snaps", - link: "/snaps", - description: ( - <> - Extend the functionality of MetaMask using Snaps. You can create a Snap - to add support for custom networks, account types, APIs, and more. - - ), - }, - { - title: "📐 Build and scale your dapp using services", - link: "/services", - description: ( - <> - Build and scale your dapp or Snap using services provided by MetaMask - and Infura. This includes APIs that optimize essential development - tasks. - - ), - }, -]; +import styles from './CardSection.module.scss' + +type CardSectionProps = { + title?: string + description?: string + cards: CardItem[] + colorPalette?: string +} + +export default function CardSection({ + title, + description, + cards, + colorPalette, +}: CardSectionProps): JSX.Element { + const { colorMode } = useColorMode() + const theme = colorMode -export default function CardSection(): JSX.Element { return ( -
    -
    - {CardList.map((props, idx) => ( - - ))} +
    +
    +
    +
    +
    + {/* Title and Description Column */} + {(title || description) && ( +
    +
    + {title &&

    {title}

    } + {description &&

    {description}

    } +
    +
    + )} + + {/* Cards Columns */} +
    + {cards.map(({ title, description, href, buttonIcon, leadIcon }, index) => ( +
    + +
    + ))} +
    +
    +
    +
    - ); -} \ No newline at end of file + ) +} diff --git a/src/components/CodeTerminal/AlertMsg.jsx b/src/components/CodeTerminal/AlertMsg.jsx deleted file mode 100644 index bcf928fa13a..00000000000 --- a/src/components/CodeTerminal/AlertMsg.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import { MSG_TYPES, DASHBOARD_URL } from "@site/src/lib/constants"; -import Link from "@docusaurus/Link"; - -export const INFO_MSG = { - EMPTY_MSG: { - opened: false, - type: MSG_TYPES.INFO, - title: "", - description: "", - }, - REQ_ERROR: { - opened: true, - type: MSG_TYPES.ERROR, - title: "Request failed", - description: ( - <> - Please try again. If the problem persists contact our{" "} - support team - - ), - }, - REQ_SUCCESS: { - opened: true, - type: MSG_TYPES.SUCCESS, - title: "Request sent!", - description: ( - <> - Your request has been sent to the network endpoint you selected which - returned a response with the requested information. Let’s see how it - performed in stats or - dive into{" "} - stats docs. - - ), - }, - REQ_READY: { - opened: true, - type: MSG_TYPES.INFO, - title: "Connect API key", - description: ( - <> - Select an API key, a network name, network type, and the method from the - dropdowns below then click “Send Request” to send the request. - - ), - }, - NO_KEYS: { - opened: true, - type: MSG_TYPES.INFO, - title: "No API keys created", - description: ( - <> - You don’t have any API Keys yet.{" "} - Create an API key to access - your keys and send requests. - - ), - }, - NO_ACCESS: { - opened: true, - type: MSG_TYPES.ERROR, - title: "Access Denied", - description: ( - <> - The API key selected is not authorized for this specific product. To - enable access, please add this product to your API key through the{" "} - Infura Dashboard - - ), - }, -}; diff --git a/src/components/CodeTerminal/CodeTerminal.jsx b/src/components/CodeTerminal/CodeTerminal.jsx deleted file mode 100644 index d252bd09f9a..00000000000 --- a/src/components/CodeTerminal/CodeTerminal.jsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { useState, useMemo } from "react"; -import useUser from "@site/src/hooks/useUser"; -import TerminalViewBox from "./TerminalViewBox"; -import ControlPanel from "./ControlPanel"; -import { INFO_MSG } from "./AlertMsg"; -import MessageBox from "@site/src/components/MessageBox/MessageBox"; -import { INIT_REQ_SET } from "@site/src/lib/constants"; -import Heading from "@theme/Heading"; - -const CodeTerminal = () => { - const { user, keys, loading: keysLoading } = useUser(); - const [msgParams, setMsgParams] = useState({ ...INFO_MSG.EMPTY_MSG }); - const [curReqSettings, setCurReqSettings] = useState({ ...INIT_REQ_SET }); - const [responseReg, setResponseReg] = useState(undefined); - - const changeSelectHandler = (value, param) => { - setCurReqSettings((prev) => { - const init = { ...prev }; - init[param] = value; - return init; - }); - }; - - const keysOptions = useMemo(() => { - if (keys.length > 0) { - changeSelectHandler( - { - label: keys[0].name, - value: keys[0].id, - private: keys[0].private || "", - }, - "apiKey", - ); - return keys.map((item) => ({ - label: item.name, - value: item.id, - private: item?.private || "", - })); - } - return []; - }, [keys]); - - const isNoApiKeys = useMemo(() => { - const isNoKeys = user && keys.length === 0 && !keysLoading; - if (isNoKeys) { - setMsgParams({ ...INFO_MSG.NO_KEYS }); - } - if (user && !isNoKeys) { - setMsgParams({ ...INFO_MSG.REQ_READY }); - } - return isNoKeys; - }, [user, keys, keysLoading]); - - const endpointUrl = useMemo(() => { - const { netName, netType, netMethod, apiKey } = curReqSettings; - let url = netType.value; - let params = netMethod.params.mainnet; - if (netName.complexEndpoint) { - url = `${netName.value}-${netType.value}`; - } - if (netMethod.params[netType.value]) { - params = netMethod.params[netType.value]; - } - if (netName.isExpansion) { - return { - url: `${netName.value}.${netType.urlType}/v3/${apiKey.value}/networks/${netType.value}/${netMethod.value}`, - params: [], - isExpansionNetwork: true, - }; - } - return { - url: `${url}.${netType.urlType}`, - params: params, - isExpansionNetwork: false, - }; - }, [curReqSettings]); - - const onSubmitHandler = async (e) => { - e.preventDefault(); - setMsgParams({ ...INFO_MSG.EMPTY_MSG }); - const { apiKey, netMethod } = curReqSettings; - let URL = `https://${endpointUrl.url}/v3/${apiKey.value}`; - let params = { - method: "POST", - "Content-Type": "application/json", - body: JSON.stringify({ - jsonrpc: "2.0", - method: netMethod.value, - params: endpointUrl.params, - id: 1, - }), - }; - if (endpointUrl.isExpansionNetwork) { - URL = `https://${endpointUrl.url}`; - params = { - method: "GET", - }; - } - try { - const res = await fetch(URL, params); - if (res.ok) { - const response = await res.json(); - setMsgParams({ ...INFO_MSG.REQ_SUCCESS }); - setResponseReg(JSON.stringify(response, null, 2)); - } else { - res.status === 401 - ? setMsgParams({ ...INFO_MSG.NO_ACCESS }) - : setMsgParams({ ...INFO_MSG.REQ_ERROR }); - setResponseReg(undefined); - } - } catch { - setMsgParams({ ...INFO_MSG.REQ_ERROR }); - setResponseReg(undefined); - } - }; - - return ( - <> -
    - - - Connect to a network - - {keysOptions.length > 0 && ( - - )} - - - - ); -}; - -export default CodeTerminal; diff --git a/src/components/CodeTerminal/ControlPanel.jsx b/src/components/CodeTerminal/ControlPanel.jsx deleted file mode 100644 index bb650ac216b..00000000000 --- a/src/components/CodeTerminal/ControlPanel.jsx +++ /dev/null @@ -1,117 +0,0 @@ -import React, { useMemo, useState, useEffect } from "react"; -import Select from "react-dropdown-select"; -import Icon from "@site/src/components/Icon/Icon"; -import { - NETWORKS_NAMES, - NETWORKS_METHODS, - NETWORKS, -} from "@site/src/lib/constants"; - -const ControlPanel = ({ keysOptions = [], initValues, onChange }) => { - const selectChangeHandler = (value, param) => { - onChange(value, param); - }; - - const typesOptions = useMemo(() => { - const initMethods = [...NETWORKS_METHODS.L1.methods]; - const initL2Methods = [...NETWORKS_METHODS.L2.methods]; - let updatedOptions = { - types: [], - methods: initMethods, - }; - if (initValues?.netName?.networksTypes) { - updatedOptions.types = initValues.netName.networksTypes; - } - if (initValues?.netName?.value === NETWORKS.PALM) { - const noEthMethods = initMethods.filter( - (method) => method.value !== "eth_maxPriorityFeePerGas", - ); - updatedOptions.methods = [...noEthMethods]; - } - if (initValues?.netName?.value === NETWORKS.GAS_API) { - updatedOptions.methods = [...initL2Methods]; - } - return updatedOptions; - }, [initValues.netName]); - - const [methodValue, setMethodValue] = useState([typesOptions.methods[0]]); - useEffect(() => { - const upMethod = - methodValue.length > 0 ? methodValue[0] : typesOptions.methods[0]; - selectChangeHandler(upMethod, "netMethod"); - }, [methodValue, typesOptions]); - - return ( -
    -
    -
    - - { - const netName = values[0]; - selectChangeHandler(netName, "netName"); - selectChangeHandler(netName.networksTypes[0], "netType"); - if (netName.value === NETWORKS.GAS_API) { - setMethodValue([NETWORKS_METHODS.L2.methods[0]]); - } else { - setMethodValue([NETWORKS_METHODS.L1.methods[0]]); - } - }} - /> -
    -
    -
    -
    - - { - setMethodValue(values); - }} - onDropdownClose={() => { - if (methodValue.length === 0) { - setMethodValue([typesOptions.methods[0]]); - } - }} - /> -
    -
    -
    - ); -}; - -export default ControlPanel; diff --git a/src/components/CodeTerminal/TerminalViewBox.jsx b/src/components/CodeTerminal/TerminalViewBox.jsx deleted file mode 100644 index 31796820e7f..00000000000 --- a/src/components/CodeTerminal/TerminalViewBox.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useMemo } from "react"; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Icon from "../Icon/Icon"; -import { DASHBOARD_URL } from "../../lib/constants"; -import Link from "@docusaurus/Link"; -import CodeBlock from "@theme/CodeBlock"; - -const TerminalViewBox = ({ - url = "{network}", - id = "{ID}", - method = "method", - params = [], - logged = false, - hideFooter = false, - response, - isExpansionNetwork = false, -}) => { - - const { siteConfig } = useDocusaurusContext(); - const { DASHBOARD_PREVIEW_URL, VERCEL_ENV } = siteConfig?.customFields || {} - - const exampleRequest = useMemo(() => { - const prepareParams = params.length === 0 ? "" : params.map(param => { - if ('boolean' === typeof param) return `${param}` - return `"${param}"` - }); - if (isExpansionNetwork) { - return `curl -X 'GET' \\\n'https://${url}'`; - } - return `curl https://${url}/v3/${id} \\\n -X POST \\\n -H "Content-Type: application/json" \\\n -d '{\n "jsonrpc": "2.0",\n "method": "${method}",\n "params": [${params.length === 0 ? "" : prepareParams}],\n "id": 1\n }'` - }, [url, id, method, params, isExpansionNetwork]); - - return ( -
    - - {exampleRequest} - - {!hideFooter && ( -
    - {logged && ( -
    - {response &&
    {response}
    } -
    - )} -
    - {logged ? ( -
    - -
    - ) : ( -

    - - Sign in - {" "} - or{" "} - - create an account - {" "} - and reload the page to edit real requests -

    - )} -
    -
    - )} -
    - ); -}; - -export default TerminalViewBox; \ No newline at end of file diff --git a/src/components/CopyPageButton/CopyPageButton.jsx b/src/components/CopyPageButton/CopyPageButton.jsx new file mode 100644 index 00000000000..a8d3555c279 --- /dev/null +++ b/src/components/CopyPageButton/CopyPageButton.jsx @@ -0,0 +1,395 @@ +import React, { useState, useEffect, useRef } from 'react' +import styles from './CopyPageButton.module.css' + +// Helpers shared by both actions +const decodeHTML = html => { + const txt = document.createElement('textarea') + txt.innerHTML = html + return txt.value +} + +const extractInlineText = element => { + let result = '' + element.childNodes.forEach(node => { + if (node.nodeType === Node.TEXT_NODE) { + result += node.textContent + } else if (node.nodeType === Node.ELEMENT_NODE) { + if (node.tagName === 'CODE' && node.parentElement.tagName !== 'PRE') { + result += `\`${decodeHTML(node.innerHTML)}\`` + } else if (node.tagName === 'STRONG' || node.tagName === 'B') { + result += `**${node.textContent}**` + } else if (node.tagName === 'EM' || node.tagName === 'I') { + result += `*${node.textContent}*` + } else if (node.tagName === 'A') { + result += `[${node.textContent}](${node.href})` + } else if (node.tagName === 'BR') { + result += '\n' + } else { + result += extractInlineText(node) + } + } + }) + return result +} + +const shouldSkipSection = (section, sectionsArray) => { + const tag = section.tagName.toLowerCase() + // Hidden (tabs/details) + if (section.hidden || section.closest('[hidden]')) return true + // Tab navigation + if (section.closest('[role="tablist"]')) return true + // Nested inside lists – will be handled by parent list + if (tag === 'p' || tag === 'pre' || tag === 'blockquote' || tag === 'table') { + const parentList = section.closest('ol, ul') + if (parentList && sectionsArray.includes(parentList)) return true + } + // Closed details + const parentDetails = section.closest('details') + if (parentDetails && !parentDetails.open) return true + return false +} + +const tableToMarkdown = tableEl => { + // Build Markdown table: header row + separator + body rows + const rows = Array.from( + tableEl.querySelectorAll(':scope > thead > tr, :scope > tbody > tr, :scope > tr') + ) + if (rows.length === 0) return '' + + const firstRowCells = Array.from(rows[0].querySelectorAll('th, td')) + const headers = firstRowCells.map(cell => cell.textContent.trim()) + let md = '' + + if (headers.length > 0) { + md += `| ${headers.join(' | ')} |\n` + md += `| ${headers.map(() => '---').join(' | ')} |\n` + } + + const bodyRows = rows.slice(1) + bodyRows.forEach(tr => { + const cells = Array.from(tr.querySelectorAll('th, td')).map(td => td.textContent.trim()) + md += `| ${cells.join(' | ')} |\n` + }) + + return `${md}\n` +} + +const getContentRoot = () => + document.querySelector('article') || document.querySelector('.markdown') + +const buildMarkdown = () => { + const root = getContentRoot() + if (!root) return '' + + const title = document.querySelector('h1')?.textContent || 'Documentation' + let markdown = `# ${title}\n\n` + + const sections = root.querySelectorAll('h2, h3, h4, p, ul, ol, pre, blockquote, table') + const sectionsArray = Array.from(sections) + + sectionsArray.forEach(section => { + if (shouldSkipSection(section, sectionsArray)) return + const tag = section.tagName.toLowerCase() + + if (tag === 'h2') { + const text = (section.textContent || '').trim() + markdown += `\n## ${text}\n\n` + return + } + if (tag === 'h3') { + const text = (section.textContent || '').trim() + markdown += `\n### ${text}\n\n` + return + } + if (tag === 'h4') { + const text = (section.textContent || '').trim() + markdown += `\n#### ${text}\n\n` + return + } + if (tag === 'pre') { + const codeElement = section.querySelector('code') + if (codeElement) { + const languageClass = codeElement.className.match(/language-(\w+)/) + const language = languageClass ? languageClass[1] : '' + const code = codeElement.innerText + markdown += `\`\`\`${language}\n${code}\n\`\`\`\n\n` + } else { + markdown += `\`\`\`\n${section.innerText}\n\`\`\`\n\n` + } + return + } + if (tag === 'blockquote') { + const lines = section.textContent.trim().split('\n') + lines.forEach(line => { + if (line.trim()) markdown += `> ${line.trim()}\n` + }) + markdown += '\n' + return + } + if (tag === 'ul' || tag === 'ol') { + const items = section.querySelectorAll(':scope > li') + items.forEach((item, index) => { + const prefix = tag === 'ol' ? `${index + 1}.` : '-' + const text = extractInlineText(item) + markdown += `${prefix} ${text.trim()}\n` + }) + markdown += '\n' + return + } + if (tag === 'p') { + const text = extractInlineText(section) + if (text.trim() && text.trim() !== 'Copy') markdown += `${text.trim()}\n\n` + return + } + if (tag === 'table') { + markdown += tableToMarkdown(section) + return + } + }) + + return markdown +} + +const MAX_URL_LENGTH = 12000 + +const openInAiTool = async (baseUrl, flashCopiedFn, toolId) => { + const markdown = buildMarkdown() + if (!markdown) return + + const prompt = `Help me with the following documentation page (${window.location.href}):\n\n${markdown}` + const fullUrl = `${baseUrl}${encodeURIComponent(prompt)}` + + if (fullUrl.length <= MAX_URL_LENGTH) { + window.open(fullUrl, '_blank') + } else { + try { + await navigator.clipboard.writeText(markdown) + const shortPrompt = `Help me with this documentation page: ${window.location.href}\n\n(The full page content has been copied to my clipboard and I will paste it below.)` + window.open(`${baseUrl}${encodeURIComponent(shortPrompt)}`, '_blank') + flashCopiedFn?.(toolId) + } catch { + const shortPrompt = `Help me with this documentation page: ${window.location.href}` + window.open(`${baseUrl}${encodeURIComponent(shortPrompt)}`, '_blank') + } + } +} + +const ExternalArrow = () => ( + + + + +) + +export default function CopyPageButton({ standalone = false }) { + const [isOpen, setIsOpen] = useState(false) + const [copiedId, setCopiedId] = useState(null) + const containerRef = useRef(null) + const dropdownRef = useRef(null) + const [mobileAlign, setMobileAlign] = useState('center') + + useEffect(() => { + const handleClickOutside = event => { + if (containerRef.current && !containerRef.current.contains(event.target)) { + setIsOpen(false) + } + } + + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside) + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside) + } + }, [isOpen]) + + useEffect(() => { + if (!isOpen) return + const compute = () => { + const container = containerRef.current + const menu = dropdownRef.current + if (!container || !menu) return + const vw = window.innerWidth + const cr = container.getBoundingClientRect() + const mr = menu.getBoundingClientRect() + const centerX = cr.left + cr.width / 2 + const margin = 8 + const half = mr.width / 2 + if (centerX + half > vw - margin) { + setMobileAlign('right') + } else if (centerX - half < margin) { + setMobileAlign('left') + } else { + setMobileAlign('center') + } + } + const id = requestAnimationFrame(compute) + return () => cancelAnimationFrame(id) + }, [isOpen]) + + const flashCopied = id => { + setCopiedId(id) + const delay = id.startsWith('ai-') ? 3000 : 2000 + setTimeout(() => { + setCopiedId(null) + setIsOpen(false) + }, delay) + } + + const handleCopyMarkdown = async () => { + try { + const markdown = buildMarkdown() + if (!markdown) return + await navigator.clipboard.writeText(markdown) + flashCopied('copy') + } catch (err) { + console.error('Failed to copy:', err) + } + } + + const handleViewMarkdown = () => { + try { + const markdown = buildMarkdown() + if (!markdown) return + const win = window.open('', '_blank') + const escaped = markdown.replace(/&/g, '&').replace(//g, '>') + win.document.write( + `
    ${escaped}
    ` + ) + } catch (err) { + console.error('Failed to view markdown:', err) + } + } + + return ( +
    + + + {isOpen && ( +
    + {/* AI Tools */} + + + + + + +
    + + {/* Page content actions */} + + + +
    + )} +
    + ) +} diff --git a/src/components/CopyPageButton/CopyPageButton.module.css b/src/components/CopyPageButton/CopyPageButton.module.css new file mode 100644 index 00000000000..4532467705e --- /dev/null +++ b/src/components/CopyPageButton/CopyPageButton.module.css @@ -0,0 +1,135 @@ +/* H1 Wrapper styles */ +.h1Wrapper { + position: relative; + margin-bottom: 1.5rem; + min-height: 48px; +} + +@media (width >= 997px) { + .h1Wrapper h1 { + padding-right: 220px; + } +} + +/* Button container styles */ +.container { + position: relative; + display: inline-block; + visibility: hidden; +} + +.h1Wrapper .container { + position: absolute; + top: 0; + right: 0; + visibility: visible; +} + +.standalone { + visibility: visible; +} + +.mainButton { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 16px; + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 8px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + color: var(--ifm-font-color-base); + transition: all 0.2s ease; + white-space: nowrap; +} + +.mainButton:hover { + background: var(--ifm-color-emphasis-100); + border-color: var(--ifm-color-emphasis-400); + transform: translateY(-1px); + box-shadow: 0 2px 8px rgb(0 0 0 / 10%); +} + +.arrow { + transition: transform 0.2s ease; +} + +.mainButton:hover .arrow { + transform: translateY(1px); +} + +.dropdown { + position: absolute; + top: calc(100% + 8px); + right: 0; + min-width: 300px; + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 8px; + box-shadow: 0 8px 24px rgb(0 0 0 / 15%); + z-index: 1000; + overflow: hidden; +} + +@media (width <= 996px) { + .container { + display: none; + } +} + +.dropdownItem { + display: flex; + align-items: flex-start; + gap: 12px; + width: 100%; + padding: 10px 16px; + background: transparent; + border: none; + cursor: pointer; + text-align: left; + transition: background 0.15s ease; + color: var(--ifm-font-color-base); +} + +.dropdownItem:hover { + background: var(--ifm-color-emphasis-100); +} + +.dropdownItem > svg:first-child { + flex-shrink: 0; + width: 16px; + height: 16px; + margin-top: 2px; +} + +.divider { + height: 1px; + background: var(--ifm-color-emphasis-200); + margin: 4px 0; +} + +.itemTitleRow { + display: flex; + align-items: center; + gap: 4px; +} + +.itemTitle { + font-weight: 600; + font-size: 14px; + margin-bottom: 1px; + color: var(--ifm-font-color-base); +} + +.externalArrow { + flex-shrink: 0; + color: var(--ifm-color-emphasis-500); + margin-top: 1px; +} + +.itemDescription { + font-size: 12px; + color: var(--ifm-color-emphasis-600); +} diff --git a/src/components/CopyPageButton/index.js b/src/components/CopyPageButton/index.js new file mode 100644 index 00000000000..c2c14648004 --- /dev/null +++ b/src/components/CopyPageButton/index.js @@ -0,0 +1 @@ +export { default } from './CopyPageButton' diff --git a/src/components/CopyableNoFollow/index.tsx b/src/components/CopyableNoFollow/index.tsx new file mode 100644 index 00000000000..e7610dcacc6 --- /dev/null +++ b/src/components/CopyableNoFollow/index.tsx @@ -0,0 +1,57 @@ +/* + This component allows MM to provide rpc urls with a no follow so that tools such as ahref dont + tripper http 404s on urls that support api requests. It provides a copy option to allow users + to grab the url without right-click. +*/ + +import React, { useState, useCallback } from 'react' +import styles from './styles.module.css' + +type CopyableNoFollowProps = { + url: string + /** Optional link text; defaults to url */ + children?: React.ReactNode +} + +export default function CopyableNoFollow({ url, children }: CopyableNoFollowProps) { + const [copied, setCopied] = useState(false) + + const handleCopy = useCallback(async () => { + try { + await navigator.clipboard.writeText(url) + setCopied(true) + setTimeout(() => setCopied(false), 2000) + } catch (err) { + console.error('Failed to copy:', err) + } + }, [url]) + + return ( + + + {children ?? url} + + + + ) +} diff --git a/src/components/CopyableNoFollow/styles.module.css b/src/components/CopyableNoFollow/styles.module.css new file mode 100644 index 00000000000..2d86d406bc9 --- /dev/null +++ b/src/components/CopyableNoFollow/styles.module.css @@ -0,0 +1,37 @@ +.wrapper { + display: inline-flex; + align-items: center; + gap: 0.35rem; +} + +.copyButton { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0.15rem 0.35rem; + background: rgb(255 255 255 / 8%); + border: 1px solid rgb(255 255 255 / 15%); + border-radius: 4px; + cursor: pointer; + color: var(--ifm-font-color-base); + font-size: 0.75rem; + line-height: 1; + transition: + background 0.15s ease, + border-color 0.15s ease; +} + +.copyButton:hover { + background: rgb(255 255 255 / 12%); + border-color: rgb(255 255 255 / 25%); +} + +.icon { + flex-shrink: 0; +} + +.copied { + font-size: 0.7rem; + font-weight: 500; + white-space: nowrap; +} diff --git a/src/components/CreditCost/CreditCostPrice.js b/src/components/CreditCost/CreditCostPrice.js new file mode 100644 index 00000000000..767c03b68bb --- /dev/null +++ b/src/components/CreditCost/CreditCostPrice.js @@ -0,0 +1,20 @@ +// src/components/CreditCost.js + +import React from 'react' +import { API_COSTS } from '@site/src/lib/data' +import Link from '@docusaurus/Link' + +const CreditCost = ({ network, method }) => { + // Get the credit cost for the given network and method, defaulting to 80 if not found + const cost = + API_COSTS[network] && API_COSTS[network][method] !== undefined ? API_COSTS[network][method] : 80 // Default to 80 if no cost is found + + return ( + + This method uses {cost} credits from your + daily balance. + + ) +} + +export default CreditCost diff --git a/src/components/CreditCost/CreditCostTable.js b/src/components/CreditCost/CreditCostTable.js new file mode 100644 index 00000000000..7c6651b6d90 --- /dev/null +++ b/src/components/CreditCost/CreditCostTable.js @@ -0,0 +1,51 @@ +import React from 'react' +import { API_COSTS } from '@site/src/lib/data' + +// Function to render the tables +const renderTable = (methods, categoryName, header) => { + if (!methods || Object.keys(methods).length === 0) return null + + return ( +
    + + + + {/* Use dynamic header */} + + + + + {Object.keys(methods).map(method => ( + + + + + ))} + +
    {header}Credit cost
    + {method} + {methods[method]} credits
    +
    + ) +} + +const CreditCostTable = ({ methods }) => { + // Map methods prop to the corresponding category in API_COSTS + const methodCategory = API_COSTS[methods] + + if (!methodCategory) { + return

    No data available for the specified method category.

    + } + + // Set header dynamically based on the category + let header = 'RPC method' + if (methods === 'gasApi') { + header = 'API endpoint' // Change header for 'gasApi' + } else if (methods === 'evm_subscription') { + header = 'Subscription events' // Change header for 'evm_subscription' + } + + return renderTable(methodCategory, methods, header) +} + +export default CreditCostTable diff --git a/src/components/DiscourseComment/index.jsx b/src/components/DiscourseComment/index.jsx new file mode 100644 index 00000000000..0773c37ce97 --- /dev/null +++ b/src/components/DiscourseComment/index.jsx @@ -0,0 +1,215 @@ +import { useEffect, useState } from 'react' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' + +const DISCOURSE_URL = 'https://builder.metamask.io' + +export default function DiscourseComment(props) { + // eslint-disable-next-line react/prop-types + const { postUrl, discourseTopicId, metadata = {}, teaserContent } = props + const { siteConfig } = useDocusaurusContext() + const { customFields } = siteConfig + + const DISCOURSE_API_KEY = customFields.DISCOURSE_API_KEY + const DISCOURSE_API_USERNAME = customFields.DISCOURSE_API_USERNAME || 'system' + const DISCOURSE_CATEGORY_ID = customFields.DISCOURSE_CATEGORY_ID || '11' + + const [topicId, setTopicId] = useState(discourseTopicId) + + // Utility function to ensure consistent URL formatting + const normalizeEmbedUrl = url => { + if (url.startsWith('http')) { + return url.replace('https://metamask.io', 'https://docs.metamask.io') + } + return `https://docs.metamask.io${url}` + } + + // Search for existing topic by URL using Discourse search API + const searchExistingTopic = async url => { + try { + const embedUrl = normalizeEmbedUrl(url) + + // Try direct embed URL lookup first (most reliable) + try { + const response = await fetch( + `${DISCOURSE_URL}/t/by-embed-url.json?embed_url=${encodeURIComponent(embedUrl)}&api_key=${DISCOURSE_API_KEY}&api_username=${DISCOURSE_API_USERNAME}` + ) + if (response.ok) { + const topic = await response.json() + if (topic.id) return topic.id + } + } catch (e) { + // Silent failure, try search methods + } + + // Fallback search methods + const searchMethods = [ + // Method 1: Search by exact URL + () => + fetch( + `${DISCOURSE_URL}/search.json?q=${encodeURIComponent(embedUrl)}&api_key=${DISCOURSE_API_KEY}&api_username=${DISCOURSE_API_USERNAME}` + ), + // Method 2: Search by tutorial title + category + () => + fetch( + `${DISCOURSE_URL}/search.json?q=${encodeURIComponent(metadata.title || '')}%20category:${DISCOURSE_CATEGORY_ID}&api_key=${DISCOURSE_API_KEY}&api_username=${DISCOURSE_API_USERNAME}` + ), + // Method 3: Search by URL path only + () => + fetch( + `${DISCOURSE_URL}/search.json?q=${encodeURIComponent(url.replace(/^https?:\/\/[^\/]+/, ''))}&api_key=${DISCOURSE_API_KEY}&api_username=${DISCOURSE_API_USERNAME}` + ), + ] + + for (let i = 0; i < searchMethods.length; i++) { + try { + const response = await searchMethods[i]() + + if (response.ok) { + const data = await response.json() + + // Look for topics that match our criteria + const matchingTopic = data.topics?.find(topic => { + // Normalize titles for comparison (remove special chars, lowercase, trim) + const normalizeTitle = str => + str?.toLowerCase().replace(/[|:]/g, ' ').replace(/\s+/g, ' ').trim() || '' + + const topicTitleNorm = normalizeTitle(topic.title) + const metaTitleNorm = normalizeTitle(metadata.title) + + // Check if titles share significant words (at least 50% overlap) + const topicWords = new Set(topicTitleNorm.split(' ').filter(w => w.length > 3)) + const metaWords = new Set(metaTitleNorm.split(' ').filter(w => w.length > 3)) + const commonWords = [...topicWords].filter(w => metaWords.has(w)) + const wordOverlap = + topicWords.size > 0 && metaWords.size > 0 + ? commonWords.length / Math.min(topicWords.size, metaWords.size) + : 0 + + const titleMatch = + wordOverlap > 0.5 || + topicTitleNorm.includes(metaTitleNorm) || + metaTitleNorm.includes(topicTitleNorm) + const excerptMatch = topic.excerpt?.includes(embedUrl) || topic.excerpt?.includes(url) + const categoryMatch = topic.category_id === parseInt(DISCOURSE_CATEGORY_ID) + + return categoryMatch && (titleMatch || excerptMatch) + }) + + if (matchingTopic) { + return matchingTopic.id + } + } + } catch (e) { + // Silent failure + } + } + + return null + } catch (e) { + return null + } + } + + // Clean, minimal embed loading + const loadCleanEmbed = topicId => { + if (!topicId) return // Show nothing if no topic + + // Clean up any existing embed + const existingScript = document.querySelector('script[src*="embed.js"]') + if (existingScript) { + existingScript.remove() + } + + const existingComments = document.getElementById('discourse-comments') + if (existingComments) { + existingComments.innerHTML = '' + } + + // Clean, minimal embed setup + window.DiscourseEmbed = { + discourseUrl: `${DISCOURSE_URL}/`, + discourseEmbedUrl: normalizeEmbedUrl(postUrl), + topicId: topicId, + embedContentSelector: '#discourse-embed-content', + } + + // Load embed script without monitoring or error handling + const script = document.createElement('script') + script.type = 'text/javascript' + script.async = true + script.src = `${DISCOURSE_URL}/javascripts/embed.js` + + const targetElement = + document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] + targetElement.appendChild(script) + } + + // Find discussion topic (simplified) + const findDiscussionTopic = async () => { + // 1. Use provided topicId if available + if (discourseTopicId) return discourseTopicId + + // 2. Search for existing topic (silent) + if (DISCOURSE_API_KEY) { + try { + return await searchExistingTopic(postUrl) + } catch (e) { + // Silent failure + return null + } + } + + return null + } + + // Main effect to handle topic loading + useEffect(() => { + const initializeEmbed = async () => { + const foundTopicId = await findDiscussionTopic() + setTopicId(foundTopicId) + loadCleanEmbed(foundTopicId) + } + + initializeEmbed() + }, [postUrl, discourseTopicId, DISCOURSE_API_KEY]) + + // Render teaser content and comments div + return ( + <> + {teaserContent && teaserContent.length > 0 && ( +
    + {teaserContent.map((paragraph, index) => ( +

    + {paragraph} +

    + ))} +

    + + Continue reading the complete tutorial → + +

    +
    + )} +
    + + ) +} diff --git a/src/components/DocH1CopyPageWrapper/index.jsx b/src/components/DocH1CopyPageWrapper/index.jsx new file mode 100644 index 00000000000..1a6f8291e63 --- /dev/null +++ b/src/components/DocH1CopyPageWrapper/index.jsx @@ -0,0 +1,48 @@ +/** + * DocH1CopyPageWrapper + * + * Purpose: + * - Positions the CopyPageButton next to the document H1 on docs pages. + * + * Rationale: + * - Keeps CopyPageButton focused on presentation + markdown extraction only. + * - Avoids doc-vs-tutorial branching or DOM mutations inside the button. + * - Runs only on Doc pages (wired in DocItem/Layout), so timing/targets are reliable. + * + * Behavior: + * - Wraps the first `article h1` in a container and moves the button into it. + * - Enables absolute positioning via CSS without affecting tutorials. + * - No UI is rendered; this component only performs safe DOM positioning and + * guards against double wrapping. + */ +import React, { useEffect, useRef } from 'react' +import styles from '../CopyPageButton/CopyPageButton.module.css' + +export default function DocH1CopyPageWrapper() { + const containerRef = useRef(null) + + useEffect(() => { + // Find H1 within doc pages + const h1 = document.querySelector('article h1') + if (!h1) return + + // Avoid double-wrapping + if (h1.parentElement?.classList.contains(styles.h1Wrapper)) return + + const wrapper = document.createElement('div') + wrapper.className = styles.h1Wrapper + + // Insert wrapper before H1 and move H1 inside + h1.parentNode.insertBefore(wrapper, h1) + wrapper.appendChild(h1) + + // Move the copy button container into wrapper if present + const btnContainer = document.querySelector('[data-copy-button]') + if (btnContainer) { + wrapper.appendChild(btnContainer) + } + }, []) + + // This component only performs DOM positioning; it renders nothing + return
    +} diff --git a/src/components/EWSDKCards/SDKOptions.ts b/src/components/EWSDKCards/SDKOptions.ts new file mode 100644 index 00000000000..66f3977fa15 --- /dev/null +++ b/src/components/EWSDKCards/SDKOptions.ts @@ -0,0 +1,88 @@ +export const reactJS = 'React' +export const angular = 'Angular' +export const vue = 'Vue' +export const nextjs = 'Next JS' +export const web = 'Web' +export const mobile = 'Mobile' +export const gaming = 'Gaming' +export const enterprise = 'Enterprise' +export const backend = 'Backend' +export const android = 'Android' +export const ios = 'iOS' +export const js = 'Javascript' +export const macOS = 'macOS' +export const reactnative = 'React Native' +export const rnbare = 'React Native Bare' +export const rnexpo = 'React Native Expo' +export const rnlist = [rnbare, rnexpo] +export const flutter = 'Flutter' +export const unity = 'Unity' +export const unreal = 'Unreal Engine' +export const nodejs = 'Node.js' +export const weblist = [reactJS, angular, vue, nextjs] + +export const pnp = 'Plug and Play' +export const sfa = 'Single Factor Auth' +export const pnpwebmodal = 'Plug and Play Web Modal' +export const pnpwebnomodal = 'Plug and Play Web No Modal' +export const pnpandroid = 'Plug and Play Android' +export const pnpios = 'Plug and Play iOS' +export const pnprn = 'Plug and Play React Native' +export const pnpflutter = 'Plug and Play Flutter' +export const pnpunity = 'Plug and Play Unity' +export const pnpunreal = 'Plug and Play Unreal' +export const pnplist = [ + { label: 'Web - Modal', value: pnpwebmodal, platforms: [...weblist] }, + { label: 'Web - No Modal', value: pnpwebnomodal, platforms: [...weblist] }, + { label: 'Android', value: pnpandroid, platforms: [android] }, + { label: 'iOS', value: pnpios, platforms: [ios] }, + { label: 'React Native', value: pnprn, platforms: [...rnlist] }, + { label: 'Flutter', value: pnpflutter, platforms: [flutter] }, + { label: 'Unity', value: pnpunity, platforms: [unity] }, + { label: 'Unreal', value: pnpunreal, platforms: [unreal] }, +] + +export const mpccorekit = 'MPC Core Kit' +export const singlefactorauth = 'Single Factor Auth' +export const singlefactorauthjs = 'SFA JS' +export const singlefactorauthandroid = 'SFA Android' +export const singlefactorauthios = 'SFA Swift' +export const singlefactorauthflutter = 'SFA Flutter' +export const mpccorekitjs = 'MPC Core Kit JS' +export const mpccorekitreactnative = 'MPC Core Kit React Native' + +export const sfalist = [ + { label: 'SFA JS', value: singlefactorauthjs, platforms: [...weblist, reactnative, nodejs] }, + { label: 'SFA Android', value: singlefactorauthandroid, platforms: [android] }, + { label: 'SFA Swift', value: singlefactorauthios, platforms: [ios, macOS] }, + { label: 'SFA Flutter', value: singlefactorauthflutter, platforms: [flutter] }, +] + +export const mpccorekitlist = [ + { label: 'MPC Core Kit JS', value: mpccorekitjs, platforms: [...weblist, reactnative, nodejs] }, + { label: 'MPC Core Kit React Native', value: mpccorekitreactnative, platforms: [reactnative] }, +] + +const getWindowLocation = () => { + if (typeof window !== 'undefined') return window.location.href + return 'http://localhost' +} + +export const getOptionsfromURL = (): Record => { + const url = new URL(getWindowLocation()) + + const urlOpts = {} + url.searchParams.forEach((value, key) => { + urlOpts[key] = value + }) + + return { ...urlOpts } +} + +export const setURLfromOptions = (opts: Record): string => { + const url = new URL(getWindowLocation()) + + url.search = '' + for (const [key, value] of Object.entries(opts)) url.searchParams.append(key, value) + return url.toString() +} diff --git a/src/components/EWSDKCards/icons.tsx b/src/components/EWSDKCards/icons.tsx new file mode 100644 index 00000000000..55f0432b29e --- /dev/null +++ b/src/components/EWSDKCards/icons.tsx @@ -0,0 +1,294 @@ +// All styles and icons are defined within this file only. + +import React from 'react' + +const styles: { [key: string]: React.CSSProperties } = { + platformIconSection: { + display: 'flex', + flexDirection: 'row', + gap: '8px', + justifyContent: 'flex-start', + alignItems: 'center', + flexWrap: 'wrap', + marginTop: '16px', + color: 'var(--ifm-color-content)', + }, + platformIconContainer: { + height: '41px', + width: '41px', + backgroundColor: 'var(--w3a-color-icon-background)', + color: 'var(--ifm-color-content)', + borderRadius: '8px', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + padding: '7px', + border: '1px solid var(--w3a-color-icon-background)', + transition: 'border 0.2s', + cursor: 'pointer', + }, +} + +export const webIcons = ( +
    +
    + {/* React */} + + + +
    +
    + {/* Vue.js */} + + + + +
    +
    + {/* JavaScript */} + + + + +
    + +
    + {/* Next.js */} + + + +
    + {/*
    + {/* Nuxt.js + + + + + + + + + + +
    */} +
    + {/* Angular */} + + + + + +
    +
    +) + +export const mobileIcons = ( +
    +
    + {/* Android */} + + + + + +
    +
    + {/* iOS */} + + + +
    +
    + {/* Flutter */} + + + + + + + + + + + + + + + + + +
    +
    + {/* React Native */} + + + +
    +
    +) + +export const gamingIcons = ( +
    +
    + {/* Gamepad */} + + + +
    +
    + {/* Unity */} + + + +
    +
    +) + +export const backendIcons = ( +
    +
    + {/* Node.js */} + + + + + + +
    +
    +) diff --git a/src/components/EWSDKCards/index.tsx b/src/components/EWSDKCards/index.tsx new file mode 100644 index 00000000000..731fe781862 --- /dev/null +++ b/src/components/EWSDKCards/index.tsx @@ -0,0 +1,458 @@ +/* eslint-disable jsx-a11y/no-static-element-interactions */ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +import { useState } from 'react' + +import { web, mobile, gaming, backend } from './SDKOptions' +import { webIcons, mobileIcons, gamingIcons, backendIcons } from './icons' +import styles from './styles.module.css' + +const chevron = ( + + + +) + +export const pnpweb = ( +
    +
    +

    Embedded Wallets Web SDK

    +

    + Integrate MetaMask Embedded Wallets (Web3Auth) with just 4 lines of code.
    +
    + Designed to provide seamless and straightforward integration for web applications across all + major browsers and javascript frameworks. +

    + {webIcons} +
    + +
    +) + +export const pnpmobile = ( +
    +
    +

    Embedded Wallets Mobile SDKs

    +

    + Integrate MetaMask Embedded Wallets (Web3Auth) with just 4 lines of code.
    +
    + Designed for mobile developers, these SDKs ensure a secure wallet integration experience + across various mobile platforms, enhancing user engagement and security. +

    + {mobileIcons} +
    + +
    +) + +export const pnpgaming = ( +
    +
    +
    +

    Embedded Wallets Gaming SDKs

    + {/*
    +
    {pnp} Only
    +
    */} +
    + +

    + Integrate MetaMask Embedded Wallets (Web3Auth) with just 4 lines of code.
    +
    + Seamlessly authenticate users into your Web3 games with their socials using Web3Auth Gaming + SDKs. +

    + {gamingIcons} +
    + +
    +) + +export const pnpbackend = ( +
    +
    +
    +

    Embedded Wallets Backend SDKs

    + {/*
    +
    {pnp} Only
    +
    */} +
    + +

    + Integrate MetaMask Embedded Wallets (Web3Auth) with just 4 lines of code.
    +
    + Seamlessly authenticate users into your Web3 apps with their socials using Web3Auth Backend + SDKs. +

    + {backendIcons} +
    + +
    +) + +// export const mpccorekit = ( +//
    +//
    +//

    MPC Core Kit SDKs

    +//

    +// Designed for projects that require a tailored approach to authentication, providing the +// tools and flexibility necessary to build advanced, secure, and integrated authentication +// systems.
    +//
    +// Works for Web, React Native & NodeJS environments. +//

    +// {webIcons} +//
    +// +//
    +// ); + +export default function QuickNavigation() { + const [platform, setPlatform] = useState(web) + + return ( +
    +
    +
    +
    setPlatform(web)}> + {web} +
    +
    setPlatform(mobile)}> + {mobile} +
    +
    setPlatform(gaming)}> + {gaming} +
    +
    setPlatform(backend)}> + {backend} +
    + {/*
    setPlatform(enterprise)} + > + {enterprise} +
    */} +
    +
    + {platform === web && pnpweb} + {platform === mobile && pnpmobile} + {platform === gaming && pnpgaming} + {platform === backend && pnpbackend} + {/* {platform === enterprise && mpccorekit} */} +
    + ) +} diff --git a/src/components/EWSDKCards/styles.module.css b/src/components/EWSDKCards/styles.module.css new file mode 100644 index 00000000000..828a25de1da --- /dev/null +++ b/src/components/EWSDKCards/styles.module.css @@ -0,0 +1,305 @@ +.headingContainer { + display: flex; + padding-top: 3rem; + padding-bottom: 3rem; + justify-content: flex-start; + flex: 0 0 100%; + flex-wrap: wrap; + align-items: center; + border: none; +} + +.heading { + font-weight: 500; + font-size: 3.2rem; + line-height: 1.5; + color: var(--ifm-heading-color); + padding: 0; + margin: 0; +} + +.container { + display: flex; + flex-flow: column wrap; + gap: 2rem; + justify-content: space-around; + overflow: visible; + scroll-behavior: smooth; +} + +.card { + margin-bottom: 2rem; + display: flex; + flex-direction: row; + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + box-shadow: 0 1px 2px rgb(0 0 0 / 5%); + border-radius: 20px; + text-decoration: none; + transition: all 0.2s ease; +} + +.cardContainerIntro, +.cardContainer { + display: flex; + flex-flow: column wrap; + align-items: flex-start; + text-align: left; + width: 50%; + padding: 3rem; + gap: 2rem; + justify-content: center; +} + +.cardContainerIntro { + border-right: 1px solid var(--ifm-color-emphasis-200); +} + +.cardContainerIntro h3, +.cardContainer h3 { + font-weight: 500; + font-size: 2.4rem; + line-height: 1.5; + color: var(--ifm-heading-color); + display: block; + margin: 0; + padding: 0; + font-family: var(--ifm-font-family-base); +} + +.cardContainerIntro p, +.cardContainer p { + font-weight: 400; + font-size: 1.6rem; + line-height: 1.5; + display: block; + margin: 0; + padding: 0; + color: var(--ifm-color-content-secondary); +} + +.cardTitleContainer { + display: flex; + flex-flow: row wrap; + gap: 1.1rem; + align-items: center; + justify-content: flex-start; +} + +.tabContainer { + display: flex; + flex-flow: row wrap; + justify-content: flex-start; + align-items: center; + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-right: 0; + border-radius: 0.8rem; + text-decoration: none; + padding: 0; + margin: 0; + overflow: hidden; + cursor: pointer; + box-shadow: 0 1px 2px rgb(0 0 0 / 5%); +} + +.selectedTab, +.tab { + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + align-items: center; + width: max-content; + padding: 0.8rem 1.8rem; + margin: 0; + font-weight: 500; + font-size: 1.5rem; + line-height: 1.5; + color: var(--ifm-color-content-secondary); + border-right: 1px solid var(--ifm-color-emphasis-200); + transition: all 0.2s ease; +} + +.tab:hover { + color: var(--ifm-color-primary); + background-color: var(--ifm-hover-overlay); +} + +.selectedTab { + color: var(--ifm-color-white); + background: var(--ifm-color-primary); +} + +.pillContainer { + display: flex; + flex-flow: row wrap; + justify-content: center; + align-items: center; + background: var(--ifm-color-emphasis-100); + border-radius: 0.8rem; + text-decoration: none; + padding: 0; + margin: 0; + width: max-content; + overflow: hidden; +} + +.pill { + display: flex; + flex-flow: column wrap; + justify-content: center; + text-align: center; + align-items: center; + width: max-content; + padding: 0.2rem 1.2rem; + margin: 0; + font-weight: 500; + font-size: 1.2rem; + line-height: 1.5; + color: var(--ifm-color-primary); + text-transform: uppercase; +} + +.cardContent { + display: flex; + flex-flow: row wrap; + justify-content: flex-start; + align-items: flex-start; + gap: 1.6rem; +} + +.sdkIconContainer { + height: 3.2rem; + width: 3.2rem; + padding: 0.6rem; + background-color: var(--ifm-color-emphasis-100); + border-radius: 50%; + margin-top: 0.3rem; + display: flex; + align-items: center; + justify-content: center; +} + +.sdkIcon { + height: 2rem; + width: 2rem; + color: var(--ifm-color-primary); +} + +.cardContentText { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + width: 100%; + gap: 0.8rem; +} + +.cardContentText h3 { + font-weight: 500; + font-size: 1.8rem; + line-height: 1.5; + color: var(--ifm-heading-color); + margin: 0; + font-family: var(--ifm-font-family-base); +} + +.links { + display: flex; + flex-flow: row wrap; + justify-content: flex-start; + align-items: flex-start; + gap: 1.6rem; +} + +.links a { + font-weight: 500; + font-size: 1.4rem; + line-height: 1.5; + display: flex; + align-items: center; + gap: 0.4rem; + color: var(--ifm-color-primary); + text-decoration: none; + transition: color 0.2s ease; +} + +.links a:hover { + color: var(--ifm-color-primary); +} + +@media (width <= 1231px) { + .cardContainerIntro, + .cardContainer { + padding: 2.5rem; + } +} + +@media (width <= 996px) { + .container { + flex-direction: column; + } + + .headingContainer { + flex-direction: column; + align-items: flex-start; + gap: 1.5rem; + } + + .card { + max-width: 100%; + justify-content: left; + flex-direction: column; + } + + .cardContainer { + justify-content: flex-start; + } + + .cardContainerIntro, + .cardContainer { + width: 100%; + } + + .cardContainerIntro { + border-right: 0; + border-bottom: 1px solid var(--ifm-color-emphasis-200); + } +} + +/* Dark mode support */ +[data-theme='dark'] { + .card { + border-color: var(--ifm-color-emphasis-300); + box-shadow: 0 1px 2px rgb(255 255 255 / 10%); + } + + .cardContainerIntro { + border-right: 1px solid var(--ifm-color-emphasis-300); + } + + .tabContainer { + border-color: var(--ifm-color-emphasis-300); + box-shadow: 0 1px 2px rgb(255 255 255 / 10%); + } + + .tab, + .selectedTab { + border-right: 1px solid var(--ifm-color-emphasis-300); + } + + .pillContainer { + background: var(--ifm-color-emphasis-200); + } + + .sdkIconContainer { + background-color: var(--ifm-color-emphasis-200); + } + + @media (width <= 996px) { + .cardContainerIntro { + border-bottom: 1px solid var(--ifm-color-emphasis-300); + } + } +} diff --git a/src/components/Faucet/Alerts.tsx b/src/components/Faucet/Alerts.tsx index 830c22a651d..2d544e54db4 100644 --- a/src/components/Faucet/Alerts.tsx +++ b/src/components/Faucet/Alerts.tsx @@ -1,140 +1,99 @@ -import React from "react"; -import { AlertTitle, AlertText } from "@site/src/components/Alert"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; - -const handleClickCommonIssue = () => { - trackClickForSegment({ - eventName: "Contact us", - clickType: `Common Issue Alert`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); -}; - -const handleClickBalanceLow = () => { - trackClickForSegment({ - eventName: "Add funds using MetaMask", - clickType: `Low Balance Alert`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); -}; - -const handleClickCooldown = () => { - trackClickForSegment({ - eventName: "Contact us", - clickType: `Cooldown Alert`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); -}; - -const handleClickViewTransaction = () => { - trackClickForSegment({ - eventName: "View on Etherscan", - clickType: `Success Alert`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); -}; +import React from 'react' +import { AlertTitle, AlertText } from '@site/src/components/Alert' export const AlertCommonIssue = () => (
    Issue starting transaction - There was an issue starting your transaction. Try again in a few - minutes. If the problem persists please{" "} + There was an issue starting your transaction. Try again in a few minutes. If the problem + persists please{' '} + href="https://support.metamask.io/"> contact support .
    -); +) + +export const AlertFailedPoh = () => ( +
    + Please complete Linea Proof of Humanity + + + Free users are required to complete Proof of Humanity to access the faucet. Learn more{' '} + + here + + . + + +
    +) export const AlertPastActivity = () => (
    No past activity - The address provided does not have sufficient historical activity or balance on the Ethereum Mainnet. Please use a - different address to proceed. Read the FAQ below for more information. + The address provided does not have sufficient historical activity or balance on the Ethereum + Mainnet. Please use a different address to proceed. Read the FAQ below for more information.
    -); +) export const AlertBalanceTooLow = () => (
    Balance too low - Your current Ethereum address does not contain enough ETH on - Ethereum Mainnet. You can add funds to your address using{" "} + Your current Ethereum address does not contain enough ETH on Ethereum Mainnet. You can add + funds to your address using{' '} + href="https://metamask.io/buy-crypto/"> MetaMask .
    -); +) export const AlertCooldown = () => (
    Cooldown period - You already got ETH from the faucet today. Try again in 24 hours.{" "} + You already got ETH from the faucet today. Try again in 24 hours.{' '} + href="https://support.metamask.io/"> Contact us .
    -); +) export const AlertSuccess = ({ url }: { url: string }) => (
    - Transaction successfull! + Transaction successful! - Your transaction has been sent to the Ethereum/Sepolia network. You - will receive your ETH shortly.{" "} - + Your transaction has been sent to the Ethereum/Sepolia network. You will receive your ETH + shortly.{' '} + View on Etherscan .
    -); +) diff --git a/src/components/Faucet/Faq.tsx b/src/components/Faucet/Faq.tsx index 412894f8831..31d2988c049 100644 --- a/src/components/Faucet/Faq.tsx +++ b/src/components/Faucet/Faq.tsx @@ -1,92 +1,39 @@ -import React from "react"; -import Accordion from "@site/src/components/Accordion"; -import Text from "@site/src/components/Text"; -import styles from "./faq.module.scss"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; +import React from 'react' +import Accordion from '@site/src/components/Accordion' +import Text from '@site/src/components/Text' +import styles from './faq.module.scss' interface IFaq { - network: "linea" | "sepolia"; - className: string; - classNameHeading: string; - isLimitedUserPlan?: boolean; + network: 'linea' | 'sepolia' + className: string + classNameHeading: string + isLimitedUserPlan?: boolean } -export default function Faq({ - network, - className, - classNameHeading, - isLimitedUserPlan, -}: IFaq) { - const handleClickContactUs = () => { - trackClickForSegment({ - eventName: "Contact us", - clickType: `Link in ${network} FAQ`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; - - const handleClickLinea = () => { - trackClickForSegment({ - eventName: "What is Linea", - clickType: `Link in ${network} FAQ`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; - - const handleClickDiscord = () => { - trackClickForSegment({ - eventName: "Consensys Discord", - clickType: `Link in ${network} FAQ`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; - - const handleClickBridge = () => { - trackClickForSegment({ - eventName: "Bridge", - clickType: `Link in ${network} FAQ`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; - +export default function Faq({ network, className, classNameHeading, isLimitedUserPlan }: IFaq) { switch (network) { - case "linea": + case 'linea': return (
    Frequently Asked Questions - + Answers to commonly asked questions about the MetaMask faucet.
    {isLimitedUserPlan && ( - Why must my address have Ethereum Mainnet activity to claim - Linea ETH?x + Why must my address have Ethereum Mainnet activity to claim Linea ETH?x - MetaMask requires an address with Ethereum Mainnet activity to - safeguard the faucet from automated bots, ensuring equitable - Linea ETH distribution. The amount of Linea ETH you can receive - ranges from 0 to 0.5, depending on your address's level of - activity. No activity results in no Linea ETH, while a higher - number of transactions can earn you up to 0.5. MetaMask maintains - confidentiality over the exact criteria used to determine the - amount issued to prevent any exploitation of the system, aiming - to distribute testnet ETH fairly among genuine, active users. + MetaMask requires an address with Ethereum Mainnet activity to safeguard the faucet + from automated bots, ensuring equitable Linea ETH distribution. The amount of Linea + ETH you can receive ranges from 0 to 0.5, depending on your address's level of + activity. No activity results in no Linea ETH, while a higher number of transactions + can earn you up to 0.5. MetaMask maintains confidentiality over the exact criteria + used to determine the amount issued to prevent any exploitation of the system, + aiming to distribute testnet ETH fairly among genuine, active users. )} @@ -95,10 +42,9 @@ export default function Faq({ I'm new to Web3. What is a faucet? - A faucet is a platform that gives you testnet tokens to use when - testing your smart contracts. This faucet gives - you Sepolia ETH to test deploying smart contracts and sending - transactions before deploying your dapp on Mainnet. + A faucet is a platform that gives you testnet tokens to use when testing your smart + contracts. This faucet gives you Sepolia ETH to test deploying smart contracts and + sending transactions before deploying your dapp on Mainnet. @@ -107,21 +53,15 @@ export default function Faq({ - + Linea - {" "} - is a type 2 zero knowledge Ethereum Virtual Machine (zkEVM). A - zkEVM replicates the Ethereum environment as a rollup and allows - developers to build on it as they would on Ethereum Mainnet. - Linea allows you to deploy any smart contract, use any tool, and - develop as if you're building on Ethereum. For users, this - enables the experience and security guarantees of Ethereum, but with - lower transaction costs and greater speed. + {' '} + is a type 2 zero knowledge Ethereum Virtual Machine (zkEVM). A zkEVM replicates the + Ethereum environment as a rollup and allows developers to build on it as they would + on Ethereum Mainnet. Linea allows you to deploy any smart contract, use any tool, + and develop as if you're building on Ethereum. For users, this enables the + experience and security guarantees of Ethereum, but with lower transaction costs and + greater speed. @@ -133,12 +73,10 @@ export default function Faq({ + href="https://support.metamask.io/"> Contact support - {" "} + {' '} with any issues or questions you have relating to the faucet. @@ -149,14 +87,11 @@ export default function Faq({ - If you have ideas on how to improve the faucet, - feel free to submit them on{" "} + If you have ideas on how to improve the faucet, feel free to submit them on{' '} + href="https://discord.com/invite/consensys"> Discord. @@ -168,47 +103,38 @@ export default function Faq({ - Linea ETH comes from Goerli ETH that is bridged to Linea - using the canonical{" "} - + Linea ETH comes from Sepolia ETH that is bridged to Linea using the canonical Linea + ETH comes from Sepolia ETH that is bridged to Linea using the canonical{' '} + bridge.
    - ); - case "sepolia": + ) + case 'sepolia': return (
    Frequently Asked Questions - + Answers to commonly asked questions about the MetaMask faucet.
    {isLimitedUserPlan && ( - Why must my address have Ethereum Mainnet activity to claim - Sepolia ETH? + Why must my address have Ethereum Mainnet activity to claim Sepolia ETH? - MetaMask requires an address with Ethereum Mainnet activity to - safeguard the faucet from automated bots, ensuring equitable - Sepolia ETH distribution. The amount of Sepolia ETH you can - receive ranges from 0 to 0.5, depending on your address's level - of activity. No activity results in no Sepolia ETH, while a - higher number of transactions can earn you up to 0.5. MetaMask - maintains confidentiality over the exact criteria used to - determine the amount issued to prevent any exploitation of the - system, aiming to distribute testnet ETH fairly among genuine, - active users. + MetaMask requires an address with Ethereum Mainnet activity to safeguard the faucet + from automated bots, ensuring equitable Sepolia ETH distribution. The amount of + Sepolia ETH you can receive ranges from 0 to 0.5, depending on your address's level + of activity. No activity results in no Sepolia ETH, while a higher number of + transactions can earn you up to 0.5. MetaMask maintains confidentiality over the + exact criteria used to determine the amount issued to prevent any exploitation of + the system, aiming to distribute testnet ETH fairly among genuine, active users. )} @@ -217,10 +143,9 @@ export default function Faq({ I'm new to Web3. What is a faucet? - A faucet is a platform that gives you testnet tokens to use when - testing your smart contracts. This faucet gives - you Sepolia ETH to test deploying smart contracts and sending - transactions before deploying your dapp on Mainnet. + A faucet is a platform that gives you testnet tokens to use when testing your smart + contracts. This faucet gives you Sepolia ETH to test deploying smart contracts and + sending transactions before deploying your dapp on Mainnet. @@ -231,12 +156,10 @@ export default function Faq({ + href="https://support.metamask.io/"> Contact support - {" "} + {' '} with any issues or questions you have relating to the faucet. @@ -247,14 +170,11 @@ export default function Faq({ - If you have ideas on how to improve the faucet, - feel free to submit them on{" "} + If you have ideas on how to improve the faucet, feel free to submit them on{' '} + href="https://discord.com/invite/consensys"> Discord. @@ -265,12 +185,12 @@ export default function Faq({ Where does Sepolia ETH come from? - The Sepolia ETH comes from MetaMask's partnership with the Ethereum - Foundation. We maintain an always-on, reliable faucet - environment to support the development community. + The Sepolia ETH comes from MetaMask's partnership with the Ethereum Foundation. We + maintain an always-on, reliable faucet environment to support the development + community.
    - ); + ) } } diff --git a/src/components/Faucet/Hero.tsx b/src/components/Faucet/Hero.tsx index 0593b09a01e..c2223038513 100644 --- a/src/components/Faucet/Hero.tsx +++ b/src/components/Faucet/Hero.tsx @@ -1,22 +1,23 @@ -import React, { useContext, useEffect, useState } from "react"; -import Text from "@site/src/components/Text"; -import Button from "@site/src/components/Button"; -import Input from "@site/src/components/Input"; -import clsx from "clsx"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; -import { WALLET_LINK_TYPE } from "@site/src/components/AuthLogin/AuthModal"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; -import EthIcon from "./eth.svg"; -import styles from "./hero.module.scss"; +import React, { useContext, useEffect, useState } from 'react' +import Text from '@site/src/components/Text' +import Button from '@site/src/components/elements/buttons/button' +import Input from '@site/src/components/Input' +import clsx from 'clsx' +import { WALLET_LINK_TYPE } from '@site/src/components/AuthLogin/AuthModal' +import { MetamaskProviderContext } from '@site/src/theme/Root' +import styles from './hero.module.scss' +import { useColorMode } from '@docusaurus/theme-common' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' interface IHero { - className: string; - network: "linea" | "sepolia"; - handleRequest: VoidFunction; - handleOnInputChange: (valiue: string) => void; - inputValue?: string; - isLoading?: boolean; - isLimitedUserPlan?: boolean; + className: string + network: 'linea' | 'sepolia' + handleRequest: VoidFunction + handleOnInputChange: (valiue: string) => void + inputValue?: string + isLoading?: boolean + isLimitedUserPlan?: boolean + isMaintenance?: boolean } export default function Hero({ @@ -27,6 +28,7 @@ export default function Hero({ handleOnInputChange, isLoading, isLimitedUserPlan, + isMaintenance, }: IHero) { const { metaMaskAccount, @@ -34,165 +36,217 @@ export default function Hero({ metaMaskWalletIdConnectHandler, walletLinked, projects, - walletLinkUrl, - } = useContext(MetamaskProviderContext); - const isExtensionActive = sdk.isExtensionActive(); - const [isWalletLinking, setIsWalletLinking] = useState(false); + walletAuthUrl, + needsMfa, + } = useContext(MetamaskProviderContext) + const isMobile = sdk.platformManager?.isMobile ?? false + const isExtensionActive = sdk.isExtensionActive() + const showInstallButton = !isExtensionActive && !isMobile + const [isWalletLinking, setIsWalletLinking] = useState(false) + const { colorMode } = useColorMode() const handleConnectWallet = () => { - setIsWalletLinking(true); - trackClickForSegment({ - eventName: !isExtensionActive ? "Install MetaMask" : "Connect MetaMask", - clickType: "Hero", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - metaMaskWalletIdConnectHandler(); - }; + setIsWalletLinking(true) + metaMaskWalletIdConnectHandler() + } const handleLinkWallet = () => { - setIsWalletLinking(true); - trackClickForSegment({ - eventName: - walletLinked === WALLET_LINK_TYPE.NO - ? "Link Infura Account" - : "Select Infura Account", - clickType: "Hero", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - window.location.href = walletLinkUrl; - }; + setIsWalletLinking(true) + window.location.href = walletAuthUrl + } const handleRequestEth = () => { - trackClickForSegment({ - eventName: "Request ETH", - clickType: "Hero", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - handleRequest(); - }; + handleRequest() + } useEffect(() => { if (walletLinked) { - setIsWalletLinking(false); + setIsWalletLinking(false) } - }, [walletLinked]); + }, [walletLinked]) return ( -
    - {!(isExtensionActive && metaMaskAccount) && } - - - {network === "linea" && "Linea Sepolia"} - {network === "sepolia" && "Sepolia"} ETH delivered straight to your - wallet. - - - - {!isExtensionActive - ? "Install MetaMask for your browser to get started and request ETH." - : !Object.keys(projects).length - ? walletLinked === undefined - ? "Connect your MetaMask wallet to get started and request ETH." - : walletLinked === WALLET_LINK_TYPE.NO - ? "Link your Infura account to get started and request ETH." - : "Select your Infura account to get started and request ETH." - : "Enter your MetaMask wallet address and request ETH."} - -
    - {!!Object.keys(projects).length && ( -
    - - {isLimitedUserPlan && ( -

    - The amount of {network === "linea" && "Linea Sepolia"} - {network === "sepolia" && "Sepolia"} ETH you'll get is - determined by your address's Ethereum Mainnet activity to ensure - fair and bot-free distribution. -

    - )} -
    - )} +
    +
    - {!isExtensionActive ? ( - - ) : !Object.keys(projects).length ? ( - <> - {walletLinked === undefined && ( + styles.hero, + network === 'linea' && styles.linea, + network === 'sepolia' && styles.sepolia, + className + )}> + + + {network === 'linea' && 'Linea Sepolia'} + {network === 'sepolia' && 'Sepolia'} ETH delivered straight to your wallet + + + + {showInstallButton + ? 'Install MetaMask for your browser to get started and request ETH.' + : !Object.keys(projects).length + ? needsMfa + ? 'Your Infura Account requires 2-Factor Authentication' + : walletLinked === undefined + ? 'Connect your MetaMask wallet to get started and request ETH.' + : walletLinked === WALLET_LINK_TYPE.NO + ? 'Link your Developer Dashboard account to get started and request ETH.' + : 'Select your Developer Dashboard account to get started and request ETH.' + : !isMaintenance + ? 'Enter your MetaMask wallet address and request ETH.' + : 'The faucet is at full capacity due to high demand. Try checking back later.'} + +
    + {!!Object.keys(projects).length && !showInstallButton && !isMaintenance && ( +
    +
    + +
    +
    +
    + {isLimitedUserPlan && ( +

    + The amount of {network === 'linea' && 'Linea Sepolia'} + {network === 'sepolia' && 'Sepolia'} ETH you'll get is determined by your + address's Ethereum Mainnet activity to ensure fair and bot-free distribution. +

    + )} +
    + )} +
    + {showInstallButton ? ( - )} - {walletLinked === WALLET_LINK_TYPE.NO && ( - - )} - {walletLinked === WALLET_LINK_TYPE.MULTIPLE && ( - - )} - - ) : ( - - )} + /> + ) : !Object.keys(projects).length ? ( + <> + {needsMfa ? ( +
    +
    -
    +
    - ); + ) } diff --git a/src/components/Faucet/Maintenance.tsx b/src/components/Faucet/Maintenance.tsx deleted file mode 100644 index fb03154efb9..00000000000 --- a/src/components/Faucet/Maintenance.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import MaintenanceIco from "./maintenance.svg"; -import Text from "@site/src/components/Text"; -import Button from "@site/src/components/Button"; - -import styles from "./maintenance.module.scss"; -import React from "react"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; - -const Maintenance = ({ network }: { network: "linea" | "sepolia" }) => { - const SEPOLIA_URL = "https://faucetlink.to/sepolia"; - const LINEA_URL = - "https://docs.linea.build/build-on-linea/use-linea-testnet/fund"; - - const handleOnClick = () => { - trackClickForSegment({ - eventName: "Explore Alternative Faucets", - clickType: `Maintenance ${network}`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; - - return ( -
    -
    - - The faucet is at full capacity due to high demand. - - Try - checking back later. Thank you for your patience. Need ETH urgently? - - -
    -
    - ); -}; - -export default Maintenance; diff --git a/src/components/Faucet/TransactionTable.tsx b/src/components/Faucet/TransactionTable.tsx index d3dd26b297a..3514f4b2d74 100644 --- a/src/components/Faucet/TransactionTable.tsx +++ b/src/components/Faucet/TransactionTable.tsx @@ -1,71 +1,69 @@ -import React, { useMemo } from "react"; -import Link from "@docusaurus/Link"; -import Badge from "@site/src/components/Badge"; -import Table from "@site/src/components/Table"; -import Text from "@site/src/components/Text"; -import { LINEA_URL, SEPOLIA_URL } from "@site/src/pages/developer-tools/faucet"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; +import React, { useMemo } from 'react' +import Link from '@docusaurus/Link' +import Badge from '@site/src/components/Badge' +import Table from '@site/src/components/Table' +import Text from '@site/src/components/Text' +import { LINEA_URL, SEPOLIA_URL } from '@site/src/pages/developer-tools/faucet' -const hideCenterLetters = (word) => { - if (word.length < 10) return word; - return `${word.substring(0, 5)}...${word.substring(word.length - 4)}`; -}; +const hideCenterLetters = word => { + if (word.length < 10) return word + return `${word.substring(0, 5)}...${word.substring(word.length - 4)}` +} const transformWordEnding = (value, end) => { - const upValue = Math.floor(value); - return `${upValue} ${end}${upValue === 1 ? "" : "s"} ago`; -}; + const upValue = Math.floor(value) + return `${upValue} ${end}${upValue === 1 ? '' : 's'} ago` +} -const getDiffTime = (time) => { - if (!time) return "unknown"; - const currentTime = Date.now(); - const startTime = new Date(time).getTime(); - const deltaTimeInSec = (currentTime - startTime) / 1000; - const deltaTimeInMin = deltaTimeInSec / 60; - const deltaTimeInHours = deltaTimeInMin / 60; - const deltaTimeInDays = deltaTimeInHours / 24; +const getDiffTime = time => { + if (!time) return 'unknown' + const currentTime = Date.now() + const startTime = new Date(time).getTime() + const deltaTimeInSec = (currentTime - startTime) / 1000 + const deltaTimeInMin = deltaTimeInSec / 60 + const deltaTimeInHours = deltaTimeInMin / 60 + const deltaTimeInDays = deltaTimeInHours / 24 - if (deltaTimeInMin < 1) return transformWordEnding(deltaTimeInSec, "second"); - if (deltaTimeInHours < 1) - return transformWordEnding(deltaTimeInMin, "minute"); - if (deltaTimeInDays < 1) return transformWordEnding(deltaTimeInHours, "hour"); - return transformWordEnding(deltaTimeInDays, "day"); -}; + if (deltaTimeInMin < 1) return transformWordEnding(deltaTimeInSec, 'second') + if (deltaTimeInHours < 1) return transformWordEnding(deltaTimeInMin, 'minute') + if (deltaTimeInDays < 1) return transformWordEnding(deltaTimeInHours, 'hour') + return transformWordEnding(deltaTimeInDays, 'day') +} -const renderStatus = (status) => { +const renderStatus = status => { switch (status) { - case "success": - return "success"; - case "failed": - return "error"; + case 'success': + return 'success' + case 'failed': + return 'error' default: - return "default"; + return 'default' } -}; +} -const renderValue = (status) => { +const renderValue = status => { switch (status) { - case "success": - return "successful"; - case "failed": - return "failed"; + case 'success': + return 'successful' + case 'failed': + return 'failed' default: - return "pending"; + return 'pending' } -}; +} interface ITransactionTable { - className?: string; - classNameHeading?: string; + className?: string + classNameHeading?: string data: { - id: string; - createdAt: string; - txnHash: string; - value: string; - status: "pending" | "success" | "failure"; - hash: string; - }[]; - network: "sepolia" | "linea"; + id: string + createdAt: string + txnHash: string + value: string + status: 'pending' | 'success' | 'failure' + hash: string + }[] + network: 'sepolia' | 'linea' } export default function TransactionTable({ @@ -74,21 +72,10 @@ export default function TransactionTable({ data = [], network, }: ITransactionTable) { - if (data?.length === 0) return null; - - const handleClickViewTransaction = () => { - trackClickForSegment({ - eventName: "View on Etherscan", - clickType: `Transactions Table`, - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; + if (data?.length === 0) return null const dataRows = useMemo(() => { - return data.map((item) => ({ + return data.map(item => ({ cells: [ hideCenterLetters(item.txnHash), getDiffTime(item.createdAt), @@ -100,30 +87,26 @@ export default function TransactionTable({ />, + rel="noopener noreferrer"> View on Etherscan , ], - })); - }, [data]); + })) + }, [data]) return (
    Transaction History - Here is a list of your requests from the MetaMask faucet. View your transaction on Etherscan for more information. + Here is a list of your requests from the MetaMask faucet. View your transaction on + Etherscan for more information.
    - +
    - ); + ) } diff --git a/src/components/Faucet/faq.module.scss b/src/components/Faucet/faq.module.scss index 872b2fda519..6b3af2f2c59 100644 --- a/src/components/Faucet/faq.module.scss +++ b/src/components/Faucet/faq.module.scss @@ -1,8 +1,11 @@ .accordionHeader { margin: 0; - padding: 24px; + padding: 2rem; } .accordionContainer { margin: 0; padding: 0 24px 24px; } +.faqDescription { + line-height: normal; +} diff --git a/src/components/Faucet/hero.module.scss b/src/components/Faucet/hero.module.scss index 67b7fc84baa..1924a990309 100644 --- a/src/components/Faucet/hero.module.scss +++ b/src/components/Faucet/hero.module.scss @@ -1,28 +1,34 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --hero-text-color: #fff; .hero { - &.sepolia { - --hero-image: url("/img/faucet-sepolia-hero-dark.png"); - } - - &.linea { - --hero-image: url("/img/faucet-linea-hero-dark.png"); + .inputWrapper { + input { + &::placeholder { + color: #fff; + } + } } } } -:root[data-theme="light"] { +:root[data-theme='light'] { --hero-text-color: #141618; +} +[role='tabpanel'] { .hero { - &.sepolia { - --hero-image: url("/img/faucet-sepolia-hero-light.png"); + p { + padding: 0; } + } +} - &.linea { - --hero-image: url("/img/faucet-linea-hero-light.png"); - } +.heroWrapper { + width: calc(100% - var(--page-padding-x) * 2); + margin: 0 auto; + @media screen and (min-width: 1900px) { + max-width: 60%; } } @@ -31,7 +37,7 @@ background-image: var(--hero-image); background-repeat: no-repeat; background-position: 100% 0; - background-size: auto 100%;; + background-size: auto 100%; @media screen and (max-width: 996px) { background-image: none; @@ -48,32 +54,62 @@ margin-right: 8px; } + .btnWrapper { + margin-top: 1.4rem; + } + .inputCont { - max-width: 600px; width: 100%; + max-width: 640px; @media screen and (max-width: 996px) { max-width: 100%; } + .inputWrapper { + display: flex; + flex-direction: row; + align-items: flex-end; + + label { + margin-bottom: 0; + } + + @media screen and (max-width: 996px) { + flex-direction: column; + width: 100%; + } + + p { + padding: 0 0 1rem 0; + } + input { + height: 4.2rem; + font-size: 16px; + margin-bottom: 0; + cursor: auto; + } + } + .caption { - font-size: 12px; - font-style: normal; - font-weight: 400; - line-height: 20px; - letter-spacing: 0.25px; + margin-bottom: 0; } } .alignedButtons { - margin-top: 22px; - } - - .button { - height: 48px; - + display: flex; + align-items: flex-end; + margin-left: 1rem; @media screen and (max-width: 996px) { width: 100%; + margin-top: 1rem; + margin-left: 0; + } + + button { + @media screen and (max-width: 996px) { + width: 100%; + } } } } diff --git a/src/components/Faucet/index.tsx b/src/components/Faucet/index.tsx index b6b86826153..3db1370a2ec 100644 --- a/src/components/Faucet/index.tsx +++ b/src/components/Faucet/index.tsx @@ -1,10 +1,10 @@ -export { default as Faq } from "./Faq"; -export { default as TransactionTable } from "./TransactionTable"; -export { default as Hero } from "./Hero"; -export { default as Maintenance } from "./Maintenance"; +export { default as Faq } from './Faq' +export { default as TransactionTable } from './TransactionTable' +export { default as Hero } from './Hero' export { AlertCommonIssue, AlertPastActivity, AlertCooldown, AlertSuccess, -} from "./Alerts"; + AlertFailedPoh, +} from './Alerts' diff --git a/src/components/Faucet/maintenance.module.scss b/src/components/Faucet/maintenance.module.scss index 73a9b4eb1ec..5accf38d17c 100644 --- a/src/components/Faucet/maintenance.module.scss +++ b/src/components/Faucet/maintenance.module.scss @@ -1,9 +1,9 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --maintenance-modal-shadow: rgba(0, 0, 0, 0.4); --maintenance-modal-background: #24272a; } -:root[data-theme="light"] { +:root[data-theme='light'] { --maintenance-modal-shadow: rgba(44, 59, 88, 0.1); --maintenance-modal-background: #fff; } @@ -11,7 +11,7 @@ .maintenance { background: rgba(0, 0, 0, 0.4); position: absolute; - top: -55px; + top: -100%; bottom: 0; left: 0; right: 0; @@ -20,13 +20,13 @@ .modal { position: sticky; - top: 80px; + top: 30%; width: 100%; - max-width: 480px; + max-width: 80%; margin: 0 auto; - padding: 16px; + padding: 1.4rem; text-align: center; - border-radius: 8px; + border-radius: 1rem; background: var(--maintenance-modal-background); box-shadow: 0px 0px 16px 0px var(--maintenance-modal-shadow), @@ -36,6 +36,10 @@ 0px 4px 4px 0px var(--maintenance-modal-shadow), 0px 2px 2px 0px var(--maintenance-modal-shadow); + @include bp(desktop) { + max-width: 25%; + } + .button { padding: 0 36px; } diff --git a/src/components/GasApiNetworks.tsx b/src/components/GasApiNetworks.tsx new file mode 100644 index 00000000000..c49df101f86 --- /dev/null +++ b/src/components/GasApiNetworks.tsx @@ -0,0 +1,47 @@ +import React, { useEffect, useState } from 'react' + +interface NetworkData { + [chainId: string]: string +} + +const GasApiNetworks = () => { + const [networks, setNetworks] = useState({}) + + useEffect(() => { + const fetchData = async () => { + try { + const response = await fetch('https://gas.api.cx.metamask.io/v1/supportedChainNames') + const data: NetworkData = await response.json() + setNetworks(data) + } catch (error) { + console.error('Error fetching data:', error) + } + } + + fetchData() + }, []) + + // Convert the networks object into an array of [chainId, networkName] pairs + const networksArray = Object.entries(networks) + + return ( +
    + + + + + + + + {networksArray.map(([chainId, networkName]) => ( + + + + + ))} + +
    NetworkChain ID
    {networkName}{chainId}
    + ) +} + +export default GasApiNetworks diff --git a/src/components/Hero/Hero.js b/src/components/Hero/Hero.js new file mode 100644 index 00000000000..396735b0709 --- /dev/null +++ b/src/components/Hero/Hero.js @@ -0,0 +1,52 @@ +import clsx from 'clsx' +import Heading from '@theme/Heading' +import Button from '@site/src/components/elements/buttons/button' + +import Shape from '@site/static/img/shapes/hero/shape.svg' + +import styles from './Hero.module.scss' + +export default function Hero({ title, description, buttons = [] }) { + return ( +
    +
    +
    +
    + + {title} + + + {description && ( +

    {description}

    + )} + + {buttons.length > 0 && ( +
    + {buttons.map((button, index) => ( +
    + )} +
    +
    + +
    +
    +
    +
    + ) +} diff --git a/src/components/Hero/Hero.module.scss b/src/components/Hero/Hero.module.scss new file mode 100644 index 00000000000..59777878e65 --- /dev/null +++ b/src/components/Hero/Hero.module.scss @@ -0,0 +1,137 @@ +.wrapper { + padding-top: 2rem; + padding-bottom: 2rem; + + background-color: var(--general-black-light); + color: var(--general-white); + overflow: hidden; + + @include bp('tablet') { + padding-top: 0; + padding-bottom: 0; + } +} + +.grid-wrapper { + @include grid; + @include bp('tablet') { + align-items: center; + height: 100%; + } +} + +.grid-col-left { + @include grid-column-span(8); + + @include bp('tablet') { + @include grid-column-span(4); + @include grid-column-start(2); + padding-top: 5rem; + padding-bottom: 5rem; + margin-left: -1.6rem; + } + + @include bp('desktop') { + @include grid-column-span(7); + @include grid-column-start(2); + padding-top: 4.5rem; + padding-bottom: 4.5rem; + margin-left: 0; + } +} + +.grid-col-right { + position: relative; + @include grid-column-span(8); + + @include bp-max(tablet) { + height: 16rem; + width: 100%; + order: -1; + } + + @include bp('tablet') { + @include grid-column-span(2); + @include grid-column-start(6); + height: 100%; + } + + @include bp('desktop') { + @include grid-column-span(7); + @include grid-column-start(10); + } +} + +.shape { + position: absolute; + left: 10.2rem; + bottom: -2.7rem; + width: 37.5rem; + height: 43.6rem; + + @include bp(tablet) { + width: 51.2rem; + height: 59.5rem; + left: -1.6rem; + bottom: 0; + } + + @include bp(desktop) { + left: 0; + width: 83.2rem; + height: 96.7rem; + } +} + +.title { + color: var(--developer-purple-light); + margin-top: 2rem; + font-family: var(--ifm-heading-font-family); + word-wrap: normal; + @include bp('tablet') { + margin-top: 0; + } +} + +.description { + margin-top: 1.4rem; + padding-right: 2rem; + + @include bp('tablet') { + margin-top: 1.4rem; + padding-right: 0; + } +} + +.buttons-container { + display: flex; + gap: 1.6rem; + margin-top: 1.8rem; + flex-wrap: wrap; + + @include bp('tablet') { + margin-top: 2rem; + gap: 2rem; + } + + @include bp('desktop') { + margin-top: 2.2rem; + } +} + +.button { + &:global(.primary) { + padding: 0.8rem 1.6rem; + font-size: 1rem; + font-weight: 500; + letter-spacing: 0.5px; + text-transform: uppercase; + transition: all 0.2s ease-in-out; + border-radius: 4px; + + &:hover { + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + } +} diff --git a/src/components/Icon/Icon.jsx b/src/components/Icon/Icon.jsx index 57db65f49de..de9c5be8b14 100644 --- a/src/components/Icon/Icon.jsx +++ b/src/components/Icon/Icon.jsx @@ -1,251 +1,320 @@ -import React from "react"; +import React from 'react' const Icon = ({ name, classes }) => { const renderIcon = () => { switch (name) { - case "key": + case 'key': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "network": + ) + case 'network': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "method": + ) + case 'method': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "type": + ) + case 'type': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "arrow-right": + ) + case 'arrow-right': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "alert-error": + ) + case 'alert-error': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "alert-success": + ) + case 'alert-success': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "alert-info": + ) + case 'alert-info': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "angle-right": + ) + case 'angle-right': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "angle-line-right": + ) + case 'angle-line-right': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "spinner-ellipse": + ) + case 'spinner-ellipse': return ( + xmlns="http://www.w3.org/2000/svg"> - - - - + + + + - ); - case "spinner-error": + ) + case 'spinner-error': return ( + xmlns="http://www.w3.org/2000/svg"> - ); - case "spinner-success": - return ( - - - - ); - case "metamask": + ) + case 'spinner-success': + return ( + + + + ) + case 'metamask': return ( - - - - - - - + class="h-6 w-6"> + + + + + + + + + + + + + + + + + + + + + + + + + + ) + case 'close': + return ( + + + - ); - case "close": - return ( - - - - - ) + ) default: - return null; + return null } - }; - return {renderIcon()}; -}; + } + return {renderIcon()} +} -export default Icon; +export default Icon diff --git a/src/components/Input/index.tsx b/src/components/Input/index.tsx index e488bc2afe1..a3838303309 100644 --- a/src/components/Input/index.tsx +++ b/src/components/Input/index.tsx @@ -1,16 +1,16 @@ -import React from "react"; -import clsx from "clsx"; +import React from 'react' +import clsx from 'clsx' -import styles from "./input.module.scss"; +import styles from './input.module.scss' interface IInput { - onChange?: (string) => void; - disabled?: boolean; - label?: string; - className?: string; - error?: string; - placeholder?: string; - value?: string; + onChange?: (string) => void + disabled?: boolean + label?: string + className?: string + error?: string + placeholder?: string + value?: string } export default function Input({ @@ -31,9 +31,9 @@ export default function Input({ disabled={disabled} placeholder={placeholder} className={clsx(styles.input, error && styles.error)} - onChange={(e) => onChange(e?.target?.value)} + onChange={e => onChange(e?.target?.value)} /> {error &&

    {error}

    } - ); + ) } diff --git a/src/components/Input/input.module.scss b/src/components/Input/input.module.scss index 97d9af99651..4e4be867042 100644 --- a/src/components/Input/input.module.scss +++ b/src/components/Input/input.module.scss @@ -1,11 +1,11 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --input-border: #848c96; --input-background: #24272a; --input-color: #fff; --input-error: #e06470; } -:root[data-theme="light"] { +:root[data-theme='light'] { --input-border: #bbc0c5; --input-background: #fff; --input-color: #141618; @@ -17,29 +17,24 @@ .label { text-overflow: ellipsis; - font-size: 14px; font-style: normal; font-weight: 500; - line-height: 22px; margin-bottom: 0; } .input { display: flex; height: 48px; - padding: 12px 16px; + padding: 1rem; align-items: center; gap: 10px; align-self: stretch; - border-radius: 8px; + border-radius: 1rem; border: 1px solid var(--input-border); background: var(--input-background); overflow: hidden; color: var(--input-color); - font-size: 14px; font-style: normal; - font-weight: 400; - line-height: 22px; outline: none; width: 100%; margin-bottom: 4px; diff --git a/src/components/MessageBox/MessageBox.jsx b/src/components/MessageBox/MessageBox.jsx index 75b19d0b268..b12a540d005 100644 --- a/src/components/MessageBox/MessageBox.jsx +++ b/src/components/MessageBox/MessageBox.jsx @@ -1,31 +1,34 @@ -import React from "react"; -import Icon from "@site/src/components/Icon/Icon"; -import { MSG_TYPES } from "@site/src/lib/constants"; +import clsx from 'clsx' +import Icon from '@site/src/components/Icon/Icon' +import { MSG_TYPES } from '@site/src/lib/constants' +import Heading from '@theme/Heading' + +import styles from './MessageBox.module.scss' const MessageBox = ({ opened, type, title, description }) => { if (!opened) { - return null; + return null } const renderIcon = () => { switch (type) { case MSG_TYPES.ERROR: - return ; + return case MSG_TYPES.SUCCESS: - return ; + return default: - return ; + return } - }; + } return ( -
    -
    +
    + {renderIcon()} - {title} -
    -
    {description}
    + {title} + +

    {description}

    - ); -}; + ) +} -export default MessageBox; +export default MessageBox diff --git a/src/components/MessageBox/MessageBox.module.scss b/src/components/MessageBox/MessageBox.module.scss new file mode 100644 index 00000000000..1e1cfec47eb --- /dev/null +++ b/src/components/MessageBox/MessageBox.module.scss @@ -0,0 +1,24 @@ +.box { + margin-bottom: 2.4rem; +} + +.title { + display: flex; + align-items: center; + + > span { + display: flex; + width: 2rem; + margin-right: 1.2rem; + } +} + +.desc { + margin-top: 0.8rem; + + a { + font-weight: 500; + text-decoration: underline currentColor 0.1rem !important; + text-underline-offset: 0.4rem; + } +} diff --git a/src/components/ModalAnim/index.tsx b/src/components/ModalAnim/index.tsx new file mode 100644 index 00000000000..741b9bddd50 --- /dev/null +++ b/src/components/ModalAnim/index.tsx @@ -0,0 +1,51 @@ +import { Player } from '@lottiefiles/react-lottie-player' +import { useEffect, useState } from 'react' + +const lottieUrl = require('../../utils/w3a-lottie.json') + +function getWindowDimensions() { + const { innerWidth: width, innerHeight: height } = window + return { + width, + height, + } +} + +export function useWindowDimensions() { + const [windowDimensions, setWindowDimensions] = useState({ width: 400, height: 400 }) + + useEffect(() => { + setWindowDimensions(getWindowDimensions()) + + function handleResize() { + setWindowDimensions(getWindowDimensions()) + } + + window.addEventListener('resize', handleResize) + return () => window.removeEventListener('resize', handleResize) + }, []) + + return windowDimensions +} + +export default function ModalAnim() { + const { width } = useWindowDimensions() + let style = {} + + if (width > 700) { + style = { + width: 600, + } + } + if (width < 700) { + style = { + width: width - 50, + } + } + + return ( +
    + +
    + ) +} diff --git a/src/components/NavDropdown/Products.html b/src/components/NavDropdown/Products.html new file mode 100644 index 00000000000..b00b9e1bdc2 --- /dev/null +++ b/src/components/NavDropdown/Products.html @@ -0,0 +1,575 @@ + diff --git a/src/components/NavbarWallet/index.tsx b/src/components/NavbarWallet/index.tsx index 3c0b184cef4..3209489982c 100644 --- a/src/components/NavbarWallet/index.tsx +++ b/src/components/NavbarWallet/index.tsx @@ -1,66 +1,70 @@ -import React, { useEffect, useState, useRef, FC, useContext } from "react"; -import ldClient from "launchdarkly"; -import clsx from "clsx"; -import Button from "@site/src/components/Button"; -import CopyIcon from "./copy.svg"; -import DisconnectIcon from "./disconnect.svg"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; -import BrowserOnly from "@docusaurus/BrowserOnly"; -import styles from "./navbarWallet.module.scss"; -import { Tooltip } from "@site/src/components/Tooltip"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; +import React, { useEffect, useState, useRef, FC, useContext } from 'react' +import ldClient from 'launchdarkly' +import clsx from 'clsx' +import DisconnectButton from '@site/src/components/Button' +import Button from '@site/src/components/elements/buttons/button' +import CopyIcon from './copy.svg' +import DisconnectIcon from './disconnect.svg' +import { MetamaskProviderContext } from '@site/src/theme/Root' +import BrowserOnly from '@docusaurus/BrowserOnly' +import styles from './navbarWallet.module.scss' +import { Tooltip } from '@site/src/components/Tooltip' +import Link from '@docusaurus/Link' +import { useColorMode } from '@docusaurus/theme-common' +import Text from '@site/src/components/Text' interface INavbarWalletComponent { - includeUrl: string[]; + includeUrl: string[] } -const LOGIN_FF = "mm-unified-login"; - -const NavbarWalletComponent: FC = ({ - includeUrl = [], -}: INavbarWalletComponent) => { - if (!includeUrl.some((item) => location?.pathname.includes(item))) { - return null; +const LOGIN_FF = 'mm-unified-login' + +const EndIcon = () => ( + + + +) + +const reformatMetamaskAccount = account => + account ? `${account.slice(0, 7)}...${account.slice(-5)}` : null + +const NavbarWalletComponent: FC = ({ includeUrl = [] }: INavbarWalletComponent) => { + if (!includeUrl.some(item => location?.pathname.includes(item))) { + return null } - const COPY_TEXT = "Copy to clipboard"; - const COPIED_TEXT = "Copied!"; + const COPY_TEXT = 'Copy to clipboard' + const COPIED_TEXT = 'Copied!' const { metaMaskAccount, + metaMaskAccountEns, sdk, metaMaskWalletIdConnectHandler, metaMaskDisconnect, - } = useContext(MetamaskProviderContext); - const [dropdownOpen, setDropdownOpen] = useState(false); - const [copyMessage, setCopyMessage] = useState(COPY_TEXT); - const isExtensionActive = sdk.isExtensionActive(); - const dialogRef = useRef(null); - const buttonRef = useRef(null); + } = useContext(MetamaskProviderContext) + const [dropdownOpen, setDropdownOpen] = useState(false) + const [copyMessage, setCopyMessage] = useState(COPY_TEXT) + const isMobile = sdk.platformManager?.isMobile ?? false + const isExtensionActive = sdk.isExtensionActive() + const showInstallButton = !isExtensionActive && !isMobile + const dialogRef = useRef(null) + const buttonRef = useRef(null) + const [userAccount, setUserAccount] = useState(metaMaskAccountEns || metaMaskAccount) + const { colorMode } = useColorMode() const toggleDropdown = () => { - setDropdownOpen((value) => !value); - trackClickForSegment({ - eventName: "Account dropdown", - clickType: "Navbar", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; + setDropdownOpen(value => !value) + } const handleCopy = () => { - navigator.clipboard.writeText(metaMaskAccount); - setCopyMessage(COPIED_TEXT); - trackClickForSegment({ - eventName: "Copy wallet address", - clickType: "Navbar", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - }; + navigator.clipboard.writeText(userAccount) + setCopyMessage(COPIED_TEXT) + } const handleClickOutside = (event: MouseEvent) => { if ( @@ -69,68 +73,71 @@ const NavbarWalletComponent: FC = ({ buttonRef.current && !buttonRef.current.contains(event.target as HTMLElement) ) { - setDropdownOpen(false); + setDropdownOpen(false) } - }; + } useEffect(() => { if (dropdownOpen) { - document.addEventListener("click", handleClickOutside); + document.addEventListener('click', handleClickOutside) } else { - document.addEventListener("click", handleClickOutside); + document.addEventListener('click', handleClickOutside) } return () => { - document.removeEventListener("click", handleClickOutside); - }; - }, [dropdownOpen]); + document.removeEventListener('click', handleClickOutside) + } + }, [dropdownOpen]) const handleDisconnect = () => { - trackClickForSegment({ - eventName: "Disconnect account", - clickType: "Navbar", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - metaMaskDisconnect(); - setDropdownOpen(false); - }; + metaMaskDisconnect() + setDropdownOpen(false) + } const handleConnectWallet = () => { - trackClickForSegment({ - eventName: !isExtensionActive ? "Install MetaMask" : "Connect Wallet", - clickType: "Navbar", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - metaMaskWalletIdConnectHandler(); - }; - - return !metaMaskAccount ? ( + metaMaskWalletIdConnectHandler() + } + + useEffect(() => { + if (metaMaskAccountEns) { + setUserAccount(metaMaskAccountEns) + } else if (metaMaskAccount) { + setUserAccount(metaMaskAccount) + } else { + setUserAccount(null) + } + }, [metaMaskAccount, metaMaskAccountEns]) + + return !userAccount ? ( + label={showInstallButton ? 'Install MetaMask' : 'Connect MetaMask'} + style={ + colorMode === 'dark' + ? { + '--button-color': 'var(--consumer-orange)', + '--button-text-color': 'var(--general-black)', + '--button-color-hover': 'var(--general-white)', + '--button-text-color-hover': 'var(--general-black)', + } + : { + '--button-color': 'var(--consumer-orange)', + '--button-text-color': 'var(--general-black)', + '--button-color-hover': 'var(--general-black)', + '--button-text-color-hover': 'var(--general-white)', + } + } + /> ) : (
    +
    +
    + avatar{' '} + + {metaMaskAccountEns || reformatMetamaskAccount(userAccount)} + + +
    + {!metaMaskAccountEns && ( +
    + + Claim Linea Name + + + New +
    + )} +
  • - +
  • )}
    - ); -}; + ) +} -const NavbarWallet = (props) => { - const [ldReady, setLdReady] = useState(false); - const [loginEnabled, setLoginEnabled] = useState(false); +const NavbarWallet = props => { + const [ldReady, setLdReady] = useState(false) + const [loginEnabled, setLoginEnabled] = useState(false) useEffect(() => { + // Handle case where ldClient is null (when LaunchDarkly isn't initialized) + if (!ldClient) { + console.warn('LaunchDarkly client not available, disabling login feature') + setLdReady(true) + setLoginEnabled(false) + return + } + ldClient.waitUntilReady().then(() => { - setLoginEnabled(ldClient.variation(LOGIN_FF, false)); - setLdReady(true); - }); - const handleChange = (current) => { - setLoginEnabled(current); - }; - ldClient.on(`change:${LOGIN_FF}`, handleChange); + setLoginEnabled(ldClient.variation(LOGIN_FF, false)) + setLdReady(true) + }) + const handleChange = current => { + setLoginEnabled(current) + } + ldClient.on(`change:${LOGIN_FF}`, handleChange) return () => { - ldClient.off(`change:${LOGIN_FF}`, handleChange); - }; - }, []); + ldClient.off(`change:${LOGIN_FF}`, handleChange) + } + }, []) return ( ldReady && - loginEnabled && ( - {() => } - ) - ); -}; + loginEnabled && {() => } + ) +} -export default NavbarWallet; +export default NavbarWallet diff --git a/src/components/NavbarWallet/navbarWallet.module.scss b/src/components/NavbarWallet/navbarWallet.module.scss index 340b26698f5..4cc308f2b06 100644 --- a/src/components/NavbarWallet/navbarWallet.module.scss +++ b/src/components/NavbarWallet/navbarWallet.module.scss @@ -1,12 +1,18 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --navbarWallet-color: #fff; + --tag-bg-color: #213949; + --tag-border-color: transparent; + --tag-color: #43aefc; } -:root[data-theme="light"] { +:root[data-theme='light'] { --navbarWallet-color: #141618; + --tag-bg-color: #fff; + --tag-border-color: #0376c9; + --tag-color: #0376c9; } -:global([class*="navbarSearchContainer"]) { +:global([class*='navbarSearchContainer']) { @media (max-width: 996px) { position: relative !important; right: 0 !important; @@ -15,22 +21,21 @@ .navbarButton { order: 100; - margin-left: 12px; + margin-left: 1rem; position: relative; } .navbarWallet { color: var(--navbarWallet-color); order: 100; - height: 28px; - margin-left: 12px; - position: relative; + height: 2.6rem; + margin-left: 1rem; .avatar { border-radius: 50%; box-sizing: content-box; - width: 24px; - height: 24px; + width: 2.2rem; + height: 2.2rem; } .cta { @@ -38,8 +43,8 @@ border: none; padding: 0; margin: 0; - height: 24px; - width: 24px; + height: 2.2rem; + width: 2.2rem; display: block; border-radius: 50%; cursor: pointer; @@ -60,19 +65,16 @@ list-style: none; position: absolute; width: max-content; - top: 50px; - right: -8px; + top: calc(100% + 1px); + right: 1.6rem; background-color: var(--ifm-navbar-background-color); - border-radius: 6px; - box-shadow: 0 3px 8px 0 rgba(44, 59, 88, 0.35); .item { - padding: 12px; + padding: 1.4rem; display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; - font-size: 14px; border-bottom: 1px solid rgba(133, 139, 154, 0.2); &:last-child { @@ -80,27 +82,39 @@ } .walletId { - margin: 0 8px; + margin: 0 1rem; } .copyButton { + cursor: pointer; background: none; border: none; padding: 0; margin: 0; - width: 13px; - height: 15px; + width: 1.4rem; + height: 1.4rem; + svg { + width: 1.4rem; + height: 1.4rem; + } } .disconnect { width: 100%; + height: 4.2rem; + box-shadow: none; + cursor: pointer; + font-size: inherit; + border-radius: 2rem; .content { display: flex; align-items: center; .icon { - margin-right: 8px; + margin-right: 1rem; + height: 1.6rem; + width: 1.6rem; } } } @@ -111,3 +125,40 @@ .tooltip { font-size: 14px !important; } + +.innerItemWrap { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; +} + +.extLinkWrap { + display: flex; + align-items: center; + padding-top: 10px; +} + +.extLink { + display: inline-flex; + align-items: center; + color: var(--navbarWallet-color); +} + +.extLink svg { + display: block; + margin-left: 5px; +} + +.extTag { + display: inline-flex; + align-items: center; + justify-content: center; + height: 2.2rem; + padding: 0.4rem 0.6rem; + margin-left: 10px; + color: var(--navbarWallet-color); + border-radius: 12px; + font-size: 1.2rem; + border: 1px solid var(--navbarWallet-color); +} diff --git a/src/components/ParserOpenRPC/AuthBox/index.tsx b/src/components/ParserOpenRPC/AuthBox/index.tsx deleted file mode 100644 index fde030ec4f8..00000000000 --- a/src/components/ParserOpenRPC/AuthBox/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React, { useContext } from "react"; -import styles from "./styles.module.css"; -import global from "../global.module.css"; -import clsx from "clsx"; -import { trackClickForSegment } from "@site/src/lib/segmentAnalytics"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; - -interface AuthBoxProps { - isMetamaskNetwork?: boolean; -} - -export const AuthBox = ({ isMetamaskNetwork = false }: AuthBoxProps) => { - const { metaMaskWalletIdConnectHandler } = useContext(MetamaskProviderContext); - const connectHandler = () => { - trackClickForSegment({ - eventName: "Connect wallet", - clickType: "Connect wallet", - userExperience: "B", - responseStatus: null, - responseMsg: null, - timestamp: Date.now(), - }); - metaMaskWalletIdConnectHandler(); - }; - return ( -
    -
    - Connect your MetaMask wallet to run requests successfully. -
    -
    - -
    -
    - ); -}; diff --git a/src/components/ParserOpenRPC/AuthBox/styles.module.css b/src/components/ParserOpenRPC/AuthBox/styles.module.css deleted file mode 100644 index d3a5853eb2f..00000000000 --- a/src/components/ParserOpenRPC/AuthBox/styles.module.css +++ /dev/null @@ -1,60 +0,0 @@ -.msgWrapper { - display: flex; - align-items: center; - padding: 16px; - border-radius: 8px; - border: 1px solid #848c96; - margin-bottom: 24px; -} - -.msgHeading { - display: block; - font-size: 16px; - line-height: 1.2; - margin: 0 0 10px; -} - -.msgText { - padding-right: 16px; - font-size: 14px; - line-height: 22px; -} - -.msgButton { - justify-content: center; - width: 162px; -} - -.mmBtnRow { - display: flex; - flex-wrap: wrap; -} - -.mmBtnCol { - width: 100%; - margin-bottom: 10px; -} - -.mmBtn { - position: relative; - display: flex; - align-items: center; - padding: 16px 30px 16px 20px; - width: 100%; - background: none; - border-radius: 10px; - outline: none; - font-size: 16px; - font-weight: 500; - line-height: 22px; - border: 1px solid rgb(3 118 201 / 100%); - color: rgb(3 118 201 / 100%); -} - -.mmBtnCheck { - position: absolute; - top: 50%; - transform: translateY(-50%); - right: 15px; - font-size: 16px; -} diff --git a/src/components/ParserOpenRPC/CollapseBox/CollapseBox.tsx b/src/components/ParserOpenRPC/CollapseBox/CollapseBox.tsx deleted file mode 100644 index 556d927c72a..00000000000 --- a/src/components/ParserOpenRPC/CollapseBox/CollapseBox.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import clsx from "clsx"; -import { - useCollapsible, - Collapsible, - useColorMode, -} from "@docusaurus/theme-common"; -import styles from "./styles.module.css"; -import React, { useEffect } from "react"; - -interface CollapseBoxProps { - children: JSX.Element; - isInitCollapsed?: boolean; -} - -export const CollapseBox = ({ - children, - isInitCollapsed = true, -}: CollapseBoxProps) => { - const { collapsed, setCollapsed } = useCollapsible({ initialState: isInitCollapsed }); - const { colorMode } = useColorMode(); - useEffect(() => { - setCollapsed(isInitCollapsed); - }, [isInitCollapsed]); - return ( -
    - - - {children} - -
    - ); -}; diff --git a/src/components/ParserOpenRPC/CollapseBox/styles.module.css b/src/components/ParserOpenRPC/CollapseBox/styles.module.css deleted file mode 100644 index 2a57423423a..00000000000 --- a/src/components/ParserOpenRPC/CollapseBox/styles.module.css +++ /dev/null @@ -1,96 +0,0 @@ -.collapseWrapper { - border: 1px solid transparent; - border-radius: 8px; - overflow: hidden; -} - -.collapsedWrapperView { - border-color: #848c96; -} - -.collapseBtn { - background: none; - color: #1098fc; - font-size: 14px; - line-height: 1; - display: inline-flex; - justify-content: flex-start; - align-items: center; - min-width: 190px; - border-radius: 999px; - border: 1px solid #0376c9; - padding: 12px 22px; - margin-bottom: 1px; - cursor: pointer; - - /* transition-property: 'border-color', 'background-color'; */ - - /* transition-duration: .2s; */ - - /* transition-timing-function: ease; */ -} - -.collapseIcon { - width: 10px; - height: 10px; - margin: 0 0 0 5px; - border-top: 2px solid #0376c9; - border-right: 2px solid #0376c9; - transform: rotate(45deg); - - /* transition: transform .2s ease; */ -} - -.collapseBtn:hover { - color: #141618; - background-color: #0376c9; -} - -.collapsedBtnLightHover:hover { - color: #fff; - background-color: #036ab5; -} - -.collapseBtn:hover .collapseIcon { - border-top-color: #141618; - border-right-color: #141618; -} - -.collapsedBtnLightHover:hover .collapseIcon { - border-top-color: #fff; - border-right-color: #fff; -} - -.collapsedBtnView { - border-color: transparent; - width: 100%; - border-radius: 0; - border-bottom: 1px solid #848c96; -} - -.collapsedBtnView:hover { - color: #0376c9; - text-decoration: underline; - background-color: #24272a; -} - -.collapsedBtnView.collapsedBtnLightHover:hover { - background-color: #f2f4f6; -} - -.collapsedBtnView:hover .collapseIcon { - border-top-color: #0376c9; - border-right-color: #0376c9; -} - -.collapsedIconView { - margin: 0 0 2px 8px; - transform: rotate(135deg); -} - -@media (width <= 767px) { - .collapseBtn { - width: 100%; - justify-content: center; - } -} diff --git a/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx b/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx deleted file mode 100644 index 1cc4bc463ea..00000000000 --- a/src/components/ParserOpenRPC/DetailsBox/MDContent.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from "react"; - -const parseLists = (text: string) => { - const lines = text.split('\n'); - let result = ''; - let inList = false; - let inSubList = false; - - lines.forEach((line) => { - const trimmed = line.trim(); - const isListItem = trimmed.startsWith('- '); - const isSubListItem = line.startsWith(' - '); - - if (isListItem && !isSubListItem) { - if (!inList) { - result += '
      \n'; - inList = true; - } else if (inSubList) { - result += '
    \n'; - inSubList = false; - } - result += `
  • ${trimmed.slice(2).trim()}
  • \n`; - } else if (isSubListItem) { - if (!inSubList) { - result = result.replace(/<\/li>\n$/, ''); - result += '
      \n'; - inSubList = true; - } - result += `
    • ${trimmed.slice(4).trim()}
    • \n`; - } else { - if (inSubList) { - result += '
    \n'; - inSubList = false; - } - if (inList) { - result += '\n'; - inList = false; - } - result += `${line}\n`; - } - }); - if (inSubList) result += '\n'; - if (inList) result += '\n'; - return result; -} - -const parseMarkdown = (content: string) => { - return parseLists( - content - .replace(/\[(.*?)\]\((.*?)\)/g, '$1') - .replace(/`(.*?)`/g, '$1') - .replace(/\*\*(.*?)\*\*/g, '$1') - .replace(/\*(.*?)\*/g, '$1') - ); -}; - -interface MDContentProps { - content?: string; -} - -export const MDContent = ({ content = "" }: MDContentProps) => ( - -); diff --git a/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx b/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx deleted file mode 100644 index 8272b60c766..00000000000 --- a/src/components/ParserOpenRPC/DetailsBox/RenderParams.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import React from "react"; -import { SchemaProperty } from "./SchemaProperty"; -import { CollapseBox } from "../CollapseBox/CollapseBox"; -import { MDContent } from "./MDContent"; -import styles from "./styles.module.css"; - -const getRefSchemaFromComponents = (initRef, components) => { - const ref = initRef.replace("#/components/schemas/", ""); - return components[ref]; -}; - -const renderSchema = (schemaItem, schemas, name) => { - if (!schemaItem) return
    Invalid schema
    ; - - const resolveRef = (ref) => { - const newSchema = getRefSchemaFromComponents(ref, schemas); - return renderSchema(newSchema, schemas, name); - }; - - if (schemaItem?.schema?.$ref) return resolveRef(schemaItem.schema.$ref); - if (schemaItem?.$ref) return resolveRef(schemaItem.$ref); - - const renderObject = (item, itemName) => ( -
    - -
    - - <> - {Object.entries(item.properties).map(([key, value]) => ( -
    - {renderSchema(value, schemas, key)} -
    - ))} - -
    -
    -
    - ); - - if (schemaItem?.schema?.type === "object" && schemaItem?.schema?.properties) { - return renderObject(schemaItem.schema, name || schemaItem?.schema?.title); - } - - if (schemaItem.type === "object" && schemaItem.properties) { - return renderObject(schemaItem, name || schemaItem.title); - } - - const renderArray = (item, itemName) => ( -
    - -
    - -
    - {renderSchema(item.items, schemas, "")} -
    -
    -
    -
    - ); - - if (schemaItem.type === "array" && schemaItem.items) { - return renderArray(schemaItem, name || schemaItem.title); - } - - if (schemaItem?.schema?.type === "array" && schemaItem?.schema?.items) { - return renderArray(schemaItem.schema, name || schemaItem.schema.title); - } - - const renderCombinations = (item, itemName, type) => ( -
    - -
    - - {item[type].map((option, index) => ( -
    - {renderSchema(option, schemas, option.title)} -
    - ))} -
    -
    -
    - ); - - if (schemaItem?.schema?.oneOf) return renderCombinations(schemaItem.schema, name, "oneOf"); - if (schemaItem?.schema?.allOf) return renderCombinations(schemaItem.schema, name, "allOf"); - if (schemaItem?.schema?.anyOf) return renderCombinations(schemaItem.schema, name, "anyOf"); - - if (schemaItem.oneOf) return renderCombinations(schemaItem, name, "oneOf"); - if (schemaItem.allOf) return renderCombinations(schemaItem, name, "allOf"); - if (schemaItem.anyOf) return renderCombinations(schemaItem, name, "anyOf"); - - const renderEnum = (enumValues, title, description) => { - const getDescription = (item, title) => { - let regex = new RegExp(`\`${item}\`: ([^;]+)(;|$)`); - if (title === "subscriptionType") { - regex = new RegExp(`\`${item}\` - ([^.;]+)[.;]?`); - } - const match = description.match(regex); - return match ? match[1] : ""; - }; - const blockEnum = - title && - description && - (title === "Block tag" || title === "subscriptionType"); - return ( -
    -
    Possible enum values
    - {enumValues.map((value, index) => ( -
    -
    {value}
    - {blockEnum && ( -
    - -
    - )} -
    - ))} -
    - ); - }; - - if (schemaItem?.schema) { - return ( -
    - - {schemaItem.schema.enum && - renderEnum( - schemaItem.schema.enum, - schemaItem.schema.title, - schemaItem.schema.description, - )} -
    - ); - } - - return ( -
    - - {schemaItem.enum && - renderEnum(schemaItem.enum, schemaItem.title, schemaItem.description)} -
    - ); -}; - -export const renderParamSchemas = (inputSchema, schemas) => { - return ( - <> - {inputSchema.map((item, i) => { - return ( -
    - {renderSchema(item, schemas, item.name)} -
    - ); - })} - - ); -}; - -export const renderResultSchemas = (inputSchema, schemas) => { - const customResult = inputSchema?.schema?.maxPriorityFeePerGas; - if (customResult) { - return <>{renderSchema(customResult, schemas, inputSchema.name)} - } - return <>{renderSchema(inputSchema, schemas, inputSchema.name)}; -}; diff --git a/src/components/ParserOpenRPC/DetailsBox/SchemaProperty.tsx b/src/components/ParserOpenRPC/DetailsBox/SchemaProperty.tsx deleted file mode 100644 index 0b35699b749..00000000000 --- a/src/components/ParserOpenRPC/DetailsBox/SchemaProperty.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import { MDContent } from "./MDContent"; -import styles from "./styles.module.css"; - -interface SchemaPropertyProps { - title: string; - type?: string; - required?: boolean; - description?: string; -} - -interface TagProps { - name: string; -} - -export const SchemaProperty = ({ - title, - type, - required, - description, -}: SchemaPropertyProps) => { - return ( -
    -
    -
    - {title} - {type} -
    - {required && required} -
    -

    - -

    -
    - ); -}; - -export const Tag = ({ name }: TagProps) => { - const bgStyle = { - MetaMask: "#4DB6AC", - Restricted: "#FFECB3", - Deprecated: "#7E57C2", - }; - return ( -
    - {name} -
    - ); -}; diff --git a/src/components/ParserOpenRPC/DetailsBox/index.tsx b/src/components/ParserOpenRPC/DetailsBox/index.tsx deleted file mode 100644 index e72022c881d..00000000000 --- a/src/components/ParserOpenRPC/DetailsBox/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from "react"; -import Heading from "@theme/Heading"; -import { MDContent } from "./MDContent"; -import { renderParamSchemas, renderResultSchemas } from "./RenderParams"; -import clsx from "clsx"; -import styles from "./styles.module.css"; -import { - MethodParam, - SchemaComponents, -} from "@site/src/components/ParserOpenRPC/interfaces"; -import { Tag } from "@site/src/components/ParserOpenRPC/DetailsBox/SchemaProperty"; - -interface TagItem { - name: string; - $ref: string; -} - -interface DetailsBoxProps { - method: string; - description: string | null; - summary: string | null; - params: MethodParam[]; - components: SchemaComponents; - result: any; - tags: TagItem[]; - extraContent?: JSX.Element; -} - -export default function DetailsBox({ - method, - description, - summary, - params, - components, - result, - tags, - extraContent, -}: DetailsBoxProps) { - return ( - <> - {tags.length > 0 && ( -
    - {tags.map((tag) => ( -
    - -
    - ))} -
    - )} - {method} - {summary !== null && ( -

    - -

    - )} - {description !== null && ( - - )} - {extraContent &&
    {extraContent}
    } - - Parameters - - {params.length === 0 ? ( -
    This method does not accept any parameters
    - ) : ( - <>{params && renderParamSchemas(params, components)} - )} - - Returns - - {result?.description && ( -
    - -
    - )} - {result && renderResultSchemas(result, components)} - - ); -} diff --git a/src/components/ParserOpenRPC/DetailsBox/styles.module.css b/src/components/ParserOpenRPC/DetailsBox/styles.module.css deleted file mode 100644 index c987038ca28..00000000000 --- a/src/components/ParserOpenRPC/DetailsBox/styles.module.css +++ /dev/null @@ -1,76 +0,0 @@ -.paramWrapper { - border-bottom: 1px solid #848c96; - padding-bottom: 1.5rem; - margin-bottom: 1rem; -} - -.borderWrapper { - border-bottom: 1px solid #848c96; - padding-top: 2rem; - padding-bottom: 1rem; -} - -.textAltColor { - color: #6a737d; -} - -.textErrorColor { - color: #d73847; -} - -.paramItemWrapper { - padding: 0 1rem; -} - -.paramItemWrapper:not(:first-child) { - border-top: 1px solid #848c96; -} - -.borderTopLine { - border-top: 1px solid #848c96; -} - -.borderBottomLine { - border-bottom: 1px solid #848c96; -} - -.enumWrapper { - border: 1px solid #848c96; - border-radius: 8px; - margin-bottom: 2rem; -} - -.enumItem { - border-top: 1px solid #848c96; - padding: 16px; -} - -.enumTitle { - display: inline-block; - font-size: 12px; - line-height: 1; - padding: 4px; - border: 1px solid #bbc0c5; - border-radius: 4px; -} - -.secondaryHeading { - font-size: 24px; - margin: 0; -} - -.tagList { - display: flex; -} - -.tagItem { - display: inline-block; - vertical-align: top; - margin: 0 8px 8px 0; - font-size: 12px; - line-height: 1; - color: #141618; - padding: 4px 8px; - border-radius: 6px; - background-color: #ffcdd2; -} diff --git a/src/components/ParserOpenRPC/ErrorsBox/index.tsx b/src/components/ParserOpenRPC/ErrorsBox/index.tsx deleted file mode 100644 index 276a12ddebe..00000000000 --- a/src/components/ParserOpenRPC/ErrorsBox/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; -import { useColorMode } from "@docusaurus/theme-common"; -import clsx from "clsx"; -import Heading from "@theme/Heading"; -import { MDContent } from "@site/src/components/ParserOpenRPC/DetailsBox/MDContent"; -import styles from "./styles.module.css"; - -interface ErrorItem { - code: number; - message: string; -} - -interface ErrorsBoxProps { - errors: ErrorItem[]; -} - -export default function ErrorsBox({ errors }: ErrorsBoxProps) { - const { colorMode } = useColorMode(); - if (errors.length === 0) return null; - - return ( - <> - - Errors - -
    -
    -
    Code
    -
    Message
    -
    - {errors.map((err, i) => ( -
    -
    {err.code}
    -
    - -
    -
    - ))} -
    - - ); -} diff --git a/src/components/ParserOpenRPC/ErrorsBox/styles.module.css b/src/components/ParserOpenRPC/ErrorsBox/styles.module.css deleted file mode 100644 index 4225ef6fcd9..00000000000 --- a/src/components/ParserOpenRPC/ErrorsBox/styles.module.css +++ /dev/null @@ -1,51 +0,0 @@ -.errWrapper { - border: 1px solid #848c96; - border-radius: 8px; - overflow: hidden; -} - -.errRow { - display: flex; - border-bottom: 1px solid #848c96; -} - -.errRowHeading { - display: flex; - border-bottom: 1px solid #848c96; - font-size: 18px; - font-weight: 700; -} - -.errRowHeadingDarkView { - background-color: #24272a; -} - -.errRowHeadingLightView { - background-color: #f2f4f6; -} - -.secondaryHeading { - font-size: 24px; -} - -.errRow:last-child { - display: flex; - border-bottom: 0; -} - -.errColCode { - display: inline-flex; - align-items: center; - justify-content: center; - width: 80px; - min-height: 48px; - border-right: 1px solid #848c96; -} - -.errColMsg { - display: inline-flex; - align-items: center; - width: calc(100% - 80px); - padding: 12px; - min-height: 48px; -} diff --git a/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/AddButton.tsx b/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/AddButton.tsx deleted file mode 100644 index 66d9d4febc9..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/AddButton.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import clsx from "clsx"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; - -export const AddButton = (props) => ( - -); diff --git a/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/RemoveButton.tsx b/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/RemoveButton.tsx deleted file mode 100644 index 1bd3bb107d6..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/RemoveButton.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from "react"; -import clsx from "clsx"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; - -export const RemoveButton = (props) => ( - -); diff --git a/src/components/ParserOpenRPC/InteractiveBox/fields/ConditionalField.tsx b/src/components/ParserOpenRPC/InteractiveBox/fields/ConditionalField.tsx deleted file mode 100644 index a00cf28c91d..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/fields/ConditionalField.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import React, { useContext, useEffect, useState } from "react"; -import { FieldTemplateProps } from "@rjsf/utils"; -import { BaseInputTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate"; -import { SelectWidget } from "@site/src/components/ParserOpenRPC/InteractiveBox/widgets/SelectWidget"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; -import { ParserOpenRPCContext } from "@site/src/components/ParserOpenRPC"; -import clsx from "clsx"; - -export const ConditionalField = (props: FieldTemplateProps) => { - const [isOpened, setIsOpened] = useState(false); - const [selectedTypeSchema, setSelectedTypeSchema] = useState(null); - const [isEditView, setIsEditView] = useState(false); - const { - setIsDrawerContentFixed, - setDrawerLabel, - isComplexTypeView, - setIsComplexTypeView, - } = useContext(ParserOpenRPCContext); - // @ts-ignore - const { formData, schema, name, onChange } = props; - const listItems = schema?.anyOf ? schema?.anyOf : schema?.oneOf; - const checkForNullTypeSchema = (type) => type === "null"; - const showComplexTypeView = () => { - setDrawerLabel(name); - setIsDrawerContentFixed(true); - setIsEditView(true); - setIsComplexTypeView(true); - }; - const onDropdownOptionClick = (e) => { - const selectedSchema = listItems.find( - // @ts-ignore - ({ title }) => title === e.target.dataset.value, - ); - // @ts-ignore - const isNullTypeSchema = checkForNullTypeSchema(selectedSchema?.type); - if (isNullTypeSchema) { - onChange(null); - } else { - setSelectedTypeSchema( - // @ts-ignore - listItems.find(({ title }) => title === e.target.dataset.value), - ); - showComplexTypeView(); - } - setIsOpened(false); - }; - const selectWidgetProps = { - ...props, - schema: selectedTypeSchema, - label: name, - value: formData, - ...(selectedTypeSchema?.enum && { - options: { - enumOptions: selectedTypeSchema?.enum.map((item) => ({ - label: item, - value: item, - })), - }, - }), - }; - const baseInputProps = { - ...props, - schema: selectedTypeSchema, - }; - - useEffect(() => { - if (!isComplexTypeView) { - setIsEditView(false); - setSelectedTypeSchema(null); - } - }, [isComplexTypeView]); - - return listItems?.length > 0 ? ( - <> -
    -
    - -
    -
    -
    - {formData === undefined ? "" : String(formData)} - { - setIsOpened(!isOpened); - }} - > - - {schema?.anyOf ? "anyOf" : "oneOf"} - - - -
      - {listItems?.map((listItem, index) => ( -
    • - {/* @ts-ignore */} - {listItem.title} -
    • - ))} -
    -
    -
    -
    -
    - {isComplexTypeView && - isEditView && - selectedTypeSchema && - selectedTypeSchema.type !== "null" ? ( -
    - {selectedTypeSchema?.enum ? ( - // @ts-ignore - - ) : ( - // @ts-ignore - - )} -
    - ) : null} - - ) : null; -}; diff --git a/src/components/ParserOpenRPC/InteractiveBox/index.tsx b/src/components/ParserOpenRPC/InteractiveBox/index.tsx deleted file mode 100644 index a1f93fb1290..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/index.tsx +++ /dev/null @@ -1,367 +0,0 @@ -import React, { useContext, useEffect, useRef, useState } from "react"; -import Form from "@rjsf/core"; -import clsx from "clsx"; -import { - RJSFSchema, - UiSchema, - RegistryWidgetsType, - RegistryFieldsType, -} from "@rjsf/utils"; -import validator from "@rjsf/validator-ajv8"; -import $RefParser from "@apidevtools/json-schema-ref-parser"; -import { - MethodExample, - MethodParam, - SchemaComponents, -} from "@site/src/components/ParserOpenRPC/interfaces"; -import styles from "./styles.module.css"; -import global from "../global.module.css"; -import { BaseInputTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate"; -import { ArrayFieldTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/ArrayFieldTemplate"; -import { ObjectFieldTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/ObjectFieldTemplate"; -import { WrapIfAdditionalTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/WrapIfAdditionalTemplate"; -import { ConditionalField } from "@site/src/components/ParserOpenRPC/InteractiveBox/fields/ConditionalField"; -import { DropdownWidget } from "@site/src/components/ParserOpenRPC/InteractiveBox/widgets/DropdownWidget"; -import { SelectWidget } from "@site/src/components/ParserOpenRPC/InteractiveBox/widgets/SelectWidget"; -import { Tooltip } from "@site/src/components/Tooltip"; -import { useColorMode } from "@docusaurus/theme-common"; -import { ParserOpenRPCContext } from "@site/src/components/ParserOpenRPC"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; -import * as isPlainObject from "lodash.isplainobject"; -import { RemoveButton } from "@site/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/RemoveButton"; -import { AddButton } from "@site/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/AddButton"; - -interface InteractiveBoxProps { - params: MethodParam[]; - components: SchemaComponents; - examples: MethodExample[]; - onParamChange: (data) => void; - drawerLabel?: string | null; - closeComplexTypeView?: () => void; - isOpen?: boolean; -} - -type ObjectType = { [key: string]: any }; -type KeyOrderType = { name: string }; - -function sortObjectKeysByArray( - obj: ObjectType, - orderArray: KeyOrderType[] -): ObjectType { - const result: ObjectType = {}; - for (const { name } of orderArray) { - if (name in obj) { - result[name] = obj[name]; - } - } - return result; -} - -function removeEmptyArrays>(obj: T): T { - const newObj = JSON.parse(JSON.stringify(obj)); - for (const key in newObj) { - if (newObj.hasOwnProperty(key)) { - if (Array.isArray(newObj[key]) && newObj[key].length === 0) { - delete newObj[key]; - } else if (newObj[key] !== null && typeof newObj[key] === "object") { - newObj[key] = removeEmptyArrays(newObj[key]); - } - } - } - return newObj; -} - -export default function InteractiveBox({ - params, - components, - examples, - onParamChange, - drawerLabel, - closeComplexTypeView, - isOpen = false, -}: InteractiveBoxProps) { - const [parsedSchema, setParsedSchema] = useState(null); - const [defaultFormData, setDefaultFormData] = useState({}); - const [currentFormData, setCurrentFormData] = useState({}); - const [isFormReseted, setIsFormReseted] = useState(false); - const [currentSchemaId, setCurrentSchemaId] = useState(""); - const [objectPropertyBeforeEdit, setObjectPropertyBeforeEdit] = - useState(null); - const [objectValueBeforeEdit, setObjectValueBeforeEdit] = useState(null); - const formRef = useRef(null); - const { colorMode } = useColorMode(); - const { isComplexTypeView } = useContext(ParserOpenRPCContext); - const { metaMaskAccount } = useContext(MetamaskProviderContext); - const addWalletId = (propName) => ({ [propName]: metaMaskAccount }); - const getObjectWithAddress = (value) => { - const addressField = "address"; - const fromField = "from"; - if (Object.keys(value).includes(addressField)) { - return { - ...value, - ...addWalletId(addressField), - }; - } - if (Object.keys(value).includes(fromField)) { - return { - ...value, - ...addWalletId(fromField), - }; - } - return value; - }; - - const checkName = (name: string) => { - if (name === "requestPermissionObject") return "requestPermissionsObject"; - return name; - }; - - useEffect(() => { - if (examples && examples.length > 0 && examples[0].params) { - const defaultValues = Object.fromEntries( - examples[0].params.map(({ name, value }) => { - if (metaMaskAccount) { - if (name === "Address" || name === "From") { - return [checkName(name), metaMaskAccount]; - } - if (isPlainObject(value)) { - return [checkName(name), getObjectWithAddress(value)]; - } - } - if (isPlainObject(value)) { - return [ - checkName(name), - Object.fromEntries(Object.entries(value).map(([key, val]) => [key, isPlainObject(val) && val?.description ? val.value : val])) - ]; - } - return [checkName(name), value]; - }) - ); - setDefaultFormData({ ...defaultValues }); - setCurrentFormData({ ...defaultValues }); - onParamChange({ ...defaultValues }); - } - }, [examples, metaMaskAccount]); - - const schema: RJSFSchema = { - components: { - schemas: components, - }, - type: "object", - // @ts-ignore - properties: Object.fromEntries( - params.map(({ name, schema }) => [name, schema]) - ), - }; - const uiSchema: UiSchema = { - "ui:globalOptions": { - label: false, - }, - "ui:widget": "checkbox", - }; - const templates = { - BaseInputTemplate, - ArrayFieldTemplate, - WrapIfAdditionalTemplate, - ObjectFieldTemplate, - FieldErrorTemplate: () => null, - ErrorListTemplate: () => null, - ButtonTemplates: { AddButton, RemoveButton }, - }; - const widgets: RegistryWidgetsType = { - CheckboxWidget: DropdownWidget, - SelectWidget: SelectWidget, - }; - const fields: RegistryFieldsType = { - // @ts-ignore - AnyOfField: ConditionalField, - // @ts-ignore - OneOfField: ConditionalField, - }; - const handleResetForm = (e) => { - e.preventDefault(); - setCurrentFormData({ ...defaultFormData }); - onParamChange({ ...defaultFormData }); - setIsFormReseted(true); - }; - const handleClearForm = (e) => { - e.preventDefault(); - if (formRef) { - formRef?.current?.reset(); - } - }; - const isLightTheme = colorMode === "light"; - - useEffect(() => { - const dereferenceSchema = async () => { - try { - if (schema) { - setParsedSchema((await $RefParser.dereference(schema)) as RJSFSchema); - } - } catch (error) { - console.error("Error of parsing schema:", error); - } - }; - dereferenceSchema(); - }, []); - - const onChangeHandler = (data) => { - const validData = removeEmptyArrays(data); - if (isOpen) { - setCurrentFormData(validData); - onParamChange(validData); - } - }; - - const cloneAndSetNullIfExists = (obj, key) => { - if (typeof obj !== "object" || obj === null) return obj; - const newObj = Array.isArray(obj) ? [] : {}; - for (const prop in obj) { - if (obj.hasOwnProperty(prop)) { - if (prop === key) { - newObj[prop] = []; - } else if (typeof obj[prop] === "object" && obj[prop] !== null) { - newObj[prop] = cloneAndSetNullIfExists(obj[prop], key); - } else { - newObj[prop] = obj[prop]; - } - } - } - return newObj; - }; - - const cloneObjectAndSetNullIfExists = (obj, key) => { - if (typeof obj !== "object" || obj === null) { - return obj; - } - let newObj = {}; - if (Object.keys(obj).length >= 1) { - newObj = objectValueBeforeEdit; - } else { - for (const prop in obj) { - if (obj.hasOwnProperty(prop)) { - if (Object.keys(obj).length === 0) { - newObj[prop] = {}; - } else if (typeof obj[prop] === "object" && obj[prop] !== null) { - newObj[objectPropertyBeforeEdit] = cloneObjectAndSetNullIfExists( - obj[prop], - key - ); - } else { - newObj[prop] = obj[prop]; - } - } - } - } - return newObj; - }; - - const handleCancelClick = () => { - if (drawerLabel) { - const currentKey = Object.keys(currentFormData)[0]; - if (objectPropertyBeforeEdit && currentKey) { - const upData = cloneObjectAndSetNullIfExists( - currentFormData[currentKey], - objectPropertyBeforeEdit - ); - setCurrentFormData({ [currentKey]: upData }); - setObjectPropertyBeforeEdit(null); - setObjectValueBeforeEdit(null); - } else { - const upData = cloneAndSetNullIfExists(currentFormData, drawerLabel); - setCurrentFormData(upData); - } - } - closeComplexTypeView(); - }; - - return parsedSchema ? ( - <> -
    -
    Parameter
    -
    Value
    -
    -
    { - const orderData = sortObjectKeysByArray(data.formData, params); - onChangeHandler(orderData); - }} - templates={templates} - uiSchema={uiSchema} - widgets={widgets} - ref={formRef} - fields={fields} - > -
    -
    - - - - - - -
    - {isComplexTypeView ? ( -
    - - -
    - ) : null} -
    -
    - - ) : null; -} diff --git a/src/components/ParserOpenRPC/InteractiveBox/styles.module.css b/src/components/ParserOpenRPC/InteractiveBox/styles.module.css deleted file mode 100644 index 2c0f943533c..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/styles.module.css +++ /dev/null @@ -1,406 +0,0 @@ -:root { - --param-item-bg: #292a36; - --param-item-color: #fff; - --param-item-border-color: rgb(132 140 150 / 100%); - --column-item-type-color: rgb(187 192 197 / 100%); - --modal-footer-bg: #24272a; -} - -:root[data-theme="light"] { - --param-item-bg: #F2F4F6; - --param-item-color: #141618; - --param-item-border-color: #BBC0C5; - --column-item-type-color: #6A737D; - --modal-footer-bg: #fff; -} - -.tableHeadingRow { - display: flex; - border-top: 1px solid var(--param-item-border-color); -} - -.tableHeadingColumn { - width: 50%; - padding: 16px; - line-height: 1.5; - font-weight: 500; - background-color: var(--param-item-bg); - color: var(--param-item-color); -} - -.tableRow { - display: flex; - border-top: 1px solid var(--param-item-border-color); - border-bottom: 1px solid var(--param-item-border-color); - margin-top: -1px; -} - -.tableColumn { - width: 50%; - line-height: 24px; - background-color: var(--param-item-bg); - color: var(--param-item-color); - font-weight: 500; -} - -.tableColumnParam { - display: flex; - align-items: center; - height: 100%; - padding: 12px 16px 12px 12px; - border-left: 4px solid transparent; - line-height: 28px; - font-size: 14px; -} - -.tableColumnParamFocused { - border-left: 4px solid rgb(16 152 252 / 100%); -} - -.tableColumnParamError { - border-left: 4px solid rgb(224 100 112 / 100%); -} - -.tableColumn:first-child { - border-right: 1px solid var(--param-item-border-color); -} - -.tableValueRow { - display: flex; - width: 100%; - height: 100%; - justify-content: space-between; - align-items: center; - position: relative; - font-size: 14px; -} - -.tableValueRowPadding { - padding: 12px 72px 12px 16px; -} - -.tableColumnType { - display: flex; - align-items: center; - position: absolute; - height: 100%; - right: 0; - padding-right: 28px; - padding-bottom: 2px; - color: var(--column-item-type-color); - line-height: 24px; - font-size: 14px; -} - -.tableColumnTypeDropdown { - width: 100%; - justify-content: flex-end; -} - -.tableColumnTypeDropdown:hover { - cursor: pointer; -} - -.tableLabelIconError { - position: absolute; - left: 4px; - width: 13px; - height: 11px; - background: url("/img/icons/error-icon.svg") no-repeat 50% 50%; -} - -.tableColumnIcon { - position: absolute; - right: 13px; - width: 11px; - height: 11px; -} - -.tableColumnIcon:hover { - cursor: pointer; -} - -.tableColumnIconRemove { - background: url("/img/icons/remove-icon.svg") no-repeat 50% 50%; -} - -.chevronIcon { - background: url("/img/icons/chevron-icon.svg") no-repeat 50% 50%; - transition: 0.2s transform; -} - -.chevronIconDown { - transform: rotate(180deg); -} - -.chevronIconRight { - transform: rotate(90deg); -} - -.chevronIcon:hover { - cursor: pointer; -} - -.deleteIcon { - position: absolute; - transform: translateY(-50%); - right: 12px; - width: 14px; - height: 14px; - margin-top: -1px; - cursor: pointer; - background: url("/img/icons/delete-icon.svg") no-repeat 50% 50%; -} - -.deleteIconCentered { - top: 50%; -} - -.dropdown { - display: flex; - align-items: center; -} - -.dropdown:hover { - cursor: pointer; -} - -.dropdownChevronIcon { - transition: 0.2s transform; -} - -.dropdownChevronButtonUp { - transform: rotate(180deg); -} - -.dropdownList { - position: absolute; - right: 0; - visibility: visible; - list-style: none; - border-radius: 10px; - padding: 0; - margin: 0; - top: 35px; - overflow: hidden; - border: 1px solid var(--param-item-border-color); - z-index: 2; -} - -.dropdownListClosed { - visibility: hidden; -} - -.dropdownList li + li { - margin-top: 0; -} - -.dropdownItem { - width: 100%; - padding: 16px; - background-color: rgb(36 39 42 / 100%); - color: #fff; - white-space: nowrap; -} - -.dropdownItem:hover { - background-color: rgb(20 22 24 / 100%); - cursor: pointer; -} - -.dropdownItem:not(:last-child) { - border-bottom: 1px solid var(--param-item-border-color); -} - -.tableFooterRow { - position: fixed; - display: flex; - justify-content: space-between; - padding: 16px; - width: 100%; - bottom: 0; - background-color: var(--modal-footer-bg); - border-top: 1px solid var(--param-item-border-color); -} - -.tableButton { - display: flex; - background: none; - border: none; -} - -.tableButtonAddNewArray { - margin: 08px 0 8px 16px; - padding: 8px 0; - color: rgb(16 152 252 / 100%); -} - -.tableButtonAddArrayItemName { - margin-left: 8px; - font-size: 14px; - font-weight: 500; -} - -.tableComplexType { - position: absolute; - top: 0; - width: 100%; - height: 332px; - background-color: #292a36; - overflow-y: scroll; - z-index: 1; -} - -.tableComplexTypeItem { - position: relative; -} - -.formControl { - width: 100%; - padding: 12px 72px 12px 16px; - font-size: 14px; - line-height: 24px; - font-weight: 500; - color: var(--param-item-color); - border-radius: 0; - border: 2px solid transparent; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.formControl:focus { - border: 2px solid rgb(16 152 252 / 100%); - outline: none; -} - -.formControl[type="number"]::-webkit-inner-spin-button, -.formControl[type="number"]::-webkit-outer-spin-button { - opacity: 0; -} - -.formControlNumberUp { - top: 13px; -} - -.formControlNumberDown { - bottom: 15px; -} - -.formControlError { - border: 2px solid rgb(224 100 112 / 100%); -} - -.footerButtons { - display: flex; -} - -.footerButtonsLeft { - width: 48px; - align-items: center; - justify-content: space-between; - padding: 6px 0; -} - -.footerButtonLeft { - display: flex; - width: 16px; - height: 22px; - padding: 0; - align-items: center; - background: none; - border: none; - border-radius: 0; -} - -.footerButtonRight { - padding: 5px 16px !important; -} - -.footerButtonRightOutline { - margin-right: 16px; -} - -.footerButtonIcon { - width: 100%; - border-radius: 0; -} - -.arrayParentRow { - position: relative; - width: 100%; - height: 100%; - padding: 12px 72px 12px 16px; -} - -.arrayColumnType { - position: absolute; - top: 0; - right: 0; - height: 100%; - padding-right: 28px; - display: flex; - align-items: center; - color: var(--column-item-type-color); - font-size: 14px; - cursor: pointer; -} - -.arrayFormDataWrap { - display: block; - max-width: 395px; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.addItemBtnWrap { - min-height: 52px; - display: flex; - align-items: center; - padding: 12px; - border-bottom: 1px solid var(--param-item-border-color); -} - -.addItemBtn { - display: flex; - align-items: center; - background: none; - padding: 0; - border: 0; - outline: none; - color: #bbc0c5; - font-size: 14px; - line-height: 1; - cursor: pointer; -} - -.addItemIcon { - display: inline-flex; - align-items: center; - justify-content: center; - width: 20px; - height: 20px; - border-radius: 50%; - background-color: #bbc0c5; - color: #292a36; - font-size: 20px; - line-height: 1; - margin-right: 10px; -} - -.arrayItemIcon { - position: absolute; - top: 50%; - left: 12px; - transform: translateY(-50%); - font-size: 14px; - line-height: 1; - font-weight: bold; -} - -.arrayItemRowWrap { - position: relative; - padding-left: 40px; - border-bottom: 1px dashed #848c96; -} diff --git a/src/components/ParserOpenRPC/InteractiveBox/templates/ArrayFieldTemplate.tsx b/src/components/ParserOpenRPC/InteractiveBox/templates/ArrayFieldTemplate.tsx deleted file mode 100644 index 21e5b19e954..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/templates/ArrayFieldTemplate.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import React, { useContext, useEffect, useState } from "react"; -import { useCollapsible, Collapsible } from "@docusaurus/theme-common"; -import { ArrayFieldTemplateProps } from "@rjsf/utils"; -import { BaseInputTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; -import clsx from "clsx"; -import { ParserOpenRPCContext } from "@site/src/components/ParserOpenRPC"; - -export const ArrayFieldTemplate = ({ - items, - canAdd, - onAddClick, - title, - schema, - formData, -}: ArrayFieldTemplateProps) => { - const [isComplexArrayEditView, setIsComplexArrayEditView] = useState(false); - const { - setIsDrawerContentFixed, - setDrawerLabel, - isComplexTypeView, - setIsComplexTypeView, - } = useContext(ParserOpenRPCContext); - const { collapsed, toggleCollapsed } = useCollapsible({ initialState: true }); - // @ts-ignore - const itemsType = schema?.items?.type; - const isSimpleArray = - itemsType === "string" || - itemsType === "boolean" || - itemsType === "number" || - itemsType === "integer"; - const addComplexArray = () => { - if (formData?.length === 0) { - onAddClick(); - } - setDrawerLabel(title); - setIsDrawerContentFixed(true); - setIsComplexArrayEditView(true); - setIsComplexTypeView(true); - }; - const addSimpleArray = () => { - toggleCollapsed(); - if (collapsed && formData?.length === 0) { - onAddClick(); - } - }; - - useEffect(() => { - if (!isComplexTypeView) { - setIsComplexArrayEditView(false); - } - }, [isComplexTypeView]); - - return ( -
    -
    -
    - -
    -
    -
    -
    - {JSON.stringify(formData, null, " ")} -
    - - - {schema.type} - - - -
    -
    -
    - {isComplexTypeView && isComplexArrayEditView && !isSimpleArray ? ( -
    - {items.map(({ children, index, onDropIndexClick, hasRemove }) => ( -
    - {hasRemove ? ( - - ) : null} - {children} -
    - ))} - {canAdd ? ( - - ) : null} -
    - ) : ( - - <> - {items.map((el, i) => { - const baseInputTemplateProps = { - ...el.children.props, - isArray: true, - value: formData, - }; - const { index, hasRemove, onDropIndexClick, schema } = el; - const isNumber = - schema.type === "number" || schema.type === "integer"; - return ( -
    - - {i + 1} - - - {hasRemove && ( - - )} -
    - ); - })} - {canAdd && ( -
    - -
    - )} - -
    - )} -
    - ); -}; diff --git a/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate.tsx b/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate.tsx deleted file mode 100644 index 934a8a29835..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { BaseInputTemplateProps } from "@rjsf/utils"; -import clsx from "clsx"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; -import { Tooltip } from "@site/src/components/Tooltip"; -import debounce from "lodash.debounce"; - -interface ExtendedInputProps extends BaseInputTemplateProps { - isArray?: boolean; -} - -export const BaseInputTemplate = ({ - schema, - id, - name, - value = "", - disabled, - onChange, - rawErrors, - hideError, - required, - formContext, - isArray, -}: ExtendedInputProps) => { - const isNumber = schema.type === "number" || schema.type === "integer"; - const [isFocused, setIsFocused] = useState(false); - const [inputValue, setInputValue] = useState(isNumber ? 0 : ""); - - const { isFormReseted } = formContext; - const hasErrors = rawErrors?.length > 0 && !hideError && value !== ""; - const debouncedOnChange = useCallback( - debounce((e, isInputNumber = false) => { - onChange(isInputNumber ? e : e?.target?.value); - }, 300), - [], - ); - const onInputChange = (e) => { - setInputValue(e?.target?.value); - debouncedOnChange(e); - }; - const onInputNumberChange = (value) => { - setInputValue(value); - debouncedOnChange(value, true); - }; - - useEffect(() => { - if (!isArray) { - setInputValue(value); - } - }, [value, isFormReseted]); - - return ( -
    - {!isArray && ( -
    - -
    - )} -
    - -
    - {hasErrors && !isNumber ? ( - - ) : null} - { - setIsFocused(true); - }} - onBlur={() => { - setIsFocused(false); - }} - /> - - {schema.type} - {isNumber ? ( - <> - { - onInputNumberChange(Number((+inputValue || 0) + 1)); - }} - /> - { - // @ts-ignore - inputValue >= 1 && - onInputNumberChange(Number((+inputValue || 0) - 1)); - }} - /> - - ) : null} - -
    -
    -
    -
    - ); -}; diff --git a/src/components/ParserOpenRPC/InteractiveBox/templates/ObjectFieldTemplate.tsx b/src/components/ParserOpenRPC/InteractiveBox/templates/ObjectFieldTemplate.tsx deleted file mode 100644 index 3984e32d570..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/templates/ObjectFieldTemplate.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import React, { useContext, useState } from "react"; -import { canExpand } from '@rjsf/utils'; -import { AddButton } from "@site/src/components/ParserOpenRPC/InteractiveBox/buttonTemplates/AddButton"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; -import clsx from "clsx"; -import { ParserOpenRPCContext } from "@site/src/components/ParserOpenRPC"; -import { BaseInputTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate"; - - -export const ObjectFieldTemplate = (props) => { - const { - formData, - formContext, - idSchema, - onAddClick, - properties, - schema, - uiSchema, - } = props; - const [customFormData, setCustomFormData] = useState(formData); - const objectSchemaIds = ["root_requestPermissionsObject", "root_revokePermissionObject", "eth_signTypedData_v4"] - const { isComplexTypeView, drawerLabel, setDrawerLabel, setIsComplexTypeView } = useContext(ParserOpenRPCContext); - const { - currentSchemaId, - setCurrentSchemaId, - setObjectPropertyBeforeEdit, - setObjectValueBeforeEdit, - currentFormData, - setCurrentFormData, - onParamChange - } = formContext; - const addNewObject = (name, schemaId) => { - setIsComplexTypeView(true); - setDrawerLabel(name); - setCurrentSchemaId(schemaId); - setObjectPropertyBeforeEdit(name); - setObjectValueBeforeEdit(formData); - }; - - if (isComplexTypeView && idSchema?.$id === currentSchemaId && currentSchemaId.includes("root_TypedData_")) { - const objectEntries = Object.entries(formData); - return ( - <> - {objectEntries.map(array => { - const name = array[0]; - const value = array[1]; - if (typeof(value) === "string" || typeof(value) === "number") { - const baseInputProps = { - ...props, - name, - value, - schema: { - type: typeof(value) - } - }; - return ( - { - const newData = { - ...currentFormData, - TypedData: {...currentFormData.TypedData, [`${drawerLabel}`]: {...formData, [`${name}`]: val}} - }; - setCustomFormData({...formData, [`${name}`]: val}); - setCurrentFormData(newData); - onParamChange(newData); - }} - /> - ) - } - if (typeof(value) === "object") { - return ( -
    -
    - -
    -
    -
    -
    - {formData ? - JSON.stringify(Object.fromEntries(Object.entries(formData).filter(([key]) => key.includes(name))), null, " ") : - "" - } -
    - addNewObject(name, idSchema?.$id)} - > - - {schema.type} - - - -
    -
    -
    - ); - } - })} - - ) - } - - return ( - <> - {properties.map(({ content, name }, i) => { - if (content.props.schema.type === 'object') { - return ( -
    - {!isComplexTypeView && idSchema?.$id !== "root" ? -
    -
    - -
    -
    -
    -
    - {formData ? - JSON.stringify(Object.fromEntries(Object.entries(formData).filter(([key]) => key.includes(name))), null, " ") : - "" - } -
    - addNewObject(name, content.props.idSchema?.$id)} - > - - {schema.type} - - - -
    -
    -
    : - null - } - {content} -
    - ) - } - return !isComplexTypeView && content?.key !== "EIP712Domain" || !currentSchemaId.includes("root_TypedData_") ? content : null; - })} - { - ( - (isComplexTypeView && idSchema?.$id === currentSchemaId) || - !isComplexTypeView && objectSchemaIds.includes(idSchema?.$id) - ) && canExpand(schema, uiSchema, formData) ? - : - null - } - - ) -} diff --git a/src/components/ParserOpenRPC/InteractiveBox/templates/WrapIfAdditionalTemplate.tsx b/src/components/ParserOpenRPC/InteractiveBox/templates/WrapIfAdditionalTemplate.tsx deleted file mode 100644 index 7b459857f32..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/templates/WrapIfAdditionalTemplate.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { useContext, useEffect } from "react"; -import { ADDITIONAL_PROPERTY_FLAG } from "@rjsf/utils"; -import { BaseInputTemplate } from "@site/src/components/ParserOpenRPC/InteractiveBox/templates/BaseInputTemplate"; -import { ParserOpenRPCContext } from "@site/src/components/ParserOpenRPC"; -import * as isPlainObject from "lodash.isplainobject" - -export const WrapIfAdditionalTemplate = (props) => { - const { - id, - classNames, - style, - disabled, - label, - onKeyChange, - onDropPropertyClick, - readonly, - schema, - children, - registry, - formContext, - formData, - } = props; - const { templates } = registry; - const { RemoveButton } = templates.ButtonTemplates; - const additional = ADDITIONAL_PROPERTY_FLAG in schema; - const { - drawerLabel, - isComplexTypeView, - setIsComplexTypeView, - setDrawerLabel, - } = useContext(ParserOpenRPCContext); - const { currentSchemaId, setCurrentSchemaId } = formContext; - const onRemoveButtonClick = () => { - if (isPlainObject(formData) && Object.keys(formData).length === 0) { - setIsComplexTypeView(false); - setDrawerLabel(null); - } - }; - - if (!additional) { - return ( -
    - {children} -
    - ); - } - - useEffect(() => { - if (!id.includes("_newKey")) { - setCurrentSchemaId(id); - } - }, []); - - if (!id.includes(currentSchemaId)) { - return null; - } - - return isComplexTypeView ? ( -
    - {drawerLabel === label && ( -
    -
    - -
    - {/* @ts-ignore */} - { - onKeyChange(target); - setDrawerLabel(target); - }} - schema={{ ...schema, ...{ type: "string" } }} - formContext={formContext} - value={label} - /> -
    - )} -
    {children}
    -
    - ) : null; -}; diff --git a/src/components/ParserOpenRPC/InteractiveBox/widgets/DropdownWidget.tsx b/src/components/ParserOpenRPC/InteractiveBox/widgets/DropdownWidget.tsx deleted file mode 100644 index a02e7b8ca6b..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/widgets/DropdownWidget.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React, { useState } from "react"; -import { WidgetProps } from "@rjsf/utils"; -import clsx from "clsx"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; - -export const DropdownWidget = ({ - name, - value, - onChange, - schema, - options, -}: WidgetProps) => { - const [isOpened, setIsOpened] = useState(false); - - return ( -
    -
    - -
    -
    -
    - {value === undefined ? "" : String(value)} - { - setIsOpened(!isOpened); - }} - > - - {schema.type} - - - -
      - {options.enumOptions.map(({ value }, index) => ( -
    • { - onChange(value); - setIsOpened(false); - }} - > - {String(value)} -
    • - ))} -
    -
    -
    -
    -
    - ); -}; diff --git a/src/components/ParserOpenRPC/InteractiveBox/widgets/SelectWidget.tsx b/src/components/ParserOpenRPC/InteractiveBox/widgets/SelectWidget.tsx deleted file mode 100644 index d634f485055..00000000000 --- a/src/components/ParserOpenRPC/InteractiveBox/widgets/SelectWidget.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { useState } from "react"; -import { WidgetProps } from "@rjsf/utils"; -import clsx from "clsx"; -import styles from "@site/src/components/ParserOpenRPC/InteractiveBox/styles.module.css"; - -export const SelectWidget = ({ - value, - onChange, - schema, - options, - label, -}: WidgetProps) => { - const [isOpened, setIsOpened] = useState(false); - const emptyValue = - value === undefined || - !options?.enumOptions.some(({ label }) => label === value); - - return ( -
    -
    - -
    -
    -
    - {emptyValue ? "" : String(value)} - { - setIsOpened(!isOpened); - }} - > - - {schema?.enum ? "enum" : schema?.type} - - - -
      - {options?.enumOptions?.map(({ label, value }, index) => ( -
    • { - onChange(value); - setIsOpened(false); - }} - > - {String(label)} -
    • - ))} -
    -
    -
    -
    -
    - ); -}; diff --git a/src/components/ParserOpenRPC/ModalDrawer/index.tsx b/src/components/ParserOpenRPC/ModalDrawer/index.tsx deleted file mode 100644 index 2aee1890bca..00000000000 --- a/src/components/ParserOpenRPC/ModalDrawer/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React, { useState, useEffect, useRef } from "react"; -import clsx from "clsx"; -import styles from "./styles.module.css"; -import * as debounce from "lodash.debounce"; - -interface ModalDrawerProps { - title: string | React.ReactNode; - isOpen: boolean; - onClose: () => void; - children: React.ReactNode; - isContentFixed?: boolean; - headerLabel?: string | null; -} - -export const ModalDrawer = ({ - title, - isOpen, - onClose, - children, - isContentFixed = false, - headerLabel, -}: ModalDrawerProps) => { - const [showModal, setShowModal] = useState(isOpen); - const [leftOffset, setLeftOffset] = useState(360); - const [width, setWidth] = useState(972); - const contentRef = useRef(null); - - useEffect(() => { - setShowModal(isOpen); - }, [isOpen]); - - useEffect(() => { - if (isContentFixed && contentRef?.current) { - contentRef?.current?.scrollTo(0, 0); - } - }, [isContentFixed]); - - useEffect(() => { - const setDrawerSizeAndPosition = () => { - const pageContent = document.getElementById("centerContent"); - if (pageContent) { - const contentLeftOffset = pageContent.getBoundingClientRect().x; - const contentComputedStyles = window.getComputedStyle(pageContent); - const contentLeftPadding = parseInt(contentComputedStyles.paddingLeft); - const contentRightPadding = parseInt(contentComputedStyles.paddingRight); - const contentWidth = parseInt(contentComputedStyles.width); - setLeftOffset((contentLeftOffset + Number(contentLeftPadding))); - setWidth(contentWidth - contentLeftPadding - contentRightPadding); - } - } - if (window) { - setDrawerSizeAndPosition(); - const handleResize = debounce(setDrawerSizeAndPosition, 10); - window.addEventListener('resize', handleResize); - - return () => { - window.removeEventListener('resize', handleResize); - } - } - }, []) - - return ( -
    -
    -
    - {title} - {headerLabel ? ( - {headerLabel} - ) : null} -
    - -
    -
    - {children} -
    -
    - ); -}; diff --git a/src/components/ParserOpenRPC/ModalDrawer/styles.module.css b/src/components/ParserOpenRPC/ModalDrawer/styles.module.css deleted file mode 100644 index 050f781fc71..00000000000 --- a/src/components/ParserOpenRPC/ModalDrawer/styles.module.css +++ /dev/null @@ -1,120 +0,0 @@ -:root { - --param-item-bg: #292a36; - --modal-header-bg: #24272a; -} - -:root[data-theme="light"] { - --param-item-bg: #F2F4F6; - --modal-header-bg: #fff; -} - -.modalContainer { - border: 1px solid #848c96; - border-radius: 8px 8px 0 0; - position: fixed; - z-index: 10; - top: 100%; - left: 300px; - max-width: 972px; - width: 100%; - min-height: 512px; - opacity: 0; - transform: translate(0, 100%); - transition-property: "transform", "opacity"; - transition-duration: 0.4s; - transition-timing-function: ease; - overflow: hidden; - background-color: var(--param-item-bg); -} - -.modalContainerOpen { - opacity: 1; - transform: translate(0, -100%); -} - -.modalHeader { - padding: 16px; - display: flex; - align-items: center; - justify-content: space-between; - min-height: 56px; - background-color: var(--modal-header-bg); -} - -.modalTitle { - font-size: 18px; - line-height: 1; - font-weight: 500; -} - -.modalTitleContainer { - display: flex; - align-items: center; -} - -.modalHeaderIcon { - display: flex; - background: none; - border: none; - padding: 0; - margin-right: 8px; -} - -.modalHeaderIconBack { - width: 16px; - height: 16px; -} - -.modalHeaderLabels { - display: flex; - align-items: center; -} - -.modalHeaderLabel { - display: flex; - justify-content: center; - margin-left: 8px; - padding: 2px 8px; - border: 1px solid #848c96; - border-radius: 999px; - font-size: 12px; - line-height: 18px; -} - -.modalCloseBtn { - display: block; - padding: 0; - background: none; - font-size: 24px; - line-height: 1; - border: 0; - cursor: pointer; -} - -.modalContent { - height: 394px; -} - -.modalContentScrolled { - overflow-y: auto; -} - -.modalContentFixed { - overflow-y: hidden; -} - -@media (width <= 1760px) { - .modalContainer { - max-width: 100%; - margin-left: 0; - } -} - -@media (width <= 1200px) { - .modalContainer { - left: 0; - right: 0; - max-width: 100%; - margin-left: 0; - } -} diff --git a/src/components/ParserOpenRPC/ProjectsBox/index.tsx b/src/components/ParserOpenRPC/ProjectsBox/index.tsx deleted file mode 100644 index 78eba22f56a..00000000000 --- a/src/components/ParserOpenRPC/ProjectsBox/index.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import React, { useContext, useEffect, useState } from "react"; -import ldClient from "launchdarkly"; -import { MetamaskProviderContext } from "@site/src/theme/Root"; -import Select from "react-dropdown-select"; -import Button from "@site/src/components/Button"; -import styles from "./styles.module.scss"; -import { WALLET_LINK_TYPE } from "@site/src/components/AuthLogin/AuthModal"; - -const LOGIN_FF = "mm-unified-login"; - -const ProjectsBox = () => { - const { - projects, - metaMaskAccount, - walletLinked, - metaMaskWalletIdConnectHandler, - walletLinkUrl, - setUserAPIKey, - } = useContext(MetamaskProviderContext); - const options = Object.keys(projects).map((v) => ({ - value: v, - label: projects[v].name, - })); - const [currentProject, setCurrentProject] = useState( - [options[0]].filter(Boolean) - ); - const [ldReady, setLdReady] = useState(false); - const [loginEnabled, setLoginEnabled] = useState(false); - const [isWalletLinking, setIsWalletLinking] = useState(false); - - const metaMaskWalletConnectionHandler = () => { - setIsWalletLinking(true); - metaMaskWalletIdConnectHandler(); - } - - useEffect(() => { - ldClient.waitUntilReady().then(() => { - setLoginEnabled(ldClient.variation(LOGIN_FF, false)); - setLdReady(true); - }); - const handleChange = (current) => { - setLoginEnabled(current); - }; - ldClient.on(`change:${LOGIN_FF}`, handleChange); - return () => { - ldClient.off(`change:${LOGIN_FF}`, handleChange); - }; - }, []); - - useEffect(() => { - if (!currentProject.length && options[0]) { - setCurrentProject([options[0]]); - setUserAPIKey(options[0].value); - } - }, [projects]); - - useEffect(() => { - if (options?.length > 0) { - setUserAPIKey(options[0].value); - } - }, [options.length]); - - useEffect(() => { - if (walletLinked) { - setIsWalletLinking(false); - } - }, [walletLinked]) - - return ( - ldReady && - loginEnabled && ( -
    -
    Infura API Key
    - {metaMaskAccount && !!Object.keys(projects).length ? ( - + + + + + verifierId + + + The verifier identifier. Returned in response to the getUserInfo(){' '} + method. + + + + + + + + web3AuthNetwork + + Name of the Web3Auth (Embedded Wallets) network your project is deployed on. + + + + + + + clientId + + + The client ID for your project. This can also be found on the Embedded Wallets + dashboard. + + + + + + + +
    +

    Edit parameters and click submit to see the response in the terminal.

    +
    +
    + +
    + + +

    Response

    +
    + {isLoading &&

    Request sent...

    } + {response &&
    {response}
    } + {error &&

    {error}

    } +
    + + ) +} diff --git a/src/components/PregenerateWallet/styles.module.css b/src/components/PregenerateWallet/styles.module.css new file mode 100644 index 00000000000..2000a0edce3 --- /dev/null +++ b/src/components/PregenerateWallet/styles.module.css @@ -0,0 +1,293 @@ +.formTable { + width: 100%; + table-layout: fixed; + padding-top: 20px; + border-collapse: collapse; + margin-bottom: 20px; +} + +.formTable th, +.formTable td { + padding: 8px; + border-bottom: 1px solid var(--ifm-color-emphasis-200); +} + +.formTable th { + background: var(--ifm-color-emphasis-100); + color: var(--ifm-color-content); + font-weight: 600; +} + +.formTable tbody tr:hover { + background: var(--ifm-color-emphasis-100); +} + +.formTable th:nth-child(1), +.formTable td:nth-child(1) { + width: 15%; + min-width: 120px; +} + +.formTable th:nth-child(2), +.formTable td:nth-child(2) { + width: 40%; + min-width: 200px; +} + +.formTable th:nth-child(3), +.formTable td:nth-child(3) { + width: 45%; + min-width: 180px; +} + +/* Mobile responsive design */ +@media (width <= 768px) { + .formTable { + display: block; + overflow-x: auto; + white-space: nowrap; + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 8px; + } + + .formTable thead { + display: none; + } + + .formTable tbody, + .formTable tr, + .formTable td { + display: block; + width: 100%; + } + + .formTable tr { + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 8px; + margin-bottom: 16px; + padding: 12px; + } + + .formTable td { + border: none; + padding: 8px 0; + position: relative; + } + + .formTable td:first-child { + font-weight: bold; + color: var(--ifm-color-primary); + margin-bottom: 4px; + } + + .formTable td:nth-child(2) { + font-size: 14px; + color: var(--ifm-color-content-secondary); + margin-bottom: 8px; + } + + .formTable input[type='text'], + .formTable select { + width: calc(100% - 24px); + } +} + +.formTable input[type='text'], +.formTable select { + width: calc(100% - 24px); + padding: 12px; + border-radius: 8px; + box-sizing: border-box; + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-300); + color: var(--ifm-color-content); + transition: + border-color 0.2s ease, + box-shadow 0.2s ease; +} + +.formTable input[type='text']:focus, +.formTable select:focus { + outline: none; + border-color: var(--ifm-color-primary); + box-shadow: 0 0 0 2px var(--ifm-color-primary-lightest); +} + +.submitButton { + background: var(--ifm-color-primary); + color: var(--ifm-color-white); + padding: 12px 24px; + border: 1px solid var(--ifm-color-primary); + border-radius: 8px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + display: inline-flex; + align-items: center; + justify-content: center; + margin-top: 10px; + min-width: 120px; + transition: all 0.2s ease; +} + +.submitButton:disabled { + background: var(--ifm-color-emphasis-300); + border-color: var(--ifm-color-emphasis-300); + color: var(--ifm-color-emphasis-600); + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +.submitButton:hover:not(:disabled) { + background: var(--ifm-color-primary-dark); + border-color: var(--ifm-color-primary-dark); + transform: translateY(-1px); + box-shadow: 0 4px 8px var(--ifm-color-primary-lighter); +} + +.loader { + border: 4px solid var(--ifm-color-primary-lightest); + border-top: 4px solid var(--ifm-color-primary); + border-radius: 50%; + width: 20px; + height: 20px; + animation: spin 2s linear infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.responseTerminal { + background: var(--ifm-color-emphasis-100); + color: var(--ifm-color-content); + font-family: 'SF Mono', Monaco, Consolas, 'Courier New', monospace; + font-size: 13px; + line-height: 1.4; + padding: 20px; + margin-top: 20px; + border-radius: 8px; + min-height: 100px; + max-height: 400px; + overflow: auto; + border: 1px solid var(--ifm-color-emphasis-300); + white-space: pre-wrap; + word-break: break-all; +} + +[data-theme='dark'] .responseTerminal { + background: var(--ifm-color-gray-900); + color: var(--ifm-color-gray-100); + border-color: var(--ifm-color-gray-700); +} + +@media (width <= 768px) { + .responseTerminal { + padding: 16px; + font-size: 12px; + max-height: 300px; + } +} + +.responseTerminal pre { + background: none; + padding: none; + margin: none; +} + +.error { + color: var(--ifm-color-danger); +} + +.urlDisplay { + background-color: var(--ifm-color-emphasis-100); + border: 1px solid var(--ifm-color-emphasis-300); + border-left: 4px solid var(--ifm-color-primary); + padding: 16px; + font-family: 'SF Mono', Monaco, Consolas, 'Courier New', monospace; + font-size: 14px; + color: var(--ifm-color-content); + margin-top: 20px; + border-radius: 8px; + white-space: pre-wrap; + overflow-x: auto; + word-break: break-all; +} + +@media (width <= 768px) { + .urlDisplay { + font-size: 12px; + padding: 12px; + } +} + +.parameterKey { + font-weight: 700; + color: var(--ifm-color-primary-dark); +} + +.parameterValue { + color: var(--ifm-color-primary); +} + +/* Ensure proper contrast in light mode */ +[data-theme='light'] .parameterKey { + color: var(--ifm-color-primary-darker); +} + +[data-theme='light'] .parameterValue { + color: var(--ifm-color-primary-dark); +} + +/* Dark mode specific colors */ +[data-theme='dark'] .parameterKey { + color: var(--ifm-color-primary-light); +} + +[data-theme='dark'] .parameterValue { + color: var(--ifm-color-primary-lighter); +} + +.submitButtonContainer { + display: flex; + justify-content: center; + margin-top: 20px; +} + +@media (width <= 768px) { + .submitButtonContainer { + margin-top: 16px; + } + + .submitButton { + width: 100%; + max-width: 200px; + padding: 14px 24px; + } +} + +.instructionTextContainer { + text-align: center; + margin-top: 20px; + font-weight: bold; +} + +@media (width <= 768px) { + .instructionTextContainer { + margin-top: 16px; + font-size: 14px; + } +} + +.getMethod { + color: var(--ifm-color-primary); + font-weight: bold; + font-family: monospace; +} diff --git a/src/components/PregenrateSmartAccount/index.tsx b/src/components/PregenrateSmartAccount/index.tsx new file mode 100644 index 00000000000..6f6c2d68d7a --- /dev/null +++ b/src/components/PregenrateSmartAccount/index.tsx @@ -0,0 +1,344 @@ +import React, { useState, useEffect } from 'react' +import useIsBrowser from '@docusaurus/useIsBrowser' +import styles from '@site/src/components/PregenerateWallet/styles.module.css' + +export default function LookupSCWAPIPage() { + const isBrowser = useIsBrowser() + const networkOptions = ['sapphire_mainnet', 'sapphire_devnet'] + const smartAccountTypeOptions = ['metamask'] + const entryPointVersionOptions = ['0.7'] + + if (!isBrowser) { + return
    Loading...
    + } + const constructURL = () => { + const baseUrl = 'https://lookup.web3auth.io/lookup/scw' + const filteredFormData = Object.fromEntries( + Object.entries(formData).filter(([_, value]) => value !== '') + ) + const queryParams = new URLSearchParams(filteredFormData) + + const readableParams: React.ReactNode[] = [] + queryParams.forEach((value, key) => { + readableParams.push( + + {key}= + {value}& + + ) + }) + + return ( +
    + GET {baseUrl}?{readableParams} +
    + ) + } + + const [formData, setFormData] = useState({ + verifier: 'w3a-google-demo', + verifierId: 'devrel@metamask.io', + web3AuthNetwork: 'sapphire_mainnet', + clientId: + 'BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ', + chainId: '0x1', + smartAccountType: 'metamask', + smartAccountVersion: '', + nonceKey: '', + saltNonce: '', + factoryAddress: '', + entryPointVersion: '0.7', + }) + const [isLoading, setIsLoading] = useState(false) + const [response, setResponse] = useState(null) + const [error, setError] = useState('') + + const handleChange = (e: React.ChangeEvent) => { + setFormData({ ...formData, [e.target.name]: e.target.value }) + } + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + setIsLoading(true) + setResponse(null) + setError('') + + try { + const axios = (await import('axios')).default + const filteredFormData = Object.fromEntries( + Object.entries(formData).filter(([_, value]) => value !== '') + ) + const res = await axios.get(`https://lookup.web3auth.io/lookup/scw`, { + params: filteredFormData, + }) + setResponse(JSON.stringify(res.data, null, 2)) + } catch (err) { + setError(err instanceof Error ? err.message : 'An error occurred') + } finally { + setIsLoading(false) + } + } + + useEffect(() => { + if (!isBrowser) return + + const fetchInitialData = async () => { + setIsLoading(true) + try { + const axios = (await import('axios')).default + const filteredFormData = Object.fromEntries( + Object.entries(formData).filter(([_, value]) => value !== '') + ) + const res = await axios.get(`https://lookup.web3auth.io/lookup/scw`, { + params: filteredFormData, + }) + setResponse(JSON.stringify(res.data, null, 2)) + } catch (err) { + setError(err instanceof Error ? err.message : 'An error occurred') + } finally { + setIsLoading(false) + } + } + + fetchInitialData() + }, [isBrowser]) + + return ( + <> +

    HTTP Request

    + {constructURL()} + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterDescriptionValue
    + verifier + + The verifier name can be found on your Embedded Wallets dashboard.{' '} + + Learn more about verifiers + + . + + +
    + verifierId + + The verifier identifier. Returned in response to the getUserInfo(){' '} + method. + + +
    + web3AuthNetwork + + Name of the Web3Auth (Embedded Wallets) network your project is deployed on. + + +
    + clientId + + The client identifier for your project. This can also be found on the Embedded + Wallets dashboard. + + +
    + chainId + + Chain identifier for the chain you want to pre-generate Smart Account on. The{' '} + chainId should be a hex value. + + +
    + smartAccountType + The Smart Account provider you want to use. + +
    + entryPointVersion + + The entry point version for the Smart Account. Please note, some SCW currently only + work with specific entry point version (biconomy - 0.6, nexus - 0.7, trust - 0.6) so + setting entryPointVersion for those SCW will have no effect. + + +
    + smartAccountVersion + (Optional) Smart Account version for the Smart Account Provider contract. + +
    + saltNonce + + (Optional) Salt nonce for the Smart Account to add randomness or predictability when + the address is generated. + + +
    + factoryAddress + + (Optional) Specifies the address of the Factory Contract. While providers typically + deploy the factory contract on popular chains, you have the option to deploy your + own factory contract on any chain and pass its address. + + +
    +
    +

    Edit parameters and click submit to see the response in the terminal.

    +
    +
    + +
    +
    + +

    Response

    +
    + {isLoading &&

    Request sent...

    } + {response &&
    {response}
    } + {error &&

    {error}

    } +
    + + ) +} diff --git a/src/components/SectionIntro/SectionIntro.module.scss b/src/components/SectionIntro/SectionIntro.module.scss new file mode 100644 index 00000000000..694d5477464 --- /dev/null +++ b/src/components/SectionIntro/SectionIntro.module.scss @@ -0,0 +1,50 @@ +.wrapper { + position: relative; + padding: 2rem 0 0; + overflow: hidden; + + @include bp(tablet) { + padding-top: 3rem; + } + + @include bp(desktop) { + padding: 3.4rem 0 0; + } +} + +.grid-wrapper { + @include bp('tablet') { + @include grid; + } +} + +.grid-col-center { + position: relative; + + @include bp('tablet') { + @include grid-column-span(8); + } + + @include bp('desktop') { + @include grid-column-span(14); + @include grid-column-start(2); + } +} + +.header { + margin-bottom: 1rem; + + h2 { + font-size: 1.8rem; + font-weight: 600; + margin: 0; + color: var(--color-text-heading); + } + + p { + font-size: 1.8rem; + font-weight: 500; + margin: 0.5rem 0 0; + color: var(--color-text-paragraph); + } +} diff --git a/src/components/SectionIntro/SectionIntro.tsx b/src/components/SectionIntro/SectionIntro.tsx new file mode 100644 index 00000000000..32650673a70 --- /dev/null +++ b/src/components/SectionIntro/SectionIntro.tsx @@ -0,0 +1,18 @@ +import clsx from 'clsx' +import styles from './SectionIntro.module.scss' + +export default function SectionIntro({ description }: { description: string }) { + return ( +
    +
    +
    +
    +
    +

    {description}

    +
    +
    +
    +
    +
    + ) +} diff --git a/src/components/Sections/SectionAPIs.jsx b/src/components/Sections/SectionAPIs.jsx deleted file mode 100644 index d0aa79fe1ae..00000000000 --- a/src/components/Sections/SectionAPIs.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import { API_LINKS } from "@site/src/lib/data"; -import Link from "@docusaurus/Link"; -import Heading from "@theme/Heading"; - -const SectionAPIs = () => { - return ( -
    -
    - - Blockchain APIs - -
      - {API_LINKS.blockchain.map((item) => ( -
    • - {item.name} -
    • - ))} -
    -
    -
    - - Decentralize storage APIs - -
      - {API_LINKS.storage.map((item) => ( -
    • - {item.name} -
    • - ))} -
    -
    -
    - ); -}; - -export default SectionAPIs; diff --git a/src/components/Sections/SectionNetworks.jsx b/src/components/Sections/SectionNetworks.jsx index fa67821c5d9..ef1ef2c4e0e 100644 --- a/src/components/Sections/SectionNetworks.jsx +++ b/src/components/Sections/SectionNetworks.jsx @@ -1,75 +1,79 @@ -import React, { useEffect, useState } from "react"; -import Icon from "@site/src/components/Icon/Icon"; -import { NETWORK_LINKS } from "@site/src/lib/data"; -import Link from "@docusaurus/Link"; +import clsx from 'clsx' +import { useEffect, useState } from 'react' +import { useColorMode } from '@docusaurus/theme-common' +import { NETWORK_LINKS } from '@site/src/lib/data' +import Link from '@docusaurus/Link' +import Button from '@site/src/components/elements/buttons/button' + +import styles from './SectionNetworks.module.scss' const SectionNetworks = () => { - const [isNetworksListCollapsed, setIsNetworksListToggledCollapsed] = - useState(true); - const [isMobile, setIsMobile] = useState(false); - const handleShowMoreLessClick = () => { - setIsNetworksListToggledCollapsed(!isNetworksListCollapsed); - }; + const [isNetworksListCollapsed, setIsNetworksListCollapsed] = useState(true) + const [isMobile, setIsMobile] = useState(typeof window !== 'undefined' && window.innerWidth < 768) + const { colorMode } = useColorMode() + const [theme, setTheme] = useState('') + + useEffect(() => { + setTheme(colorMode) + }, [colorMode]) + + const toggleNetworksList = () => { + setIsNetworksListCollapsed(prevState => !prevState) + } + const handleResize = () => { - setIsMobile(window.innerWidth < 768); - }; + setIsMobile(window.innerWidth < 768) + } useEffect(() => { - if (window) { - setIsMobile(window.innerWidth < 768); - window.addEventListener("resize", handleResize, false); - return () => { - window.removeEventListener("resize", handleResize); - }; + handleResize() + window.addEventListener('resize', handleResize) + return () => { + window.removeEventListener('resize', handleResize) } - }, []); + }, []) const renderNetworkCard = ({ name, href, logo }, index) => ( - -
    - {`${name} -
    - {name} - - - - - - ); +
  • + +
    + {`${name} +
    + {name} + +
  • + ) return ( -
    -
    +
    +
      {NETWORK_LINKS.map((item, index) => - isMobile - ? index <= 4 || !isNetworksListCollapsed - ? renderNetworkCard(item, index) - : null - : renderNetworkCard(item, index), + isMobile && isNetworksListCollapsed && index > 4 ? null : renderNetworkCard(item, index) )} -
    + {isMobile && ( -
    - - {isNetworksListCollapsed ? "+" : "–"} - - show {isNetworksListCollapsed ? "more" : "less"} networks -
    +
    - ); -}; + ) +} -export default SectionNetworks; +export default SectionNetworks diff --git a/src/components/Sections/SectionNetworks.module.scss b/src/components/Sections/SectionNetworks.module.scss new file mode 100644 index 00000000000..ecf21c639e7 --- /dev/null +++ b/src/components/Sections/SectionNetworks.module.scss @@ -0,0 +1,102 @@ +.wrapper { + margin-top: 2.8rem; + margin-bottom: 4rem; + + @include bp(desktop) { + margin-top: 4.8rem; + margin-bottom: 6rem; + } +} + +.list { + display: flex; + flex-wrap: wrap; + + @include bp('tablet') { + margin-left: -0.8rem; + margin-right: -0.8rem; + } +} + +.item { + width: 100%; + margin-bottom: 1.2rem; + + @include bp('tablet') { + width: 33.33%; + padding-left: 0.8rem; + padding-right: 0.8rem; + margin-bottom: 1.6rem; + } +} + +.inner { + position: relative; + display: flex; + align-items: center; + padding: 1.6rem; + height: 100%; + background-color: var(--general-white); + transition: + filter calc(var(--motion) * var(--motion-speed)) $gentle-ease, + background-color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease; + color: var(--general-black); + + &::before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + border: 1px solid var(--general-gray-light); + border-radius: 0.4rem; + transition: opacity calc(var(--motion) * var(--motion-speed)) $gentle-ease; + } + + &:hover { + text-decoration: none; + color: currentColor; + filter: drop-shadow(0 0.2rem 0.3rem rgba(0, 0, 0, 0.1)); + &::before { + opacity: 0; + } + } +} + +.logo-wrap { + display: flex; + align-items: center; + margin-right: 1.2rem; + max-height: 3.2rem; + height: 100%; + + @include bp('tablet') { + max-height: 4.2rem; + } + + img { + height: 100%; + object-fit: contain; + width: auto; + } +} + +.button { + margin-top: 2.4rem; +} + +html[data-theme='dark'] { + .inner { + background-color: var(--general-black-light); + color: var(--general-white); + + &::before { + display: none; + } + + &:hover { + background-color: var(--general-black); + } + } +} diff --git a/src/components/SidebarSectionDropdown/SidebarSectionDropdown.module.css b/src/components/SidebarSectionDropdown/SidebarSectionDropdown.module.css new file mode 100644 index 00000000000..4b80a969ce4 --- /dev/null +++ b/src/components/SidebarSectionDropdown/SidebarSectionDropdown.module.css @@ -0,0 +1,184 @@ +.dropdown { + background: var(--ifm-background-color); + border-bottom: 1px solid var(--ifm-toc-border-color); + padding: 0.4rem 0; + position: sticky; + top: var(--ifm-navbar-height); + z-index: 100; + font-family: var(--ifm-font-family-base); + border-right: 1px solid var(--ifm-toc-border-color); +} + +.dropdown .container { + margin: 0 auto; + display: flex; + align-items: center; + gap: 0; +} + +.sectionItem { + font-size: 2rem; + font-weight: 500; + line-height: 1.3; + color: var(--ifm-color-emphasis-1000); + white-space: nowrap; + text-align: left; + width: var(--doc-sidebar-width); + flex-shrink: 0; + display: flex; + align-items: center; + cursor: pointer; + user-select: none; + padding: 1rem 2.4rem !important; + margin: 0; + background: var(--ifm-background-color); + transition: all 0.2s ease-in-out; + border-right: 1px solid var(--ifm-toc-border-color); +} + +.staticTitle { + cursor: default !important; +} + +.staticTitle:hover { + background: none !important; +} + +.sectionItem:hover { + background: var(--ifm-hover-overlay); +} + +.label { + font-size: 2rem; + font-weight: 500; + line-height: 1.3; + color: var(--ifm-color-emphasis-600); + white-space: nowrap; + text-align: left; + padding: 0; + margin: 0; +} + +.chevron { + font-size: 2.2rem; + line-height: 1; + padding: 0; + margin-left: 1rem; +} + +.labelContainer { + flex: 1; + text-align: left; + width: 100%; +} + +.title { + font-size: 2rem; + font-weight: 500; + line-height: 1.3; + color: var(--ifm-color-emphasis-1000); + white-space: nowrap; + text-align: left; + padding: 0; + margin: 0; +} + +.menu { + position: absolute; + top: 100%; + left: 0; + background: var(--general-white); + border: 1px solid var(--general-gray-light); + border-radius: 4px; + box-shadow: 0 6px 16px rgb(0 0 0 / 15%); + backdrop-filter: blur(8px); + margin-top: 0.3rem; + padding-bottom: 0.4rem; + z-index: 100; + width: 100%; + min-width: 180px; +} + +.menuItem { + padding: 0.6rem 2rem 1rem; + font-size: 1.5rem; + font-weight: 400; + cursor: pointer; + color: var(--color-text); + background: var(--general-white); + transition: all 0.2s ease-in-out; +} + +.menuItemContent { + display: flex; + flex-direction: column; +} + +.menuItemTitle { + font-size: 1.7rem; + font-weight: 500; + line-height: 1.7; +} + +.menuItemDescription { + font-size: 1.4rem; + font-weight: 500; + line-height: 1.4; + color: var(--ifm-color-emphasis-700); + margin-bottom: 0.2rem; +} + +.menuItem:hover { + background: var(--ifm-hover-overlay); +} + +.menuItem.hovered { + background: var(--ifm-hover-overlay); +} + +.menuItem.selected { + color: var(--ifm-color-primary) !important; + background: var(--general-gray-light); +} + +[data-theme='dark'] .menu { + background: var(--general-black-light) !important; + border-color: var(--general-white) !important; + box-shadow: 0 6px 16px rgb(0 0 0 / 40%); +} + +[data-theme='dark'] .menuItem { + color: var(--general-white) !important; + background: var(--general-black-light) !important; +} + +[data-theme='dark'] .menuItem:hover { + background: var(--general-black-mid) !important; +} + +[data-theme='dark'] .menuItem.selected { + color: var(--ifm-color-primary) !important; + background: var(--general-black-mid) !important; +} + +[data-theme='dark'] .sectionItem:hover { + background: var(--ifm-hover-overlay) !important; +} + +[data-theme='dark'] .dropdown { + background: var(--ifm-background-color); + border-bottom-color: var(--ifm-color-emphasis-300); + box-shadow: 0 2px 4px rgb(0 0 0 / 30%); +} + +[data-theme='dark'] .title { + color: var(--ifm-color-emphasis-800) !important; +} + +[data-theme='dark'] .label { + color: var(--ifm-color-emphasis-600) !important; +} + +[data-theme='dark'] .menuItemDescription { + color: var(--ifm-color-emphasis-600) !important; +} diff --git a/src/components/SidebarSectionDropdown/SidebarSectionDropdown.tsx b/src/components/SidebarSectionDropdown/SidebarSectionDropdown.tsx new file mode 100644 index 00000000000..4c0e27a076a --- /dev/null +++ b/src/components/SidebarSectionDropdown/SidebarSectionDropdown.tsx @@ -0,0 +1,130 @@ +import React, { useState, useRef, useEffect } from 'react' +import { useHistory, useLocation } from '@docusaurus/router' +import clsx from 'clsx' +import styles from './SidebarSectionDropdown.module.css' + +export { default as SidebarStaticTitle } from './SidebarStaticTitle' + +interface SectionOption { + key: string + label: string + title?: string + description?: string + path: string + pathPattern: string | string[] +} + +export interface SidebarSectionDropdownProps { + sections: SectionOption[] + defaultSection?: string + dropdownLabel?: string +} + +export interface SidebarStaticTitleProps { + title: string + pathPattern: string | string[] +} + +export default function SidebarSectionDropdown({ + sections, + defaultSection, + dropdownLabel = 'Section:', +}: SidebarSectionDropdownProps) { + const history = useHistory() + const location = useLocation() + const dropdownRef = useRef(null) + const [open, setOpen] = useState(false) + const [hoveredSection, setHoveredSection] = useState(null) + + const getCurrentSection = (): string => { + const pathname = location.pathname + + // Check each section's path pattern + for (const section of sections) { + const patterns = Array.isArray(section.pathPattern) + ? section.pathPattern + : [section.pathPattern] + + for (const pattern of patterns) { + if (pathname.startsWith(pattern)) { + return section.key + } + } + } + + // Return default section or first section if no match + return defaultSection || sections[0]?.key || '' + } + + const currentSection = getCurrentSection() + const currentSectionData = sections.find(section => section.key === currentSection) || sections[0] + const currentSectionLabel = currentSectionData?.label || '' + const currentSectionTitle = currentSectionData?.title + + const handleSelect = (sectionKey: string) => { + const selectedSection = sections.find(section => section.key === sectionKey) + if (selectedSection) { + history.push(selectedSection.path) + setOpen(false) + } + } + + const toggleDropdown = () => setOpen(prev => !prev) + + useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { + setOpen(false) + } + } + document.addEventListener('mousedown', handleClickOutside) + return () => document.removeEventListener('mousedown', handleClickOutside) + }, []) + + return ( +
    +
    e.key === 'Enter' && toggleDropdown()}> +
    + {currentSectionTitle ? ( +
    {currentSectionTitle}
    + ) : ( + + {dropdownLabel} {currentSectionLabel} + + )} +
    + + ▾ + +
    + {open && ( +
      + {sections.map(section => ( +
    • handleSelect(section.key)} + role="menuitem" + onMouseEnter={() => setHoveredSection(section.key)} + onMouseLeave={() => setHoveredSection(null)}> +
      +
      {section.title || section.label}
      + {section.description && ( +
      {section.description}
      + )} +
      +
    • + ))} +
    + )} +
    + ) +} diff --git a/src/components/SidebarSectionDropdown/SidebarStaticTitle.tsx b/src/components/SidebarSectionDropdown/SidebarStaticTitle.tsx new file mode 100644 index 00000000000..0fce4c4da58 --- /dev/null +++ b/src/components/SidebarSectionDropdown/SidebarStaticTitle.tsx @@ -0,0 +1,18 @@ +import React from 'react' +import styles from './SidebarSectionDropdown.module.css' + +interface SidebarStaticTitleProps { + title: string +} + +export default function SidebarStaticTitle({ title }: SidebarStaticTitleProps) { + return ( +
    +
    +
    +
    {title}
    +
    +
    +
    + ) +} diff --git a/src/components/SidebarSectionDropdown/configs.ts b/src/components/SidebarSectionDropdown/configs.ts new file mode 100644 index 00000000000..80dba45e6c4 --- /dev/null +++ b/src/components/SidebarSectionDropdown/configs.ts @@ -0,0 +1,46 @@ +import type { SidebarSectionDropdownProps, SidebarStaticTitleProps } from './SidebarSectionDropdown' + +export const SERVICES_DASHBOARD_CONFIG: SidebarSectionDropdownProps = { + sections: [ + { + key: 'services', + label: 'Services', + title: 'Services', + description: 'Use high performance APIs provided by Infura', + path: '/services/', + pathPattern: '/services', + }, + { + key: 'dashboard', + label: 'Dashboard', + title: 'Developer dashboard', + description: 'Manage keys, monitor usage, and access account info', + path: '/developer-tools/dashboard/', + pathPattern: '/developer-tools/dashboard', + }, + ], + dropdownLabel: 'Section:', + defaultSection: 'services', +} + +export const SNAPS_CONFIG: SidebarStaticTitleProps = { + title: 'Snaps', + pathPattern: '/snaps', +} + +export const SMART_ACCOUNTS_KIT_CONFIG: SidebarStaticTitleProps = { + title: 'Smart Accounts Kit', + pathPattern: '/smart-accounts-kit', +} + +export function isPathInSections( + pathname: string, + sections: SidebarSectionDropdownProps['sections'] +): boolean { + return sections.some(section => { + const patterns = Array.isArray(section.pathPattern) + ? section.pathPattern + : [section.pathPattern] + return patterns.some(pattern => pathname.startsWith(pattern)) + }) +} diff --git a/src/components/SidebarVersionDropdown/SidebarVersionDropdown.module.css b/src/components/SidebarVersionDropdown/SidebarVersionDropdown.module.css new file mode 100644 index 00000000000..0e4efb805d9 --- /dev/null +++ b/src/components/SidebarVersionDropdown/SidebarVersionDropdown.module.css @@ -0,0 +1,93 @@ +.dropdown { + position: relative; + font-family: var(--ifm-font-family-base); + border-bottom: 1px solid var(--ifm-toc-border-color); + padding: 0.2rem 0 !important; +} + +.versionItem { + display: flex; + align-items: center; + font-size: 1.7rem; + font-weight: 500; + cursor: pointer; + color: var(--color-text); + user-select: none; + width: 100%; + padding: 0.6rem 2.4rem; +} + +.versionItem:hover { + color: var(--ifm-color-primary); +} + +.chevron { + font-size: 2.2rem; + line-height: 1; + padding: 1rem; +} + +.label { + flex: 1; + line-height: 1.5; +} + +.menu { + position: absolute; + top: 100%; + left: 0; + background: var(--general-white); + border: 1px solid var(--general-gray-light); + border-radius: 4px; + box-shadow: 0 6px 16px rgb(0 0 0 / 10%); + margin-top: 0.3rem; + padding-bottom: 1rem; + z-index: 100; + width: 100%; + min-width: 180px; +} + +.menuItem { + padding: 0.6rem 2.4rem; + font-size: 1.5rem; + font-weight: 400; + cursor: pointer; + color: var(--color-text); + background: var(--general-white); +} + +.menuItem:hover { + background: var(--ifm-hover-overlay); +} + +.menuItem.hovered { + background: var(--ifm-hover-overlay); +} + +.menuItem.selected { + color: var(--ifm-color-primary) !important; + background: var(--general-gray-light); +} + +[data-theme='dark'] .menu { + background: var(--general-black-light) !important; + border-color: var(--general-white) !important; +} + +[data-theme='dark'] .menuItem { + color: var(--general-white) !important; + background: var(--general-black-light) !important; +} + +[data-theme='dark'] .menuItem:hover { + background: var(--general-black-mid) !important; +} + +[data-theme='dark'] .menuItem.selected { + color: var(--ifm-color-primary) !important; + background: var(--general-black-mid) !important; +} + +[data-theme='dark'] .dropdown { + border-bottom: 1px solid var(--general-white); +} diff --git a/src/components/SidebarVersionDropdown/SidebarVersionDropdown.tsx b/src/components/SidebarVersionDropdown/SidebarVersionDropdown.tsx new file mode 100644 index 00000000000..31cafde2bdc --- /dev/null +++ b/src/components/SidebarVersionDropdown/SidebarVersionDropdown.tsx @@ -0,0 +1,103 @@ +import React, { useState, useRef, useEffect } from 'react' +import { useHistory, useLocation } from '@docusaurus/router' +import versions from '@site/gator_versions.json' +import clsx from 'clsx' +import styles from './SidebarVersionDropdown.module.css' + +// Supported versions for the @metamask/delegation-toolkit. +const delegationToolkitVersions = ['0.13.0', '0.12.0'] + +export default function SidebarVersionDropdown({ path = 'smart-accounts-kit' }: { path?: string }) { + const history = useHistory() + const location = useLocation() + const dropdownRef = useRef(null) + const [open, setOpen] = useState(false) + const [hoveredVersion, setHoveredVersion] = useState(null) // State to track hovered item + + const latestVersion = versions[0] + const allVersions = ['current', latestVersion, ...versions.filter(v => v !== latestVersion)] + + const getVersionLabel = (version: string) => { + if (version === 'current') return 'development' + if (version === latestVersion) return `latest (${version})` + if (delegationToolkitVersions.includes(version)) { + return `Delegation Toolkit (${version})` + } + return version + } + + const getActiveVersion = () => { + const segments = location.pathname.split('/') + const versionSegment = segments[2] + + if (versionSegment === 'development') return 'current' + if (!versionSegment || versionSegment === '' || versionSegment === latestVersion) + return latestVersion + if (versions.includes(versionSegment)) return versionSegment + return latestVersion + } + + const currentVersion = getActiveVersion() + + const handleSelect = (version: string) => { + let versionPath = '' + if (version === 'current') { + versionPath = `/${path}/development/` + } else if (version === latestVersion) { + versionPath = `/${path}/` + } else { + versionPath = `/${path}/${version}/` + } + + history.push(versionPath) + setOpen(false) + } + + const toggleDropdown = () => setOpen(prev => !prev) + + useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { + setOpen(false) + } + } + document.addEventListener('mousedown', handleClickOutside) + return () => document.removeEventListener('mousedown', handleClickOutside) + }, []) + + return ( +
    +
    e.key === 'Enter' && toggleDropdown()}> + Version: {getVersionLabel(currentVersion)} + + ▾ + {' '} + {/* Custom class applied here */} +
    + {open && ( +
      + {allVersions.map(version => ( +
    • handleSelect(version)} + role="menuitem" + onMouseEnter={() => setHoveredVersion(version)} // Set hovered version + onMouseLeave={() => setHoveredVersion(null)} // Reset hover on mouse leave + > + {getVersionLabel(version)} +
    • + ))} +
    + )} +
    + ) +} diff --git a/src/components/SimplifiedApiReference/DetailsBox/index.tsx b/src/components/SimplifiedApiReference/DetailsBox/index.tsx new file mode 100644 index 00000000000..eaf04fa4978 --- /dev/null +++ b/src/components/SimplifiedApiReference/DetailsBox/index.tsx @@ -0,0 +1,131 @@ +import React from 'react' +import Heading from '@theme/Heading' +import ParamField from '../ParamField' +import ReactMarkdown from 'react-markdown' +import styles from './styles.module.css' + +interface NestedParam { + name: string + type: string + required: boolean + description: string + children?: NestedParam[] +} + +interface Parameter { + name: string + type: string + required: boolean + description: string + children?: NestedParam[] +} + +interface Error { + code: number | string + message: string + description: string +} + +interface Returns { + type: string + description: string +} + +interface DetailsBoxProps { + method: string + description?: string + parameters: Parameter[] + returns?: Returns + errors: Error[] +} + +const DetailsBox: React.FC = ({ + method, + description, + parameters, + returns, + errors, +}) => { + return ( + <> + + {method} + + + {description && ( +
    + {description} +
    + )} + + + Parameters + + +
    + {parameters.length === 0 ? ( +
    This method doesn't accept any parameters.
    + ) : ( +
    + {parameters.map((param, index) => ( + + ))} +
    + )} +
    + + {returns && ( + <> + + Returns + +
    +
    + {returns.description} +
    +
    + + )} + + {errors.length > 0 && ( + <> + + Errors + +
    + + + + + + + + + {errors.map((error, index) => ( + + + + + ))} + +
    CodeDescription
    + {error.code} + + {error.description} +
    +
    + + )} + + ) +} + +export default DetailsBox diff --git a/src/components/SimplifiedApiReference/DetailsBox/styles.module.css b/src/components/SimplifiedApiReference/DetailsBox/styles.module.css new file mode 100644 index 00000000000..4a8123d455c --- /dev/null +++ b/src/components/SimplifiedApiReference/DetailsBox/styles.module.css @@ -0,0 +1,50 @@ +.title { + font-size: 30px; +} + +.sectionHeading { + padding-top: 1.5rem; + padding-bottom: 1rem; + margin-bottom: 0; +} + +.paramContainer { + margin-bottom: 1rem; +} + +.paramTable { + margin-top: 1rem !important; +} + +.noParams { + padding: 0.5rem 0; + font-size: 1.6rem; +} + +.paramFields { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.returnsInfo { + padding-bottom: 1rem; +} + +.returnsInfo p { + margin: 0.5rem 0; +} + +.returnsInfo p:first-child { + margin-top: 0; +} + +.returnsInfo p:last-child { + margin-bottom: 0; +} + +html[data-theme='dark'] { + .paramTable th { + background: var(--ifm-color-emphasis-200); + } +} diff --git a/src/components/SimplifiedApiReference/Expandable/index.tsx b/src/components/SimplifiedApiReference/Expandable/index.tsx new file mode 100644 index 00000000000..dc99f44a97c --- /dev/null +++ b/src/components/SimplifiedApiReference/Expandable/index.tsx @@ -0,0 +1,26 @@ +import React, { useState } from 'react' +import styles from './styles.module.css' + +interface ExpandableProps { + title: string + children: React.ReactNode +} + +const Expandable: React.FC = ({ title, children }) => { + const [isExpanded, setIsExpanded] = useState(false) + + return ( +
    + + {isExpanded &&
    {children}
    } +
    + ) +} + +export default Expandable diff --git a/src/components/SimplifiedApiReference/Expandable/styles.module.css b/src/components/SimplifiedApiReference/Expandable/styles.module.css new file mode 100644 index 00000000000..fde9334bb19 --- /dev/null +++ b/src/components/SimplifiedApiReference/Expandable/styles.module.css @@ -0,0 +1,55 @@ +.expandable { + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0.5rem; + margin: 0.5rem 0; + overflow: hidden; +} + +.expandableHeader { + width: 100%; + background: var(--ifm-color-emphasis-100); + border: none; + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + text-align: left; + font-size: 1.4rem; + font-weight: 600; + transition: background-color 0.2s ease; +} + +.expandableHeader:hover { + background: var(--ifm-color-emphasis-200); +} + +.expandableTitle { + color: var(--ifm-color-primary); +} + +.expandableIcon { + font-size: 0.8rem; + transition: transform 0.2s ease; + color: var(--ifm-color-emphasis-700); +} + +.expandableIcon.expanded { + transform: rotate(180deg); +} + +.expandableContent { + padding: 1rem; + background: var(--ifm-color-emphasis-50); + border-top: 1px solid var(--ifm-color-emphasis-200); +} + +html[data-theme='dark'] { + .expandableHeader { + background: var(--ifm-color-emphasis-200); + } + + .expandableHeader:hover { + background: var(--ifm-color-emphasis-300); + } +} diff --git a/src/components/SimplifiedApiReference/ParamField/index.tsx b/src/components/SimplifiedApiReference/ParamField/index.tsx new file mode 100644 index 00000000000..7e43c072c6c --- /dev/null +++ b/src/components/SimplifiedApiReference/ParamField/index.tsx @@ -0,0 +1,70 @@ +import React from 'react' +import Expandable from '../Expandable' +import ReactMarkdown from 'react-markdown' +import styles from './styles.module.css' + +interface NestedParam { + name: string + type: string + required: boolean + description: string + children?: NestedParam[] +} + +interface ParamFieldProps { + name: string + type: string + required: boolean + description: string + children?: NestedParam[] + expandableTitle?: string +} + +const ParamField: React.FC = ({ + name, + type, + required, + description, + children = [], + expandableTitle, +}) => { + const hasChildren = children.length > 0 + + const renderNestedParams = (params: NestedParam[], title?: string) => { + if (params.length === 0) return null + + return ( + + {params.map((param, index) => ( + + ))} + + ) + } + + return ( +
    +
    +
    + {name} + ({type}) + {required && required} +
    +
    +
    + {description} +
    + {hasChildren && renderNestedParams(children, expandableTitle)} +
    + ) +} + +export default ParamField diff --git a/src/components/SimplifiedApiReference/ParamField/styles.module.css b/src/components/SimplifiedApiReference/ParamField/styles.module.css new file mode 100644 index 00000000000..2f44b5bef3f --- /dev/null +++ b/src/components/SimplifiedApiReference/ParamField/styles.module.css @@ -0,0 +1,53 @@ +.paramField { + margin-bottom: 1rem; + padding-top: 1rem; +} + +.paramHeader { + margin-bottom: 0.5rem; +} + +.paramName { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.5rem; +} + +.paramName code { + font-family: var(--inline-code-font); + font-size: 1.38rem; + font-weight: var(--inline-code-font-weight); + background-color: var(--ifm-code-background); + border: none; + border-radius: var(--inline-code-border-radius); + padding: var(--inline-code-padding); + position: relative; + top: var(--inline-code-baseline-nudge); +} + +.paramType { + color: var(--ifm-color-emphasis-700); + font-size: 1.4rem; + font-style: italic; +} + +.required { + background: var(--ifm-color-primary); + color: white; + padding: 0rem 0.3rem; + border-radius: 0.25rem; + font-size: 1.2rem; + font-weight: 500; +} + +.paramDescription { + font-size: 1.6rem; +} + +html[data-theme='dark'] { + .required { + color: black; + font-weight: 400; + } +} diff --git a/src/components/SimplifiedApiReference/RequestBox/index.tsx b/src/components/SimplifiedApiReference/RequestBox/index.tsx new file mode 100644 index 00000000000..a6be0016dee --- /dev/null +++ b/src/components/SimplifiedApiReference/RequestBox/index.tsx @@ -0,0 +1,30 @@ +import React from 'react' +import Heading from '@theme/Heading' +import CodeBlock from '@theme/CodeBlock' +import styles from './styles.module.css' + +interface RequestBoxProps { + method: string + exampleRequest: string + exampleResponse: string +} + +const RequestBox: React.FC = ({ method, exampleRequest, exampleResponse }) => { + return ( + <> +
    + + {exampleRequest} + +
    + +
    + + {exampleResponse} + +
    + + ) +} + +export default RequestBox diff --git a/src/components/SimplifiedApiReference/RequestBox/styles.module.css b/src/components/SimplifiedApiReference/RequestBox/styles.module.css new file mode 100644 index 00000000000..c676f9a40b1 --- /dev/null +++ b/src/components/SimplifiedApiReference/RequestBox/styles.module.css @@ -0,0 +1,4 @@ +.cardWrapper { + margin-bottom: 1.5rem; + overflow: hidden; +} diff --git a/src/components/SimplifiedApiReference/index.tsx b/src/components/SimplifiedApiReference/index.tsx new file mode 100644 index 00000000000..5b98a505740 --- /dev/null +++ b/src/components/SimplifiedApiReference/index.tsx @@ -0,0 +1,72 @@ +import React from 'react' +import styles from './styles.module.css' +import DetailsBox from './DetailsBox' +import RequestBox from './RequestBox' + +interface NestedParam { + name: string + type: string + required: boolean + description: string + children?: NestedParam[] +} + +interface SimplifiedApiReferenceProps { + method: string + description?: string + parameters: Array<{ + name: string + type: string + required: boolean + description: string + children?: NestedParam[] + }> + returns?: { + type: string + description: string + } + errors?: Array<{ + code: number | string + message: string + description: string + }> + exampleRequest: string + exampleResponse: string +} + +const SimplifiedApiReference: React.FC = ({ + method, + description, + parameters, + returns, + errors = [], + exampleRequest, + exampleResponse, +}) => { + return ( +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + ) +} + +export default SimplifiedApiReference diff --git a/src/components/SimplifiedApiReference/styles.module.css b/src/components/SimplifiedApiReference/styles.module.css new file mode 100644 index 00000000000..8c8e29b8e79 --- /dev/null +++ b/src/components/SimplifiedApiReference/styles.module.css @@ -0,0 +1,54 @@ +.rowWrap { + display: flex; + flex-wrap: wrap; +} + +.stickyCol { + position: sticky; +} + +.colLeft { + position: relative; + width: calc(100% - 50rem); + border-right: 1px solid var(--ifm-toc-border-color); + overflow: hidden; +} + +.colContentWrap { + height: calc(100vh - 15rem); + padding-right: 2.5rem; + overflow-y: auto; +} + +.colRight { + width: 50rem; + padding-left: 1.5rem; +} + +@media (width <= 1300px) { + .colLeft { + width: 100%; + padding: 0; + border-right: 0; + } + + .colRight { + width: 100%; + padding: 0; + } + + .colContentWrap { + height: auto; + padding: 0; + } + + .rowWrap { + padding: 0; + } +} + +html[data-theme='dark'] { + .colLeft { + border-color: var(--ifm-toc-border-color); + } +} diff --git a/src/components/SkillContent/index.tsx b/src/components/SkillContent/index.tsx new file mode 100644 index 00000000000..e4d87579d26 --- /dev/null +++ b/src/components/SkillContent/index.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import { usePluginData } from '@docusaurus/useGlobalData' +import CodeBlock from '@theme/CodeBlock' + +const SKILL_KEY = 'Web3Auth/skill/refs/heads/main/SKILL.md' + +export default function SkillContent(): JSX.Element { + const files = usePluginData('docusaurus-plugin-virtual-files') as Record + const skill = files?.[SKILL_KEY] ?? '' + + return ( + + {skill} + + ) +} diff --git a/src/components/SnapsAPIReference/Description/index.mdx b/src/components/SnapsAPIReference/Description/index.mdx new file mode 100644 index 00000000000..5a61ceff5a4 --- /dev/null +++ b/src/components/SnapsAPIReference/Description/index.mdx @@ -0,0 +1,3 @@ +import Markdown from 'react-markdown' + +{props.method.description} diff --git a/src/components/SnapsAPIReference/Examples/Example/index.mdx b/src/components/SnapsAPIReference/Examples/Example/index.mdx new file mode 100644 index 00000000000..d14dab98fcb --- /dev/null +++ b/src/components/SnapsAPIReference/Examples/Example/index.mdx @@ -0,0 +1,17 @@ +import CodeBlock from '@theme/CodeBlock' +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +{!props.only &&

    {props.example.title ? props.example.title : `Example ${props.index}`}

    } + +{props.example.examples.length > 1 +? +{props.example.examples.map((example, index) => ( + + +{example.content} + +))} + +: {props.example.examples[0].content} +} diff --git a/src/components/SnapsAPIReference/Examples/index.mdx b/src/components/SnapsAPIReference/Examples/index.mdx new file mode 100644 index 00000000000..a2b86f2a455 --- /dev/null +++ b/src/components/SnapsAPIReference/Examples/index.mdx @@ -0,0 +1,14 @@ +import Example from './Example/index.mdx' + +{props.method.examples.length === 1 ?

    Example

    :

    Examples

    } + +{Array.isArray(props.method.examples) ? +props.method.examples.map((example, index) => ( + + +)) : } diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/ArrayParameter/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/ArrayParameter/index.tsx new file mode 100644 index 00000000000..67638ac19b6 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/ArrayParameter/index.tsx @@ -0,0 +1,43 @@ +import { FunctionComponent } from 'react' +import { ArrayMethodParameter } from '../types' +import styles from '../styles.module.scss' +import { Parameter } from '../index' +import { Header } from '../Header' +import { Description } from '../Description' + +export type ArrayParameterProps = { + parameter: ArrayMethodParameter +} + +function getArrayType(parameter: ArrayMethodParameter): string { + const { element } = parameter + + if (element.kind === 'object') { + return 'object[]' + } + + if (element.kind === 'union') { + return 'union[]' + } + + return `${element.type}[]` +} + +export const ArrayParameter: FunctionComponent = ({ parameter }) => { + const { description, element } = parameter + + return ( +
    +
    +
    + {description && {description}} +
    + + {element.kind !== 'primitive' && ( +
    + +
    + )} +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/Description/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/Description/index.tsx new file mode 100644 index 00000000000..0b4931404ef --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/Description/index.tsx @@ -0,0 +1,15 @@ +import { FunctionComponent } from 'react' +import styles from './styles.module.scss' +import Markdown from 'react-markdown' + +type DescriptionProps = { + children: string +} + +export const Description: FunctionComponent = ({ children }) => { + return ( +
    + {children} +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/Description/styles.module.scss b/src/components/SnapsAPIReference/Parameters/Parameter/Description/styles.module.scss new file mode 100644 index 00000000000..124ab939593 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/Description/styles.module.scss @@ -0,0 +1,10 @@ +.parameter-description { + font-size: 1.4rem; + line-height: 150%; + + p { + font-size: inherit; + line-height: inherit; + margin: 0; + } +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/Header/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/Header/index.tsx new file mode 100644 index 00000000000..8cfa6160ffe --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/Header/index.tsx @@ -0,0 +1,22 @@ +import { FunctionComponent } from 'react' +import { MethodParameter } from '../types' +import styles from './styles.module.scss' + +type HeaderProps = { + parameter: MethodParameter + type?: string +} + +export const Header: FunctionComponent = ({ parameter, type = parameter.type }) => { + const { name, required } = parameter + + return ( +
    +
    + {name &&

    {name}

    } + {type} +
    + {required && required} +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/Header/styles.module.scss b/src/components/SnapsAPIReference/Parameters/Parameter/Header/styles.module.scss new file mode 100644 index 00000000000..047c0396508 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/Header/styles.module.scss @@ -0,0 +1,35 @@ +.parameter-header { + display: flex; + align-items: baseline; + gap: 0.8rem; + margin-bottom: 0.2rem; +} + +.parameter-name { + display: flex; + align-items: baseline; + gap: 0.8rem; +} + +.parameter-description { + p { + font-size: 1.4rem; + line-height: 150%; + margin: 0; + } +} + +.parameter-type { + color: var(--general-gray-dark); + font-size: 1.19rem; + font-style: italic; + + [data-theme='dark'] & { + color: var(--general-gray); + } +} + +.parameter-required { + font-size: 14px; + color: var(--error); +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/ObjectParameter/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/ObjectParameter/index.tsx new file mode 100644 index 00000000000..4b595a61149 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/ObjectParameter/index.tsx @@ -0,0 +1,29 @@ +import { FunctionComponent } from 'react' +import { ObjectMethodParameter } from '../types' +import styles from '../styles.module.scss' +import { Parameter } from '../index' +import { Header } from '../Header' +import { Description } from '../Description' + +export type ObjectParameterProps = { + parameter: ObjectMethodParameter +} + +export const ObjectParameter: FunctionComponent = ({ parameter }) => { + const { description, properties } = parameter + + return ( +
    +
    +
    + {description && {description}} +
    + +
    + {properties.map((property, index) => ( + + ))} +
    +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/PrimitiveParameter/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/PrimitiveParameter/index.tsx new file mode 100644 index 00000000000..041345c5ff0 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/PrimitiveParameter/index.tsx @@ -0,0 +1,22 @@ +import { FunctionComponent } from 'react' +import { PrimitiveMethodParameter } from '../types' +import { Header } from '../Header' +import { Description } from '../Description' +import styles from '../styles.module.scss' + +export type PrimitiveParameterProps = { + parameter: PrimitiveMethodParameter +} + +export const PrimitiveParameter: FunctionComponent = ({ parameter }) => { + const { description } = parameter + + return ( +
    +
    +
    + {description && {description}} +
    +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/UnionParameter/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/UnionParameter/index.tsx new file mode 100644 index 00000000000..36c1373826a --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/UnionParameter/index.tsx @@ -0,0 +1,51 @@ +import { Fragment, FunctionComponent } from 'react' +import { UnionMethodParameter } from '../types' +import styles from '../styles.module.scss' +import { Parameter } from '../index' +import { Header } from '../Header' +import { Description } from '../Description' +import classNames from 'classnames' + +export type UnionParameterProps = { + parameter: UnionMethodParameter +} + +export const UnionParameter: FunctionComponent = ({ parameter }) => { + const { description, options } = parameter + + return ( +
    +
    +
    + {description && {description}} +
    + +

    Options

    +
    + {options.map((property, index, array) => ( + +
    + +
    + {index < array.length - 1 && ( +

    or

    + )} +
    + ))} +
    + + {parameter.commonProperties?.length > 0 && ( + <> +

    Common properties

    +
    + {Object.entries(parameter.commonProperties).map(([key, property]) => ( +
    + +
    + ))} +
    + + )} +
    + ) +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/index.tsx b/src/components/SnapsAPIReference/Parameters/Parameter/index.tsx new file mode 100644 index 00000000000..ed8f8b6a1db --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/index.tsx @@ -0,0 +1,34 @@ +import { FunctionComponent } from 'react' +import { ObjectParameter } from './ObjectParameter' +import { MethodParameter } from './types' +import { PrimitiveParameter } from './PrimitiveParameter' +import { UnionParameter } from './UnionParameter' +import { ArrayParameter } from './ArrayParameter' +import { Description } from '@site/src/components/SnapsAPIReference/Parameters/Parameter/Description' + +type ParameterProps = { + parameter: MethodParameter + root?: boolean +} + +export const Parameter: FunctionComponent = ({ parameter, root }) => { + if (parameter === null || (root && parameter.type === 'null')) { + return This method does not have any parameters. + } + + switch (parameter.kind) { + case 'array': + return + + case 'object': + return + + case 'primitive': + return + + case 'union': + return + } + + return null +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/styles.module.scss b/src/components/SnapsAPIReference/Parameters/Parameter/styles.module.scss new file mode 100644 index 00000000000..c625430aab9 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/styles.module.scss @@ -0,0 +1,19 @@ +.parameter, +.root { + display: block; +} + +.parameter-main { + margin-bottom: 0.8rem; +} + +.parameter-children { + display: flex; + flex-direction: column; + gap: 0.8rem; + padding-left: 1.2rem; +} + +.parameter-separator { + font-style: italic; +} diff --git a/src/components/SnapsAPIReference/Parameters/Parameter/types.ts b/src/components/SnapsAPIReference/Parameters/Parameter/types.ts new file mode 100644 index 00000000000..ecdc410297a --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/Parameter/types.ts @@ -0,0 +1,31 @@ +type CommonMethodParameter = { + type: string + name?: string + description?: string | null + required?: boolean +} +export type ObjectMethodParameter = CommonMethodParameter & { + kind: 'object' + properties: MethodParameter[] +} + +export type PrimitiveMethodParameter = CommonMethodParameter & { + kind: 'primitive' +} + +export type ArrayMethodParameter = CommonMethodParameter & { + kind: 'array' + element: MethodParameter +} + +export type UnionMethodParameter = CommonMethodParameter & { + kind: 'union' + commonProperties: MethodParameter[] + options: MethodParameter[] +} + +export type MethodParameter = + | ObjectMethodParameter + | PrimitiveMethodParameter + | ArrayMethodParameter + | UnionMethodParameter diff --git a/src/components/SnapsAPIReference/Parameters/index.mdx b/src/components/SnapsAPIReference/Parameters/index.mdx new file mode 100644 index 00000000000..74d15cf8a66 --- /dev/null +++ b/src/components/SnapsAPIReference/Parameters/index.mdx @@ -0,0 +1,8 @@ +import { Parameter } from './Parameter' +import styles from './Parameter/styles.module.scss' + +## Parameters + +
    + +
    diff --git a/src/components/SnapsAPIReference/Returns/index.mdx b/src/components/SnapsAPIReference/Returns/index.mdx new file mode 100644 index 00000000000..f3b4ad38dda --- /dev/null +++ b/src/components/SnapsAPIReference/Returns/index.mdx @@ -0,0 +1,5 @@ +import { Parameter } from '../Parameters/Parameter/index.tsx' + +## Returns + + diff --git a/src/components/SnapsAPIReference/Tags/Tag/index.tsx b/src/components/SnapsAPIReference/Tags/Tag/index.tsx new file mode 100644 index 00000000000..e5ef4ed53c4 --- /dev/null +++ b/src/components/SnapsAPIReference/Tags/Tag/index.tsx @@ -0,0 +1,50 @@ +import { CSSProperties, FunctionComponent } from 'react' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import clsx from 'clsx' +import styles from './styles.module.scss' + +const TAG_MAPPING: Record< + string, + { + name: string + color: string + } +> = { + snap: { + name: 'Snap', + color: 'var(--consumer-green)', + }, + website: { + name: 'Website', + color: 'var(--consumer-blue)', + }, + restricted: { + name: 'Restricted', + color: 'var(--consumer-orange)', + }, +} + +export type TagProps = { + name: string +} + +export const Tag: FunctionComponent = ({ name }) => { + const tag = TAG_MAPPING[name] + if (!tag) { + return null + } + + return ( + + + {tag.name} + + + ) +} diff --git a/src/components/SnapsAPIReference/Tags/Tag/styles.module.scss b/src/components/SnapsAPIReference/Tags/Tag/styles.module.scss new file mode 100644 index 00000000000..76fdb452c00 --- /dev/null +++ b/src/components/SnapsAPIReference/Tags/Tag/styles.module.scss @@ -0,0 +1,16 @@ +.tag { + display: flex; + align-items: center; + width: auto; + height: 2.6rem; + font-weight: 500; + padding: 0.7rem 0.9rem; + line-height: 0.8; + color: var(--general-black); + background: var(--color-palette); + + @media (min-width: 997px) { + height: 2.3rem; + line-height: 0.85; + } +} diff --git a/src/components/SnapsAPIReference/Tags/index.tsx b/src/components/SnapsAPIReference/Tags/index.tsx new file mode 100644 index 00000000000..0be342dc8be --- /dev/null +++ b/src/components/SnapsAPIReference/Tags/index.tsx @@ -0,0 +1,30 @@ +import { FunctionComponent } from 'react' +import { Tag } from './Tag' +import styles from './styles.module.scss' + +export type TagsProps = { + method: { + subjectTypes: string[] + restricted: boolean + } +} + +export const Tags: FunctionComponent = ({ method }) => { + return ( + method.subjectTypes.length > 0 && ( +
      + {method.subjectTypes.map(subjectType => ( +
    • + +
    • + ))} + + {method.restricted && ( +
    • + +
    • + )} +
    + ) + ) +} diff --git a/src/components/SnapsAPIReference/Tags/styles.module.scss b/src/components/SnapsAPIReference/Tags/styles.module.scss new file mode 100644 index 00000000000..66ffae33d48 --- /dev/null +++ b/src/components/SnapsAPIReference/Tags/styles.module.scss @@ -0,0 +1,11 @@ +.tags { + display: flex; + flex-wrap: wrap; + gap: 8px; + list-style-type: none !important; + margin-left: 0 !important; + + li { + margin: 0 !important; + } +} diff --git a/src/components/SnapsAPIReference/index.mdx b/src/components/SnapsAPIReference/index.mdx new file mode 100644 index 00000000000..812a2dd61e9 --- /dev/null +++ b/src/components/SnapsAPIReference/index.mdx @@ -0,0 +1,17 @@ +import { Tags } from './Tags' +import Description from './Description/index.mdx' +import Parameters from './Parameters/index.mdx' +import Returns from './Returns/index.mdx' +import Examples from './Examples/index.mdx' + + + +# {props.method.name} + +{props.method.description && ()} + + + +{props.method.result && ()} + +{props.method.examples?.length > 0 && ()} diff --git a/src/components/SnapsSection.tsx b/src/components/SnapsSection.tsx deleted file mode 100644 index 03a0fa5457c..00000000000 --- a/src/components/SnapsSection.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import Card, { type CardItem } from "@site/src/components/Card"; -import Heading from "@theme/Heading"; - -const CardList: CardItem[] = [ - { - title: "🏁 Snaps quickstart", - link: "/snaps/get-started/quickstart", - description: ( - <> - Get started quickly by creating and customizing a simple Snap, using the - Snaps template built with React and TypeScript. - - ), - }, - { - title: "⚙️ Snaps tutorials", - link: "/snaps/learn/tutorials", - description: ( - <> - Follow the step-by-step tutorials to create Snaps that estimate gas - fees, provide transaction insights with custom UI, and more. - - ), - }, - { - title: "🌐 Snaps API", - link: "/snaps/reference/snaps-api", - description: ( - <> - Use the Snaps API to modify the functionality of MetaMask and - communicate between dapps and Snaps. - - ), - }, -]; - -export default function SnapsSection(): JSX.Element { - return ( -
    - - Extend the functionality of MetaMask using Snaps - -

    - A Snap is a JavaScript program run in an isolated environment that - customizes the MetaMask wallet experience. You can create a Snap that - adds new API methods, adds support for different blockchain protocols, - or modifies existing functionalities. -

    -
    - {CardList.map((props, idx) => ( - - ))} -
    -
    - ); -} diff --git a/src/components/SubNavBar/README.md b/src/components/SubNavBar/README.md new file mode 100644 index 00000000000..b1e0292a517 --- /dev/null +++ b/src/components/SubNavBar/README.md @@ -0,0 +1,128 @@ +# SubNavBar Component + +A horizontal sub-navigation component that appears below the main navbar for specific URL patterns in the MetaMask documentation site. + +## Features + +- **Conditional Rendering**: Only shows for configured URL patterns +- **Responsive Design**: Adapts to different screen sizes with horizontal scrolling on mobile +- **Active State**: Highlights the current page link +- **External Links**: Support for external links with visual indicators +- **Dark Mode**: Full support for Docusaurus dark/light theme switching +- **TypeScript**: Fully typed with comprehensive interfaces + +## Usage + +### 1. Component Structure + +```tsx +import SubNavBar from '@site/src/components/SubNavBar' +import { getSubNavConfigForPath } from '@site/src/components/SubNavBar/configs' + +// Get config for current path +const subNavConfig = getSubNavConfigForPath(location.pathname) + +// Render conditionally +{ + subNavConfig && +} +``` + +### 2. Configuration + +The component uses configuration objects to define navigation links for different URL patterns: + +```typescript +export interface SubNavBarConfig { + pathPattern: string | string[] // URL patterns to match + links: SubNavLink[] // Navigation links to show +} + +export interface SubNavLink { + key: string // Unique identifier + label: string // Display text + path: string // URL path + external?: boolean // Whether link is external +} +``` + +### 3. Adding New Sections + +To add a SubNavBar to a new section: + +1. **Create a configuration** in `src/components/SubNavBar/configs.ts`: + +```typescript +export const YOUR_SECTION_SUBNAV_CONFIG: SubNavBarConfig = { + pathPattern: '/your-section', + links: [ + { + key: 'overview', + label: 'Overview', + path: '/your-section/', + }, + { + key: 'guide', + label: 'Guide', + path: '/your-section/guide/', + }, + // Add external links + { + key: 'github', + label: 'GitHub', + path: 'https://github.com/your-repo', + external: true, + }, + ], +} +``` + +2. **Add to the exports** in the same file: + +```typescript +export const ALL_SUBNAV_CONFIGS = [ + // ... existing configs + YOUR_SECTION_SUBNAV_CONFIG, +] +``` + +That's it! The SubNavBar will automatically appear on pages matching your path pattern. + +## Current Configured Sections + +- **Embedded Wallets** (`/embedded-wallets`) - Shows platform-specific navigation (JS, React, Android, iOS, etc.) +- **SDK** (`/sdk`) - Shows SDK documentation sections +- **Wallet API** (`/wallet`) - Shows Wallet API sections +- **Snaps** (`/snaps`) - Shows Snaps development sections +- **Services** (`/services`) - Shows Infura services sections +- **Smart Accounts Kit** (`/smart-accounts-kit`) - Shows MetaMask Smart Accounts Kit sections + +## Styling + +The component uses CSS modules with full dark mode support: + +- Sticky positioning below the main navbar +- Horizontal scrolling on mobile devices +- Active state highlighting with primary color +- Hover effects and transitions +- Responsive typography and spacing + +## Integration + +The SubNavBar is automatically integrated into the main Layout component (`src/theme/Layout/index.tsx`) and will render conditionally based on the current URL path. + +## Path Matching + +The component supports flexible path matching: + +- Single pattern: `pathPattern: '/embedded-wallets'` +- Multiple patterns: `pathPattern: ['/embedded-wallets', '/ew']` +- Matches all sub-paths starting with the pattern + +## Active Link Detection + +Links are marked as active when: + +1. The current path exactly matches the link path +2. The current path starts with the link path (for nested routes) +3. Root path (`/`) requires exact match to avoid false positives diff --git a/src/components/SubNavBar/SubNavBar.module.css b/src/components/SubNavBar/SubNavBar.module.css new file mode 100644 index 00000000000..df04689292e --- /dev/null +++ b/src/components/SubNavBar/SubNavBar.module.css @@ -0,0 +1,191 @@ +.subNavBar { + background: var(--ifm-background-color); + border-bottom: 1px solid var(--ifm-toc-border-color); + padding: 0; + position: sticky; + top: var(--ifm-navbar-height); + z-index: 100; + font-family: var(--ifm-font-family-base); + box-shadow: 0 2px 4px rgb(0 0 0 / 10%); + backdrop-filter: blur(8px); +} + +.container { + margin: 0 auto; + display: flex; + align-items: center; + gap: 0; +} + +/* Section heading - hidden by default, only shown on desktop with sidebar */ +.sectionHeading { + display: none; + font-size: 2rem; + font-weight: 500; + line-height: 1.3; + color: var(--ifm-color-emphasis-1000); + white-space: nowrap; + border-right: 1px solid var(--ifm-toc-border-color); + width: var(--doc-sidebar-width); + flex-shrink: 0; + text-align: left; + padding: 0 2.4rem; +} + +/* Only show section heading on desktop with sidebar */ +@media (width >=997px) { + .sectionHeading { + display: block; + } + + .navContent { + margin-left: 2rem; + } +} + +.navContent { + flex: 1; + min-width: 0; +} + +.linksList { + display: flex; + list-style: none; + margin: 0; + padding: 0; + overflow-x: auto; + scrollbar-width: none; + + /* Firefox */ + -ms-overflow-style: none; + + /* IE and Edge */ +} + +.linksList::-webkit-scrollbar { + display: none; + + /* Chrome, Safari, Opera */ +} + +.linkItem { + flex-shrink: 0; + margin: 0; +} + +.link { + display: block; + padding: 1.2rem 1.5rem; + text-decoration: none !important; + color: var(--ifm-navbar-link-color, var(--ifm-color-emphasis-700)); + font-weight: 500; + font-size: 1.6rem; + white-space: nowrap; + border-bottom: 2px solid transparent; + transition: all 0.2s ease-in-out; + position: relative; +} + +.link:hover { + color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)); + text-decoration: none !important; + background-color: var(--ifm-hover-overlay); +} + +.activeLink { + color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)) !important; + border-bottom-color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)); + font-weight: 600; +} + +.externalLink { + display: flex; + align-items: center; + gap: 0.25rem; +} + +.externalIcon { + font-size: 1.2rem; + opacity: 0.7; +} + +/* Dark mode support */ +[data-theme='dark'] .subNavBar { + background: var(--ifm-background-color); + border-bottom-color: var(--ifm-color-emphasis-300); + box-shadow: 0 2px 4px rgb(0 0 0 / 30%); + backdrop-filter: blur(8px); +} + +[data-theme='dark'] .link { + color: var(--ifm-navbar-link-color, var(--ifm-color-emphasis-700)); +} + +[data-theme='dark'] .link:hover { + color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)); + background-color: var(--ifm-hover-overlay); +} + +[data-theme='dark'] .activeLink { + color: var(--ifm-navbar-link-hover-color, var(--ifm-color-primary)) !important; +} + +[data-theme='dark'] .sectionHeading { + color: var(--ifm-color-emphasis-800); + border-right-color: var(--ifm-color-emphasis-300); +} + +/* Responsive design */ +@media (width <= 996px) { + .container { + padding: 0 var(--ifm-spacing-horizontal); + } +} + +@media (width <= 996px) { + .container { + padding: 0 var(--ifm-spacing-horizontal); + } + + /* Section heading is hidden on mobile anyway, so no special styling needed */ + .link { + padding: 1rem 1.5rem; + font-size: 1.6rem; + } +} + +@media (width <= 768px) { + .container { + padding: 0 1rem; + } + + .link { + padding: 1rem; + font-size: 1.5rem; + } + + .linksList { + overflow-x: auto; + scrollbar-width: none; + -ms-overflow-style: none; + } + + .linksList::-webkit-scrollbar { + display: none; + } +} + +@media (width <= 576px) { + .linksList { + padding: 0 0.5rem; + } + + .link { + padding: 0.9rem 0.8rem; + font-size: 1.4rem; + } + + .sectionHeading { + font-size: 1.2rem; + } +} diff --git a/src/components/SubNavBar/configs.ts b/src/components/SubNavBar/configs.ts new file mode 100644 index 00000000000..e811a717011 --- /dev/null +++ b/src/components/SubNavBar/configs.ts @@ -0,0 +1,109 @@ +import type { SubNavBarConfig } from './index' + +export const EMBEDDED_WALLETS_SUBNAV_CONFIG: SubNavBarConfig = { + pathPattern: '/embedded-wallets', + sectionName: 'Embedded Wallets', + links: [ + { + key: 'overview', + label: 'Overview', + path: '/embedded-wallets', + }, + { + key: 'dashboard', + label: 'Dashboard', + path: '/embedded-wallets/dashboard/', + }, + { + key: 'sdk', + label: 'SDKs', + path: '/embedded-wallets/sdk/', + }, + { + key: 'authentication', + label: 'Authentication', + path: '/embedded-wallets/authentication/', + }, + { + key: 'connect-blockchain', + label: 'EVM', + path: '/embedded-wallets/connect-blockchain/evm/', + }, + { + key: 'connect-blockchain', + label: 'Solana', + path: '/embedded-wallets/connect-blockchain/solana/', + }, + { + key: 'connect-blockchain', + label: 'Other Blockchains', + path: '/embedded-wallets/connect-blockchain/other/', + }, + { + key: 'demo', + label: 'Demo ↗', + path: 'https://ew-demo.metamask.io/', + }, + ], +} + +export const SDK_SUBNAV_CONFIG: SubNavBarConfig = { + pathPattern: '/metamask-connect', + sectionName: 'MetaMask Connect', + links: [ + { + key: 'overview', + label: 'Overview', + path: '/metamask-connect', + }, + { + key: 'multichain', + label: 'Multichain', + path: '/metamask-connect/multichain', + }, + { + key: 'evm', + label: 'EVM', + path: '/metamask-connect/evm', + }, + { + key: 'solana', + label: 'Solana', + path: '/metamask-connect/solana', + }, + ], +} + +// Array of all sub nav configs for easy iteration +export const ALL_SUBNAV_CONFIGS = [EMBEDDED_WALLETS_SUBNAV_CONFIG, SDK_SUBNAV_CONFIG] + +// Helper function to get config for current path +export function getSubNavConfigForPath(pathname: string): SubNavBarConfig | null { + // Find all matching configs + const matchingConfigs = ALL_SUBNAV_CONFIGS.filter(config => { + const patterns = Array.isArray(config.pathPattern) ? config.pathPattern : [config.pathPattern] + return patterns.some(pattern => pathname.startsWith(pattern)) + }) + + // If no matches, return null + if (matchingConfigs.length === 0) { + return null + } + + // If only one match, return it + if (matchingConfigs.length === 1) { + return matchingConfigs[0] + } + + // If multiple matches, return the most specific one (longest pattern) + return matchingConfigs.reduce((mostSpecific, current) => { + const currentPattern = Array.isArray(current.pathPattern) + ? current.pathPattern[0] + : current.pathPattern + const mostSpecificPattern = Array.isArray(mostSpecific.pathPattern) + ? mostSpecific.pathPattern[0] + : mostSpecific.pathPattern + + return currentPattern.length > mostSpecificPattern.length ? current : mostSpecific + }) +} diff --git a/src/components/SubNavBar/index.tsx b/src/components/SubNavBar/index.tsx new file mode 100644 index 00000000000..21a66f4605f --- /dev/null +++ b/src/components/SubNavBar/index.tsx @@ -0,0 +1,97 @@ +import React from 'react' +import { useLocation } from '@docusaurus/router' +import Link from '@docusaurus/Link' +import clsx from 'clsx' +import styles from './SubNavBar.module.css' + +export interface SubNavLink { + key: string + label: string + path: string + external?: boolean +} + +export interface SubNavBarConfig { + pathPattern: string | string[] + sectionName: string + links: SubNavLink[] +} + +interface SubNavBarProps { + config: SubNavBarConfig +} + +export default function SubNavBar({ config }: SubNavBarProps) { + const location = useLocation() + const { pathPattern, sectionName, links } = config + + // Check if current path matches the pattern + const isPatternMatch = (patterns: string | string[], pathname: string): boolean => { + const patternArray = Array.isArray(patterns) ? patterns : [patterns] + return patternArray.some(pattern => pathname.startsWith(pattern)) + } + + // Don't render if current path doesn't match pattern + if (!isPatternMatch(pathPattern, location.pathname)) { + return null + } + + // Check if a link is currently active - finds the most specific match + const isActiveLink = (linkPath: string): boolean => { + // Exact match for the path + if (location.pathname === linkPath) { + return true + } + + // Check if current path starts with this link path + if (linkPath !== '/' && location.pathname.startsWith(linkPath)) { + // Find all matching links (that current path starts with) + const matchingLinks = links.filter( + link => link.path !== '/' && location.pathname.startsWith(link.path) + ) + + // Return true only if this is the longest/most specific match + const longestMatch = matchingLinks.reduce((longest, current) => + current.path.length > longest.path.length ? current : longest + ) + + return longestMatch.path === linkPath + } + + return false + } + + return ( + + ) +} diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx index b6ad083a9ed..d8eab76a587 100644 --- a/src/components/Table/index.tsx +++ b/src/components/Table/index.tsx @@ -1,17 +1,17 @@ -import React from "react"; -import styles from "./table.module.scss"; -import clsx from "clsx"; +import React from 'react' +import styles from './table.module.scss' +import clsx from 'clsx' -type TableCell = string | React.ReactElement; +type TableCell = string | React.ReactElement interface TableRow { - cells: TableCell[]; + cells: TableCell[] } interface ITable { - classes?: string; - thCells: TableCell[]; - trRows?: TableRow[]; + classes?: string + thCells: TableCell[] + trRows?: TableRow[] } export default function Table({ classes, thCells = [], trRows = [] }: ITable) { @@ -42,5 +42,5 @@ export default function Table({ classes, thCells = [], trRows = [] }: ITable) {
    - ); + ) } diff --git a/src/components/Table/table.module.scss b/src/components/Table/table.module.scss index 23d88a66491..bf4b9ae3bb6 100644 --- a/src/components/Table/table.module.scss +++ b/src/components/Table/table.module.scss @@ -1,10 +1,10 @@ :root { --table-border-color: rgba(132, 140, 150, 0.16); --table-bg-color: #fff; - --table-bg-thead-color: #f2f4f6; + --table-bg-thead-color: #e9edf6; } -:root[data-theme="dark"] { +:root[data-theme='dark'] { --table-border-color: rgba(132, 140, 150, 0.16); --table-bg-color: #24272a; --table-bg-thead-color: #24272a; diff --git a/src/components/Text/index.tsx b/src/components/Text/index.tsx index bea166e6930..d6387f870ea 100644 --- a/src/components/Text/index.tsx +++ b/src/components/Text/index.tsx @@ -1,26 +1,22 @@ -import React from "react"; -import styles from "./text.module.scss"; -import clsx from "clsx"; +import React from 'react' +import styles from './text.module.scss' +import clsx from 'clsx' interface IText { - as?: "p" | "h1" | "h2" | "h3"; - children: string | React.ReactElement; - className?: string; + as?: 'p' | 'h1' | 'h2' | 'h3' + children: string | React.ReactElement + className?: string } -export default function Text({ - as = "p", - children, - className, -}: IText): React.JSX.Element { +export default function Text({ as = 'p', children, className }: IText): React.JSX.Element { switch (as) { - case "h1": - return

    {children}

    ; - case "h2": - return

    {children}

    ; - case "h3": - return

    {children}

    ; + case 'h1': + return

    {children}

    + case 'h2': + return

    {children}

    + case 'h3': + return

    {children}

    default: - return

    {children}

    ; + return

    {children}

    } } diff --git a/src/components/Text/text.module.scss b/src/components/Text/text.module.scss index 684fcaba7fc..bc9222aa51e 100644 --- a/src/components/Text/text.module.scss +++ b/src/components/Text/text.module.scss @@ -1,39 +1,31 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --text-color: #fff; } -:root[data-theme="light"] { +:root[data-theme='light'] { --text-color: #141618; } .h1 { - font-size: 32px; font-style: normal; - font-weight: 700; - line-height: 40px; + font-weight: 500; color: var(--text-color); } .h2 { - font-size: 24px; font-style: normal; - font-weight: 700; - line-height: 32px; + font-weight: 500; color: var(--text-color); } .h3 { - font-size: 18px; font-style: normal; - font-weight: 700; - line-height: 24px; + font-weight: 500; color: var(--text-color); } .p { - font-size: 16px; font-style: normal; font-weight: 400; - line-height: 24px; color: var(--text-color); } diff --git a/src/components/Tooltip/index.tsx b/src/components/Tooltip/index.tsx index b1577336792..ca5be1777b2 100644 --- a/src/components/Tooltip/index.tsx +++ b/src/components/Tooltip/index.tsx @@ -1,15 +1,15 @@ -import React, { ReactNode } from "react"; -import styles from "./tooltip.module.css"; -import { Tooltip as ReactTippy } from "react-tippy"; -import "react-tippy/dist/tippy.css"; -import clsx from "clsx"; +import React, { ReactNode } from 'react' +import styles from './tooltip.module.css' +import { Tooltip as ReactTippy } from 'react-tippy' +import 'react-tippy/dist/tippy.css' +import clsx from 'clsx' interface TooltipProps { - children: ReactNode; - message: string; - disabled?: boolean; - className?: string; - onHidden?: VoidFunction; + children: ReactNode + message: string + disabled?: boolean + className?: string + onHidden?: VoidFunction } export const Tooltip = ({ @@ -25,15 +25,10 @@ export const Tooltip = ({ disabled={disabled} arrow={true} onHidden={onHidden} - html={ -
    - {message} -
    - } + html={
    {message}
    } position="top" - interactive={true} - > + interactive={true}> {children} -); +) diff --git a/src/components/Tooltip/tooltip.module.css b/src/components/Tooltip/tooltip.module.css index ba95a548ca3..8464a78296f 100644 --- a/src/components/Tooltip/tooltip.module.css +++ b/src/components/Tooltip/tooltip.module.css @@ -1,8 +1,8 @@ .tooltipContainer { - max-width: 180px; - font-size: 16px; + max-width: 180px; + font-size: 16px; } .tooltipContainer::first-letter { - text-transform: capitalize; -} \ No newline at end of file + text-transform: capitalize; +} diff --git a/src/components/TutorialsPage/CustomSelect.module.css b/src/components/TutorialsPage/CustomSelect.module.css new file mode 100644 index 00000000000..743bed1df5c --- /dev/null +++ b/src/components/TutorialsPage/CustomSelect.module.css @@ -0,0 +1,348 @@ +.customSelect { + position: relative; + min-width: 200px; + max-width: 300px; + width: 100%; + font-weight: 400; + font-size: 14px; + line-height: 125%; + box-sizing: border-box; + overflow: visible; +} + +.control { + background: var(--ifm-background-surface-color); + color: var(--ifm-font-color-base); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 10px; + min-height: 48px; + height: 48px; + max-height: none; + box-shadow: none; + margin: 0; + align-self: center; + display: flex; + align-items: center; + cursor: pointer; + transition: all 0.15s ease; + box-sizing: border-box; +} + +.control:hover { + border-color: var(--ifm-color-emphasis-400); +} + +.controlFocused { + box-shadow: 0 0 0 2px + rgb(var(--ifm-color-primary-r) var(--ifm-color-primary-g) var(--ifm-color-primary-b) / 20%); + border-color: var(--ifm-color-primary); +} + +.controlFocused:hover { + border-color: var(--ifm-color-primary); +} + +.controlExpanded { + height: auto; + align-items: flex-start; +} + +.valueContainer { + padding: 8px 12px; + height: 30px; + overflow: hidden; + box-sizing: border-box; + flex: 1; + display: flex; + align-items: center; + flex-wrap: nowrap; + gap: 4px; +} + +.valueContainerExpanded { + height: auto; + overflow: visible; + align-items: flex-start; + flex-wrap: wrap; +} + +.multiValueContainer { + display: flex; + flex-wrap: wrap; + gap: 4px; + align-items: flex-start; + width: 100%; + overflow: visible; +} + +.multiValue { + color: var(--ifm-color-primary); + background-color: var(--ifm-color-primary-lightest); + font-weight: 500; + font-size: 14px; + line-height: 1.2; + border: none; + border-radius: 6px; + margin: 2px; + display: flex; + align-items: center; + max-width: 100%; +} + +.multiValueLabel { + color: var(--ifm-color-primary); + font-weight: 500; + font-size: 14px; + padding: 4px 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.multiValueRemove { + color: var(--ifm-color-primary); + border-radius: 0 6px 6px 0; + background: none; + border: none; + padding: 4px 8px; + cursor: pointer; + font-size: 16px; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.15s ease; +} + +.multiValueRemove:hover { + background-color: var(--ifm-color-primary-lighter); + color: var(--ifm-color-primary-dark); +} + +.placeholder { + color: var(--ifm-color-emphasis-600); + font-size: 14px; + padding: 4px 8px; + line-height: 30px; +} + +.indicatorsContainer { + height: 46px; + padding: 0 8px; + box-sizing: border-box; + display: flex; + align-items: center; + gap: 4px; +} + +.indicatorsContainerExpanded { + align-items: flex-start; + padding: 8px; + height: auto; +} + +.clearIndicator { + color: var(--ifm-color-emphasis-600); + background: none; + border: none; + cursor: pointer; + font-size: 16px; + font-weight: bold; + padding: 4px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.15s ease; +} + +.clearIndicator:hover { + color: var(--ifm-color-danger); +} + +.dropdownIndicator { + color: var(--ifm-color-emphasis-600); + font-size: 12px; + transition: + transform 0.15s ease, + color 0.15s ease; + user-select: none; +} + +.dropdownIndicatorRotated { + transform: rotate(180deg); +} + +.dropdownIndicator:hover { + color: var(--ifm-color-primary); +} + +.menu { + background: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 10px; + box-shadow: + 0 4px 6px -1px rgb(0 0 0 / 10%), + 0 2px 4px -1px rgb(0 0 0 / 6%); + z-index: 9999; + position: absolute; + top: 100%; + left: 0; + right: 0; + margin-top: 4px; + max-height: 300px; + overflow-y: auto; + width: 100%; + box-sizing: border-box; +} + +.menuList { + padding: 4px 0; +} + +.option { + padding: 8px 12px; + cursor: pointer; + background-color: transparent; + color: var(--ifm-font-color-base); + font-size: 14px; + transition: background-color 0.15s ease; + display: flex; + align-items: center; + justify-content: space-between; +} + +.option:hover { + background-color: var(--ifm-color-primary-lightest); +} + +.optionSelected { + background-color: var(--ifm-color-primary); + color: white; +} + +.optionSelected:hover { + background-color: var(--ifm-color-primary-dark); +} + +.optionLabel { + flex: 1; + text-align: left; +} + +.optionRemove { + background: none; + border: none; + color: white; + cursor: pointer; + font-size: 16px; + font-weight: bold; + padding: 2px 6px; + margin-left: 8px; + border-radius: 3px; + transition: all 0.15s ease; + display: flex; + align-items: center; + justify-content: center; + min-width: 20px; + height: 20px; +} + +.optionRemove:hover { + background-color: rgb(255 255 255 / 20%); +} + +/* Mobile responsive styles */ +@media (width <=768px) { + .customSelect { + min-width: 100%; + max-width: 100%; + width: 100%; + position: relative; + } + + .control { + width: 100%; + min-width: 100%; + max-width: 100%; + min-height: 48px; + height: 48px; + max-height: none; + box-sizing: border-box; + } + + .controlExpanded { + height: auto; + } + + .menu { + width: 100%; + min-width: 100%; + max-width: 100%; + left: 0; + right: 0; + box-sizing: border-box; + max-height: 250px; + } + + .valueContainer { + padding: 8px 12px; + box-sizing: border-box; + } + + .multiValue { + max-width: calc(100% - 16px); + box-sizing: border-box; + } + + .multiValueLabel { + max-width: 120px; + text-overflow: ellipsis; + overflow: hidden; + } +} + +/* Very small screens */ +@media (width <=480px) { + .customSelect { + font-size: 13px; + } + + .control { + min-height: 44px; + height: 44px; + } + + .valueContainer { + padding: 6px 10px; + } + + .placeholder { + font-size: 13px; + padding: 4px 6px; + } + + .multiValue { + font-size: 12px; + margin: 1px; + } + + .multiValueLabel { + font-size: 12px; + padding: 3px 6px; + max-width: 100px; + } + + .multiValueRemove { + padding: 3px 6px; + font-size: 14px; + } + + .option { + padding: 6px 10px; + font-size: 13px; + } + + .menu { + max-height: 200px; + } +} diff --git a/src/components/TutorialsPage/CustomSelect.tsx b/src/components/TutorialsPage/CustomSelect.tsx new file mode 100644 index 00000000000..2558dc61c8d --- /dev/null +++ b/src/components/TutorialsPage/CustomSelect.tsx @@ -0,0 +1,163 @@ +import React, { useState, useRef, useEffect } from 'react' +import styles from './CustomSelect.module.css' + +export interface OptionType { + label: string + value: string +} + +interface CustomSelectProps { + options: OptionType[] + placeholder: string + onChange: (selectedOptions: OptionType[]) => void + value?: OptionType[] + isMulti?: boolean +} + +const CustomSelect: React.FC = ({ + options, + placeholder, + onChange, + value = [], + isMulti = true, +}) => { + const [isOpen, setIsOpen] = useState(false) + const [selectedOptions, setSelectedOptions] = useState(value) + const dropdownRef = useRef(null) + + useEffect(() => { + setSelectedOptions(value) + }, [value]) + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsOpen(false) + } + } + + document.addEventListener('mousedown', handleClickOutside) + return () => { + document.removeEventListener('mousedown', handleClickOutside) + } + }, []) + + const handleOptionClick = (option: OptionType) => { + let newSelectedOptions: OptionType[] + + if (isMulti) { + const isSelected = selectedOptions.some(selected => selected.value === option.value) + if (isSelected) { + newSelectedOptions = selectedOptions.filter(selected => selected.value !== option.value) + } else { + newSelectedOptions = [...selectedOptions, option] + } + } else { + newSelectedOptions = [option] + setIsOpen(false) + } + + setSelectedOptions(newSelectedOptions) + onChange(newSelectedOptions) + } + + const handleRemoveOption = (optionToRemove: OptionType, event: React.MouseEvent) => { + event.stopPropagation() + const newSelectedOptions = selectedOptions.filter( + selected => selected.value !== optionToRemove.value + ) + setSelectedOptions(newSelectedOptions) + onChange(newSelectedOptions) + } + + const handleClearAll = (event: React.MouseEvent) => { + event.stopPropagation() + setSelectedOptions([]) + onChange([]) + } + + const toggleDropdown = () => { + setIsOpen(!isOpen) + } + + const isOptionSelected = (option: OptionType) => { + return selectedOptions.some(selected => selected.value === option.value) + } + + const hasMultipleSelections = selectedOptions.length >= 2 + + return ( +
    +
    +
    + {selectedOptions.length === 0 ? ( + {placeholder} + ) : ( +
    + {selectedOptions.map(option => ( +
    + {option.label} + +
    + ))} +
    + )} +
    +
    + {selectedOptions.length > 0 && ( + + )} + + ▼ + +
    +
    + + {isOpen && ( +
    +
    + {options.map(option => ( +
    handleOptionClick(option)}> + {option.label} + {isOptionSelected(option) && ( + + )} +
    + ))} +
    +
    + )} +
    + ) +} + +export default CustomSelect diff --git a/src/components/TutorialsPage/GuideCard.tsx b/src/components/TutorialsPage/GuideCard.tsx new file mode 100644 index 00000000000..6a72bdeacca --- /dev/null +++ b/src/components/TutorialsPage/GuideCard.tsx @@ -0,0 +1,108 @@ +import React from 'react' +import Link from '@docusaurus/Link' +import Badge from '@site/src/components/Badge' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import styles from './GuideCard.module.css' + +interface TutorialCardProps { + title: string + description: string + link: string + image?: string + tags?: string[] + author?: string + date?: string + type?: string + searchInput?: string + activeTags?: string[] +} + +export default function TutorialCard({ + title, + description, + link, + image, + tags = [], + author, + date, + type, + searchInput = '', + activeTags = [], +}: TutorialCardProps) { + const { siteConfig } = useDocusaurusContext() + const { baseUrl } = siteConfig + + function highlightSearchText(text: string) { + if (!searchInput.trim()) { + return text + } + + const searchTerms = searchInput.trim().split(/\s+/) + const regex = new RegExp(`(${searchTerms.join('|')})`, 'gi') + + // Use replace to find matches and build result + let lastIndex = 0 + const elements: React.ReactNode[] = [] + let match + + // Reset regex lastIndex to avoid stateful issues + regex.lastIndex = 0 + + while ((match = regex.exec(text)) !== null) { + // Add text before the match + if (match.index > lastIndex) { + elements.push(text.slice(lastIndex, match.index)) + } + + // Add the highlighted match + elements.push({match[0]}) + + lastIndex = match.index + match[0].length + + // Prevent infinite loop with zero-length matches + if (match.index === regex.lastIndex) { + regex.lastIndex++ + } + } + + // Add remaining text after last match + if (lastIndex < text.length) { + elements.push(text.slice(lastIndex)) + } + + return {elements} + } + + return ( +
    + + {image && ( +
    + {title} +
    + )} + +
    +

    {highlightSearchText(title)}

    +

    {highlightSearchText(description)}

    +
    + + + {tags.length > 0 && ( +
    + {tags.map(tag => ( + + ))} +
    + )} + + {(author || date) && ( +
    {author && date && `${author} | ${date}`}
    + )} +
    + ) +} diff --git a/src/components/TutorialsPage/TutorialCard.module.css b/src/components/TutorialsPage/TutorialCard.module.css new file mode 100644 index 00000000000..25fad44255d --- /dev/null +++ b/src/components/TutorialsPage/TutorialCard.module.css @@ -0,0 +1,208 @@ +:root { + --card-border-radius: 12px; + --card-shadow: 0 2px 8px rgb(0 0 0 / 5%); + --card-shadow-hover: 0 4px 16px rgb(0 0 0 / 10%); + --card-padding: 24px; + --card-gap: 16px; +} + +.card { + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: var(--card-border-radius); + box-shadow: var(--card-shadow); + overflow: hidden; + transition: all 0.2s ease-in-out; + height: 100%; + display: flex; + flex-direction: column; + width: 100%; + box-sizing: border-box; +} + +.card:hover { + box-shadow: var(--card-shadow-hover); + transform: translateY(-2px); + border-color: var(--ifm-color-emphasis-300); +} + +.cardLink { + text-decoration: none; + color: inherit; + display: flex; + flex-direction: column; + flex: 1; +} + +.cardLink:hover { + text-decoration: none; + color: inherit; +} + +.imageContainer { + width: 100%; + height: 200px; + overflow: hidden; + background-color: var(--ifm-color-emphasis-100); + position: relative; +} + +.image { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.2s ease-in-out; +} + +.card:hover .image { + transform: scale(1.02); +} + +.content { + padding: var(--card-padding); + flex: 1; + display: flex; + flex-direction: column; + gap: var(--card-gap); +} + +.typeContainer { + margin-bottom: 8px; +} + +.title { + font-size: 20px; + font-weight: 700; + line-height: 1.4; + color: var(--ifm-font-color-base); + margin: 0; + margin-bottom: 12px; +} + +.description { + font-size: 16px; + line-height: 1.5; + color: var(--ifm-color-emphasis-700); + margin: 0; + flex: 1; +} + +.tagsContainer { + padding: 0 var(--card-padding) var(--card-padding); + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.meta { + padding: 0 var(--card-padding) var(--card-padding); + font-size: 14px; + color: var(--ifm-color-emphasis-600); + border-top: 1px solid var(--ifm-color-emphasis-200); + padding-top: 16px; +} + +/* Search highlight styling */ +mark { + background-color: #fef3c7; + color: #92400e; + padding: 2px 4px; + border-radius: 4px; + font-weight: 500; +} + +/* Dark theme adjustments */ +html[data-theme='dark'] { + --card-shadow: 0 2px 8px rgb(0 0 0 / 20%); + --card-shadow-hover: 0 4px 16px rgb(0 0 0 / 30%); +} + +html[data-theme='dark'] .card { + background-color: var(--ifm-background-surface-color); + border-color: var(--ifm-color-emphasis-300); +} + +html[data-theme='dark'] .card:hover { + border-color: var(--ifm-color-emphasis-400); +} + +html[data-theme='dark'] .imageContainer { + background-color: var(--ifm-color-emphasis-200); +} + +html[data-theme='dark'] .meta { + border-top-color: var(--ifm-color-emphasis-300); +} + +html[data-theme='dark'] mark { + background-color: #451a03; + color: #fbbf24; +} + +/* Mobile responsive adjustments */ +@media (width <=768px) { + .card { + margin: 0; + max-width: 100%; + } + + .imageContainer { + height: 180px; + } + + .content { + padding: 20px; + } + + .title { + font-size: 18px; + line-height: 1.3; + margin-bottom: 10px; + } + + .description { + font-size: 14px; + line-height: 1.4; + } + + .tagsContainer { + padding: 0 20px 20px; + gap: 6px; + } + + .meta { + padding: 0 20px 20px; + font-size: 13px; + padding-top: 12px; + } +} + +@media (width <=480px) { + .imageContainer { + height: 160px; + } + + .content { + padding: 16px; + } + + .title { + font-size: 16px; + margin-bottom: 8px; + } + + .description { + font-size: 14px; + } + + .tagsContainer { + padding: 0 16px 16px; + gap: 4px; + } + + .meta { + padding: 0 16px 16px; + font-size: 12px; + padding-top: 10px; + } +} diff --git a/src/components/TutorialsPage/TutorialCard.tsx b/src/components/TutorialsPage/TutorialCard.tsx new file mode 100644 index 00000000000..f70b1d422a8 --- /dev/null +++ b/src/components/TutorialsPage/TutorialCard.tsx @@ -0,0 +1,108 @@ +import React from 'react' +import Link from '@docusaurus/Link' +import Badge from '@site/src/components/Badge' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import styles from './TutorialCard.module.css' + +interface TutorialCardProps { + title: string + description: string + link: string + image?: string + tags?: string[] + author?: string + date?: string + type?: string + searchInput?: string + activeTags?: string[] +} + +export default function TutorialCard({ + title, + description, + link, + image, + tags = [], + author, + date, + type, + searchInput = '', + activeTags = [], +}: TutorialCardProps) { + const { siteConfig } = useDocusaurusContext() + const { baseUrl } = siteConfig + + function highlightSearchText(text: string) { + if (!searchInput.trim()) { + return text + } + + const searchTerms = searchInput.trim().split(/\s+/) + const regex = new RegExp(`(${searchTerms.join('|')})`, 'gi') + + // Use replace to find matches and build result + let lastIndex = 0 + const elements: React.ReactNode[] = [] + let match + + // Reset regex lastIndex to avoid stateful issues + regex.lastIndex = 0 + + while ((match = regex.exec(text)) !== null) { + // Add text before the match + if (match.index > lastIndex) { + elements.push(text.slice(lastIndex, match.index)) + } + + // Add the highlighted match + elements.push({match[0]}) + + lastIndex = match.index + match[0].length + + // Prevent infinite loop with zero-length matches + if (match.index === regex.lastIndex) { + regex.lastIndex++ + } + } + + // Add remaining text after last match + if (lastIndex < text.length) { + elements.push(text.slice(lastIndex)) + } + + return {elements} + } + + return ( +
    + + {image && ( +
    + {title} +
    + )} + +
    +

    {highlightSearchText(title)}

    +

    {highlightSearchText(description)}

    +
    + + + {tags.length > 0 && ( +
    + {tags.map(tag => ( + + ))} +
    + )} + + {(author || date) && ( +
    {author && date && `${author} | ${date}`}
    + )} +
    + ) +} diff --git a/src/components/TutorialsPage/index.tsx b/src/components/TutorialsPage/index.tsx new file mode 100644 index 00000000000..3fb283cc1fa --- /dev/null +++ b/src/components/TutorialsPage/index.tsx @@ -0,0 +1,228 @@ +/* eslint-disable no-restricted-globals */ +/* eslint-disable react/no-array-index-key */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable jsx-a11y/click-events-have-key-events */ +/* eslint-disable jsx-a11y/no-static-element-interactions */ +import Head from '@docusaurus/Head' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import Layout from '@theme/Layout' +import { TutorialsInterface, platformMap, productMap } from '../../utils/tutorials-map' + +import { useState, useEffect } from 'react' +import Hero from '@site/src/components/Hero/Hero' +import Input from '@site/src/components/Input' +import TutorialCard from './TutorialCard' +import CustomSelect, { OptionType } from './CustomSelect' +import styles from './styles.module.css' + +export default function Tutorials({ content = {} }: TutorialsInterface) { + const safeContent = content || {} + + const completeTutorials = Object.entries(safeContent) + .map(([key, value]) => { + return { ...value, link: `/tutorials/${key}` } + }) + .filter(Boolean) + .sort((a: any, b: any) => { + if (a.pinned && !b.pinned) return -1 + if (!a.pinned && b.pinned) return 1 + const aDate = new Date(a.date) + const bDate = new Date(b.date) + return +bDate - +aDate + }) + + const [searchInput, setSearchInput] = useState('') + const [tags, setTags] = useState([]) + const [productFilter, setProductFilter] = useState([]) + const [platformFilter, setPlatformFilter] = useState([]) + const [selectedProducts, setSelectedProducts] = useState([]) + const [selectedPlatforms, setSelectedPlatforms] = useState([]) + const [filteredTutorials, setFilteredTutorials] = useState(completeTutorials) + const { siteConfig } = useDocusaurusContext() + const rootUrl = + (siteConfig.url ?? '').replace(/\/$/, '') + + ((siteConfig.baseUrl ?? '/') === '/' ? '' : (siteConfig.baseUrl ?? '').replace(/\/$/, '')) + + // Apply tag filters first + useEffect(() => { + let filtered = completeTutorials + + if (productFilter.length > 0 || platformFilter.length > 0) { + filtered = completeTutorials.filter(item => { + if (!item || !item.tags || !Array.isArray(item.tags)) return false + + const prodFil = + productFilter.length === 0 || productFilter.some(tag => item.tags.includes(tag)) + const platFil = + platformFilter.length === 0 || platformFilter.some(tag => item.tags.includes(tag)) + + return prodFil && platFil + }) + } + + setFilteredTutorials(filtered) + }, [productFilter, platformFilter, completeTutorials]) + + const onChangeProduct = (selectedOptions: OptionType[]) => { + const filterValue = selectedOptions ? selectedOptions.map(item => item.value) : [] + setSelectedProducts(selectedOptions) + setProductFilter(filterValue) + setTags([...platformFilter, ...filterValue]) + } + + const onChangePlatform = (selectedOptions: OptionType[]) => { + const filterValue = selectedOptions ? selectedOptions.map(item => item.value) : [] + setSelectedPlatforms(selectedOptions) + setPlatformFilter(filterValue) + setTags([...productFilter, ...filterValue]) + } + + function highlightSearchText(text) { + if (!searchInput.trim()) { + return text + } + + const searchTerms = searchInput.trim().split(/\s+/) + const regex = new RegExp(`(${searchTerms.join('|')})`, 'gi') + + // Use replace to find matches and build result + let lastIndex = 0 + const elements = [] + let match + + // Reset regex lastIndex to avoid stateful issues + regex.lastIndex = 0 + + while ((match = regex.exec(text)) !== null) { + // Add text before the match + if (match.index > lastIndex) { + elements.push(text.slice(lastIndex, match.index)) + } + + // Add the highlighted match + elements.push({match[0]}) + + lastIndex = match.index + match[0].length + + // Prevent infinite loop with zero-length matches + if (match.index === regex.lastIndex) { + regex.lastIndex++ + } + } + + // Add remaining text after last match + if (lastIndex < text.length) { + elements.push(text.slice(lastIndex)) + } + + return {elements} + } + + function onChangeSearch(input) { + setSearchInput(input) + } + + // Filter the already filtered tutorials based on search + const displayedTutorials = filteredTutorials.filter(item => { + if (!item) return false // Skip null items + if (!searchInput.trim()) return true + + const searchTerms = searchInput.toLowerCase().trim().split(/\s+/) + return searchTerms.every( + term => + (item.title && item.title.toLowerCase().includes(term)) || + (item.description && item.description.toLowerCase().includes(term)) || + (item.tags && + Array.isArray(item.tags) && + item.tags.some(tag => tag.toLowerCase().includes(term))) + ) + }) + + // No transformation needed - we'll render TutorialCard directly + + const tutorialsImage = `${rootUrl}/img/tutorialsog.jpg` + + return ( + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + {displayedTutorials.length > 0 ? ( +
    + {displayedTutorials.map((item: any) => ( + + ))} +
    + ) : ( +
    +

    No results found

    +
    + )} +
    +
    + ) +} diff --git a/src/components/TutorialsPage/styles.module.css b/src/components/TutorialsPage/styles.module.css new file mode 100644 index 00000000000..6d08b7d7259 --- /dev/null +++ b/src/components/TutorialsPage/styles.module.css @@ -0,0 +1,721 @@ +.header { + width: 100%; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: space-between; + padding: 5% 5% 16px; +} + +.header h1 { + font-weight: 700; + font-size: 48px; + line-height: 150%; +} + +.header h1::after { + display: none; +} + +.header p { + color: var(--w3a-color-icon-gray); + font-weight: 500; + font-size: 14px; + line-height: 150%; +} + +.container { + width: 90%; + display: flex; + flex-flow: row wrap; + margin: 5%; + margin-top: 20px; + margin-bottom: 60px; + justify-content: space-between; + max-width: 100%; + box-sizing: border-box; + overflow: visible; +} + +.article { + width: 90%; + color: var(--ifm-font-color-base); + text-decoration: none; + padding: 0 8px; + margin-top: 20px; + margin-bottom: 20px; + max-width: 550px; +} + +.article img { + top: 0; + left: 0; + opacity: 1; + border-radius: 20px; + margin-bottom: 8px; +} + +.article:hover { + text-decoration: none; +} + +.articleContent:hover img { + opacity: 0.7; + cursor: pointer; +} + +.article .contentContainer { + padding: 0 8px; +} + +.article h3 { + font-family: var(--ifm-font-family-base); + font-size: 20px; + font-weight: 700; + line-height: 30px; + color: var(--ifm-font-color-base); +} + +.article p { + font-family: var(--ifm-font-family-base); + font-size: 16px; + line-height: 20px; + color: var(--ifm-font-color-base); +} + +.date { + color: var(--ifm-color-emphasis-500); + font-size: 14px; + padding: 2px; +} + +.tagContainer { + width: 100%; + max-width: 550px; + display: flex; + align-items: center; + justify-content: flex-start; + flex-direction: row; + overflow: scroll hidden; + gap: 5px; + -ms-overflow-style: none; + + /* IE and Edge */ + scrollbar-width: none; + + /* Firefox */ +} + +/* Hide scrollbar for Chrome, Safari and Opera */ +.tagContainer::-webkit-scrollbar { + display: none; +} + +.tag { + font-weight: 500; + font-size: 12px; + line-height: 150%; + padding: 2px 10px; + height: 22px; + background-color: var(--ifm-color-emphasis-200); + color: var(--ifm-color-emphasis-600); + border-radius: 30px; + display: flex; + align-items: center; + justify-content: center; + overflow: visible; + white-space: nowrap; +} + +.tagActive { + font-weight: 500; + font-size: 12px; + line-height: 150%; + padding: 2px 10px; + height: 22px; + background-color: var(--w3a-color-indigo-background); + color: var(--w3a-color-indigo); + border-radius: 30px; + display: flex; + align-items: center; + justify-content: center; + overflow: visible; + white-space: nowrap; +} + +.headerInteractionArea { + display: flex; + flex-direction: column; + width: 100%; + margin-top: 32px; + margin-bottom: 48px; + align-items: flex-start; + gap: 24px; + padding: 0 8px; + overflow: visible; +} + +.searchArea { + width: 100%; + display: flex; + flex-flow: row wrap; + align-items: center; + justify-content: flex-start; + gap: 16px; + overflow: visible; +} + +.searchInput { + flex: 1; + min-width: 280px; + max-width: 400px; + align-self: center; + display: flex; + align-items: center; + margin: 0; + padding: 0; +} + +/* Target the Input component wrapper specifically */ +.searchInput > label { + margin: 0 !important; + width: 100%; + align-self: center; + display: flex; + align-items: center; +} + +/* Ensure input component has same baseline as selects */ +.searchInput input { + margin: 0 !important; + vertical-align: top !important; + border-color: var(--ifm-color-emphasis-300) !important; + background-color: var(--ifm-background-surface-color) !important; + box-sizing: border-box !important; + flex: 1; +} + +/* Ensure consistent minimum heights for all form elements */ +.searchArea input { + height: 48px; + min-height: 48px; + max-height: 48px; +} + +.searchArea > div { + min-height: 48px; + height: auto; + max-height: none; +} + +/* Style the custom select components to match */ +.searchArea .customSelect { + min-width: 200px; + max-width: 300px; + flex-shrink: 0; + margin: 0; + align-self: center; +} + +/* Add focus states for better accessibility */ +.searchArea input:focus { + border-color: var(--ifm-color-primary) !important; + box-shadow: 0 0 0 2px + rgb(var(--ifm-color-primary-r) var(--ifm-color-primary-g) var(--ifm-color-primary-b) / 20%) !important; + outline: none !important; +} + +@media (width <=768px) { + .headerInteractionArea { + padding: 0 16px; + margin-top: 24px; + margin-bottom: 32px; + gap: 16px; + } + + .searchArea { + flex-direction: column; + align-items: stretch; + gap: 12px; + width: 100%; + padding: 0; + margin: 0; + } + + .searchInput { + min-width: 100%; + max-width: 100%; + width: 100%; + margin: 0; + } + + .searchInput input { + width: 100% !important; + box-sizing: border-box !important; + } + + .searchArea .customSelect { + min-width: 100% !important; + max-width: 100% !important; + width: 100% !important; + margin: 0; + } +} + +mark { + background-color: #fef3c7; + color: #92400e; + padding: 2px 4px; + border-radius: 4px; + font-weight: 500; +} + +html[data-theme='dark'] mark { + background-color: #451a03; + color: #fbbf24; +} + +.filterButton { + width: 100%; + max-width: 175px; + height: 42px; + background-color: var(--ifm-background-surface-color); + align-items: center; + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 20.5px; + padding: 10px; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 125%; + color: var(--w3a-color-icon-gray); +} + +.filterButton:hover { + background-color: var(--ifm-footer-background-color); + cursor: pointer; +} + +.filterButton:active { + border-width: 2px; + padding: 9px; +} + +.searchBox { + width: 100%; + max-width: 276px; + height: 42px; + display: flex; + flex-direction: row; + align-items: center; + border-style: solid; + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 8px; + padding: 10px; + background-color: var(--ifm-background-surface-color); + color: var(--ifm-font-color-base); +} + +.searchIcon { + height: 18px; + width: 18px; + color: var(--w3a-color-icon-gray); +} + +.searchBox:focus-within { + border-width: 2px; + padding: 9px; +} + +.searchTerm { + width: 100%; + padding: 5px; + padding-left: 12px; + height: 24px; + border: 0; + outline: none; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 125%; + background-color: var(--ifm-background-surface-color); + color: var(--ifm-font-color-base); +} + +.searchClearButton { + border: 0; + background-color: var(--ifm-background-surface-color); + padding: 5px; + align-items: center; + display: flex; + height: 24px; + width: 24px; +} + +.cardsGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); + gap: 24px; + margin-top: 0; + padding: 0 8px 16px; + width: 100%; + box-sizing: border-box; +} + +@media (width <=768px) { + .cardsGrid { + grid-template-columns: 1fr; + gap: 20px; + padding: 0 16px 16px; + margin: 0; + } +} + +@media (width <=480px) { + .cardsGrid { + padding: 0 8px 16px; + gap: 16px; + } + + .container { + width: 95%; + margin: 2.5%; + margin-top: 16px; + margin-bottom: 40px; + } + + .headerInteractionArea { + padding: 0 8px; + margin-top: 16px; + margin-bottom: 24px; + gap: 12px; + } + + .noResults { + font-size: 18px; + padding: 24px 16px; + margin-top: 24px; + } + + .searchInput { + min-width: 100%; + } +} + +@media (width >=1200px) { + .cardsGrid { + grid-template-columns: repeat(auto-fill, minmax(380px, 1fr)); + gap: 32px; + } +} + +.noResults { + width: 100%; + text-align: center; + font-size: 20px; + font-weight: 700; + color: var(--ifm-font-color-base); + margin-top: 40px; + padding: 40px 20px; + background-color: var(--ifm-color-emphasis-100); + border-radius: 12px; + box-sizing: border-box; + margin-left: 0; + margin-right: 0; +} + +.modalHeader { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 10px; + padding-bottom: 0; + border-width: 0; + border-color: var(--ifm-footer-background-color); + border-style: solid; + border-bottom-width: 2px; + height: 60px; +} + +.modalHeader h2 { + font-family: var(--ifm-font-family-base); + font-weight: 900; + font-size: 24px; + text-align: center; +} + +.modalBody { + width: 100%; + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: space-between; + padding: 20px; + padding-top: 5px; + overflow: scroll; + height: calc(80vh - 120px); +} + +.modalTagList { + width: 300px; +} + +.modalTagList h3 { + font-family: var(--ifm-font-family-base); + font-weight: 500; + font-size: 20px; + text-align: left; + padding: 5px; + padding-top: 20px; +} + +.checkBoxContainer { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + padding: 7px; + padding-left: 0; + border-radius: 5px; +} + +.checkBoxContainer:hover { + cursor: pointer; + background-color: rgb( + var(--ifm-color-primary-r) var(--ifm-color-primary-g) var(--ifm-color-primary-b) / 30% + ); +} + +.checkBoxInputContainer { + width: 40px; + display: flex; + align-items: center; + justify-content: center; +} + +.checkBox { + width: 20px; + height: 20px; + border-color: var(--ifm-footer-background-color); + background-color: var(--ifm-background-surface-color); +} + +.checkBoxLabelContainer { + color: var(--ifm-font-color-base); + font-size: 17px; + font-weight: 400; + text-align: left; + display: flex; + align-items: center; + justify-content: center; +} + +.modalFooter { + width: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: 10px; + height: 60px; + position: fixed; +} + +.modalClearButton { + background-color: var(--ifm-background-surface-color); + font-size: 17px; + border: none; + color: var(--ifm-color-primary); + padding: 10px; +} + +.modalClearButton:hover { + color: var(--ifm-font-color-base); + cursor: pointer; +} + +.modalClearButton:active { + color: var(--ifm-color-primary-dark); +} + +.modalSaveButton { + padding: 10px; + padding-left: 20px; + padding-right: 20px; + background-color: var(--ifm-color-primary-dark); + align-items: center; + border-style: none; + border-radius: 100px; + font-size: 17px; + line-height: 24px; + font-weight: 500; + color: #fff; +} + +.modalSaveButton:hover { + background-color: var(--ifm-color-primary-darker); + cursor: pointer; +} + +.modalSaveButton:active { + background-color: var(--ifm-color-primary-darkest); +} + +.buttonGroup { + display: flex; + width: 100%; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 500; + gap: 6px; +} + +.tab { + display: flex; + width: fit-content; + align-items: flex-start; + text-align: center; + justify-content: center; + border-width: 0; + border-bottom-width: 2px; + border-color: transparent; + border-style: solid; + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 125%; + padding: 0 16px 30px; + gap: 6px; + color: var(--w3a-color-icon-gray); + cursor: pointer; +} + +.tab:hover { + border-width: 0; + border-bottom-width: 2px; + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + border-style: solid; +} + +.activeTab { + display: flex; + align-items: flex-start; + text-align: center; + justify-content: center; + border-width: 0; + border-bottom-width: 2px; + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + border-style: solid; + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 125%; + padding: 0 16px 30px; + gap: 6px; + cursor: pointer; +} + +.tabIconContainer { + height: 18px; + width: 18px; + padding: 1px; +} + +.pillContainer { + display: flex; + flex-flow: row wrap; + justify-content: center; + align-items: center; + + /* white */ + background: var(--w3a-color-indigo-background); + border-radius: 8px; + text-decoration: none; + padding: 0; + margin: 0; + margin-bottom: 7px; + width: max-content; + overflow: hidden; +} + +.pill { + display: flex; + flex-flow: column wrap; + justify-content: center; + text-align: center; + align-items: center; + width: max-content; + padding: 2px 12px; + margin: 0; + font-weight: 500 !important; + font-size: 12px; + text-transform: uppercase; + line-height: 150%; + color: var(--w3a-color-indigo); +} + +@media only screen and (width <=1046px) { + .headerInteractionArea { + flex-direction: column; + gap: 32px; + padding: 0 16px; + } + + .searchArea { + justify-content: flex-start; + width: 100%; + overflow: visible; + } +} + +@media only screen and (width <=889px) { + .header { + text-align: center; + align-items: center; + justify-content: center; + } + + .headerInteractionArea { + align-items: stretch; + justify-content: flex-start; + padding: 0 16px; + } + + .buttonGroup { + width: 100%; + overflow: auto hidden; + -webkit-overflow-scrolling: touch; + } + + .searchArea { + flex-direction: column; + align-items: stretch; + } + + .container { + justify-content: center; + padding: 0 16px; + } +} + +@media only screen and (width >=889px) { + .article { + width: 45%; + } +} + +@media only screen and (width >=1334px) { + .article { + width: 30%; + } +} + +@media only screen and (width <=750px) { + .modalBody { + flex-direction: column; + } +} diff --git a/src/components/WalletSection.tsx b/src/components/WalletSection.tsx deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/components/YoutubeEmbed.module.scss b/src/components/YoutubeEmbed.module.scss new file mode 100644 index 00000000000..ec26abf4b90 --- /dev/null +++ b/src/components/YoutubeEmbed.module.scss @@ -0,0 +1,14 @@ +.wrapper { + position: relative; + padding-bottom: 56.25%; /* 16:9 aspect ratio */ + margin-top: 2.8rem; + margin-bottom: 4rem; +} + +.wrapper iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} diff --git a/src/components/YoutubeEmbed.tsx b/src/components/YoutubeEmbed.tsx index 6ab919c1552..2465f7ac1d4 100644 --- a/src/components/YoutubeEmbed.tsx +++ b/src/components/YoutubeEmbed.tsx @@ -1,18 +1,16 @@ -import React from "react"; -import styles from "./youtubeembed.module.css"; +import React from 'react' +import styles from './YoutubeEmbed.module.scss' interface YoutubeEmbedProps { - url: string; + url: string } const YoutubeEmbed: React.FC = ({ url }) => { return (
    - {" "} - {}
    - ); -}; + ) +} -export default YoutubeEmbed; +export default YoutubeEmbed diff --git a/src/components/card.module.css b/src/components/card.module.css deleted file mode 100644 index 5426ff45911..00000000000 --- a/src/components/card.module.css +++ /dev/null @@ -1,23 +0,0 @@ -.root { - --ifm-link-color: var(--ifm-color-emphasis-800); - --ifm-link-hover-color: var(--ifm-color-emphasis-700); - --ifm-link-hover-decoration: none; - - box-shadow: 0 1.5px 3px 0 rgb(0 0 0 / 15%); - border: 1px solid var(--ifm-color-emphasis-200); - transition: all var(--ifm-transition-fast) ease; - transition-property: border, box-shadow; - display: flex; - flex-direction: column; - height: 100%; -} - -.root:hover { - border-color: #1098fc; - box-shadow: 0 3px 6px 0 rgb(0 0 0 / 20%); -} - -.cardContainer { - display: flex; - flex-direction: column; -} diff --git a/src/components/cardsection.module.css b/src/components/cardsection.module.css deleted file mode 100644 index 2d7b80d06de..00000000000 --- a/src/components/cardsection.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.row { - display: flex; - flex-wrap: wrap; -} \ No newline at end of file diff --git a/src/components/elements/buttons/button/button.module.scss b/src/components/elements/buttons/button/button.module.scss new file mode 100644 index 00000000000..0abc1112554 --- /dev/null +++ b/src/components/elements/buttons/button/button.module.scss @@ -0,0 +1,571 @@ +.icon { + position: relative; + z-index: 2; + + display: flex; + align-items: center; + justify-content: center; + + width: 1rem; + height: 1rem; + + transition: transform var(--spring-duration) var(--spring-ease); + + .label-big & { + width: 1.2rem; + height: 1.2rem; + } + + &--adjust { + margin-bottom: 0.1rem; + } + + svg { + overflow: visible; + width: 100%; + height: 100%; + } + + .secondary & { + color: var(--button-text-color); + } + + .secondary .button-hover & { + color: var(--button-text-color-hover); + } + + .primary & { + color: var(--button-text-color); + } + + .primary .button-hover & { + color: var(--button-text-color-hover); + } + + .tertiary & { + color: var(--button-text-color); + } + + .tertiary .button-hover & { + color: var(--button-text-color-hover); + } + + .tertiary:focus & { + color: var(--button-text-color-hover); + } + + .tertiary:focus .button-hover & { + color: var(--button-text-color-hover); + } +} + +.icon-hover { + position: absolute; + transform: translate(0, 290%); + + &.icon-hover-oblique { + transform: translate(-290%, 290%); + } + + &.icon-hover-right { + transform: translate(-290%, 0); + + .is-extra-large & { + transform: translate(-390%, 0); + } + } + + &.icon-hover-left { + transform: translate(290%, 0); + } + + &.icon-hover-down { + transform: translate(0, -290%); + } + + .secondary & { + color: var(--button-text-color-hover); + } + + .primary & { + color: var(--button-text-color-hover); + } + + .tertiary & { + color: var(--button-text-color-hover); + } + + .tertiary:focus & { + color: var(--button-text-color); + } + + .primary:hover:not(:focus, button) & { + color: var(--button-text-color-hover); + } +} + +.button { + --spring-duration: calc(var(--motion) * var(--motion-speed)); + --bg-duration: calc(var(--motion) * var(--motion-speed)); + + cursor: pointer; + + position: relative; + + display: inline-flex; + flex-shrink: 0; + + width: auto; + + text-decoration: none; + + border-radius: 10rem; + + mask-image: radial-gradient(white, black); + + &:before { + content: ''; + + position: absolute; + z-index: 1; + inset: 0; + transform: scale(0); + + opacity: 0; + background: var(--button-color-hover); + border-radius: 10rem; + box-shadow: inset 0 0 0 1px var(--button-color-hover); + } + + &:after { + content: ''; + + position: absolute; + z-index: 3; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + border-radius: 10rem; + } + + &:not(button):hover { + text-decoration: none; + + &:before { + transform: scale(1.03); + opacity: 1; + transition: + transform var(--bg-duration) $gentle-ease, + opacity calc(var(--bg-duration) * 0.5) $gentle-ease; + } + + &.no-label { + .icon { + transform: translate(0, -290%); + + &.icon-oblique { + transform: translate(290%, -290%); + } + + &.icon-right { + transform: translate(290%, 0); + } + + &.icon-left { + transform: translate(-290%, 0); + } + + &.icon-down { + transform: translate(0, 290%); + } + } + + .icon-hover { + transform: translate(0, 0); + } + + &:before { + transform: scale(1.01); + opacity: 1; + } + + &.is-extra-large { + .icon-right { + transform: translate(390%, 0); + } + } + } + } + + &.no-label { + &:before { + opacity: 1; + } + } + + &.primary { + --button-color: var(--general-black); + --button-color-hover: var(--general-white); + --button-text-color: var(--general-white); + --button-text-color-hover: var(--general-black); + } + + &.secondary { + --button-color: var(--general-white); + --button-color-hover: var(--general-black); + --button-text-color: var(--general-black); + --button-text-color-hover: var(--general-white); + } + + &.tertiary { + --button-color: var(--general-black); + --button-color-hover: var(--general-black); + --button-text-color: var(--general-black); + --button-text-color-hover: var(--general-white); + } +} + +button.button { + @include hover { + text-decoration: none; + + &:before { + transform: scale(1.03); + opacity: 1; + transition: + transform var(--bg-duration) $gentle-ease, + opacity calc(var(--bg-duration) * 0.5) $gentle-ease; + } + + &.no-label { + .icon { + transform: translate(0, -290%); + + &.icon-oblique { + transform: translate(290%, -290%); + } + + &.icon-right { + transform: translate(290%, 0); + } + + &.icon-left { + transform: translate(-290%, 0); + } + + &.icon-down { + transform: translate(0, 290%); + } + } + + .icon-hover { + transform: translate(0, 0); + } + + &:before { + transform: scale(1.01); + opacity: 1; + } + } + + &:not(.no-label, .is-large) .button-main { + transform: translateY(-290%); + } + + &.is-large .button-main { + transform: translateY(-250%); + } + + &.primary:not(:focus) .icon-hover { + color: var(--button-text-color-hover); + } + + .button-hover { + transform: translateY(0); + opacity: 1; + transition: + transform var(--spring-duration) var(--spring-ease), + opacity calc(var(--spring-duration) * 0.5) var(--spring-ease) + calc(var(--spring-duration) * 0.15); + } + } +} + +.button-holder { + position: relative; + + overflow: hidden; + display: flex; + gap: 0.8rem; + align-items: center; + justify-content: center; + + width: 100%; + height: 4.2rem; + padding: 1.6rem 2.4rem 1.5rem; + + font-size: 1.4rem; + + border-radius: 10rem; + + &.label-big { + gap: 1rem; + font-size: 1.6rem; + } + + .is-large & { + height: 5.6rem; + padding: 2.3rem 3rem; + } + + .is-extra-large & { + width: 4.2rem; + height: 4.2rem; + + @include bp('desktop') { + width: 5.2rem; + height: 5.2rem; + } + } + + .no-label & { + padding: 1.6rem; + } + + .has-logo & { + padding: 1.6rem 3rem 1.5rem 1.4rem; + } + + .has-logo.has-icon & { + padding-right: 2.4rem; + } +} + +.button-main { + z-index: 2; + + display: flex; + gap: 0.8rem; + align-items: center; + justify-content: center; + + width: 100%; + + transition: transform var(--spring-duration) var(--spring-ease); + + .label-big & { + gap: 1rem; + } + + .button:not(.no-label, .is-large, button):hover & { + transform: translateY(-290%); + } + + .button:not(button).is-large:hover & { + transform: translateY(-250%); + } +} + +.button-hover { + position: absolute; + z-index: 2; + left: 0; + transform: translateY(290%); + + display: flex; + gap: 0.8rem; + align-items: center; + justify-content: center; + + width: 100%; + padding: inherit; + + transition: + transform var(--spring-duration) var(--spring-ease), + opacity calc(var(--spring-duration) * 0.5) var(--spring-ease); + + .label-big & { + gap: 1rem; + } + + .button.is-large & { + transform: translateY(290%); + opacity: 0; + } + + .button.is-extra-large & { + transform: translateY(390%); + opacity: 0; + } + + .button:not(button):hover & { + transform: translateY(0); + opacity: 1; + transition: + transform var(--spring-duration) var(--spring-ease), + opacity calc(var(--spring-duration) * 0.5) var(--spring-ease) + calc(var(--spring-duration) * 0.15); + } +} + +.label { + position: relative; + + font-size: inherit; + font-style: normal; + line-height: 1; + text-align: center; + + .has-logo & { + flex-grow: 1; + } + + .primary &, + .secondary &, + .tertiary & { + color: var(--button-text-color); + } + + .primary .button-hover &, + .secondary .button-hover &, + .tertiary .button-hover & { + color: var(--button-text-color-hover); + } + + .primary:active & { + color: var(--button-text-color); + } + + .primary:active .button-hover & { + color: var(--button-text-color-hover); + } + + .tertiary:active .button-hover & { + color: var(--button-text-color-hover); + } + + .tertiary:focus .button-hover & { + color: var(--button-text-color-hover); + } +} + +.label-small { + min-width: 12.2rem; + font-size: 1.2rem; +} + +.logo { + position: relative; + z-index: 2; + + display: flex; + align-items: center; + justify-content: center; + + width: 2.8rem; + height: 2.8rem; + margin-right: 0.6rem; + + svg { + overflow: visible; + width: 100%; + height: 100%; + } + + .logo-fill-color & { + color: var(--button-text-color); + } + + .button:not(button).logo-fill-color:hover & { + color: var(--button-text-color-hover); + } + + button.button { + @include hover { + &.logo-fill-color { + color: var(--button-text-color-hover); + } + } + } +} + +.primary { + background: var(--button-color); + + &:disabled, + &.disabled { + pointer-events: none; + cursor: unset; + opacity: 0.3; + } + + &:focus { + &:after { + outline: 0.1rem solid var(--button-color); + outline-offset: 0.2rem; + } + } + + &:active { + background: var(--button-color); + + &:after { + outline: none; + } + } +} + +.secondary { + background: var(--button-color); + + &:disabled, + &.disabled { + pointer-events: none; + cursor: unset; + opacity: 0.3; + } + + &:focus { + &:after { + outline: 0.1rem solid var(--button-color); + outline-offset: 0.2rem; + } + } + + &:active { + color: var(--button-text-color-hover); + + &:after { + outline: none; + } + } +} + +.tertiary { + &:after { + outline: 0.15rem solid var(--button-color); + outline-offset: -0.15rem; + } + + &:disabled, + &.disabled { + pointer-events: none; + cursor: unset; + opacity: 0.3; + } + + &:focus { + background: var(--button-color-hover); + + .label { + color: var(--button-text-color-hover); + } + + &:after { + outline-color: var(--button-text-color-hover); + } + } +} diff --git a/src/components/elements/buttons/button/index.tsx b/src/components/elements/buttons/button/index.tsx new file mode 100644 index 00000000000..ac155904d87 --- /dev/null +++ b/src/components/elements/buttons/button/index.tsx @@ -0,0 +1,160 @@ +import { clsx } from 'clsx' +import { forwardRef, ReactNode } from 'react' + +import Spinner from '@site/src/components/elements/spinner' +import { linkComponentMap } from '@site/src/utils/component-map' +import { buttonIconMap } from '@site/src/utils/icon-map' +import { logoMap } from '@site/src/utils/logo-map' + +import styles from './button.module.scss' + +interface ButtonProps { + buttonType?: string + type?: 'primary' | 'secondary' | 'tertiary' + label?: string | boolean + labelTwo?: string | boolean + isLarge?: boolean + isExtraLarge?: boolean + ariaLabel?: string + icon?: string + logo?: string | React.ComponentType + href?: string + onClick?: () => void + disabled?: boolean + as?: 'link' | 'a' | 'button' + external?: boolean + rel?: string | boolean + download?: boolean | string + className?: string + textTransform?: string + labelBig?: boolean + logoFillColor?: string + hasSpinner?: boolean + style?: React.CSSProperties | unknown + target?: string + children?: ReactNode +} + +const Button = forwardRef( + ( + { + buttonType = '', + type = 'primary', + label = false, + labelTwo = label, + isLarge, + isExtraLarge, + ariaLabel = label as string, + icon, + logo, + href = '/', + onClick, + disabled = false, + as = 'button', + external = false, + rel = false, + download = false, + className = '', + textTransform = 'uppercase', + labelBig = false, + logoFillColor, + hasSpinner = false, + children, + style, + ...rest + }, + ref + ) => { + const asValue = as + const Component = linkComponentMap[asValue] + const IconComponent = buttonIconMap[icon]?.component + const iconDirection = buttonIconMap[icon]?.direction + const LogoComponent = typeof logo === 'string' ? logoMap[logo] : logo + + const renderIcon = (extraClass?: string) => ( + + + + ) + + const renderLogo = () => { + if (!LogoComponent) return null + + return ( + + + + ) + } + + const buttonClassNames = clsx(styles['button'], className, 'text-decoration-none', { + [styles['primary']]: type === 'primary', + [styles['secondary']]: type === 'secondary', + [styles['tertiary']]: type === 'tertiary', + [styles['has-logo']]: logo && LogoComponent, + [styles['logo-fill-color']]: logoFillColor, + [styles['has-icon']]: icon, + [styles['is-large']]: isLarge && label, + [styles['is-extra-large']]: isExtraLarge, + [styles['no-label']]: !label, + [styles['disabled']]: disabled, + }) + + const labelClassNames = clsx( + styles['label'], + label !== labelTwo && styles['label-small'], + 'font-primary', + 'font-weight-medium', + textTransform !== 'none' && textTransform + ) + + return ( + } + href={asValue !== 'button' ? href : null} + target={asValue !== 'button' && external ? '_blank' : null} + rel={rel ? rel : external && asValue !== 'button' ? 'noreferrer noopener' : null} + aria-label={ariaLabel} + onClick={onClick} + className={buttonClassNames} + disabled={disabled} + download={as !== 'button' && download ? download : null} + style={style} + {...(asValue === 'button' && { type: buttonType })} + {...rest}> + + {children} + {hasSpinner && } + + + {logo && renderLogo()} + {label && {label}} + {icon && renderIcon('icon')} + {!label && icon && renderIcon('icon-hover')} + + + {label && labelTwo && ( + + {logo && renderLogo()} + {labelTwo} + {icon && renderIcon()} + + )} + + + ) + } +) + +Button.displayName = 'Button' + +export default Button diff --git a/src/components/elements/cut-off-corners/cut-off-corners.module.scss b/src/components/elements/cut-off-corners/cut-off-corners.module.scss new file mode 100644 index 00000000000..56b15559aab --- /dev/null +++ b/src/components/elements/cut-off-corners/cut-off-corners.module.scss @@ -0,0 +1,888 @@ +.cut-off-corners { + --left-top-p1-x: 0; + --left-top-p1-y: 0; + --left-top-p2-x: 0; + --left-top-p2-y: 0; + --left-top-p3-x: 0; + --left-top-p3-y: 0; + --left-top-p4-x: 0; + --left-top-p4-y: 0; + --left-top-p5-x: 0; + --left-top-p5-y: 0; + --right-top-p1-x: 100%; + --right-top-p1-y: 0; + --right-top-p2-x: 100%; + --right-top-p2-y: 0; + --right-top-p3-x: 100%; + --right-top-p3-y: 0; + --right-top-p4-x: 100%; + --right-top-p4-y: 0; + --right-top-p5-x: 100%; + --right-top-p5-y: 0; + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: 100%; + --right-bottom-p2-x: 100%; + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: 100%; + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: 100%; + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: 100%; + --right-bottom-p5-y: 100%; + --left-bottom-p1-x: 0; + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: 0; + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: 0; + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: 0; + --left-bottom-p4-y: 100%; + --left-bottom-p5-x: 0; + --left-bottom-p5-y: 100%; + + position: relative; + + width: 100%; + height: 100%; + + clip-path: polygon( + var(--left-top-p1-x) var(--left-top-p1-y), + var(--left-top-p2-x) var(--left-top-p2-y), + var(--left-top-p3-x) var(--left-top-p3-y), + var(--left-top-p4-x) var(--left-top-p4-y), + var(--left-top-p5-x) var(--left-top-p5-y), + var(--right-top-p1-x) var(--right-top-p1-y), + var(--right-top-p2-x) var(--right-top-p2-y), + var(--right-top-p3-x) var(--right-top-p3-y), + var(--right-top-p4-x) var(--right-top-p4-y), + var(--right-top-p5-x) var(--right-top-p5-y), + var(--right-bottom-p1-x) var(--right-bottom-p1-y), + var(--right-bottom-p2-x) var(--right-bottom-p2-y), + var(--right-bottom-p3-x) var(--right-bottom-p3-y), + var(--right-bottom-p4-x) var(--right-bottom-p4-y), + var(--right-bottom-p5-x) var(--right-bottom-p5-y), + var(--left-bottom-p1-x) var(--left-bottom-p1-y), + var(--left-bottom-p2-x) var(--left-bottom-p2-y), + var(--left-bottom-p3-x) var(--left-bottom-p3-y), + var(--left-bottom-p4-x) var(--left-bottom-p4-y), + var(--left-bottom-p5-x) var(--left-bottom-p5-y) + ); + + transition: clip-path 0.75s $expo-out; + + &.extra-extra-small { + --border-corner-mobile: 0.8rem; + --border-corner-tablet: 0.8rem; + --border-corner: 0.8rem; + } + + &.extra-small { + --border-corner-mobile: 1.1rem; + --border-corner-tablet: 1.1rem; + --border-corner: 1.1rem; + } + + &.small { + --border-corner-mobile: 1.5rem; + --border-corner-tablet: 1.7rem; + --border-corner: 1.7rem; + } + + &.medium { + --border-corner-mobile: 1.5rem; + --border-corner-tablet: 1.7rem; + --border-corner: 2.5rem; + } + + &.large { + --border-corner-mobile: 1.5rem; + --border-corner-tablet: 2.1rem; + --border-corner: 3.6rem; + } + + &.x-large { + --border-corner-mobile: 2.4rem; + --border-corner-tablet: 3.2rem; + --border-corner: 7.2rem; + } + + &.top-left { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner-mobile); + --left-top-p2-x: var(--border-corner-mobile); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner-mobile); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner-mobile); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner-mobile); + --left-top-p5-y: 0; + + &.step-2 { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner-mobile); + --left-top-p2-x: var(--border-corner-mobile); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner-mobile); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner-mobile); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner-mobile); + --left-top-p5-y: 0; + } + + &.step-3 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-mobile) * 1.5); + --left-top-p2-x: calc(var(--border-corner-mobile) * 0.5); + --left-top-p2-y: calc(var(--border-corner-mobile) * 0.5); + --left-top-p3-x: calc(var(--border-corner-mobile) * 1.5); + --left-top-p3-y: 0; + --left-top-p4-x: calc(var(--border-corner-mobile) * 1.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner-mobile) * 1.5); + --left-top-p5-y: 0; + } + + &.step-4 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-mobile) * 2.5); + --left-top-p2-x: calc(var(--border-corner-mobile) * 0.25); + --left-top-p2-y: calc(var(--border-corner-mobile) * 1.25); + --left-top-p3-x: calc(var(--border-corner-mobile) * 1.25); + --left-top-p3-y: calc(var(--border-corner-mobile) * 0.25); + --left-top-p4-x: calc(var(--border-corner-mobile) * 2.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner-mobile) * 2.5); + --left-top-p5-y: 0; + } + + &.step-5 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-mobile) * 3.5); + --left-top-p2-x: calc(var(--border-corner-mobile) * 0.15); + --left-top-p2-y: calc(var(--border-corner-mobile) * 2); + --left-top-p3-x: calc(var(--border-corner-mobile) * 0.8); + --left-top-p3-y: calc(var(--border-corner-mobile) * 0.8); + --left-top-p4-x: calc(var(--border-corner-mobile) * 2); + --left-top-p4-y: calc(var(--border-corner-mobile) * 0.15); + --left-top-p5-x: calc(var(--border-corner-mobile) * 3.5); + --left-top-p5-y: 0; + } + + @include bp('tablet') { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner-tablet); + --left-top-p2-x: var(--border-corner-tablet); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner-tablet); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner-tablet); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner-tablet); + --left-top-p5-y: 0; + + &.step-2 { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner-tablet); + --left-top-p2-x: var(--border-corner-tablet); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner-tablet); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner-tablet); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner-tablet); + --left-top-p5-y: 0; + } + + &.step-3 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-tablet) * 1.5); + --left-top-p2-x: calc(var(--border-corner-tablet) * 0.5); + --left-top-p2-y: calc(var(--border-corner-tablet) * 0.5); + --left-top-p3-x: calc(var(--border-corner-tablet) * 1.5); + --left-top-p3-y: 0; + --left-top-p4-x: calc(var(--border-corner-tablet) * 1.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner-tablet) * 1.5); + --left-top-p5-y: 0; + } + + &.step-4 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-tablet) * 2.5); + --left-top-p2-x: calc(var(--border-corner-tablet) * 0.25); + --left-top-p2-y: calc(var(--border-corner-tablet) * 1.25); + --left-top-p3-x: calc(var(--border-corner-tablet) * 1.25); + --left-top-p3-y: calc(var(--border-corner-tablet) * 0.25); + --left-top-p4-x: calc(var(--border-corner-tablet) * 2.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner-tablet) * 2.5); + --left-top-p5-y: 0; + } + + &.step-5 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner-tablet) * 3.5); + --left-top-p2-x: calc(var(--border-corner-tablet) * 0.15); + --left-top-p2-y: calc(var(--border-corner-tablet) * 2); + --left-top-p3-x: calc(var(--border-corner-tablet) * 0.8); + --left-top-p3-y: calc(var(--border-corner-tablet) * 0.8); + --left-top-p4-x: calc(var(--border-corner-tablet) * 2); + --left-top-p4-y: calc(var(--border-corner-tablet) * 0.15); + --left-top-p5-x: calc(var(--border-corner-tablet) * 3.5); + --left-top-p5-y: 0; + } + } + + @include bp('desktop') { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner); + --left-top-p2-x: var(--border-corner); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner); + --left-top-p5-y: 0; + + &.step-2 { + --left-top-p1-x: 0; + --left-top-p1-y: var(--border-corner); + --left-top-p2-x: var(--border-corner); + --left-top-p2-y: 0; + --left-top-p3-x: var(--border-corner); + --left-top-p3-y: 0; + --left-top-p4-x: var(--border-corner); + --left-top-p4-y: 0; + --left-top-p5-x: var(--border-corner); + --left-top-p5-y: 0; + } + + &.step-3 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner) * 1.5); + --left-top-p2-x: calc(var(--border-corner) * 0.5); + --left-top-p2-y: calc(var(--border-corner) * 0.5); + --left-top-p3-x: calc(var(--border-corner) * 1.5); + --left-top-p3-y: 0; + --left-top-p4-x: calc(var(--border-corner) * 1.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner) * 1.5); + --left-top-p5-y: 0; + } + + &.step-4 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner) * 2.5); + --left-top-p2-x: calc(var(--border-corner) * 0.25); + --left-top-p2-y: calc(var(--border-corner) * 1.25); + --left-top-p3-x: calc(var(--border-corner) * 1.25); + --left-top-p3-y: calc(var(--border-corner) * 0.25); + --left-top-p4-x: calc(var(--border-corner) * 2.5); + --left-top-p4-y: 0; + --left-top-p5-x: calc(var(--border-corner) * 2.5); + --left-top-p5-y: 0; + } + + &.step-5 { + --left-top-p1-x: 0; + --left-top-p1-y: calc(var(--border-corner) * 3.5); + --left-top-p2-x: calc(var(--border-corner) * 0.15); + --left-top-p2-y: calc(var(--border-corner) * 2); + --left-top-p3-x: calc(var(--border-corner) * 0.8); + --left-top-p3-y: calc(var(--border-corner) * 0.8); + --left-top-p4-x: calc(var(--border-corner) * 2); + --left-top-p4-y: calc(var(--border-corner) * 0.15); + --left-top-p5-x: calc(var(--border-corner) * 3.5); + --left-top-p5-y: 0; + } + } + } + + &.top-right { + --right-top-p1-x: calc(100% - var(--border-corner-mobile)); + --right-top-p1-y: 0; + --right-top-p2-x: 100%; + --right-top-p2-y: var(--border-corner-mobile); + --right-top-p3-x: 100%; + --right-top-p3-y: var(--border-corner-mobile); + --right-top-p4-x: 100%; + --right-top-p4-y: var(--border-corner-mobile); + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner-mobile); + + &.step-2 { + --right-top-p1-x: calc(100% - var(--border-corner-mobile)); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-mobile)); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-mobile)); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner-mobile)); + --right-top-p4-y: 0; + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner-mobile); + } + + &.step-3 { + --right-top-p1-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner-mobile) * 0.5); + --right-top-p4-y: calc(var(--border-corner-mobile) * 0.5); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-mobile) * 1.5); + } + + &.step-4 { + --right-top-p1-x: calc(100% - var(--border-corner-mobile) * 2.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-mobile) * 2.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-mobile) * 1.25); + --right-top-p3-y: calc(var(--border-corner-mobile) * 0.25); + --right-top-p4-x: calc(100% - var(--border-corner-mobile) * 0.25); + --right-top-p4-y: calc(var(--border-corner-mobile) * 1.25); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-mobile) * 2.5); + } + + &.step-5 { + --right-top-p1-x: calc(100% - var(--border-corner-mobile) * 3.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-mobile) * 2); + --right-top-p2-y: calc(var(--border-corner-mobile) * 0.15); + --right-top-p3-x: calc(100% - var(--border-corner-mobile) * 0.8); + --right-top-p3-y: calc(var(--border-corner-mobile) * 0.8); + --right-top-p4-x: calc(100% - var(--border-corner-mobile) * 0.25); + --right-top-p4-y: calc(var(--border-corner-mobile) * 2); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-mobile) * 3.5); + } + + @include bp('tablet') { + --right-top-p1-x: calc(100% - var(--border-corner-tablet)); + --right-top-p1-y: 0; + --right-top-p2-x: 100%; + --right-top-p2-y: var(--border-corner-tablet); + --right-top-p3-x: 100%; + --right-top-p3-y: var(--border-corner-tablet); + --right-top-p4-x: 100%; + --right-top-p4-y: var(--border-corner-tablet); + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner-tablet); + + &.step-2 { + --right-top-p1-x: calc(100% - var(--border-corner-tablet)); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-tablet)); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-tablet)); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner-tablet)); + --right-top-p4-y: 0; + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner-tablet); + } + + &.step-3 { + --right-top-p1-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner-tablet) * 0.5); + --right-top-p4-y: calc(var(--border-corner-tablet) * 0.5); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-tablet) * 1.5); + } + + &.step-4 { + --right-top-p1-x: calc(100% - var(--border-corner-tablet) * 2.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-tablet) * 2.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner-tablet) * 1.25); + --right-top-p3-y: calc(var(--border-corner-tablet) * 0.25); + --right-top-p4-x: calc(100% - var(--border-corner-tablet) * 0.25); + --right-top-p4-y: calc(var(--border-corner-tablet) * 1.25); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-tablet) * 2.5); + } + + &.step-5 { + --right-top-p1-x: calc(100% - var(--border-corner-tablet) * 3.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner-tablet) * 2); + --right-top-p2-y: calc(var(--border-corner-tablet) * 0.15); + --right-top-p3-x: calc(100% - var(--border-corner-tablet) * 0.8); + --right-top-p3-y: calc(var(--border-corner-tablet) * 0.8); + --right-top-p4-x: calc(100% - var(--border-corner-tablet) * 0.25); + --right-top-p4-y: calc(var(--border-corner-tablet) * 2); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner-tablet) * 3.5); + } + } + + @include bp('desktop') { + --right-top-p1-x: calc(100% - var(--border-corner)); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner)); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner)); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner)); + --right-top-p4-y: 0; + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner); + + &.step-2 { + --right-top-p1-x: calc(100% - var(--border-corner)); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner)); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner)); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner)); + --right-top-p4-y: 0; + --right-top-p5-x: 100%; + --right-top-p5-y: var(--border-corner); + } + + &.step-3 { + --right-top-p1-x: calc(100% - var(--border-corner) * 1.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner) * 1.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner) * 1.5); + --right-top-p3-y: 0; + --right-top-p4-x: calc(100% - var(--border-corner) * 0.5); + --right-top-p4-y: calc(var(--border-corner) * 0.5); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner) * 1.5); + } + + &.step-4 { + --right-top-p1-x: calc(100% - var(--border-corner) * 2.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner) * 2.5); + --right-top-p2-y: 0; + --right-top-p3-x: calc(100% - var(--border-corner) * 1.25); + --right-top-p3-y: calc(var(--border-corner) * 0.25); + --right-top-p4-x: calc(100% - var(--border-corner) * 0.25); + --right-top-p4-y: calc(var(--border-corner) * 1.25); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner) * 2.5); + } + + &.step-5 { + --right-top-p1-x: calc(100% - var(--border-corner) * 3.5); + --right-top-p1-y: 0; + --right-top-p2-x: calc(100% - var(--border-corner) * 2); + --right-top-p2-y: calc(var(--border-corner) * 0.15); + --right-top-p3-x: calc(100% - var(--border-corner) * 0.8); + --right-top-p3-y: calc(var(--border-corner) * 0.8); + --right-top-p4-x: calc(100% - var(--border-corner) * 0.25); + --right-top-p4-y: calc(var(--border-corner) * 2); + --right-top-p5-x: 100%; + --right-top-p5-y: calc(var(--border-corner) * 3.5); + } + } + } + + &.bottom-right { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-mobile)); + --right-bottom-p2-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p5-y: 100%; + + &.step-2 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-mobile)); + --right-bottom-p2-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-mobile)); + --right-bottom-p5-y: 100%; + } + + &.step-3 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-mobile) * 1.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-mobile) * 0.5); + --right-bottom-p2-y: calc(100% - var(--border-corner-mobile) * 0.5); + --right-bottom-p3-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-mobile) * 1.5); + --right-bottom-p5-y: 100%; + } + + &.step-4 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-mobile) * 2.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-mobile) * 0.25); + --right-bottom-p2-y: calc(100% - var(--border-corner-mobile) * 1.25); + --right-bottom-p3-x: calc(100% - var(--border-corner-mobile) * 1.25); + --right-bottom-p3-y: calc(100% - var(--border-corner-mobile) * 0.25); + --right-bottom-p4-x: calc(100% - var(--border-corner-mobile) * 2.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-mobile) * 2.5); + --right-bottom-p5-y: 100%; + } + + &.step-5 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-mobile) * 3.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-mobile) * 0.15); + --right-bottom-p2-y: calc(100% - var(--border-corner-mobile) * 2); + --right-bottom-p3-x: calc(100% - var(--border-corner-mobile) * 0.8); + --right-bottom-p3-y: calc(100% - var(--border-corner-mobile) * 0.8); + --right-bottom-p4-x: calc(100% - var(--border-corner-mobile) * 2); + --right-bottom-p4-y: calc(100% - var(--border-corner-mobile) * 0.15); + --right-bottom-p5-x: calc(100% - var(--border-corner-mobile) * 3.5); + --right-bottom-p5-y: 100%; + } + + @include bp('tablet') { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-tablet)); + --right-bottom-p2-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p5-y: 100%; + + &.step-2 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-tablet)); + --right-bottom-p2-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-tablet)); + --right-bottom-p5-y: 100%; + } + + &.step-3 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-tablet) * 1.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-tablet) * 0.5); + --right-bottom-p2-y: calc(100% - var(--border-corner-tablet) * 0.5); + --right-bottom-p3-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-tablet) * 1.5); + --right-bottom-p5-y: 100%; + } + + &.step-4 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-tablet) * 2.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-tablet) * 0.25); + --right-bottom-p2-y: calc(100% - var(--border-corner-tablet) * 1.25); + --right-bottom-p3-x: calc(100% - var(--border-corner-tablet) * 1.25); + --right-bottom-p3-y: calc(100% - var(--border-corner-tablet) * 0.25); + --right-bottom-p4-x: calc(100% - var(--border-corner-tablet) * 2.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner-tablet) * 2.5); + --right-bottom-p5-y: 100%; + } + + &.step-5 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner-tablet) * 3.5); + --right-bottom-p2-x: calc(100% - var(--border-corner-tablet) * 0.15); + --right-bottom-p2-y: calc(100% - var(--border-corner-tablet) * 2); + --right-bottom-p3-x: calc(100% - var(--border-corner-tablet) * 0.8); + --right-bottom-p3-y: calc(100% - var(--border-corner-tablet) * 0.8); + --right-bottom-p4-x: calc(100% - var(--border-corner-tablet) * 2); + --right-bottom-p4-y: calc(100% - var(--border-corner-tablet) * 0.15); + --right-bottom-p5-x: calc(100% - var(--border-corner-tablet) * 3.5); + --right-bottom-p5-y: 100%; + } + } + + @include bp('desktop') { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner)); + --right-bottom-p2-x: calc(100% - var(--border-corner)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner)); + --right-bottom-p5-y: 100%; + + &.step-2 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner)); + --right-bottom-p2-x: calc(100% - var(--border-corner)); + --right-bottom-p2-y: 100%; + --right-bottom-p3-x: calc(100% - var(--border-corner)); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner)); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner)); + --right-bottom-p5-y: 100%; + } + + &.step-3 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner) * 1.5); + --right-bottom-p2-x: calc(100% - var(--border-corner) * 0.5); + --right-bottom-p2-y: calc(100% - var(--border-corner) * 0.5); + --right-bottom-p3-x: calc(100% - var(--border-corner) * 1.5); + --right-bottom-p3-y: 100%; + --right-bottom-p4-x: calc(100% - var(--border-corner) * 1.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner) * 1.5); + --right-bottom-p5-y: 100%; + } + + &.step-4 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner) * 2.5); + --right-bottom-p2-x: calc(100% - var(--border-corner) * 0.25); + --right-bottom-p2-y: calc(100% - var(--border-corner) * 1.25); + --right-bottom-p3-x: calc(100% - var(--border-corner) * 1.25); + --right-bottom-p3-y: calc(100% - var(--border-corner) * 0.25); + --right-bottom-p4-x: calc(100% - var(--border-corner) * 2.5); + --right-bottom-p4-y: 100%; + --right-bottom-p5-x: calc(100% - var(--border-corner) * 2.5); + --right-bottom-p5-y: 100%; + } + + &.step-5 { + --right-bottom-p1-x: 100%; + --right-bottom-p1-y: calc(100% - var(--border-corner) * 3.5); + --right-bottom-p2-x: calc(100% - var(--border-corner) * 0.15); + --right-bottom-p2-y: calc(100% - var(--border-corner) * 2); + --right-bottom-p3-x: calc(100% - var(--border-corner) * 0.8); + --right-bottom-p3-y: calc(100% - var(--border-corner) * 0.8); + --right-bottom-p4-x: calc(100% - var(--border-corner) * 2); + --right-bottom-p4-y: calc(100% - var(--border-corner) * 0.15); + --right-bottom-p5-x: calc(100% - var(--border-corner) * 3.5); + --right-bottom-p5-y: 100%; + } + } + } + + &.bottom-left { + --left-bottom-p1-x: var(--border-corner-mobile); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: 0%; + --left-bottom-p2-y: calc(100% - var(--border-corner-mobile)); + --left-bottom-p3-x: 0%; + --left-bottom-p3-y: calc(100% - var(--border-corner-mobile)); + --left-bottom-p4-x: 0%; + --left-bottom-p4-y: calc(100% - var(--border-corner-mobile)); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-mobile)); + + &.step-2 { + --left-bottom-p1-x: var(--border-corner-mobile); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: var(--border-corner-mobile); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: var(--border-corner-mobile); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: var(--border-corner-mobile); + --left-bottom-p4-y: 100%; + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-mobile)); + } + + &.step-3 { + --left-bottom-p1-x: calc(var(--border-corner-mobile) * 1.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-mobile) * 1.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner-mobile) * 1.5); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: calc(var(--border-corner-mobile) * 0.5); + --left-bottom-p4-y: calc(100% - var(--border-corner-mobile) * 0.5); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-mobile) * 1.5); + } + + &.step-4 { + --left-bottom-p1-x: calc(var(--border-corner-mobile) * 2.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-mobile) * 2.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner-mobile) * 1.25); + --left-bottom-p3-y: calc(100% - var(--border-corner-mobile) * 0.25); + --left-bottom-p4-x: calc(var(--border-corner-mobile) * 0.25); + --left-bottom-p4-y: calc(100% - var(--border-corner-mobile) * 1.25); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-mobile) * 2.5); + } + + &.step-5 { + --left-bottom-p1-x: calc(var(--border-corner-mobile) * 3.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-mobile) * 2); + --left-bottom-p2-y: calc(100% - var(--border-corner-mobile) * 0.15); + --left-bottom-p3-x: calc(var(--border-corner-mobile) * 0.8); + --left-bottom-p3-y: calc(100% - var(--border-corner-mobile) * 0.8); + --left-bottom-p4-x: calc(var(--border-corner-mobile) * 0.15); + --left-bottom-p4-y: calc(100% - var(--border-corner-mobile) * 2); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-mobile) * 3.5); + } + + @include bp('tablet') { + --left-bottom-p1-x: var(--border-corner-tablet); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: 0%; + --left-bottom-p2-y: calc(100% - var(--border-corner-tablet)); + --left-bottom-p3-x: 0%; + --left-bottom-p3-y: calc(100% - var(--border-corner-tablet)); + --left-bottom-p4-x: 0%; + --left-bottom-p4-y: calc(100% - var(--border-corner-tablet)); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-tablet)); + + &.step-2 { + --left-bottom-p1-x: var(--border-corner-tablet); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: var(--border-corner-tablet); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: var(--border-corner-tablet); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: var(--border-corner-tablet); + --left-bottom-p4-y: 100%; + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-tablet)); + } + + &.step-3 { + --left-bottom-p1-x: calc(var(--border-corner-tablet) * 1.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-tablet) * 1.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner-tablet) * 1.5); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: calc(var(--border-corner-tablet) * 0.5); + --left-bottom-p4-y: calc(100% - var(--border-corner-tablet) * 0.5); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-tablet) * 1.5); + } + + &.step-4 { + --left-bottom-p1-x: calc(var(--border-corner-tablet) * 2.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-tablet) * 2.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner-tablet) * 1.25); + --left-bottom-p3-y: calc(100% - var(--border-corner-tablet) * 0.25); + --left-bottom-p4-x: calc(var(--border-corner-tablet) * 0.25); + --left-bottom-p4-y: calc(100% - var(--border-corner-tablet) * 1.25); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-tablet) * 2.5); + } + + &.step-5 { + --left-bottom-p1-x: calc(var(--border-corner-tablet) * 3.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner-tablet) * 2); + --left-bottom-p2-y: calc(100% - var(--border-corner-tablet) * 0.15); + --left-bottom-p3-x: calc(var(--border-corner-tablet) * 0.8); + --left-bottom-p3-y: calc(100% - var(--border-corner-tablet) * 0.8); + --left-bottom-p4-x: calc(var(--border-corner-tablet) * 0.15); + --left-bottom-p4-y: calc(100% - var(--border-corner-tablet) * 2); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner-tablet) * 3.5); + } + } + + @include bp('desktop') { + --left-bottom-p1-x: var(--border-corner); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: var(--border-corner); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: var(--border-corner); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: var(--border-corner); + --left-bottom-p4-y: 100%; + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner)); + + &.step-2 { + --left-bottom-p1-x: var(--border-corner); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: var(--border-corner); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: var(--border-corner); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: var(--border-corner); + --left-bottom-p4-y: 100%; + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner)); + } + + &.step-3 { + --left-bottom-p1-x: calc(var(--border-corner) * 1.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner) * 1.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner) * 1.5); + --left-bottom-p3-y: 100%; + --left-bottom-p4-x: calc(var(--border-corner) * 0.5); + --left-bottom-p4-y: calc(100% - var(--border-corner) * 0.5); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner) * 1.5); + } + + &.step-4 { + --left-bottom-p1-x: calc(var(--border-corner) * 2.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner) * 2.5); + --left-bottom-p2-y: 100%; + --left-bottom-p3-x: calc(var(--border-corner) * 1.25); + --left-bottom-p3-y: calc(100% - var(--border-corner) * 0.25); + --left-bottom-p4-x: calc(var(--border-corner) * 0.25); + --left-bottom-p4-y: calc(100% - var(--border-corner) * 1.25); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner) * 2.5); + } + + &.step-5 { + --left-bottom-p1-x: calc(var(--border-corner) * 3.5); + --left-bottom-p1-y: 100%; + --left-bottom-p2-x: calc(var(--border-corner) * 2); + --left-bottom-p2-y: calc(100% - var(--border-corner) * 0.15); + --left-bottom-p3-x: calc(var(--border-corner) * 0.8); + --left-bottom-p3-y: calc(100% - var(--border-corner) * 0.8); + --left-bottom-p4-x: calc(var(--border-corner) * 0.15); + --left-bottom-p4-y: calc(100% - var(--border-corner) * 2); + --left-bottom-p5-x: 0%; + --left-bottom-p5-y: calc(100% - var(--border-corner) * 3.5); + } + } + } +} diff --git a/src/components/elements/cut-off-corners/index.js b/src/components/elements/cut-off-corners/index.js new file mode 100644 index 00000000000..a3c22f41431 --- /dev/null +++ b/src/components/elements/cut-off-corners/index.js @@ -0,0 +1,57 @@ +import { clsx } from 'clsx' + +import styles from './cut-off-corners.module.scss' + +/** + * A component that applies cut-off corner styles to its children. + * @param {Object} props - The component props. + * @param {React.ReactNode} props.children - The child elements to be wrapped. + * @param {boolean} [props.leftTop] - Apply cut-off to the top-left corner. + * @param {boolean} [props.rightTop] - Apply cut-off to the top-right corner. + * @param {boolean} [props.rightBottom] - Apply cut-off to the bottom-right corner. + * @param {boolean} [props.leftBottom] - Apply cut-off to the bottom-left corner. + * @param {'xs'|'s'|'m'|'l'|'xl'} [props.size='l'] - The size of the cut-off corners. + * @param {1|2|3|4|5} [props.stepAnimation=2] - The step of the animation. + * @param {boolean} [props.disabled] - Disable the cut-off corners and render children directly. + */ +export default function CutOffCorners({ + children, + leftTop, + rightTop, + rightBottom, + leftBottom, + size = 'l', + stepAnimation = 2, + disabled, +}) { + if (disabled) { + return <>{children} + } + + const isDefault = !leftTop && !rightTop && !rightBottom && !leftBottom + + return ( +
    + {children} +
    + ) +} diff --git a/src/components/elements/spinner/index.js b/src/components/elements/spinner/index.js new file mode 100644 index 00000000000..44c93266cff --- /dev/null +++ b/src/components/elements/spinner/index.js @@ -0,0 +1,7 @@ +import SpinnerIcon from '@site/static/img/icons/spinner.svg' + +import styles from './spinner.module.scss' + +export default function Spinner() { + return +} diff --git a/src/components/elements/spinner/spinner.module.scss b/src/components/elements/spinner/spinner.module.scss new file mode 100644 index 00000000000..42c7e8e0ad8 --- /dev/null +++ b/src/components/elements/spinner/spinner.module.scss @@ -0,0 +1,13 @@ +.spinner { + animation-name: rotate; + animation-duration: 1s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: forwards; +} + +@keyframes rotate { + to { + rotate: 360deg; + } +} diff --git a/src/components/youtubeembed.module.css b/src/components/youtubeembed.module.css deleted file mode 100644 index 6d3a8712288..00000000000 --- a/src/components/youtubeembed.module.css +++ /dev/null @@ -1,14 +0,0 @@ -.wrapper { - position: relative; - padding-bottom: 56.25%; /* 16:9 aspect ratio */ - margin-bottom: 1em; -} - -.wrapper iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border-radius: 8px; -} diff --git a/src/config/mobileProductsMenu.ts b/src/config/mobileProductsMenu.ts new file mode 100644 index 00000000000..f6dd59fa5bc --- /dev/null +++ b/src/config/mobileProductsMenu.ts @@ -0,0 +1,42 @@ +/** + * Mobile Products Menu Configuration + * + * This configuration defines a simple flat list of product items + * displayed in the mobile sidebar under "Products". + */ + +export interface MobileProductItem { + label: string + href: string +} + +export const mobileProductsMenu: MobileProductItem[] = [ + { + label: 'MetaMask Connect', + href: '/metamask-connect', + }, + { + label: 'Embedded Wallets', + href: '/embedded-wallets', + }, + { + label: 'Smart Accounts Kit', + href: '/smart-accounts-kit', + }, + { + label: 'Agent Wallet', + href: '/agent-wallet', + }, + { + label: 'Snaps', + href: '/snaps', + }, + { + label: 'Services', + href: '/services', + }, + { + label: 'Developer dashboard', + href: '/developer-tools/dashboard', + }, +] diff --git a/src/css/custom.css b/src/css/custom.css deleted file mode 100644 index 20d51c594dd..00000000000 --- a/src/css/custom.css +++ /dev/null @@ -1,371 +0,0 @@ -@import url("../../node_modules/@metamask/design-tokens/src/css/design-tokens"); - -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: var(--brand-colors-blue-blue500); - --ifm-color-primary-dark: var(--brand-colors-blue-blue600); - --ifm-color-primary-darker: var(--brand-colors-blue-blue700); - --ifm-color-primary-darkest: var(--brand-colors-blue-blue800); - --ifm-color-primary-light: var(--brand-colors-blue-blue400); - --ifm-color-primary-lighter: var(--brand-colors-blue-blue300); - --ifm-color-primary-lightest: var(--brand-colors-blue-blue200); - --ifm-menu-color: var(--ifm-heading-color); - --ifm-code-font-size: 90%; - --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 10%); - --mm-flask-background-color: hsl(280deg 45% 85%); - --mm-flask-color: hsl(280deg 45% 30%); - --mm-flask-border-color: hsl(280deg 45% 45%); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme="dark"] { - --ifm-color-primary: var(--brand-colors-blue-blue400); - --ifm-color-primary-dark: var(--brand-colors-blue-blue500); - --ifm-color-primary-darker: var(--brand-colors-blue-blue600); - --ifm-color-primary-darkest: var(--brand-colors-blue-blue700); - --ifm-color-primary-light: var(--brand-colors-blue-blue300); - --ifm-color-primary-lightest: var(--brand-colors-blue-blue200); - --ifm-menu-color: #fff; - --docusaurus-highlighted-code-line-bg: rgb(0 0 0 / 30%); - --mm-flask-background-color: hsl(280deg 45% 30%); - --mm-flask-color: hsl(280deg 45% 85%); - --mm-flask-border-color: hsl(280deg 45% 45%); -} - -[data-theme="light"] .DocSearch { - /* --docsearch-primary-color: var(--ifm-color-primary); */ - - /* --docsearch-text-color: var(--ifm-font-color-base); */ - --docsearch-muted-color: var(--ifm-color-secondary-darkest); - --docsearch-container-background: rgb(94 100 112 / 70%); - - /* Modal */ - --docsearch-modal-background: var(--ifm-color-secondary-lighter); - - /* Search box */ - --docsearch-searchbox-background: var(--ifm-color-secondary); - --docsearch-searchbox-focus-background: var(--ifm-color-white); - - /* Hit */ - --docsearch-hit-color: var(--ifm-font-color-base); - --docsearch-hit-active-color: var(--ifm-color-white); - --docsearch-hit-background: var(--ifm-color-white); - - /* Footer */ - --docsearch-footer-background: var(--ifm-color-white); -} - -[data-theme="dark"] .DocSearch { - --docsearch-text-color: var(--ifm-font-color-base); - --docsearch-muted-color: var(--ifm-color-secondary-darkest); - --docsearch-container-background: rgb(47 55 69 / 70%); - - /* Modal */ - --docsearch-modal-background: var(--ifm-background-color); - - /* Search box */ - --docsearch-searchbox-background: var(--ifm-background-color); - --docsearch-searchbox-focus-background: var(--ifm-color-black); - - /* Hit */ - --docsearch-hit-color: var(--ifm-font-color-base); - --docsearch-hit-active-color: var(--ifm-color-white); - --docsearch-hit-background: var(--ifm-color-emphasis-100); - - /* Footer */ - --docsearch-footer-background: var(--ifm-background-surface-color); - --docsearch-key-gradient: linear-gradient( - -26.5deg, - var(--ifm-color-emphasis-200) 0%, - var(--ifm-color-emphasis-100) 100% - ); -} - -h1 { - font-size: 34px; -} - -h2 { - font-size: 28px; -} - -h3 { - font-size: 24px; -} - -h4 { - font-size: 19px; -} - -.navbar__title { - font-weight: 500; -} - -.navbar__brand:hover, -.navbar__brand:active { - color: var(--ifm-navbar-link-color); -} - -.cards { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - grid-auto-rows: auto; - grid-gap: 2rem; - padding: 1rem 0 3rem; - margin-bottom: -15px; -} - -.card { - box-shadow: 0 1.5px 3px 0 rgb(0 0 0 / 15%); - border: 1px solid var(--ifm-color-emphasis-200); - padding: 10px; -} - -img { - border-radius: 0.4rem; -} - -.row { - display: flex; -} - -.column { - flex: 50%; - padding: 10px; - text-align: center; -} - -/* Reset SVG to be inline by default */ -svg { - display: inline; -} - -/* Hide Osano cookie widget */ -.osano-cm-widget { - display: none; -} - -#manage-cookie-btn { - color: var(--ifm-footer-link-color); - border: 0; - background-color: unset; - cursor: pointer; - padding: 0; - transition: color var(--ifm-transition-fast) - var(--ifm-transition-timing-default); - font: var(--ifm-font-size-base) / var(--ifm-line-height-base) - var(--ifm-font-family-base); - line-height: 2; -} - -.getfeedback-container { - margin-top: 50px; - margin-bottom: -2rem; -} - -.usabilla_live_button_container { - display: none !important; -} - -.getfeedback-hidden { - display: none !important; -} - -p > .ReactPlayer { - border-radius: 3px; - overflow: hidden; -} - -p > video { - border-radius: 8px; - overflow: hidden; -} - -.menu__link { - font-weight: 600; - font-size: 1.1em; -} - -.menu__list .menu__list { - margin-top: 0.25rem; - margin-bottom: 0.25rem; -} - -.menu__list .menu__list .menu__list-item { - margin: 0; -} - -.menu__list .menu__list .menu__list-item .menu__link { - font-size: 0.9em; - font-weight: normal; -} - -.menu__list .menu__list .menu__caret { - opacity: 0.7; -} - -code { - border-style: none; -} - -.hidden { - display: none !important; -} - -.networks-section { - padding: 20px 0; -} - -.grid-row-wrap { - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-gap: 20px; -} - -.api-card { - display: flex; - align-items: center; - padding: 16px; - border-radius: 5px; - border: 1px solid #666; - box-shadow: 2px 5px 20px 0 rgb(0 0 0 / 10%); - color: inherit; - font-size: 20px; - font-weight: 700; - transition: border-color 0.2s ease-out; -} - -.api-card:hover { - color: inherit; - text-decoration: none; - border-color: var(--brand-red); -} - -.api-card:hover .static-icon { - display: none; -} - -.api-card .hover-icon { - display: none; -} - -.api-card:hover .hover-icon { - display: inline-block; -} - -.api-card .icon-wrap { - padding-left: 10px; -} - -.api-card .logo-wrap { - display: inline-flex; - align-items: center; - justify-content: center; - width: 40px; - height: 40px; - border-radius: 50%; - background-color: #121212; - margin-right: 15px; -} - -html[data-theme="light"] .api-card { - border-color: #e5e5e5; -} - -html[data-theme="light"] .api-card .logo-wrap { - background-color: #f1f1f1; -} - -html[data-theme="light"] .api-card:hover { - border-color: var(--brand-red); -} - -.w-lg-50 { - width: 50%; -} - -.w-lg-25 { - width: 25%; -} - -.opacity-30 { - opacity: 0.3; -} - -.opacity-60 { - opacity: 0.6; -} - -.transition-300 { - transition: all 0.3s; -} - -form { - position: relative; -} - -fieldset { - border: none; - padding: 0; - margin: 0; -} - -fieldset#root { - position: relative; - padding-bottom: 10px; -} - -button:hover { - cursor: pointer; -} - -[data-theme="light"] .tippy-tooltip { - background-color: rgb(20 22 24 / 100%); -} - -[data-theme="light"] .tippy-popper[x-placement^="top"] [x-arrow] { - border-top-color: rgb(20 22 24 / 100%); -} - -[data-theme="light"] .tippy-popper[x-placement^="bottom"] [x-arrow] { - border-bottom-color: rgb(20 22 24 / 100%); - } - -[data-theme="dark"] .tippy-tooltip { - background-color: rgb(255 255 255 / 100%); - color: rgb(20 22 24 / 100%); -} - -[data-theme="dark"] .tippy-popper[x-placement^="top"] [x-arrow] { - border-top-color: rgb(255 255 255 / 100%); -} - -[data-theme="dark"] .tippy-popper[x-placement^="bottom"] [x-arrow] { - border-bottom-color: rgb(255 255 255 / 100%); -} - -.react-dropdown-select-dropdown { - border-radius: 8px !important; - border: 1px solid #848C96 !important; -} - -.react-dropdown-select-dropdown-handle { - color: #ffffff; -} - -[data-theme="light"] .react-dropdown-select-dropdown-handle { - color: #24272A; -} - -@media (width <= 1200px) { - .navbar__item, - .navbar__link { - font-size: 14px; - } -} diff --git a/src/globals.d.ts b/src/globals.d.ts index d768e1a314a..c1b5167f54e 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -1,5 +1,27 @@ -declare module "*.svg" { - import { FC, SVGProps } from "react"; - const content: FC>; - export default content; +declare module '*.svg' { + import { FC, SVGProps } from 'react' + const content: FC> + export default content +} + +declare module '*.mdx' { + import type { ComponentType } from 'react' + + type MdxMediaContent = { + type: 'image' | 'video' | 'youtube' + url?: string + youtubeId?: string + alt?: string + caption?: string + poster?: string + autoplay?: boolean + loop?: boolean + muted?: boolean + } + + const MDXComponent: ComponentType + export default MDXComponent + export const contentType: 'text' | 'media' | 'hybrid' | undefined + export const mediaContent: MdxMediaContent | undefined + export const frontMatter: Record | undefined } diff --git a/src/hooks/store.ts b/src/hooks/store.ts index 9aa72a6c550..5fb971ed746 100644 --- a/src/hooks/store.ts +++ b/src/hooks/store.ts @@ -1,61 +1,56 @@ declare global { interface WindowEventMap { // @ts-ignore - "eip6963:announceProvider": CustomEvent; + 'eip6963:announceProvider': CustomEvent } } export interface EIP6963ProviderInfo { - walletId: string; - uuid: string; - name: string; - icon: string; + walletId: string + uuid: string + name: string + icon: string } export interface EIP1193Provider { - isStatus?: boolean; - host?: string; - path?: string; + isStatus?: boolean + host?: string + path?: string sendAsync?: ( request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void, - ) => void; + callback: (error: Error | null, response: unknown) => void + ) => void send?: ( request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void, - ) => void; - request: (request: { - method: string; - params?: Array; - }) => Promise; + callback: (error: Error | null, response: unknown) => void + ) => void + request: (request: { method: string; params?: Array }) => Promise } export interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo; - provider: EIP1193Provider; + info: EIP6963ProviderInfo + provider: EIP1193Provider } type EIP6963AnnounceProviderEvent = { detail: { - info: EIP6963ProviderInfo; - provider: EIP1193Provider; - }; -}; + info: EIP6963ProviderInfo + provider: EIP1193Provider + } +} -let providers: EIP6963ProviderDetail[] = []; +let providers: EIP6963ProviderDetail[] = [] export const store = { value: () => providers, subscribe: (callback: () => void) => { function onAnnouncement(event: EIP6963AnnounceProviderEvent) { - if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) - return; - providers = [...providers, event.detail]; - callback(); + if (providers.map(p => p.info.uuid).includes(event.detail.info.uuid)) return + providers = [...providers, event.detail] + callback() } - window.addEventListener("eip6963:announceProvider", onAnnouncement); - window.dispatchEvent(new Event("eip6963:requestProvider")); + window.addEventListener('eip6963:announceProvider', onAnnouncement) + window.dispatchEvent(new Event('eip6963:requestProvider')) - return () => - window.removeEventListener("eip6963:announceProvider", onAnnouncement); + return () => window.removeEventListener('eip6963:announceProvider', onAnnouncement) }, -}; +} diff --git a/src/hooks/useCustomHideableNavbar.ts b/src/hooks/useCustomHideableNavbar.ts new file mode 100644 index 00000000000..7e2703e58aa --- /dev/null +++ b/src/hooks/useCustomHideableNavbar.ts @@ -0,0 +1,58 @@ +import { useCallback, useEffect, useRef, useState } from 'react' +import { useLocationChange } from '@docusaurus/theme-common/internal' + +const useCustomHideableNavbar = (hideOnScroll: boolean) => { + const [isNavbarVisible, setIsNavbarVisible] = useState(true) + const navbarRef = useRef(null) + const lastScrollTop = useRef(0) + + const handleScroll = useCallback(() => { + if (!hideOnScroll) { + return + } + + const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop + const scrollingUp = currentScrollTop < lastScrollTop.current + const scrollDifference = Math.abs(currentScrollTop - lastScrollTop.current) + + // Show navbar when at the top or scrolling up + if (currentScrollTop <= 5 || scrollingUp) { + setIsNavbarVisible(true) + } + // Hide only when scrolling down significantly and past a larger threshold + else if (currentScrollTop > 100 && scrollDifference > 20) { + setIsNavbarVisible(false) + } + + lastScrollTop.current = currentScrollTop + }, [hideOnScroll]) + + useLocationChange(locationChangeEvent => { + if (!hideOnScroll) { + return + } + setIsNavbarVisible(true) + lastScrollTop.current = 0 + }) + + useEffect(() => { + if (!hideOnScroll) { + return undefined + } + + window.addEventListener('scroll', handleScroll, { + passive: true, + }) + + return () => { + window.removeEventListener('scroll', handleScroll) + } + }, [handleScroll, hideOnScroll]) + + return { + navbarRef, + isNavbarVisible, + } +} + +export default useCustomHideableNavbar diff --git a/src/hooks/useUser.js b/src/hooks/useUser.js index 7963b9946d6..447600c3edd 100644 --- a/src/hooks/useUser.js +++ b/src/hooks/useUser.js @@ -1,55 +1,52 @@ -import { useState, useEffect } from "react"; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import { DASHBOARD_URL, GET_OPTIONS } from "../lib/constants"; +import { useState, useEffect } from 'react' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import { GET_OPTIONS } from '../lib/constants' export default function useUser() { - const { siteConfig } = useDocusaurusContext(); - const { DASHBOARD_PREVIEW_URL, VERCEL_ENV } = siteConfig?.customFields || {} - const [user, setUser] = useState(undefined); - const [loading, setLoading] = useState(true); - const [keys, setKeys] = useState([]); + const { siteConfig } = useDocusaurusContext() + const { DASHBOARD_URL } = siteConfig?.customFields || {} + const [user, setUser] = useState(undefined) + const [loading, setLoading] = useState(true) + const [keys, setKeys] = useState([]) const getUserInfo = async () => { - setLoading(true); + setLoading(true) try { - const res = await fetch(`${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/me`, GET_OPTIONS); - const response = await res.json(); + const res = await fetch(`${DASHBOARD_URL}/api/me`, GET_OPTIONS) + const response = await res.json() if (response?.data) { - setUser(response.data); - const userId = response.data.id; - const upData = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/v1/users/${userId}/projects`, - GET_OPTIONS - ); + setUser(response.data) + const userId = response.data.id + const upData = await fetch(`${DASHBOARD_URL}/api/v1/users/${userId}/projects`, GET_OPTIONS) if (upData.ok) { - const upProjects = await upData.json(); - const keysArr = upProjects?.result?.projects; - const allKeys = []; + const upProjects = await upData.json() + const keysArr = upProjects?.result?.projects + const allKeys = [] if (keysArr) { - Object.keys(keysArr).forEach((key) => { - allKeys.push(keysArr[key]); - }); + Object.keys(keysArr).forEach(key => { + allKeys.push(keysArr[key]) + }) } - setKeys([...allKeys]); + setKeys([...allKeys]) } } if (response?.error) { - setUser(undefined); - setKeys([]); + setUser(undefined) + setKeys([]) } } catch (e) { - setUser(undefined); - setKeys([]); + setUser(undefined) + setKeys([]) } finally { - setLoading(false); + setLoading(false) } - }; + } useEffect(() => { - getUserInfo(); - }, []); + getUserInfo() + }, []) return { user, keys, loading, - }; + } } diff --git a/src/lib/constants.js b/src/lib/constants.js deleted file mode 100644 index e06c01b3df7..00000000000 --- a/src/lib/constants.js +++ /dev/null @@ -1,487 +0,0 @@ -export const PROD_APP_URL = "https://app.infura.io"; -export const STAGE_APP_URL = "https://infura-app-staging.vercel.app"; -export const DEV_APP_URL = "http://localhost:3000"; - -export const DASHBOARD_URL = (DASHBOARD_PREVIEW_URL, VERCEL_ENV) => - DASHBOARD_PREVIEW_URL - ? DASHBOARD_PREVIEW_URL - : VERCEL_ENV === "production" - ? PROD_APP_URL - : STAGE_APP_URL; - -export const REF_PATH = "/wallet/reference/new-reference"; - -const TEST_TRANSACTIONS = { - mainnet: { - tx: "0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0", - addParam: "0xc94770007dda54cF92009BFF0dE90c06F603a09f", - }, - sepolia: { - tx: "0x353e7c277baa3538651fd7f64c8630598c446a4b663034cdca5b18027d3cdb5a", - addParam: "0x1fc35B79FB11Ea7D4532dA128DfA9Db573C51b09", - }, - testnet: { - tx: "0x005c8a894c0bb9f56c40dd257eaf84f2e7a14f7054f85fb323f34e690669f150", - addParam: "0xc94770007dda54cF92009BFF0dE90c06F603a09f", - }, - fuji: { - tx: "0xd95cc407bb84eed2625a7bede344c7cf11e68786758dc02c0f79af4111a594c8", - addParam: "0x5fbe8dca1c3ee9efddeccb86ba455f02cef6466b", - }, - alfajores: { - tx: "0x210bdc45a5af5b33e82710b855aad75c1fbb903eaaf8f0c8b664e6709d216ed2", - addParam: "0xc94770007dda54cF92009BFF0dE90c06F603a09f", - }, -}; - -const NETWORK_URL = { - infura: "infura.io", - dev: "dev.infura.org", - expansion: "infura.io", -}; - -export const MSG_TYPES = { - INFO: "info", - ERROR: "error", - SUCCESS: "success", -}; - -export const NETWORKS_TYPES = { - mainnet: { - label: "mainnet", - value: "mainnet", - urlType: NETWORK_URL.infura, - }, - mainnetDev: { - label: "mainnet", - value: "mainnet", - urlType: NETWORK_URL.dev, - }, - testnet: { - label: "testnet", - value: "testnet", - urlType: NETWORK_URL.infura, - }, - sepolia: { - label: "sepolia", - value: "sepolia", - urlType: NETWORK_URL.infura, - }, - fuji: { - label: "fuji", - value: "fuji", - urlType: NETWORK_URL.dev, - }, - alfajores: { - label: "alfajores", - value: "alfajores", - urlType: NETWORK_URL.dev, - }, - mumbai: { - label: "mumbai", - value: "mumbai", - urlType: NETWORK_URL.infura, - }, - gasEthereum: { - label: "ethereum", - value: "1", - urlType: NETWORK_URL.expansion, - }, - gasPolygon: { - label: "polygon", - value: "137", - urlType: NETWORK_URL.expansion, - }, - gasFilecoinMainnet: { - label: "FilecoinMainnet", - value: "314", - urlType: NETWORK_URL.expansion, - }, - gasMumbai: { - label: "mumbai", - value: "80001", - urlType: NETWORK_URL.expansion, - }, - gasAvalanche: { - label: "avalanche", - value: "43114", - urlType: NETWORK_URL.expansion, - }, - gasFantom: { - label: "fantom", - value: "250", - urlType: NETWORK_URL.expansion, - }, - gasCronos: { - label: "cronos", - value: "25", - urlType: NETWORK_URL.expansion, - }, - gasArbitrumOne: { - label: "ArbitrumOne", - value: "42161", - urlType: NETWORK_URL.expansion, - }, - gasArbitrumNova: { - label: "ArbitrumNova", - value: "42170", - urlType: NETWORK_URL.expansion, - }, -}; - -export const NETWORKS_METHODS = { - L1: { - methods: [ - { - label: "eth_blockNumber", - value: "eth_blockNumber", - params: { - sepolia: [], - fuji: [], - alfajores: [], - testnet: [], - mainnet: [], - }, - }, - { - label: "eth_chainId", - value: "eth_chainId", - params: { - sepolia: [], - fuji: [], - alfajores: [], - testnet: [], - mainnet: [], - }, - }, - { - label: "eth_gasPrice", - value: "eth_gasPrice", - params: { - sepolia: [], - fuji: [], - alfajores: [], - testnet: [], - mainnet: [], - }, - }, - { - label: "eth_getBalance", - value: "eth_getBalance", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.addParam, "latest"], - fuji: [TEST_TRANSACTIONS.fuji.addParam, "latest"], - alfajores: [TEST_TRANSACTIONS.alfajores.addParam, "latest"], - testnet: [TEST_TRANSACTIONS.testnet.addParam, "latest"], - mainnet: [TEST_TRANSACTIONS.mainnet.addParam, "latest"], - }, - }, - { - label: "eth_getBlockByNumber", - value: "eth_getBlockByNumber", - params: { - sepolia: ["latest", false], - fuji: ["latest", false], - alfajores: ["latest", false], - testnet: ["latest", false], - mainnet: ["latest", false], - }, - }, - { - label: "eth_getBlockTransactionCountByHash", - value: "eth_getBlockTransactionCountByHash", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.tx], - fuji: [TEST_TRANSACTIONS.fuji.tx], - alfajores: [TEST_TRANSACTIONS.alfajores.tx], - testnet: [TEST_TRANSACTIONS.testnet.tx], - mainnet: [TEST_TRANSACTIONS.mainnet.tx], - }, - }, - { - label: "eth_getBlockTransactionCountByNumber", - value: "eth_getBlockTransactionCountByNumber", - params: { - sepolia: ["latest"], - fuji: ["latest"], - alfajores: ["latest"], - testnet: ["latest"], - mainnet: ["latest"], - }, - }, - { - label: "eth_getCode", - value: "eth_getCode", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.addParam, "latest"], - fuji: [TEST_TRANSACTIONS.fuji.addParam, "latest"], - alfajores: [TEST_TRANSACTIONS.alfajores.addParam, "latest"], - testnet: [TEST_TRANSACTIONS.testnet.addParam, "latest"], - mainnet: [TEST_TRANSACTIONS.mainnet.addParam, "latest"], - }, - }, - { - label: "eth_getTransactionByBlockHashAndIndex", - value: "eth_getTransactionByBlockHashAndIndex", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.addParam, "0x0"], - fuji: [TEST_TRANSACTIONS.fuji.addParam, "0x0"], - alfajores: [TEST_TRANSACTIONS.alfajores.addParam, "0x0"], - testnet: [TEST_TRANSACTIONS.testnet.addParam, "0x0"], - mainnet: [TEST_TRANSACTIONS.mainnet.addParam, "0x0"], - }, - }, - { - label: "eth_getTransactionByHash", - value: "eth_getTransactionByHash", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.tx], - fuji: [TEST_TRANSACTIONS.fuji.tx], - alfajores: [TEST_TRANSACTIONS.alfajores.tx], - testnet: [TEST_TRANSACTIONS.testnet.tx], - mainnet: [TEST_TRANSACTIONS.mainnet.tx], - }, - }, - { - label: "eth_getTransactionCount", - value: "eth_getTransactionCount", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.addParam, "latest"], - fuji: [TEST_TRANSACTIONS.fuji.addParam, "latest"], - alfajores: [TEST_TRANSACTIONS.alfajores.addParam, "latest"], - testnet: [TEST_TRANSACTIONS.testnet.addParam, "latest"], - mainnet: [TEST_TRANSACTIONS.mainnet.addParam, "latest"], - }, - }, - { - label: "eth_maxPriorityFeePerGas", - value: "eth_maxPriorityFeePerGas", - params: { - sepolia: [], - fuji: [], - alfajores: [], - testnet: [], - mainnet: [], - }, - }, - { - label: "eth_getTransactionReceipt", - value: "eth_getTransactionReceipt", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.tx], - fuji: [TEST_TRANSACTIONS.fuji.tx], - alfajores: [TEST_TRANSACTIONS.alfajores.tx], - testnet: [TEST_TRANSACTIONS.testnet.tx], - mainnet: [TEST_TRANSACTIONS.mainnet.tx], - }, - }, - { - label: "eth_getUncleByBlockHashAndIndex", - value: "eth_getUncleByBlockHashAndIndex", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.tx, "0x0"], - fuji: [TEST_TRANSACTIONS.fuji.tx, "0x0"], - alfajores: [TEST_TRANSACTIONS.alfajores.tx, "0x0"], - testnet: [TEST_TRANSACTIONS.testnet.tx, "0x0"], - mainnet: [TEST_TRANSACTIONS.mainnet.tx, "0x0"], - }, - }, - { - label: "eth_getUncleCountByBlockHash", - value: "eth_getUncleCountByBlockHash", - params: { - sepolia: [TEST_TRANSACTIONS.sepolia.tx], - fuji: [TEST_TRANSACTIONS.fuji.tx], - alfajores: [TEST_TRANSACTIONS.alfajores.tx], - testnet: [TEST_TRANSACTIONS.testnet.tx], - mainnet: [TEST_TRANSACTIONS.mainnet.tx], - }, - }, - { - label: "eth_getUncleCountByBlockNumber", - value: "eth_getUncleCountByBlockNumber", - params: { - sepolia: ["earliest"], - fuji: ["earliest"], - alfajores: ["earliest"], - testnet: ["earliest"], - mainnet: ["earliest"], - }, - }, - { - label: "eth_syncing", - value: "eth_syncing", - params: { - sepolia: [], - fuji: [], - alfajores: [], - testnet: [], - mainnet: [], - }, - }, - ], - }, - L2: { - methods: [ - { - label: "get_suggested_gas_prices", - value: "suggestedGasFees", - params: {}, - }, - { - label: "get_base_fee_percentile", - value: "baseFeePercentile", - params: {}, - }, - { - label: "get_busy_threshold", - value: "busyThreshold", - params: {}, - }, - { - label: "get_base_fee_history", - value: "baseFeeHistory", - params: {}, - }, - ], - }, -}; - -export const NETWORKS = { - ARBITRUM: "arbitrum", - AURORA: "aurora", - ETHEREUM: "ethereum", - LINEA: "linea", - PALM: "palm", - POLYGON: "polygon", - OPTIMISM: "optimism", - GAS_API: "gas.api", -}; - -export const NETWORKS_NAMES = [ - { - label: "Ethereum", - value: NETWORKS.ETHEREUM, - complexEndpoint: false, - networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.sepolia], - }, - { - label: "Linea", - value: NETWORKS.LINEA, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet], - }, - { - label: "Palm", - value: NETWORKS.PALM, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.testnet], - }, - { - label: "Polygon", - value: NETWORKS.POLYGON, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.mumbai], - }, - { - label: "Gas API", - value: NETWORKS.GAS_API, - disabled: false, - complexEndpoint: false, - isExpansion: true, - networksTypes: [ - NETWORKS_TYPES.gasEthereum, - NETWORKS_TYPES.gasPolygon, - NETWORKS_TYPES.gasFilecoinMainnet, - NETWORKS_TYPES.gasMumbai, - NETWORKS_TYPES.gasAvalanche, - NETWORKS_TYPES.gasFantom, - NETWORKS_TYPES.gasCronos, - NETWORKS_TYPES.gasArbitrumOne, - NETWORKS_TYPES.gasArbitrumNova, - ], - }, - { - label: "Aurora", - value: NETWORKS.AURORA, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.testnet], - }, - { - label: "Arbitrum", - value: NETWORKS.ARBITRUM, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet], - }, - { - label: "Optimism", - value: NETWORKS.OPTIMISM, - complexEndpoint: true, - networksTypes: [NETWORKS_TYPES.mainnet], - }, -]; - -export const INIT_REQ_SET = { - netName: NETWORKS_NAMES[0], - netType: NETWORKS_NAMES[0].networksTypes[0], - netMethod: NETWORKS_METHODS.L1.methods[0], - apiKey: { label: "", value: "ID", private: "" }, -}; - -const renderHeaders = () => { - let headers = new Headers(); - headers.append("pragma", "no-cache"); - headers.append("cache-control", "no-cache"); - return headers; -}; - -export const NO_CACHE = renderHeaders(); - -export const FEATURE_FLAGS = { - DOCS_TERMINAL_VISIBLE: "docs-code-terminal-visibility", - GAS_API_ENABLED: "gas-api-enabled", -}; - -export const NO_FOUND_PAGE = "/no-found"; - -export const AUTH_ROUTES = { - GAS_API: "/infura-expansion-apis/gas-api", -}; - -export const GET_OPTIONS = { - credentials: "include", - method: "GET", - mode: "cors", - cache: "no-cache", - headers: NO_CACHE, -}; - -export const REF_SERVICES_PATH = "/services/reference/"; -export const REF_WALLET_PATH = "/wallet/reference/"; -export const REF_FAUCET_PATH = "/developer-tools/faucet/"; - -export const REF_ALLOW_LOGIN_PATH = [ - REF_SERVICES_PATH, - REF_WALLET_PATH, - REF_FAUCET_PATH, -]; - -export const REQUEST_PARAMS = (method = "POST", headers = {}) => ({ - method, - headers: { - Accept: "application/json", - "Content-Type": "application/json", - "Cache-Control": "no-cache", - Pragma: "no-cache", - ...headers - }, -}); - -export const AUTH_WALLET_SESSION_NAME = "auth.wallet.session"; -export const AUTH_WALLET_TOKEN = "auth.wallet.token"; -export const AUTH_WALLET_PROJECTS = "auth.wallet.projects"; -export const LINEA_DEV_URL = "https://linea-mainnet.dev.infura.org"; -export const LINEA_PROD_URL = "https://linea-mainnet.infura.io"; -export const LINEA_REQUEST_URL = process.env.VERCEL_ENV === "production" - ? LINEA_PROD_URL - : LINEA_DEV_URL; diff --git a/src/lib/constants.ts b/src/lib/constants.ts new file mode 100644 index 00000000000..b9b2a957019 --- /dev/null +++ b/src/lib/constants.ts @@ -0,0 +1,468 @@ +export const REF_PATH = '/wallet/reference/new-reference' + +const TEST_TRANSACTIONS = { + mainnet: { + tx: '0xbb3a336e3f823ec18197f1e13ee875700f08f03e2cab75f0d0b118dabb44cba0', + addParam: '0xc94770007dda54cF92009BFF0dE90c06F603a09f', + }, + sepolia: { + tx: '0x353e7c277baa3538651fd7f64c8630598c446a4b663034cdca5b18027d3cdb5a', + addParam: '0x1fc35B79FB11Ea7D4532dA128DfA9Db573C51b09', + }, + testnet: { + tx: '0x005c8a894c0bb9f56c40dd257eaf84f2e7a14f7054f85fb323f34e690669f150', + addParam: '0xc94770007dda54cF92009BFF0dE90c06F603a09f', + }, + fuji: { + tx: '0xd95cc407bb84eed2625a7bede344c7cf11e68786758dc02c0f79af4111a594c8', + addParam: '0x5fbe8dca1c3ee9efddeccb86ba455f02cef6466b', + }, + alfajores: { + tx: '0x210bdc45a5af5b33e82710b855aad75c1fbb903eaaf8f0c8b664e6709d216ed2', + addParam: '0xc94770007dda54cF92009BFF0dE90c06F603a09f', + }, +} + +const NETWORK_URL = { + infura: 'infura.io', + dev: 'dev.infura.org', + expansion: 'infura.io', +} + +export const MSG_TYPES = { + INFO: 'info', + ERROR: 'error', + SUCCESS: 'success', +} + +export const NETWORKS_TYPES = { + mainnet: { + label: 'mainnet', + value: 'mainnet', + urlType: NETWORK_URL.infura, + }, + mainnetDev: { + label: 'mainnet', + value: 'mainnet', + urlType: NETWORK_URL.dev, + }, + testnet: { + label: 'testnet', + value: 'testnet', + urlType: NETWORK_URL.infura, + }, + sepolia: { + label: 'sepolia', + value: 'sepolia', + urlType: NETWORK_URL.infura, + }, + fuji: { + label: 'fuji', + value: 'fuji', + urlType: NETWORK_URL.dev, + }, + alfajores: { + label: 'alfajores', + value: 'alfajores', + urlType: NETWORK_URL.dev, + }, + mumbai: { + label: 'mumbai', + value: 'mumbai', + urlType: NETWORK_URL.infura, + }, + gasEthereum: { + label: 'ethereum', + value: '1', + urlType: NETWORK_URL.expansion, + }, + gasPolygon: { + label: 'polygon', + value: '137', + urlType: NETWORK_URL.expansion, + }, + gasFilecoinMainnet: { + label: 'FilecoinMainnet', + value: '314', + urlType: NETWORK_URL.expansion, + }, + gasMumbai: { + label: 'mumbai', + value: '80001', + urlType: NETWORK_URL.expansion, + }, + gasAvalanche: { + label: 'avalanche', + value: '43114', + urlType: NETWORK_URL.expansion, + }, + gasFantom: { + label: 'fantom', + value: '250', + urlType: NETWORK_URL.expansion, + }, + gasCronos: { + label: 'cronos', + value: '25', + urlType: NETWORK_URL.expansion, + }, + gasArbitrumOne: { + label: 'ArbitrumOne', + value: '42161', + urlType: NETWORK_URL.expansion, + }, + gasArbitrumNova: { + label: 'ArbitrumNova', + value: '42170', + urlType: NETWORK_URL.expansion, + }, +} + +export const NETWORKS_METHODS = { + L1: { + methods: [ + { + label: 'eth_blockNumber', + value: 'eth_blockNumber', + params: { + sepolia: [], + fuji: [], + alfajores: [], + testnet: [], + mainnet: [], + }, + }, + { + label: 'eth_chainId', + value: 'eth_chainId', + params: { + sepolia: [], + fuji: [], + alfajores: [], + testnet: [], + mainnet: [], + }, + }, + { + label: 'eth_gasPrice', + value: 'eth_gasPrice', + params: { + sepolia: [], + fuji: [], + alfajores: [], + testnet: [], + mainnet: [], + }, + }, + { + label: 'eth_getBalance', + value: 'eth_getBalance', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.addParam, 'latest'], + fuji: [TEST_TRANSACTIONS.fuji.addParam, 'latest'], + alfajores: [TEST_TRANSACTIONS.alfajores.addParam, 'latest'], + testnet: [TEST_TRANSACTIONS.testnet.addParam, 'latest'], + mainnet: [TEST_TRANSACTIONS.mainnet.addParam, 'latest'], + }, + }, + { + label: 'eth_getBlockByNumber', + value: 'eth_getBlockByNumber', + params: { + sepolia: ['latest', false], + fuji: ['latest', false], + alfajores: ['latest', false], + testnet: ['latest', false], + mainnet: ['latest', false], + }, + }, + { + label: 'eth_getBlockTransactionCountByHash', + value: 'eth_getBlockTransactionCountByHash', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.tx], + fuji: [TEST_TRANSACTIONS.fuji.tx], + alfajores: [TEST_TRANSACTIONS.alfajores.tx], + testnet: [TEST_TRANSACTIONS.testnet.tx], + mainnet: [TEST_TRANSACTIONS.mainnet.tx], + }, + }, + { + label: 'eth_getBlockTransactionCountByNumber', + value: 'eth_getBlockTransactionCountByNumber', + params: { + sepolia: ['latest'], + fuji: ['latest'], + alfajores: ['latest'], + testnet: ['latest'], + mainnet: ['latest'], + }, + }, + { + label: 'eth_getCode', + value: 'eth_getCode', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.addParam, 'latest'], + fuji: [TEST_TRANSACTIONS.fuji.addParam, 'latest'], + alfajores: [TEST_TRANSACTIONS.alfajores.addParam, 'latest'], + testnet: [TEST_TRANSACTIONS.testnet.addParam, 'latest'], + mainnet: [TEST_TRANSACTIONS.mainnet.addParam, 'latest'], + }, + }, + { + label: 'eth_getTransactionByBlockHashAndIndex', + value: 'eth_getTransactionByBlockHashAndIndex', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.addParam, '0x0'], + fuji: [TEST_TRANSACTIONS.fuji.addParam, '0x0'], + alfajores: [TEST_TRANSACTIONS.alfajores.addParam, '0x0'], + testnet: [TEST_TRANSACTIONS.testnet.addParam, '0x0'], + mainnet: [TEST_TRANSACTIONS.mainnet.addParam, '0x0'], + }, + }, + { + label: 'eth_getTransactionByHash', + value: 'eth_getTransactionByHash', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.tx], + fuji: [TEST_TRANSACTIONS.fuji.tx], + alfajores: [TEST_TRANSACTIONS.alfajores.tx], + testnet: [TEST_TRANSACTIONS.testnet.tx], + mainnet: [TEST_TRANSACTIONS.mainnet.tx], + }, + }, + { + label: 'eth_getTransactionCount', + value: 'eth_getTransactionCount', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.addParam, 'latest'], + fuji: [TEST_TRANSACTIONS.fuji.addParam, 'latest'], + alfajores: [TEST_TRANSACTIONS.alfajores.addParam, 'latest'], + testnet: [TEST_TRANSACTIONS.testnet.addParam, 'latest'], + mainnet: [TEST_TRANSACTIONS.mainnet.addParam, 'latest'], + }, + }, + { + label: 'eth_maxPriorityFeePerGas', + value: 'eth_maxPriorityFeePerGas', + params: { + sepolia: [], + fuji: [], + alfajores: [], + testnet: [], + mainnet: [], + }, + }, + { + label: 'eth_getTransactionReceipt', + value: 'eth_getTransactionReceipt', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.tx], + fuji: [TEST_TRANSACTIONS.fuji.tx], + alfajores: [TEST_TRANSACTIONS.alfajores.tx], + testnet: [TEST_TRANSACTIONS.testnet.tx], + mainnet: [TEST_TRANSACTIONS.mainnet.tx], + }, + }, + { + label: 'eth_getUncleByBlockHashAndIndex', + value: 'eth_getUncleByBlockHashAndIndex', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.tx, '0x0'], + fuji: [TEST_TRANSACTIONS.fuji.tx, '0x0'], + alfajores: [TEST_TRANSACTIONS.alfajores.tx, '0x0'], + testnet: [TEST_TRANSACTIONS.testnet.tx, '0x0'], + mainnet: [TEST_TRANSACTIONS.mainnet.tx, '0x0'], + }, + }, + { + label: 'eth_getUncleCountByBlockHash', + value: 'eth_getUncleCountByBlockHash', + params: { + sepolia: [TEST_TRANSACTIONS.sepolia.tx], + fuji: [TEST_TRANSACTIONS.fuji.tx], + alfajores: [TEST_TRANSACTIONS.alfajores.tx], + testnet: [TEST_TRANSACTIONS.testnet.tx], + mainnet: [TEST_TRANSACTIONS.mainnet.tx], + }, + }, + { + label: 'eth_getUncleCountByBlockNumber', + value: 'eth_getUncleCountByBlockNumber', + params: { + sepolia: ['earliest'], + fuji: ['earliest'], + alfajores: ['earliest'], + testnet: ['earliest'], + mainnet: ['earliest'], + }, + }, + { + label: 'eth_syncing', + value: 'eth_syncing', + params: { + sepolia: [], + fuji: [], + alfajores: [], + testnet: [], + mainnet: [], + }, + }, + ], + }, + L2: { + methods: [ + { + label: 'get_suggested_gas_prices', + value: 'suggestedGasFees', + params: {}, + }, + { + label: 'get_base_fee_percentile', + value: 'baseFeePercentile', + params: {}, + }, + { + label: 'get_busy_threshold', + value: 'busyThreshold', + params: {}, + }, + { + label: 'get_base_fee_history', + value: 'baseFeeHistory', + params: {}, + }, + ], + }, +} + +export const NETWORKS = { + ARBITRUM: 'arbitrum', + AURORA: 'aurora', + ETHEREUM: 'ethereum', + LINEA: 'linea', + PALM: 'palm', + POLYGON: 'polygon', + OPTIMISM: 'optimism', + GAS_API: 'gas.api', +} + +export const NETWORKS_NAMES = [ + { + label: 'Ethereum', + value: NETWORKS.ETHEREUM, + complexEndpoint: false, + networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.sepolia], + }, + { + label: 'Linea', + value: NETWORKS.LINEA, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet], + }, + { + label: 'Palm', + value: NETWORKS.PALM, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.testnet], + }, + { + label: 'Polygon', + value: NETWORKS.POLYGON, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.mumbai], + }, + { + label: 'Gas API', + value: NETWORKS.GAS_API, + disabled: false, + complexEndpoint: false, + isExpansion: true, + networksTypes: [ + NETWORKS_TYPES.gasEthereum, + NETWORKS_TYPES.gasPolygon, + NETWORKS_TYPES.gasFilecoinMainnet, + NETWORKS_TYPES.gasMumbai, + NETWORKS_TYPES.gasAvalanche, + NETWORKS_TYPES.gasFantom, + NETWORKS_TYPES.gasCronos, + NETWORKS_TYPES.gasArbitrumOne, + NETWORKS_TYPES.gasArbitrumNova, + ], + }, + { + label: 'Aurora', + value: NETWORKS.AURORA, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet, NETWORKS_TYPES.testnet], + }, + { + label: 'Arbitrum', + value: NETWORKS.ARBITRUM, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet], + }, + { + label: 'Optimism', + value: NETWORKS.OPTIMISM, + complexEndpoint: true, + networksTypes: [NETWORKS_TYPES.mainnet], + }, +] + +export const INIT_REQ_SET = { + netName: NETWORKS_NAMES[0], + netType: NETWORKS_NAMES[0].networksTypes[0], + netMethod: NETWORKS_METHODS.L1.methods[0], + apiKey: { label: '', value: 'ID', private: '' }, +} + +const renderHeaders = () => { + let headers = new Headers() + headers.append('pragma', 'no-cache') + headers.append('cache-control', 'no-cache') + return headers +} + +export const NO_CACHE = renderHeaders() + +export const FEATURE_FLAGS = { + DOCS_TERMINAL_VISIBLE: 'docs-code-terminal-visibility', + GAS_API_ENABLED: 'gas-api-enabled', +} + +export const NO_FOUND_PAGE = '/no-found' + +export const AUTH_ROUTES = { + GAS_API: '/infura-expansion-apis/gas-api', +} + +export const GET_OPTIONS = { + credentials: 'include', + method: 'GET', + mode: 'cors', + cache: 'no-cache', + headers: NO_CACHE, +} + +export const REF_SERVICES_PATH = '/services/reference/' +export const REF_WALLET_PATH = '/wallet/reference/' +export const REF_FAUCET_PATH = '/developer-tools/faucet' + +export const REF_ALLOW_LOGIN_PATH = [REF_SERVICES_PATH, REF_WALLET_PATH, REF_FAUCET_PATH] + +export const REQUEST_PARAMS = (method = 'POST', headers = {}) => ({ + method, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'Cache-Control': 'no-cache', + Pragma: 'no-cache', + mode: 'cors', + ...headers, + }, +}) + +export const LINEA_PROD_URL = 'https://linea-mainnet.infura.io' +export const LINEA_DEV_URL = 'https://linea-mainnet.dev.infura.org' +export const LINEA_REQUEST_URL = LINEA_PROD_URL diff --git a/src/lib/data.js b/src/lib/data.js index c355271e02b..a4742fed3c3 100644 --- a/src/lib/data.js +++ b/src/lib/data.js @@ -1,123 +1,352 @@ -export const API_LINKS = { - blockchain: [ - { - name: "Make requests", - href: "/services/how-to/make-batch-requests", - }, - { - name: "Send a transaction", - href: "/services/how-to/send-a-transaction", - }, - { - name: "Debug and optimize transactions", - href: "/services/how-to/trace-transactions", - }, - { - name: "Subscribe to events", - href: "/services/how-to/subscribe-to-events", - }, - { - name: "Explore all methods", - href: "/service/index", - }, - ], - storage: [ - { - name: "Make requests", - href: "/services/how-to/use-ipfs/how-to/request-rate-limits", - }, - { - name: "Manage files", - href: "/services/how-to/use-ipfs/manage-files", - }, - { - name: "Explore all methods", - href: "https://docs.ipfs.tech/reference/http/api/", - }, - ], -}; - -const LOGO_PATH = "/img/logos"; +const LOGO_PATH = '/img/logos' export const NETWORK_LINKS = [ { - name: "Arbitrum", - href: "/services/reference/arbitrum", + name: 'Arbitrum', + href: '/services/reference/arbitrum', logo: `${LOGO_PATH}/logo-arbitrum.svg`, }, { - name: "Avalanche", - href: "/services/reference/avalanche-c-chain", + name: 'Avalanche', + href: '/services/reference/avalanche-c-chain', logo: `${LOGO_PATH}/logo-avalanche.svg`, }, { - name: "Base", - href: "/services/reference/base", + name: 'Base', + href: '/services/reference/base', logo: `${LOGO_PATH}/logo-base.svg`, }, { - name: "Blast", - href: "/services/reference/blast", + name: 'Blast', + href: '/services/reference/blast', logo: `${LOGO_PATH}/logo-blast.svg`, }, { - name: "BNB Smart Chain", - href: "/services/reference/bnb-smart-chain", + name: 'BNB Smart Chain', + href: '/services/reference/bnb-smart-chain', logo: `${LOGO_PATH}/logo-bnb.svg`, }, { - name: "Celo", - href: "/services/reference/celo", + name: 'Celo', + href: '/services/reference/celo', logo: `${LOGO_PATH}/logo-celo.svg`, }, { - name: "IPFS", - href: "/services/reference/ipfs", - logo: `${LOGO_PATH}/logo-ipfs.svg`, + name: 'Ethereum', + href: '/services/reference/ethereum', + logo: `${LOGO_PATH}/logo-eth.svg`, }, { - name: "Ethereum", - href: "/services/reference/ethereum", - logo: `${LOGO_PATH}/logo-eth.svg`, + name: 'Hemi', + href: '/services/reference/hemi', + logo: `${LOGO_PATH}/logo-hemi.svg`, + }, + { + name: 'HyperEVM', + href: '/services/reference/hyperevm', + logo: `${LOGO_PATH}/logo-hyperevm.svg`, }, { - name: "Linea", - href: "/services/reference/linea", + name: 'IPFS', + href: '/services/reference/ipfs', + logo: `${LOGO_PATH}/logo-ipfs.svg`, + }, + { + name: 'Linea', + href: '/services/reference/linea', logo: `${LOGO_PATH}/logo-linea.svg`, }, { - name: "Mantle", - href: "/services/reference/mantle", + name: 'Mantle', + href: '/services/reference/mantle', logo: `${LOGO_PATH}/logo-mantle.svg`, }, { - name: "Optimism", - href: "/services/reference/optimism", - logo: `${LOGO_PATH}/logo-opt.svg`, + name: 'MegaETH', + href: '/services/reference/megaeth', + logo: `${LOGO_PATH}/logo_megaeth.svg`, }, { - name: "opBNB", - href: "/api/networks/opbnb", + name: 'Monad', + href: '/services/reference/monad', + logo: `${LOGO_PATH}/logo-monad.svg`, + }, + { + name: 'opBNB', + href: '/services/reference/opbnb', logo: `${LOGO_PATH}/logo-bnb.svg`, }, { - name: "Palm", - href: "/services/reference/palm", + name: 'Optimism', + href: '/services/reference/optimism', + logo: `${LOGO_PATH}/logo-opt.svg`, + }, + { + name: 'Palm', + href: '/services/reference/palm', logo: `${LOGO_PATH}/logo-palm.svg`, }, { - name: "Polygon", - href: "/services/reference/polygon-pos", + name: 'Polygon', + href: '/services/reference/polygon-pos', logo: `${LOGO_PATH}/logo-polygon.svg`, }, { - name: "Starknet", - href: "/services/reference/starknet", + name: 'Scroll', + href: '/services/reference/scroll', + logo: `${LOGO_PATH}/logo-scroll.svg`, + }, + { + name: 'Sei', + href: '/services/reference/sei', + logo: `${LOGO_PATH}/logo-sei.svg`, + }, + { + name: 'Solana', + href: '/services/reference/solana', + logo: `${LOGO_PATH}/logo-solana.svg`, + }, + { + name: 'Starknet', + href: '/services/reference/starknet', logo: `${LOGO_PATH}/logo-starknet.svg`, }, { - name: "ZKsync Era", - href: "/services/reference/zksync", + name: 'Unichain', + href: '/services/reference/unichain', + logo: `${LOGO_PATH}/logo-unichain.svg`, + }, + { + name: 'ZKsync Era', + href: '/services/reference/zksync', logo: `${LOGO_PATH}/logo-zksync.svg`, }, -]; +] + +export const API_COSTS = { + evm: { + eth_accounts: 80, + eth_blobBaseFee: 300, + eth_blockNumber: 80, + eth_call: 80, + eth_chainId: 5, + eth_createAccessList: 80, + eth_estimateGas: 300, + eth_feeHistory: 80, + eth_gasPrice: 80, + eth_getBalance: 80, + eth_getBlockByHash: 80, + eth_getBlockByNumber: 80, + eth_getBlockReceipts: 1000, + eth_getBlockTransactionCountByHash: 150, + eth_getBlockTransactionCountByNumber: 150, + eth_getCode: 80, + eth_getLogs: 255, + eth_getProof: 150, + eth_getStorageAt: 80, + eth_getTransactionByBlockHashAndIndex: 150, + eth_getTransactionByBlockNumberAndIndex: 150, + eth_getTransactionByHash: 80, + eth_getTransactionCount: 80, + eth_getTransactionReceipt: 80, + eth_getUncleByBlockHashAndIndex: 150, + eth_getUncleByBlockNumberAndIndex: 150, + eth_getUncleCountByBlockHash: 150, + eth_getUncleCountByBlockNumber: 150, + eth_getWork: 80, + eth_hashrate: 5, + eth_maxPriorityFeePerGas: 80, + eth_mining: 5, + eth_protocolVersion: 5, + eth_sendRawTransaction: 80, + eth_sign: 80, + eth_simulateV1: 300, + eth_submitWork: 80, + eth_subscribe: 5, + eth_syncing: 5, + eth_unsubscribe: 10, + net_listening: 5, + net_peerCount: 80, + net_version: 5, + web3_clientVersion: 80, + }, + evm_trace: { + trace_block: 300, + trace_call: 300, + trace_callMany: 300, + trace_filter: 300, + trace_transaction: 300, + }, + evm_debug: { + //debug_getBadBlocks: 1000, + debug_storageRangeAt: 1000, + debug_traceBlock: 1000, + debug_traceBlockByHash: 1000, + debug_traceBlockByNumber: 1000, + debug_traceCall: 1000, + debug_traceTransaction: 1000, + }, + evm_subscription: { + logs: 300, + newHeads: 50, + newPendingTransaction: 200, + }, + evm_filter: { + eth_getFilterChanges: 140, + eth_getFilterLogs: 255, + eth_newBlockFilter: 80, + eth_newFilter: 80, + eth_uninstallFilter: 80, + }, + hyperevm: { + eth_bigBlockGasPrice: 80, + eth_usingBigBlocks: 80, + eth_getSystemTxsByBlockNumber: 80, + eth_getSystemTxsByBlockHash: 80, + }, + megaeth: { + eth_callMany: 80, + eth_getAccount: 80, + eth_getRawTransactionByHash: 80, + }, + linea: { + linea_estimateGas: 100, + linea_getTransactionExclusionStatusV1: 160, + }, + polygon: { + bor_getAuthor: 80, + bor_getCurrentProposer: 80, + bor_getCurrentValidators: 80, + bor_getRootHash: 80, + bor_getSignersAtHash: 80, + }, + solana: { + // Digital Asset Standard (DAS) API + getAsset: 160, + getAssetProof: 160, + getAssetProofBatch: 160, + getAssets: 160, + getAssetsByAuthority: 160, + getAssetsByCreator: 160, + getAssetsByGroup: 160, + getAssetsByOwner: 160, + getAssetSignatures: 160, + getNftEditions: 160, + getTokenAccounts: 160, + searchAssets: 160, + // Core Solana methods + getAccountInfo: 160, + getBalance: 160, + getBlock: 160, + getBlockCommitment: 160, + getBlockHeight: 160, + getBlockProduction: 160, + getBlocks: 160, + getBlocksWithLimit: 160, + getClusterNodes: 160, + getEpochInfo: 160, + getEpochSchedule: 160, + getFeeForMessage: 160, + getFirstAvailableBlock: 160, + getGenesisHash: 160, + getHealth: 160, + getHighestSnapshotSlot: 160, + getIdentity: 160, + getInflationGovernor: 160, + getInflationRate: 160, + getInflationReward: 160, + getLargestAccounts: 160, + getLatestBlockhash: 160, + getLeaderSchedule: 160, + getMaxRetransmitSlot: 160, + getMaxShredInsertSlot: 160, + getMinimumBalanceForRentExemption: 160, + getMultipleAccounts: 160, + getProgramAccounts: 160, + getRecentPerformanceSamples: 160, + getRecentPrioritizationFees: 160, + getSignaturesForAddress: 160, + getSignatureStatuses: 160, + getSlot: 160, + getSlotLeader: 160, + getSlotLeaders: 160, + getStakeMinimumDelegation: 160, + getSupply: 160, + getTokenAccountBalance: 160, + getTokenAccountsByDelegate: 160, + getTokenAccountsByOwner: 160, + getTokenLargestAccounts: 160, + getTokenSupply: 160, + getTransaction: 160, + getTransactionCount: 160, + getVersion: 160, + getVoteAccounts: 160, + isBlockhashValid: 160, + minimumLedgerSlot: 160, + requestAirdrop: 160, + sendTransaction: 160, + simulateTransaction: 160, + }, + starknet: { + starknet_addDeclareTransaction: 700, + starknet_addDeployAccountTransaction: 700, + starknet_addInvokeTransaction: 700, + starknet_blockHashAndNumber: 80, + starknet_blockNumber: 80, + starknet_call: 80, + starknet_chainId: 5, + starknet_estimateFee: 240, + starknet_getBlockTransactionCount: 80, + starknet_getBlockWithTxHashes: 80, + starknet_getBlockWithTxs: 80, + starknet_getClass: 80, + starknet_getClassAt: 80, + starknet_getClassHashAt: 80, + starknet_getEvents: 200, + starknet_getNonce: 80, + starknet_getStateUpdate: 80, + starknet_getStorageAt: 80, + starknet_getTransactionByBlockIdAndIndex: 80, + starknet_getTransactionByHash: 80, + starknet_getTransactionReceipt: 80, + starknet_pendingTransactions: 160, + starknet_simulateTransactions: 160, + starknet_specVersion: 5, + starknet_syncing: 5, + }, + zksync: { + zks_estimateFee: 80, + zks_estimateGasL1ToL2: 80, + zks_getAllAccountBalances: 80, + zks_getBlockDetails: 80, + zks_getBridgeContracts: 80, + zks_getBytecodeByHash: 80, + zks_getL1BatchBlockRange: 80, + zks_getL1BatchDetails: 80, + zks_getL2ToL1LogProof: 80, + zks_getL2ToL1MsgProof: 80, + zks_getMainContract: 80, + zks_getProof: 80, + zks_getRawBlockTransactions: 80, + zks_getTestnetPaymaster: 80, + zks_getTransactionDetails: 80, + zks_L1BatchNumber: 80, + zks_L1ChainId: 80, + }, + gasApi: { + baseFeeHistory: 80, + baseFeePercentile: 80, + busyThreshold: 80, + suggestedGasFees: 80, + }, + bundler: { + eth_estimateUserOperationGas: 1980, + eth_getUserOperationByHash: 100, + eth_getUserOperationReceipt: 100, + eth_sendUserOperation: 4950, + eth_supportedEntryPoints: 10, + pimlico_getUserOperationGasPrice: 100, + pimlico_getUserOperationStatus: 50, + pimlico_simulateAssetChanges: 4950, + }, +} diff --git a/src/lib/glossary.json b/src/lib/glossary.json new file mode 100644 index 00000000000..d424cb88823 --- /dev/null +++ b/src/lib/glossary.json @@ -0,0 +1,101 @@ +{ + "description": "Technical terms used in our documentation", + "terms": [ + { + "term": "Account abstraction", + "definition": "A conceptual model for programmable onchain accounts, including flexible validation logic, custom signature schemes, and gas abstraction. ERC-4337 defines a mechanism for account abstraction." + }, + { + "term": "Advanced Permissions", + "definition": "Fine-grained, wallet execution permissions that dapps can request from MetaMask extension users. Based on ERC-7715." + }, + { + "term": "Bundler", + "definition": "An ERC-4337 component that manages the alternate mempool: it collects user operations from smart accounts, packages them, and submits them to the network." + }, + { + "term": "Caveat", + "definition": "A restriction attached to a delegation that limits how delegated authority can be used." + }, + { + "term": "Caveat enforcer", + "definition": "A smart contract that enforces delegation rules by validating caveat conditions during redemption hooks." + }, + { + "term": "Delegate account", + "definition": "The account that receives delegated authority and can redeem a delegation under its constraints." + }, + { + "term": "Delegation", + "definition": "The ability for a MetaMask smart account to authorize another account to perform specific executions on its behalf." + }, + { + "term": "Delegation Framework", + "definition": "A set of audited smart contracts that handle smart account creation, the delegation lifecycle, and caveat enforcement." + }, + { + "term": "Delegation Manager", + "definition": "The ERC-7710 component that validates and redeems delegations, including signature checks and caveat enforcer hooks." + }, + { + "term": "Delegation scope", + "definition": "A predefined authority pattern representing a caveat or group of caveats, which sets the initial actions a delegate is allowed to perform. You can combine scopes with additional caveats." + }, + { + "term": "Delegator account", + "definition": "The account that creates and signs a delegation to grant limited authority to another account." + }, + { + "term": "EIP-7702 smart account", + "definition": "A stateless MetaMask smart account implementation that represents an upgraded EOA." + }, + { + "term": "Externally owned account (EOA)", + "definition": "A private-key-controlled account with no built-in programmable execution logic." + }, + { + "term": "Hybrid smart account", + "definition": "A smart account implementation that supports both an EOA owner and passkey signers." + }, + { + "term": "MetaMask smart account", + "definition": "A smart contract account created using the Smart Accounts Kit that supports programmable behavior, flexible signing options, and ERC-7710 delegations." + }, + { + "term": "Multisig smart account", + "definition": "A smart account implementation that requires multiple signers to generate a valid signature." + }, + { + "term": "Open delegation", + "definition": "A delegation that leaves the delegate unspecified, allowing any account to redeem it." + }, + { + "term": "Open redelegation", + "definition": "A redelegation with no specific delegate, allowing any account to redeem inherited permissions." + }, + { + "term": "Passkey", + "definition": "A cryptographic key that can be used to sign transactions instead of a private key." + }, + { + "term": "Paymaster", + "definition": "A service that pays for user operations on behalf of a smart account." + }, + { + "term": "Redelegation", + "definition": "A delegation that passes on authority granted by a previous delegation." + }, + { + "term": "Root delegation", + "definition": "The first delegation in a chain, where an account delegates its own authority directly." + }, + { + "term": "Signer", + "definition": "An account that can sign transactions for a smart account." + }, + { + "term": "User operation", + "definition": "A pseudo-transaction object defined by ERC-4337 that describes what a smart account should execute. User operations are submitted to the alternate mempool managed by bundlers." + } + ] +} diff --git a/src/lib/segmentAnalytics.js b/src/lib/segmentAnalytics.js index 1a02339bd56..6f02ba008a8 100644 --- a/src/lib/segmentAnalytics.js +++ b/src/lib/segmentAnalytics.js @@ -1,12 +1,3 @@ -export const trackPageViewForSegment = ({ name, path, userExperience }) => { - if (window.analytics) { - window.analytics.page("Page viewed", name, { - ...(path && { path: path }), - ...(userExperience && { user_experience: userExperience }), - }); - } -}; - export const trackClickForSegment = ({ eventName, clickType, @@ -22,20 +13,16 @@ export const trackClickForSegment = ({ ...(responseStatus && { response_status: responseStatus }), ...(responseMsg && { response_msg: responseMsg }), ...(timestamp && { timestamp: timestamp }), - }); + }) } -}; +} -export const trackInputChangeForSegment = ({ - eventName, - userExperience, - timestamp, -}) => { +export const trackInputChangeForSegment = ({ eventName, userExperience, timestamp }) => { if (window.analytics) { - window.analytics.track("Input changed", { + window.analytics.track('Input changed', { ...(eventName && { event_name: eventName }), ...(userExperience && { user_experience: userExperience }), ...(timestamp && { timestamp: timestamp }), - }); + }) } -}; +} diff --git a/src/lib/siwsrp/auth.ts b/src/lib/siwsrp/auth.ts index 3cd1a4b999f..8715f77e530 100644 --- a/src/lib/siwsrp/auth.ts +++ b/src/lib/siwsrp/auth.ts @@ -1,13 +1,14 @@ -import { SDK } from "@metamask/profile-sync-controller"; -import jwt from "jsonwebtoken"; +import { SDK } from '@metamask/profile-sync-controller' +import { SDKProvider } from '@metamask/sdk' +import jwt from 'jsonwebtoken' type HydraEnv = { - authApiUrl: string; - oidcApiUrl: string; - userStorageApiUrl: string; - env: SDK.Env; - platform: SDK.Platform; -}; + authApiUrl: string + oidcApiUrl: string + userStorageApiUrl: string + env: SDK.Env + platform: SDK.Platform +} const { AuthType, Env, getEnvUrls, JwtBearerAuth, Platform } = SDK export const AUTH_WALLET_PAIRING = 'auth.wallet.pairing' @@ -15,34 +16,43 @@ export const AUTH_WALLET_SESSION_NAME = 'auth.wallet.session' export const AUTH_WALLET_TOKEN = 'auth.wallet.token' export const AUTH_WALLET_PROJECTS = 'auth.wallet.projects' export const AUTH_WALLET_USER_PLAN = 'auth.wallet.uksTier' +export const AUTH_WALLET_ENS = 'auth.wallet.ens' + +export const getWalletEns = () => { + return sessionStorage.getItem(AUTH_WALLET_ENS) +} + +export const getUksTier = (): string => { + return sessionStorage.getItem(AUTH_WALLET_USER_PLAN) +} const getHydraEnv = (env: string): HydraEnv => { - const platform = Platform.INFURA; + const platform = Platform.INFURA - if (env === "production") { + if (env === 'production') { return { ...getEnvUrls(Env.PRD), env: Env.PRD, platform, - }; + } } else { return { ...getEnvUrls(Env.DEV), env: Env.DEV, platform, - }; + } } -}; +} const storage: SDK.AuthStorageOptions = { getLoginResponse: async () => { - const storedResponse = localStorage.getItem(AUTH_WALLET_SESSION_NAME); - return storedResponse ? JSON.parse(storedResponse) : null; + const storedResponse = sessionStorage.getItem(AUTH_WALLET_SESSION_NAME) + return storedResponse ? JSON.parse(storedResponse) : null }, setLoginResponse: async (val: SDK.LoginResponse) => { - localStorage.setItem(AUTH_WALLET_SESSION_NAME, JSON.stringify(val)); + sessionStorage.setItem(AUTH_WALLET_SESSION_NAME, JSON.stringify(val)) }, -}; +} const auth = (env: string) => new JwtBearerAuth( @@ -54,47 +64,41 @@ const auth = (env: string) => { storage, } - ); + ) -export const authenticateAndAuthorize = async (env: string) => { - let accessToken: string, userProfile: SDK.UserProfile; +export const authenticateAndAuthorize = async (env: string, customProvider: SDKProvider) => { + let accessToken: string, userProfile: SDK.UserProfile try { - await auth(env).connectSnap(); - accessToken = await auth(env).getAccessToken(); - userProfile = await auth(env).getUserProfile(); + const authInstance = auth(env) + authInstance.setCustomProvider(customProvider) + await authInstance.connectSnap() + accessToken = await authInstance.getAccessToken() + userProfile = await authInstance.getUserProfile() } catch (e: any) { - throw new Error(e.message); + throw new Error(e.message) } return { accessToken, userProfile, - }; -}; + } +} export const saveTokenString = (token: string) => { - sessionStorage.setItem(AUTH_WALLET_TOKEN, token); -}; + sessionStorage.setItem(AUTH_WALLET_TOKEN, token) +} export const getTokenString = (): string => { return sessionStorage.getItem(AUTH_WALLET_TOKEN) } -export const getUksTier = (): string => { - return sessionStorage.getItem(AUTH_WALLET_USER_PLAN) -} - export const getUserIdFromJwtToken = () => { - const token = sessionStorage.getItem(AUTH_WALLET_TOKEN); - const decoded = jwt.decode(token as string, { complete: true }) as jwt.Jwt; - const { id } = decoded.payload as jwt.Payload; - return id; -}; + const token = sessionStorage.getItem(AUTH_WALLET_TOKEN) + const decoded = jwt.decode(token as string, { complete: true }) as jwt.Jwt + const { id } = decoded.payload as jwt.Payload + return id +} export const clearStorage = () => { - sessionStorage.clear(); - localStorage.removeItem(AUTH_WALLET_PAIRING); - localStorage.removeItem(AUTH_WALLET_SESSION_NAME); - localStorage.removeItem(AUTH_WALLET_TOKEN); - localStorage.removeItem(AUTH_WALLET_PROJECTS); -}; + sessionStorage.clear() +} diff --git a/src/pages/developer-tools/faucet.module.scss b/src/pages/developer-tools/faucet.module.scss index 2029b2afe86..6b591d3dae4 100644 --- a/src/pages/developer-tools/faucet.module.scss +++ b/src/pages/developer-tools/faucet.module.scss @@ -1,17 +1,19 @@ -:root[data-theme="dark"] { +:root[data-theme='dark'] { --faucet-bg-color-primary: #252526; --faucet-box-shadow: none; - --faucet-faq-bg: rgb(20, 22, 24); + --faucet-faq-bg: #242628; --faucet-hero-border: rgba(132, 140, 150, 0.16); --faucet-hero-background: #24272a; + --faucet-tab-background: #242628; } -:root[data-theme="light"] { +:root[data-theme='light'] { --faucet-bg-color-primary: #ffffff; --faucet-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06); - --faucet-faq-bg: rgb(242, 244, 246); + --faucet-faq-bg: #e9edf6; --faucet-hero-border: rgba(187, 192, 197, 0.4); - --faucet-hero-background: #f2f4f6; + --faucet-hero-background: #e9edf6; + --faucet-tab-background: #e9edf6; } :global(.navbar) { @@ -19,8 +21,7 @@ } .authCont { - padding: var(--ifm-navbar-padding-vertical) - var(--ifm-navbar-padding-horizontal); + padding: var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal); height: 80px; display: flex; justify-content: space-between; @@ -51,6 +52,25 @@ width: 100%; position: relative; } + + ul { + background: none; + border: 0; + + li { + color: var(--text-color); + } + + [aria-selected='true'] { + background: var(--faucet-tab-background); + } + + [aria-selected='false'] { + &:hover { + background: var(--badge-default-bg-color); + } + } + } } .header { @@ -78,8 +98,7 @@ text-align: center; margin: 0 auto; width: 100%; - max-width: 600px; - margin-bottom: 48px; + margin-bottom: 4rem; } .topContent { @@ -87,25 +106,24 @@ padding: 0 var(--ifm-navbar-padding-horizontal); .hero { - max-width: 1420px; - width: 100%; - margin: 0 auto; - border-radius: 8px; - border: 1px solid var(--faucet-hero-border); background-color: var(--faucet-hero-background); - padding: 32px; + padding: 6rem; margin-bottom: 60px; + @media screen and (max-width: 996px) { + margin-bottom: 40px; + padding: 3rem; + } } } .bottomContent { background: var(--faucet-faq-bg); - padding: 60px var(--ifm-navbar-padding-horizontal); + padding: 5rem var(--ifm-navbar-padding-horizontal); .faq { margin: 0 auto; width: 100%; - max-width: 1014px; + max-width: 60%; > *:last-child { margin-bottom: 0; diff --git a/src/pages/developer-tools/faucet.tsx b/src/pages/developer-tools/faucet.tsx index 582018f82b0..5e196c98bb6 100644 --- a/src/pages/developer-tools/faucet.tsx +++ b/src/pages/developer-tools/faucet.tsx @@ -1,9 +1,9 @@ -import React, { useContext, useEffect, useState } from "react"; -import Layout from "@theme/Layout"; -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; -import ldClient from "launchdarkly"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import React, { useContext, useEffect, useState } from 'react' +import Layout from '@theme/Layout' +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' +import ldClient from 'launchdarkly' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' import { Faq, AlertCommonIssue, @@ -11,176 +11,154 @@ import { AlertSuccess, TransactionTable, Hero, - Maintenance, AlertPastActivity, -} from "@site/src/components/Faucet"; -import { useAlert } from "react-alert"; -import {MetamaskProviderContext} from "@site/src/theme/Root"; - -import styles from "./faucet.module.scss"; -import { DASHBOARD_URL, REQUEST_PARAMS } from "@site/src/lib/constants"; -import { AlertBalanceTooLow } from "@site/src/components/Faucet/Alerts"; -import { - trackInputChangeForSegment, - trackPageViewForSegment, -} from "@site/src/lib/segmentAnalytics"; - -const lineaMaintenanceFlag = "linea-maintenance-mode"; -const sepoliaMaintenanceFlag = "sepolia-maintenance-mode"; -const faucetBypassDomainFlag = "faucet-bypass-domains"; -const DEFAULT_TRANSACTIONS_LIST = { linea: [], sepolia: [] }; - -export const SEPOLIA_URL = "https://sepolia.etherscan.io/tx/"; -export const LINEA_URL = "https://sepolia.lineascan.build/tx/"; + AlertFailedPoh, +} from '@site/src/components/Faucet' +import { useAlert } from 'react-alert' +import { MetamaskProviderContext } from '@site/src/theme/Root' +import styles from './faucet.module.scss' +import { REQUEST_PARAMS } from '@site/src/lib/constants' +import { AlertBalanceTooLow } from '@site/src/components/Faucet/Alerts' + +const lineaMaintenanceFlag = 'linea-maintenance-mode' +const sepoliaMaintenanceFlag = 'sepolia-maintenance-mode' +const faucetBypassDomainFlag = 'faucet-bypass-domains' +const DEFAULT_TRANSACTIONS_LIST = { linea: [], sepolia: [] } + +export const SEPOLIA_URL = 'https://sepolia.etherscan.io/tx/' +export const LINEA_URL = 'https://sepolia.lineascan.build/tx/' export default function Faucet() { - const { siteConfig } = useDocusaurusContext(); - const { userId, token, uksTier, metaMaskAccount } = useContext(MetamaskProviderContext); - const alert = useAlert(); - const [transactions, setTransactions] = useState(DEFAULT_TRANSACTIONS_LIST); - const [isLoading, setIsLoading] = useState(false); - const [walletAddress, setWalletAddress] = useState(""); - const [ldReady, setLdReady] = useState(false); - const [isLineaMaintenance, setIsLineaMaintenance] = useState(false); - const [isSepoliaMaintenance, setIsSepoliaMaintenance] = useState(false); - const [faucetBypassDomain, setFaucetBypassDomain] = useState(false); - const { DASHBOARD_PREVIEW_URL, VERCEL_ENV } = siteConfig?.customFields || {}; - - const isLimitedUserPlan = uksTier === "core" && !faucetBypassDomain; - - const setTransactionsForNetwork = (network: "linea" | "sepolia", data) => { - setTransactions((transactions) => ({ ...transactions, [network]: data })); - }; - - const mutateTransactionsForNetwork = (network: "linea" | "sepolia", data) => { - setTransactions((transactions) => ({ + const { siteConfig } = useDocusaurusContext() + const { userId, token, uksTier, metaMaskAccount, metaMaskAccountEns } = + useContext(MetamaskProviderContext) + const alert = useAlert() + const [transactions, setTransactions] = useState(DEFAULT_TRANSACTIONS_LIST) + const [isLoading, setIsLoading] = useState(false) + const [walletAddress, setWalletAddress] = useState('') + const [ldReady, setLdReady] = useState(false) + const [isLineaMaintenance, setIsLineaMaintenance] = useState(false) + const [isSepoliaMaintenance, setIsSepoliaMaintenance] = useState(false) + const [faucetBypassDomain, setFaucetBypassDomain] = useState(false) + const { DASHBOARD_URL } = siteConfig?.customFields || {} + + const isLimitedUserPlan = uksTier === 'core' && !faucetBypassDomain + + const setTransactionsForNetwork = (network: 'linea' | 'sepolia', data) => { + setTransactions(transactions => ({ ...transactions, [network]: data })) + } + + const mutateTransactionsForNetwork = (network: 'linea' | 'sepolia', data) => { + setTransactions(transactions => ({ ...transactions, [network]: [data, ...transactions[network]], - })); - }; + })) + } const getTransactions = async () => { - const sepolia = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/faucets/sepolia/transactions`, - { - ...REQUEST_PARAMS("GET", { Authorization: `Bearer ${token}` }), - }, - ); - const { data: sepoliaData } = await sepolia.json(); - setTransactionsForNetwork("sepolia", sepoliaData); - - const linea = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/faucets/linea/transactions`, - { - ...REQUEST_PARAMS("GET", { Authorization: `Bearer ${token}` }), - }, - ); - const { data: lineaData } = await linea.json(); - setTransactionsForNetwork("linea", lineaData); - }; - - const handleRequest = (network: "linea" | "sepolia") => async () => { - setIsLoading(true); - const address = walletAddress.trim(); + const sepolia = await fetch(`${DASHBOARD_URL}/api/faucets/sepolia/transactions`, { + ...REQUEST_PARAMS('GET', { Authorization: `Bearer ${token}` }), + }) + const { data: sepoliaData } = await sepolia.json() + setTransactionsForNetwork('sepolia', sepoliaData) + + const linea = await fetch(`${DASHBOARD_URL}/api/faucets/linea/transactions`, { + ...REQUEST_PARAMS('GET', { Authorization: `Bearer ${token}` }), + }) + const { data: lineaData } = await linea.json() + setTransactionsForNetwork('linea', lineaData) + } + + const handleRequest = (network: 'linea' | 'sepolia') => async () => { + setIsLoading(true) + const address = walletAddress.trim() try { const faucetRawResponse = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/faucets/${network}?address=${address}`, + `${DASHBOARD_URL}/api/faucets/${network}?address=${address}`, { - ...REQUEST_PARAMS("POST", { Authorization: `Bearer ${token}` }), + ...REQUEST_PARAMS('POST', { Authorization: `Bearer ${token}` }), body: JSON.stringify({ dstAddress: address }), - }, - ); + } + ) - const faucetResponse = await faucetRawResponse.json(); - const error = faucetResponse.error; + const faucetResponse = await faucetRawResponse.json() + const error = faucetResponse.error if (error) { - if (error.code === "balance_too_low") { - alert.error(); - } else if (error.code === "transaction_count_too_low") { - alert.error(); - } else if (error.name === "COOLDOWN PERIOD") { - alert.info(); + if (error.code === 'failed_poh') { + alert.error() + } else if (error.code === 'balance_too_low') { + alert.error() + } else if (error.code === 'transaction_count_too_low') { + alert.error() + } else if (error.name === 'COOLDOWN PERIOD') { + alert.info() } else { - alert.error(); + alert.error() } } else { - mutateTransactionsForNetwork(network, faucetResponse); + mutateTransactionsForNetwork(network, faucetResponse) alert.success( , - ); + url={`${network === 'linea' ? LINEA_URL : SEPOLIA_URL}/${faucetResponse.txnHash}`} + /> + ) } } catch (e) { - alert.error(); + alert.error() } - setWalletAddress(""); - setIsLoading(false); - }; - - const handleOnInputChange = (value) => { - setWalletAddress(value); - trackInputChangeForSegment({ - eventName: "Wallet address", - userExperience: "B", - timestamp: Date.now(), - }); - }; + setWalletAddress('') + setIsLoading(false) + } + + const handleOnInputChange = value => { + setWalletAddress(value) + } useEffect(() => { ldClient.waitUntilReady().then(() => { - setIsLineaMaintenance(ldClient.variation(lineaMaintenanceFlag, false)); - setIsSepoliaMaintenance( - ldClient.variation(sepoliaMaintenanceFlag, false), - ); - setFaucetBypassDomain(ldClient.variation(faucetBypassDomainFlag, false)); - setLdReady(true); - }); - const handleChangeLinea = (current) => { - setIsLineaMaintenance(current); - }; - const handleChangeSepolia = (current) => { - setIsSepoliaMaintenance(current); - }; - const handleFaucetBypassDomain = (current) => { - setFaucetBypassDomain(current); - }; - ldClient.on(`change:${lineaMaintenanceFlag}`, handleChangeLinea); - ldClient.on(`change:${sepoliaMaintenanceFlag}`, handleChangeSepolia); - ldClient.on(`change:${faucetBypassDomainFlag}`, handleFaucetBypassDomain); - - trackPageViewForSegment({ - name: "Faucet Page", - path: "developer-tools/faucet", - userExperience: "B", - }); + setIsLineaMaintenance(ldClient.variation(lineaMaintenanceFlag, false)) + setIsSepoliaMaintenance(ldClient.variation(sepoliaMaintenanceFlag, false)) + setFaucetBypassDomain(ldClient.variation(faucetBypassDomainFlag, false)) + setLdReady(true) + }) + const handleChangeLinea = current => { + setIsLineaMaintenance(current) + } + const handleChangeSepolia = current => { + setIsSepoliaMaintenance(current) + } + const handleFaucetBypassDomain = current => { + setFaucetBypassDomain(current) + } + ldClient.on(`change:${lineaMaintenanceFlag}`, handleChangeLinea) + ldClient.on(`change:${sepoliaMaintenanceFlag}`, handleChangeSepolia) + ldClient.on(`change:${faucetBypassDomainFlag}`, handleFaucetBypassDomain) return () => { - ldClient.off(`change:${lineaMaintenanceFlag}`, handleChangeLinea); - ldClient.off(`change:${sepoliaMaintenanceFlag}`, handleChangeSepolia); - ldClient.off( - `change:${faucetBypassDomainFlag}`, - handleFaucetBypassDomain, - ); - }; - }, []); + ldClient.off(`change:${lineaMaintenanceFlag}`, handleChangeLinea) + ldClient.off(`change:${sepoliaMaintenanceFlag}`, handleChangeSepolia) + ldClient.off(`change:${faucetBypassDomainFlag}`, handleFaucetBypassDomain) + } + }, []) useEffect(() => { if (userId && token) { - getTransactions(); + getTransactions() } else { - setTransactions(DEFAULT_TRANSACTIONS_LIST); + setTransactions(DEFAULT_TRANSACTIONS_LIST) } - }, [userId, token]); + }, [userId, token]) useEffect(() => { - if (metaMaskAccount && !walletAddress) { - setWalletAddress(metaMaskAccount); + if (metaMaskAccountEns) { + setWalletAddress(metaMaskAccountEns) + } else if (metaMaskAccount) { + setWalletAddress(metaMaskAccount) } - }, [metaMaskAccount]); + }, [metaMaskAccount, metaMaskAccountEns]) - const tabItemContent = (network: "linea" | "sepolia") => { + const tabItemContent = (network: 'linea' | 'sepolia', isMaintenance: boolean) => { return ( <>
    @@ -192,12 +170,11 @@ export default function Faucet() { inputValue={walletAddress} isLoading={isLoading} isLimitedUserPlan={isLimitedUserPlan} + isMaintenance={isMaintenance} /> {transactions && ( @@ -208,39 +185,24 @@ export default function Faucet() { network={network} className={styles.faq} classNameHeading={styles.sectionHeading} - isLimitedUserPlan={isLimitedUserPlan} - > + isLimitedUserPlan={isLimitedUserPlan}>
    - ); - }; + ) + } return ( -
    - MetaMask Faucet -
    - - {isSepoliaMaintenance && } - {ldReady ? tabItemContent("sepolia") : null} + + {ldReady ? tabItemContent('sepolia', isSepoliaMaintenance) : null} - - {isLineaMaintenance && } - {ldReady ? tabItemContent("linea") : null} + + {ldReady ? tabItemContent('linea', isLineaMaintenance) : null}
    - ); + ) } diff --git a/src/pages/developer-tools/index.tsx b/src/pages/developer-tools/index.tsx deleted file mode 100644 index 15e6183ead7..00000000000 --- a/src/pages/developer-tools/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react"; -import { Redirect } from "@docusaurus/router"; - -export default function DeveloperTools() { - return ; -} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 616e317ee89..00000000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,87 +0,0 @@ -@media screen and (width <= 996px) { - .introductionBlock { - padding: 2rem; - word-wrap: normal; - } -} - -.introductionBlock { - background-color: #2b3137; - padding: 6rem; - text-align: center; - width: 100%; -} - -.forceColor { - color: var(--ifm-color-content-inverse); -} - -html[data-theme="dark"] .forceColor { - color: var(--ifm-color-secondary-dark); -} - -.title { - font-size: clamp(2rem, 2.75vw, 4rem); -} - -.subtitle { - font-size: clamp(1rem, 1.5vw, 1.5rem); -} - -.homepageButton { - background-color: #1098fc; - border-radius: 0.3rem; -} - -.homepageButton:hover { - background-color: #43aefc; -} - -.devBannerButton { - border-radius: 0.3rem; - border-color: #1c1e21; - border-width: 1.5px; - color: #1c1e21; -} - -.devBannerButton:hover { - background-color: #1c1e21; - color: #fff; -} - -html[data-theme="dark"] .devBannerButton { - border-color: #fff; - border-width: 1px; -} - -html[data-theme="dark"] .devBannerButton:hover { - background-color: #fff; - color: #1c1e21; -} - -.devBannerTitle { - font-size: clamp(1.75rem, 1.75vw, 2rem); -} - -.devBannerSubtitle { - font-size: clamp(1rem, 1vw, 1.25rem); -} - -.devBannerBlock { - background-color: var(--ifm-color-emphasis-200); - padding: 5rem; - text-align: center; - width: 100%; -} - -html[data-theme="dark"] .devBannerBlock { - background-color: var(--ifm-color-emphasis-100); -} - -.devBannerForceColor { - color: var(--ifm-color-emphasis-900); -} - -html[data-theme="dark"] .devBannerForceColor { - color: var(--ifm-color-secondary-dark); -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 25899222a30..a8cc8193a08 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,98 +1,143 @@ -import React from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import CardSection from "@site/src/components/CardSection"; -import Heading from "@theme/Heading"; -import styles from "./index.module.css"; +import React from 'react' +import Head from '@docusaurus/Head' +import Layout from '@theme/Layout' +import Hero from '@site/src/components/Hero/Hero' +import CardSection from '@site/src/components/CardSection' +import CallToAction from '@site/src/components/CallToAction/CallToAction' +import SectionIntro from '@site/src/components/SectionIntro/SectionIntro' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - return ( -
    -
    - - {siteConfig.title} - -

    - Integrate with and extend upon the world's leading self-custodial - crypto wallet. -

    - - Get started - -
    -
    - ); -} +export default function Home(): JSX.Element { + const { siteConfig } = useDocusaurusContext() + const rootUrl = + (siteConfig.url ?? '').replace(/\/$/, '') + + ((siteConfig.baseUrl ?? '/') === '/' ? '' : (siteConfig.baseUrl ?? '').replace(/\/$/, '')) + const pageUrl = `${rootUrl}/` + const defaultImage = `${rootUrl}/img/metamaskog.jpg` -function DevBanner() { return ( -
    -
    - - {"Contribute to MetaMask"} - -

    - Join the MetaMask developer community and learn how to contribute to - the MetaMask project itself. -

    - - Contribute  - - -
    -
    - ); -} + + + + + + + + + + + + + + + + + + + + -export default function Home(): JSX.Element { - return ( - - -
    - - -
    + + + + Connect your dapp to the MetaMask browser extension and mobile app. + Interact with users' accounts across multichain, EVM, or Solana{' '} + networks using a single integration. + + ), + href: '/metamask-connect', + buttonIcon: 'arrow-right', + }, + { + title: 'Create embedded wallets', + leadIcon: 'wallet', + description: ( + <> + Onboard users to your dapp via social logins, or by integrating + your own authentication providers. No seed phrases required. + + ), + href: '/embedded-wallets', + buttonIcon: 'arrow-right', + }, + { + title: 'Create smart accounts', + leadIcon: 'community', + description: ( + <> + Create and interact with MetaMask Smart Accounts, unlocking new{' '} + programmable account behaviors and granular permission sharing. + + ), + href: '/smart-accounts-kit', + buttonIcon: 'arrow-right', + }, + { + title: 'Create agent wallets', + leadIcon: 'shield', + description: ( + <> + Give AI agents programmatic wallet access via the{' '} + MetaMask Agent Wallet CLI. Transfer, swap, trade, and sign with{' '} + mandatory security on every transaction. + + ), + href: '/agent-wallet', + buttonIcon: 'arrow-right', + }, + { + title: 'Build and scale your dapp', + leadIcon: 'globe', + description: ( + <> + Use high performance APIs provided by MetaMask and{' '} + Infura to build and scale your dapp or Snap. + + ), + href: '/services', + buttonIcon: 'arrow-right', + }, + { + title: 'Extend MetaMask', + leadIcon: 'controls', + description: ( + <> + Create a custom mini app (Snap) that runs inside the MetaMask + extension. Add support for custom networks, account types, and + APIs. + + ), + href: '/snaps', + buttonIcon: 'arrow-right', + }, + ]} + /> + +
    - ); + ) } diff --git a/src/pages/quickstart/MediaStep/MediaStep.module.css b/src/pages/quickstart/MediaStep/MediaStep.module.css new file mode 100644 index 00000000000..5df9cef9120 --- /dev/null +++ b/src/pages/quickstart/MediaStep/MediaStep.module.css @@ -0,0 +1,269 @@ +/* Media Step Container */ +.mediaContainer { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + background: var(--ifm-background-surface-color); + border-radius: 12px; + overflow: hidden; + position: relative; +} + +/* Media Content */ +.mediaContent { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + position: relative; + transition: opacity 0.3s ease; +} + +.mediaContent.hidden { + opacity: 0; + pointer-events: none; +} + +/* YouTube Player */ +.youtubePlayer { + width: 100%; + height: 400px; + min-height: 300px; + border-radius: 8px; + border: none; + background: #000; + aspect-ratio: 16/9; +} + +/* Video Player */ +.videoPlayer { + width: 100%; + height: auto; + max-height: 100%; + object-fit: contain; + background: #000; + border-radius: 8px; +} + +/* Image Display */ +.imageDisplay { + width: 100%; + height: auto; + max-height: 100%; + object-fit: contain; + border-radius: 8px; + box-shadow: 0 2px 8px rgb(0 0 0 / 10%); +} + +/* Media Caption */ +.mediaCaption { + padding: 1rem; + background: var(--ifm-color-emphasis-50); + border-top: 1px solid var(--ifm-color-emphasis-200); + margin-top: auto; +} + +.mediaCaption p { + margin: 0; + font-size: 14px; + line-height: 1.5; + color: var(--ifm-color-content-secondary); + text-align: center; +} + +/* Placeholder State */ +.mediaPlaceholder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 300px; + gap: 1rem; + color: var(--ifm-color-content-secondary); + border: 2px dashed var(--ifm-color-emphasis-300); + border-radius: 8px; + margin: 1rem; +} + +.placeholderIcon { + font-size: 48px; +} + +.loadButton { + padding: 0.75rem 1.5rem; + background: var(--ifm-color-primary); + color: white; + border: none; + border-radius: 8px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + transition: all 0.2s ease; +} + +.loadButton:hover { + background: var(--ifm-color-primary-dark); + transform: translateY(-1px); +} + +.mediaPlaceholder p { + margin: 0; + font-size: 16px; + color: var(--ifm-color-content-secondary); +} + +/* Loading State */ +.mediaLoading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 300px; + gap: 1rem; + color: var(--ifm-color-content-secondary); +} + +.loadingSpinner { + width: 32px; + height: 32px; + border: 3px solid var(--ifm-color-emphasis-300); + border-top: 3px solid var(--ifm-color-primary); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.mediaLoading p { + margin: 0; + font-size: 14px; + color: var(--ifm-color-content-secondary); +} + +/* Error State */ +.mediaError { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 300px; + gap: 1rem; + padding: 2rem; + text-align: center; + color: var(--ifm-color-content-secondary); +} + +.errorIcon { + font-size: 48px; +} + +.mediaError p { + margin: 0; + font-size: 16px; + color: var(--ifm-color-content-secondary); +} + +.retryButton { + padding: 0.5rem 1rem; + background: var(--ifm-color-primary); + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 14px; + transition: background-color 0.2s ease; +} + +.retryButton:hover { + background: var(--ifm-color-primary-dark); +} + +/* Play Status Indicator */ +.playStatus { + position: absolute; + top: 1rem; + right: 1rem; + opacity: 0; + transform: translateY(-10px); + transition: all 0.3s ease; + pointer-events: none; +} + +.playStatus.visible { + opacity: 1; + transform: translateY(0); +} + +.playIndicator { + background: rgb(0 0 0 / 70%); + color: white; + padding: 0.5rem 1rem; + border-radius: 20px; + font-size: 12px; + display: flex; + align-items: center; + gap: 0.5rem; + backdrop-filter: blur(4px); +} + +/* Playing state effects */ +.mediaContent.playing .videoPlayer { + box-shadow: 0 0 20px rgb(var(--ifm-color-primary-rgb) 0.3); +} + +/* Responsive Design */ +@media (width <= 768px) { + .mediaContainer { + border-radius: 8px; + } + + .youtubePlayer { + height: 250px; + min-height: 200px; + } + + .mediaCaption { + padding: 0.75rem; + } + + .mediaCaption p { + font-size: 13px; + } + + .mediaLoading, + .mediaError, + .mediaPlaceholder { + height: 200px; + padding: 1rem; + } + + .errorIcon, + .placeholderIcon { + font-size: 36px; + } +} + +/* Dark Mode Adjustments */ +[data-theme='dark'] .mediaCaption { + background: var(--ifm-color-emphasis-100); + border-top-color: var(--ifm-color-emphasis-300); +} + +[data-theme='dark'] .loadingSpinner { + border-color: var(--ifm-color-emphasis-400); + border-top-color: var(--ifm-color-primary); +} + +[data-theme='dark'] .playIndicator { + background: rgb(255 255 255 / 10%); + backdrop-filter: blur(8px); +} diff --git a/src/pages/quickstart/MediaStep/index.tsx b/src/pages/quickstart/MediaStep/index.tsx new file mode 100644 index 00000000000..d9fc7135ff7 --- /dev/null +++ b/src/pages/quickstart/MediaStep/index.tsx @@ -0,0 +1,179 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react' +import classNames from 'classnames' +import { IntegrationStep } from '../interfaces' +import styles from './MediaStep.module.css' + +interface MediaStepProps { + step: IntegrationStep + className?: string + isVisible?: boolean // Add visibility prop for lazy loading +} + +const MediaStep: React.FC = ({ step, className, isVisible = true }) => { + const [isLoading, setIsLoading] = useState(true) // Start loading immediately + const [hasError, setHasError] = useState(false) + const [isPlaying, setIsPlaying] = useState(false) + const videoRef = useRef(null) + const imageRef = useRef(null) + + if (!step.mediaContent) { + return ( +
    +
    +

    No media content available

    +
    +
    + ) + } + + const { + type, + url, + youtubeId, + alt, + caption, + poster, + autoplay = false, + loop = false, + muted = true, + } = step.mediaContent + + const handleLoad = useCallback(() => { + setIsLoading(false) + setHasError(false) + }, []) + + const handleError = useCallback(() => { + setIsLoading(false) + setHasError(true) + }, []) + + const handlePlay = useCallback(() => { + setIsPlaying(true) + }, []) + + const handlePause = useCallback(() => { + setIsPlaying(false) + }, []) + + // Reset when URL changes + useEffect(() => { + setIsLoading(true) + setHasError(false) + setIsPlaying(false) + }, [url]) + + const renderMedia = () => { + if (type === 'youtube') { + const youtubeUrl = `https://www.youtube.com/embed/${youtubeId}?rel=0&modestbranding=1&showinfo=0${autoplay ? '&autoplay=1' : ''}${muted ? '&mute=1' : ''}` + + return ( + +

    + +:::info + +A [complete implementation example](https://github.com/Web3Auth/web3auth-examples/tree/main/other/sns-example) is available on GitHub. + +::: + +## Step 1: Set up the dashboard + +Follow these steps to set up and configure your Embedded Wallets (Web3Auth) dashboard. + +1. Sign up for a free account on the [Embedded Wallets dashboard](https://developer.metamask.io/login). +2. Create a new project. +3. Copy your Client ID from the dashboard: this ID is crucial for initializing the SDK. +4. Navigate to **Chains & Networks** and enable Solana, Solana Devnet, and Solana Testnet. Ensure all the [RPC URLs are configured](../../embedded-wallets/dashboard/chains-and-networks). + +:::tip + +See the [Embedded Wallets dashboard documentation](/embedded-wallets/dashboard) for more information. +You can explore other dashboard features, including custom verifiers, whitelabeling, and analytics. + +::: + +## Step 2: Install dependencies + +Install the following dependencies in your project: + +```bash npm2yarn +npm install @web3auth/modal @solana/web3.js @bonfida/spl-name-service @solana/spl-token +``` + +:::note + +- `@web3auth/modal`: Enables the embedded wallet integration with social logins. +- `@solana/web3.js`: Enables interacting with the Solana blockchain and constructing transactions. +- `@bonfida/spl-name-service`: Enables SNS domain registration, resolution, and management. +- `@solana/spl-token`: Handles token operations when processing domain registration payments. + +::: + +## Step 3: Integrate MetaMask Embedded Wallets in React + +Use the `@web3auth/modal` SDK to integrate and manage Embedded Wallets in your React application. + +### 3.1 Initialize the provider + +Wrap your application components with a `Web3AuthProvider` to configure the SDK with your Client ID: + +```typescript title='src/main.tsx' +import './index.css'; + +import ReactDOM from 'react-dom/client'; +// focus-start +import { Web3AuthProvider } from '@web3auth/modal/react'; +import web3AuthContextConfig from './web3authContext'; +// focus-end +import App from './App'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + // focus-start + + + + // focus-end +); +``` + +```typescript title='src/web3authContext.tsx' +import { WEB3AUTH_NETWORK } from '@web3auth/modal' +import { type Web3AuthContextConfig } from '@web3auth/modal/react' + +// Dashboard Registration +const clientId = + 'BFcLTVqWlTSpBBaELDPSz4_LFgG8Nf8hEltPlf3QeUG_88GDrQSw82fSjjYj5x4F3ys3ghMq8-InU7Azx7NbFSs' // get from https://developer.metamask.io + +// focus-start +// Instantiate the SDK. +const web3AuthContextConfig: Web3AuthContextConfig = { + web3AuthOptions: { + clientId, + web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET, + }, +} +// focus-end + +export default web3AuthContextConfig +``` + +### 3.2 Access wallet and user information + +Access wallet information and user details using the [Solana hooks](/embedded-wallets/sdk/react/solana-hooks): + +```typescript title='src/components/walletInfo.tsx' +// focus-next-line +import { useSolanaWallet } from '@web3auth/modal/react/solana'; +import { PublicKey } from '@solana/web3.js'; +import { useEffect, useState } from 'react'; + +export function WalletInfo() { + // focus-next-line + const { accounts, connection } = useSolanaWallet(); + const [userAddress, setUserAddress] = useState(null); + + useEffect(() => { + if (accounts && accounts.length > 0) { + // focus-next-line + setUserAddress(accounts[0]); + } + }, [accounts]); + + return ( +
    +

    Wallet Information

    +
    + {userAddress && ( +
    +

    Address: {userAddress}

    +

    Public Key: {new PublicKey(userAddress).toBase58()}

    +
    + )} +
    +
    + ) +} +``` + +## Step 4: Integrate Solana Name Service + +The Solana Name Service (SNS) enables users to register human-readable domain names that map to Solana wallet addresses. +Follow these steps to implement the core SNS functionalities: domain resolution, registration, and management. + +### 4.1 Import components + +Import the necessary components from the installed libraries: + +```typescript +// focus-start +import { resolveDomainName, registerDomainName, getPrimaryDomain } from '@bonfida/spl-name-service' +import { Connection, PublicKey, Transaction, SystemProgram } from '@solana/web3.js' +import { useSolanaWallet } from '@web3auth/modal/react/solana' +// focus-end +``` + +### 4.2 Resolve domains + +Domain resolution converts a `.sol` domain name to its corresponding wallet address. +This is useful for enabling users to send payments using human-readable names instead of long wallet addresses. + +```typescript title='src/components/domainResolver.tsx' +import { Connection, PublicKey } from '@solana/web3.js'; +import { resolveDomainName } from '@bonfida/spl-name-service'; +import { useSolanaWallet } from '@web3auth/modal/react/solana'; +import { useState } from 'react'; + +export function DomainResolver() { + const { connection } = useSolanaWallet(); + const [domainInput, setDomainInput] = useState(''); + const [resolvedAddress, setResolvedAddress] = useState(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const resolveDomain = async () => { + if (!connection || !domainInput.trim()) { + setError('Please enter a domain name'); + return; + } + + try { + setIsLoading(true); + setError(null); + + // focus-start + // Normalize domain input (remove .sol if present, convert to lowercase) + const normalizedDomain = domainInput.toLowerCase().replace('.sol', ''); + + // Resolve the domain to get the owner's public key + const ownerKey = await resolveDomainName(connection, normalizedDomain); + // focus-end + + setResolvedAddress(ownerKey.toBase58()); + } catch (err) { + setError( + err instanceof Error + ? err.message + : 'Failed to resolve domain. Domain may not exist or be listed for sale.' + ); + setResolvedAddress(null); + } finally { + setIsLoading(false); + } + }; + + return ( +
    +

    Domain Resolver

    +
    + setDomainInput(e.target.value)} + className='px-4 py-2 border rounded-lg text-black' + /> + + + {resolvedAddress && ( +
    +

    + Resolved Address: {resolvedAddress} +

    +
    + )} + + {error && ( +
    +

    Error: {error}

    +
    + )} +
    +
    + ); +} +``` + +### 4.3 Register domains + +Domain registration allows users to claim new `.sol` domains. +The registration process involves creating and sending a transaction with the appropriate instructions. + +```typescript title='src/components/domainRegistration.tsx' +import { Connection, PublicKey, Transaction } from '@solana/web3.js'; +import { registerDomainName } from '@bonfida/spl-name-service'; +import { useSolanaWallet } from '@web3auth/modal/react/solana'; +import { useState } from 'react'; + +export function DomainRegistration() { + const { accounts, connection, signAndSendTransaction } = useSolanaWallet(); + const [domainInput, setDomainInput] = useState(''); + const [isRegistering, setIsRegistering] = useState(false); + const [error, setError] = useState(null); + const [success, setSuccess] = useState(null); + + const registerDomain = async () => { + if (!connection || !accounts?.[0] || !domainInput.trim()) { + setError('Please connect wallet and enter a domain name'); + return; + } + + try { + setIsRegistering(true); + setError(null); + setSuccess(null); + + // focus-start + // Normalize and validate domain input + const normalizedDomain = domainInput.toLowerCase().replace('.sol', ''); + + if (normalizedDomain.length < 1 || normalizedDomain.length > 32) { + setError('Domain must be between 1 and 32 characters'); + return; + } + + const buyerPublicKey = new PublicKey(accounts[0]); + + // Create registration instruction + const instruction = await registerDomainName( + connection, + normalizedDomain, + buyerPublicKey, + buyerPublicKey // buyer pays for the domain + ); + + // Create and send transaction + const transaction = new Transaction().add(instruction); + const signature = await signAndSendTransaction(transaction); + // focus-end + + setSuccess(`Domain registered successfully! Transaction: ${signature}`); + setDomainInput(''); // Clear input on success + } catch (err) { + setError( + err instanceof Error + ? err.message + : 'Failed to register domain. Domain may already exist or you may have insufficient funds.' + ); + } finally { + setIsRegistering(false); + } + }; + + return ( +
    +

    Domain Registration

    +
    + setDomainInput(e.target.value)} + className='px-4 py-2 border rounded-lg text-black' + /> + + + {success && ( +
    +

    {success}

    +
    + )} + + {error && ( +
    +

    Error: {error}

    +
    + )} +
    +
    + ); +} +``` + +### 4.4 Display the primary domain + +A primary domain serves as the user's main identity. +This component fetches and displays the user's primary domain, providing instant personalization for your application. + +```typescript title='src/components/primaryDomain.tsx' +import { Connection, PublicKey } from '@solana/web3.js'; +import { getPrimaryDomain } from '@bonfida/spl-name-service'; +import { useSolanaWallet } from '@web3auth/modal/react/solana'; +import { useState, useEffect } from 'react'; + +export function PrimaryDomain() { + const { accounts, connection } = useSolanaWallet(); + const [primaryDomain, setPrimaryDomain] = useState(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const fetchPrimaryDomain = async () => { + if (!connection || !accounts?.[0]) { + return; + } + + try { + setIsLoading(true); + setError(null); + + // focus-start + const ownerPublicKey = new PublicKey(accounts[0]); + + // Fetch the user's primary domain + const domain = await getPrimaryDomain(connection, ownerPublicKey); + // focus-end + + setPrimaryDomain(domain ? `${domain}.sol` : null); + } catch (err) { + // No primary domain set is not really an error, just no domain + setPrimaryDomain(null); + setError('No primary domain set'); + } finally { + setIsLoading(false); + } + }; + + useEffect(() => { + fetchPrimaryDomain(); + }, [connection, accounts]); + + return ( +
    +

    Primary Domain

    +
    + {isLoading && Loading primary domain...} + + {primaryDomain && ( +
    +

    + Your Primary Domain: {primaryDomain} +

    +
    + )} + + {error && !isLoading && ( +
    +

    {error}

    +
    + )} + + +
    +
    + ); +} +``` + +## Testing and best practices + +### Development environment + +- **Devnet for testing:** Always develop and test on devnet or testnet. + You can use the [Solana Faucet](https://faucet.solana.com/) to get test SOL for your new account. +- **Environment variables:** -Store your Client ID and other sensitive configuration in environment variables. + +### User experience + +- **Input validation:** Always validate and normalize domain input (lowercase, trim `.sol` extension). +- **Loading states:** Implement proper loading states while processing domain operations. +- **Error handling:** Provide clear error messages when operations fail or when domains don't exist. +- **Fallback for listed domains:** When resolving domains that are listed for sale, implement fallback + functionality to prevent incorrect transfers. + +### Production readiness + +- **Domain availability:** Before registration, check domain availability using SNS APIs or SDK methods. +- **Transaction confirmation:** Implement proper transaction confirmation handling to ensure operations complete + successfully. +- **Rate limiting:** Consider implementing rate limiting for domain operations to prevent spam. +- **Security:** Always validate domain operations server-side when dealing with financial transactions. + +## Next steps + +- For more advanced SNS features like domain records, subdomains, and social integrations, see the + [SNS SDK documentation](https://docs.sns.id/dev/sns-sdk). +- To learn more about Embedded Wallets, see the [Web SDK documentation](/embedded-wallets/sdk/react/) and the + [SNS integration example](https://github.com/Web3Auth/web3auth-examples/tree/main/other/sns-example). diff --git a/src/pages/tutorials/integrate-solana-pay.mdx b/src/pages/tutorials/integrate-solana-pay.mdx new file mode 100644 index 00000000000..9721486d6eb --- /dev/null +++ b/src/pages/tutorials/integrate-solana-pay.mdx @@ -0,0 +1,357 @@ +--- +title: Integrate Solana Pay with Embedded Wallets +image: 'img/tutorials/tutorials-banners/integrate-solana-pay.png' +description: Integrate Solana Pay QR code payments with MetaMask Embedded Wallets in your React + application. +type: tutorial +tags: [embedded wallets, plug and play, web, solana, solana pay, react, ed25519] +date: November 15, 2025 +author: MetaMask Developer Relations +toc_max_heading_level: 4 +--- + +import TabItem from '@theme/TabItem' +import Tabs from '@theme/Tabs' + +MetaMask Embedded Wallets enable users to log in with familiar web2 socials by using [Shamir's +Secret Sharing](../../embedded-wallets/infrastructure/sss-architecture/) Multi-Party Computation (MPC) to ensure the +wallet key is distributed and non-custodial. + +This tutorial demonstrates how to integrate Solana Pay with [MetaMask Embedded Wallets](/embedded-wallets) to create a +seamless payment experience for your users. By combining Embedded Wallets' familiar web2 social logins with Solana Pay's +QR code functionality, you can enable users to make payments directly from their social login wallets. + +MetaMask Embedded Wallets social login allows users to: + +- Log in using familiar web2 social providers (such as Google and Apple). +- Generate Solana Pay QR codes for transactions. +- Make payments using their embedded wallet. + +This tutorial follows the implementation demonstrated in the following live stream: + +

    + +

    + +:::info + +A [complete implementation example](https://github.com/Web3Auth/web3auth-examples/tree/main/other/solana-pay-example) is +available on GitHub. + +::: + +## Step 1: Set up the dashboard + +Follow these steps to set up and configure your Embedded Wallets (Web3Auth) dashboard: + +1. Sign up for a free account on the [Embedded Wallets dashboard](https://developer.metamask.io/login). +2. Create a new project. +3. Copy your Client ID from the dashboard. + This ID is crucial for initializing the SDK. +4. Navigate to **Chains & Networks** and enable Solana, Solana Devnet, and Solana Testnet. + Ensure all the [RPC URLs are configured](../../embedded-wallets/dashboard/chains-and-networks). + +:::tip + +See the [Embedded Wallets dashboard documentation](../../embedded-wallets/dashboard) for more information. +You can explore other dashboard features, including custom verifiers, whitelabeling, and analytics. + +::: + +## Step 2: Install dependencies + +Install the following dependencies in your project: + +```bash npm2yarn +npm install @solana/pay bignumber.js @solana/web3.js +``` + +:::note + +- `@solana/pay`: The core Solana Pay protocol library. +- `bignumber.js`: Enables accurate handling of large numbers, especially when dealing with token amounts. +- `@solana/web3.js`: Enables interacting with the Solana blockchain, such as fetching balances or constructing + transactions. + +::: + +## Step 3: Integrate MetaMask Embedded Wallets in React + +Use the `@web3auth/modal` SDK to integrate and manage Embedded Wallets in your React application. + +### 3.1. Initialize the provider + +Wrap your application components with a `Web3AuthProvider` to configure the SDK with your Client ID: + +```typescript title='src/main.tsx' +import './index.css'; + +import ReactDOM from 'react-dom/client'; +// focus-start +import { Web3AuthProvider } from '@web3auth/modal/react'; +import web3AuthContextConfig from './web3authContext'; +// focus-end +import App from './App'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + // focus-start + + + + // focus-end +); +``` + +```typescript title='src/web3authContext.tsx' +import { WEB3AUTH_NETWORK } from '@web3auth/modal' +import { type Web3AuthContextConfig } from '@web3auth/modal/react' + +// Dashboard Registration +const clientId = + 'BFcLTVqWlTSpBBaELDPSz4_LFgG8Nf8hEltPlf3QeUG_88GDrQSw82fSjjYj5x4F3ys3ghMq8-InU7Azx7NbFSs' // get from https://developer.metamask.io + +// focus-start +// Instantiate the SDK. +const web3AuthContextConfig: Web3AuthContextConfig = { + web3AuthOptions: { + clientId, + web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_DEVNET, + }, +} +// focus-end + +export default web3AuthContextConfig +``` + +### 3.2. Access wallet information and fetch user balance + +Access wallet information and user details using the [Solana hooks](/embedded-wallets/sdk/react/solana-hooks): + +```typescript title='src/components/getBalance.tsx' +// focus-next-line +import { useSolanaWallet } from '@web3auth/modal/react/solana'; +import { + LAMPORTS_PER_SOL, + PublicKey, +} from '@solana/web3.js'; +import { useEffect, useState } from 'react'; + +export function Balance() { + // focus-next-line + const { accounts, connection } = useSolanaWallet(); + const [balance, setBalance] = useState(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const fetchBalance = async () => { + if (connection && accounts && accounts.length > 0) { + try { + setIsLoading(true); + setError(null); + // focus-start + const publicKey = new PublicKey(accounts[0]); + const balance = await connection.getBalance(publicKey); + // focus-end + setBalance(balance); + } catch (err) { + setError(err instanceof Error ? err.message : 'Unknown error'); + } finally { + setIsLoading(false); + } + } + }; + + useEffect(() => { + fetchBalance(); + }, [connection, accounts]); + + return ( +
    +

    Balance

    +
    + {balance !== null && `${balance / LAMPORTS_PER_SOL} SOL`} +
    + {isLoading && Loading...} + {error && Error: {error}} + +
    + ) +} +``` + +## Step 4: Integrate Solana Pay + +Solana Pay enables the generation of transaction requests, typically as QR codes, for direct payments from Solana wallets. +Follow these steps to create and display Solana Pay QR codes for payments. + +### 4.1. Import components + +Import the necessary components from the installed libraries: + +```typescript +// focus-start +import { createQR } from '@solana/pay' +import { Keypair, PublicKey } from '@solana/web3.js' +import BigNumber from 'bignumber.js' +import { useSolanaWallet } from '@web3auth/modal/react/solana' +// focus-end +``` + +### 4.2. Generate QR codes + +The core of the Solana Pay integration involves creating a payment request URL and then rendering it as a QR code. +First, define the following: + +- **Recipient and amount:** Define the `recipient` (a `PublicKey` of the merchant/receiver) and the + `amount` (a `BigNumber` representing the payment value, for example, 0.001 SOL). +- **Reference:** Generate a unique `reference` for the payment. + This acts as a unique identifier for the transaction. +- **Optional fields:** Include `label`, `message`, and `memo` for enhanced user experience. + +The following is an example implementation of a Solana Pay QR code generator: + +```typescript title='src/components/solanaPay.tsx' +import { Keypair, PublicKey } from '@solana/web3.js'; +import { createQR, encodeURL } from '@solana/pay'; +import BigNumber from 'bignumber.js'; +import { useEffect, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; +import { useSolanaWallet } from '@web3auth/modal/react/solana'; + +export function SolanaPay() { + const { accounts } = useSolanaWallet(); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + const [amountToSend, setAmountToSend] = useState(0); + const [showModal, setShowModal] = useState(false); + const [qrUrl, setQrUrl] = useState(''); + const qrRef = useRef(null); + + const generateQrCode = () => { + try { + if (!accounts?.[0]) { + setError('No wallet connected'); + return; + } + + setIsLoading(true); + setError(null); + // focus-start + // set the parameter of the transfer + const recipient = new PublicKey(accounts?.[0]!); + const amount = new BigNumber(amountToSend); + // reference should be a unique ID for the payment + const reference = new Keypair().publicKey; + // Label and message are optional. They will be shown in wallets when users scan it but won't show on chain + const label = 'MetaMask Embedded Wallet x Solana Pay Demo'; + const message = 'Thanks for Trying Solana Pay!'; + // memo is optional and will be included in the onchain transaction + const memo = 'Thanks for Trying Solana Pay!'; + // create the URL + const url = encodeURL({ + recipient, + amount, + reference, + label, + message, + memo, + }); + + setQrUrl(url.toString()); + // focus-end + setShowModal(true); + } catch (err) { + setError(err instanceof Error ? err.message : 'Failed to generate QR code'); + } finally { + setIsLoading(false); + } + }; + // Generate QR code when modal opens and URL is available + useEffect(() => { + if (showModal && qrUrl && qrRef.current) { + qrRef.current.innerHTML = ''; + try { + const qr = createQR(qrUrl, 300, 'white'); + qr.append(qrRef.current); + } catch (err) { + setError('Failed to create QR code'); + } + } + }, [showModal, qrUrl]); + + const closeModal = () => { + setShowModal(false); + setQrUrl(''); + setError(null); + }; + + return ( + <> +
    +

    Solana Pay QR

    +
    + setAmountToSend(Number(e.target.value))} + className='px-4 py-2 border rounded-lg text-black' + step='0.01' + min='0' + /> + + + {/* Error Display */} + {error && !showModal && ( +
    + Error: {error} +
    + )} +
    +
    +... +``` + +## Testing and best practices + +### Development environment + +- **Devnet for testing:** Always develop and test on devnet or testnet. + You can use the [Solana Faucet](https://faucet.solana.com/) to get test SOL for your new account. +- **Environment variables:** Store your Client ID and other sensitive configuration in environment variables. + +### User experience + +- **User interface:** For better user experience, display the QR code within a modal or a dedicated + confirmation page, providing clear messages to the user. +- **Loading states:** Implement proper loading states while generating QR codes and processing transactions. +- **Error handling:** Provide clear error messages when transactions fail or when the user's wallet doesn't have sufficient + balance. + +### Production readiness + +- **Tracking payments:** Implement a server-side solution to track the unique payment `reference` and poll for transaction + confirmation using websockets. + This allows you to update your application's state and perform reconciliation in your database. +- **Production RPCs:** For scalable production usage, use dedicated Solana RPC services from providers like + [MetaMask](/services/reference/solana), as public RPCs may have rate limits. +- **Security:** Validate all payment parameters server-side before processing transactions. + +## Next steps + +- To learn more about Embedded Wallets, see the [Web SDK documentation](/embedded-wallets/sdk/react) and the + [Solana Pay integration example](https://github.com/Web3Auth/web3auth-examples/blob/main/other/solana-pay-example). diff --git a/src/pages/tutorials/pnp-no-modal-multichain.mdx b/src/pages/tutorials/pnp-no-modal-multichain.mdx new file mode 100644 index 00000000000..2393eb20949 --- /dev/null +++ b/src/pages/tutorials/pnp-no-modal-multichain.mdx @@ -0,0 +1,642 @@ +--- +title: Create a chain-agnostic web3 wallet with Embedded Wallets +image: 'img/tutorials/tutorials-banners/multi.png' +description: Create a chain-agnostic web3 wallet with Embedded Wallets (previously Web3Auth), connecting Embedded Wallets with multiple blockchains. +tags: [embedded wallets, multichain, polkadot, evm, cosmos, web3auth] +date: February 9, 2024 +author: MetaMask Developer Relations +discourseTopicId: 2604 +--- + +import TabItem from '@theme/TabItem' +import Tabs from '@theme/Tabs' + +Embedded Wallets (previously Web3Auth) integrates with different blockchains at the same time. Follow this demo to +authenticate users using different social logins and get different addresses from each blockchain. + +This integration lets your users interact and sign transactions with any connected chain. For example, get the +user's `account`, fetch `balance`, `sign message`, `send transaction`, `read` from and `write` to smart contracts, and more. + +:::tip + +Embedded Wallets is designed to support any blockchain that follows the **`secp256k1` and `ed25519` curves**. +This means it works seamlessly with all EVMs such as Ethereum, Polygon, Binance Smart Chain, and others. +Additionally, it supports non-EVM blockchains like Aptos, Cosmos, Polkadot, Solana, Tezos, Bitcoin, among many +others. Embedded Wallets is not limited to these examples and is capable of integrating with any blockchain that +adheres to these cryptographic standards, offering a wide range of compatibility to suit various needs and +preferences in the blockchain ecosystem. + +::: + +This guide covers the basics of how to integrate a multi-chain wallet application using Embedded Wallets . +With this setup, you can: + +1. Authenticate users with their social accounts. +2. Generate blockchain addresses for multiple chains (Ethereum, Solana, Tezos, Polkadot). +3. Check balances across different blockchains. +4. Sign messages and send transactions on various networks. + +The power of Embedded Wallets lies in its ability to derive keys for multiple blockchains from a single +authentication session, providing users with a seamless experience across the web3 ecosystem. + +## Quickstart + +Run the following command: + +```bash +npx degit Web3Auth/web3auth-pnp-examples/custom-authentication/multi-chain-example/ w3a-multi-chain-demo && cd w3a-multi-chain-demo && npm install && npm run dev +``` + +:::note + +See the +[full example on GitHub](https://github.com/Web3Auth/web3auth-pnp-examples/tree/main/custom-authentication/multi-chain-example). + +::: + +## Prerequisites + +- For Web Apps: A basic knowledge of JavaScript is required to use Web3Auth SDK. +- For Mobile Apps: For the Web3Auth Mobile SDKs, you have a choice between iOS, Android, React Native, and Flutter. + Refer to the [Web3Auth SDK Reference](/embedded-wallets/sdk/) for more information. + +## Step 1: Set up Embedded Wallets dashboard + +Create a Web3Auth account on the [MetaMask Developer Dashboard](https://developer.metamask.io). The basic account is free. + +:::note + +See the [Web3Auth's documentation](/embedded-wallets/dashboard/) for detailed instructions on setting up the +Embedded Wallets dashboard. + +::: + +:::tip + +The paid accounts offer custom verifiers, whitelabeling, analytics, and more. + +::: + +## Step 2: Set up your React app + +To use Web3Auth with multiple blockchains, you need to set up your React application with the Web3Auth SDK. +This guide will walk you through the setup and implementation. + +### 2.1 Set up your base project + +If you are starting from scratch, to set up this project locally, you will need to create a base web application, +where you can install the required dependencies. However, while working with Web3, there are a few base libraries, +which need additional configuration. This is because certain packages are not available in the browser environment, +and we need to polyfill them manually. + +:::tip + +Follow [troubleshooting documentation](/embedded-wallets/troubleshooting/webpack-issues) for details on the +configuration changes for some popular frameworks for your reference. + +::: + +### 2.2 Installation + +We need several dependencies to make this work with multiple blockchains: + +```bash npm2yarn +npm install @web3auth/modal @solana/web3.js ethers @taquito/signer @taquito/taquito @taquito/utils @polkadot/api @polkadot/util-crypto tweetnacl +``` + +### 2.3 Set up the Embedded Wallets provider + +2.3.1 First, create a configuration file for Embedded Wallets such as, `web3authContext.tsx`: + +```tsx +import { WEB3AUTH_NETWORK, type Web3AuthOptions } from '@web3auth/modal' + +// Get your client ID from https://developer.metamask.io +const clientId = import.meta.env.VITE_WEB3AUTH_CLIENT_ID || '' + +// Instantiate SDK +const web3AuthOptions: Web3AuthOptions = { + clientId, + web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, +} + +const web3AuthContextConfig = { + web3AuthOptions, +} + +export default web3AuthContextConfig +``` + +2.3.2 Set up the Embedded Wallets provider in your application entry point such as, `index.tsx` or similar: + +```tsx +import ReactDOM from 'react-dom/client' +// Setup Web3Auth Provider +import { Web3AuthProvider } from '@web3auth/modal/react' +import web3AuthContextConfig from './web3authContext' + +import App from './App' + +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement) +root.render( + + + +) +``` + +## Step 3: Implement the multi-chain wallet + +Now, let's implement the main application with support for multiple blockchains. We'll create RPC modules for +each blockchain and use them in our app. + +Set up the main app component with: + +```tsx +import './App.css' +import { + useWeb3AuthConnect, + useWeb3AuthDisconnect, + useWeb3AuthUser, + useWeb3Auth, +} from '@web3auth/modal/react' + +// Import RPC functions +import { + getEthereumAccounts, + getEthereumBalance, + signEthereumMessage, + sendEthereumTransaction, +} from './RPC/ethersRPC' +import { + getSolanaAccount, + getSolanaBalance, + signSolanaMessage, + sendSolanaTransaction, +} from './RPC/solanaRPC' +import { + getTezosAccount, + getTezosBalance, + signTezosMessage, + signAndSendTezosTransaction, +} from './RPC/tezosRPC' +import { + getPolkadotAccounts, + getPolkadotBalance, + signAndSendPolkadotTransaction, +} from './RPC/polkadotRPC' + +function App() { + const { + connect, + isConnected, + loading: connectLoading, + error: connectError, + } = useWeb3AuthConnect() + const { disconnect, loading: disconnectLoading, error: disconnectError } = useWeb3AuthDisconnect() + const { userInfo } = useWeb3AuthUser() + const { provider } = useWeb3Auth() + + const getAllAccounts = async () => { + if (!provider) { + uiConsole('provider not initialized yet') + return + } + const eth_address = await getEthereumAccounts(provider) + const solana_address = await getSolanaAccount(provider) + const tezos_address = await getTezosAccount(provider) + const polkadot_address = await getPolkadotAccounts(provider) + + uiConsole( + 'Ethereum Address: ' + eth_address, + 'Solana Address: ' + solana_address, + 'Tezos Address: ' + tezos_address, + 'Polkadot Address: ' + polkadot_address + ) + } + + const getAllBalances = async () => { + if (!provider) { + uiConsole('provider not initialized yet') + return + } + + const eth_balance = await getEthereumBalance(provider) + const solana_balance = await getSolanaBalance(provider) + const tezos_balance = await getTezosBalance(provider) + const polkadot_balance = await getPolkadotBalance(provider) + + uiConsole( + 'Ethereum Balance: ' + eth_balance, + 'Solana Balance: ' + solana_balance, + 'Tezos Balance: ' + tezos_balance, + 'Polkadot Balance: ' + polkadot_balance + ) + } + + function uiConsole(...args: any[]): void { + const el = document.querySelector('#console>p') + if (el) { + el.innerHTML = JSON.stringify(args || {}, null, 2) + } + } + + const loggedInView = ( +
    +
    +
    + +
    +
    + + {disconnectLoading &&
    Disconnecting...
    } + {disconnectError &&
    {disconnectError.message}
    } +
    +
    +

    Account Operations

    +
    +
    + +
    +
    + +
    + {/* Additional blockchain operations buttons */} +
    +
    +

    +
    +
    + ) + + const unloggedInView = ( +
    + + {connectLoading &&
    Connecting...
    } + {connectError &&
    {connectError.message}
    } +
    + ) + + return ( +
    +

    + + Web3Auth{' '} + + & React Multi-chain Example +

    + +
    {isConnected ? loggedInView : unloggedInView}
    + + +
    + ) +} + +export default App +``` + +## Step 4: Implement blockchain RPC modules + +Next we implement the RPC modules for each blockchain. These modules will interact with the respective blockchain +networks. + +### EVM (Ethereum) + +To implement the Ethereum RPC module: + +```tsx +// ethersRPC.ts +import type { IProvider } from '@web3auth/modal' +import { ethers } from 'ethers' + +export async function getEthereumAccounts(provider: IProvider): Promise { + try { + const ethersProvider = new ethers.BrowserProvider(provider) + const signer = await ethersProvider.getSigner() + // Get user's Ethereum public address + const address = signer.getAddress() + return await address + } catch (error) { + return error + } +} + +export async function getEthereumBalance(provider: IProvider): Promise { + try { + const ethersProvider = new ethers.BrowserProvider(provider) + const signer = await ethersProvider.getSigner() + // Get user's Ethereum public address + const address = signer.getAddress() + // Get user's balance in ether + const balance = ethers.formatEther( + await ethersProvider.getBalance(address) // Balance is in wei + ) + return balance + } catch (error) { + return error as string + } +} + +export async function signEthereumMessage(provider: IProvider): Promise { + try { + const ethersProvider = new ethers.BrowserProvider(provider) + const signer = await ethersProvider.getSigner() + const originalMessage = 'YOUR_MESSAGE' + // Sign the message + const signedMessage = await signer.signMessage(originalMessage) + return signedMessage + } catch (error) { + return error as string + } +} + +export async function sendEthereumTransaction(provider: IProvider): Promise { + try { + const ethersProvider = new ethers.BrowserProvider(provider) + const signer = await ethersProvider.getSigner() + const destination = '0x40e1c367Eca34250cAF1bc8330E9EddfD403fC56' + // Convert 1 ether to wei + const amount = ethers.parseEther('0.001') + // Submit transaction to the blockchain + const tx = await signer.sendTransaction({ + to: destination, + value: amount, + maxPriorityFeePerGas: '5000000000', // Max priority fee per gas + maxFeePerGas: '6000000000000', // Max fee per gas + }) + // Wait for transaction to be mined + const receipt = await tx.wait() + return receipt + } catch (error) { + return error as string + } +} +``` + +### Solana + +To implement the Solana RPC module: + +```tsx +// solanaRPC.ts +import { Keypair, Connection } from '@solana/web3.js' +import { IProvider, getED25519Key } from '@web3auth/modal' +import nacl from 'tweetnacl' + +export async function getSolanaAccount(ethProvider: IProvider): Promise { + const ethPrivateKey = await ethProvider.request({ + method: 'private_key', + }) + + const privateKey = getED25519Key(ethPrivateKey as string).sk.toString('hex') + const secretKey = new Uint8Array(Buffer.from(privateKey, 'hex')) + const keypair = Keypair.fromSecretKey(secretKey) + return keypair.publicKey.toBase58() +} + +export async function getSolanaBalance(ethProvider: IProvider): Promise { + const ethPrivateKey = await ethProvider.request({ + method: 'private_key', + }) + const privateKey = getED25519Key(ethPrivateKey as string).sk.toString('hex') + const secretKey = new Uint8Array(Buffer.from(privateKey, 'hex')) + const keypair = Keypair.fromSecretKey(secretKey) + const connection = new Connection('https://api.devnet.solana.com') + const balance = await connection.getBalance(keypair.publicKey) + return balance.toString() +} + +export async function signSolanaMessage(ethProvider: IProvider): Promise { + try { + const ethPrivateKey = await ethProvider.request({ + method: 'private_key', + }) + const privateKey = getED25519Key(ethPrivateKey as string).sk.toString('hex') + const secretKey = new Uint8Array(Buffer.from(privateKey, 'hex')) + const keypair = Keypair.fromSecretKey(secretKey) + + // Convert message to Uint8Array + const messageBytes = new TextEncoder().encode('Hello Solana') + + // Sign the message + const signature = nacl.sign.detached(messageBytes, keypair.secretKey) + + return Buffer.from(signature).toString('base64') + } catch (error) { + console.error('Error signing Solana message:', error) + throw error + } +} + +export async function sendSolanaTransaction(ethProvider: IProvider): Promise { + try { + const ethPrivateKey = await ethProvider.request({ + method: 'private_key', + }) + const privateKey = getED25519Key(ethPrivateKey as string).sk.toString('hex') + const secretKey = new Uint8Array(Buffer.from(privateKey, 'hex')) + const keypair = Keypair.fromSecretKey(secretKey) + + const connection = new Connection('https://api.devnet.solana.com') + + // Import required modules for transaction + const { SystemProgram, Transaction, PublicKey, sendAndConfirmTransaction } = await import( + '@solana/web3.js' + ) + + // Create a test recipient address + const toAccount = new PublicKey('7C4jsPZpht1JHMWmwDF5ZEVfGSBViXCKbQEcm2GKHtKQ') + + // Create a transfer instruction + const transferInstruction = SystemProgram.transfer({ + fromPubkey: keypair.publicKey, + toPubkey: toAccount, + lamports: 100000, // 0.0001 SOL + }) + + // Create a transaction and add the instruction + const transaction = new Transaction().add(transferInstruction) + + // Set a recent blockhash + transaction.recentBlockhash = (await connection.getRecentBlockhash()).blockhash + transaction.feePayer = keypair.publicKey + + // Sign and send the transaction + const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]) + + return signature + } catch (error) { + console.error('Error sending Solana transaction:', error) + throw error + } +} +``` + +### Tezos + +Here's how to implement the Tezos RPC module: + +```tsx +// tezosRPC.ts +import { InMemorySigner } from '@taquito/signer' +import { TezosToolkit } from '@taquito/taquito' +import { hex2buf } from '@taquito/utils' +// @ts-ignore +import * as tezosCrypto from '@tezos-core-tools/crypto-utils' +import type { IProvider } from '@web3auth/modal' + +const tezos = new TezosToolkit('https://rpc.tzbeta.net/') + +export async function getTezosKeyPair(provider: IProvider): Promise { + try { + const privateKey = (await provider.request({ method: 'private_key' })) as string + const keyPair = tezosCrypto.utils.seedToKeyPair(hex2buf(privateKey)) + return keyPair + } catch (error) { + console.error(error) + return null + } +} + +export async function setProvider(provider: IProvider): Promise { + const keyPair = await getTezosKeyPair(provider) + tezos.setSignerProvider(await InMemorySigner.fromSecretKey(keyPair?.sk as string)) +} + +export async function getTezosAccount(provider: IProvider): Promise { + try { + const keyPair = await getTezosKeyPair(provider) + return keyPair?.pkh + } catch (error) { + console.error('Error', error) + return error + } +} + +export async function getTezosBalance(provider: IProvider): Promise { + try { + const keyPair = await getTezosKeyPair(provider) + const balance = await tezos.tz.getBalance(keyPair?.pkh as string) + return balance.toString() + } catch (error) { + console.error('Error', error) + return error + } +} + +export async function signTezosMessage(provider: IProvider): Promise { + try { + const keyPair = await getTezosKeyPair(provider) + const signer = new InMemorySigner(keyPair.sk) + const message = '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad' + const signature = await signer.sign(message) + return signature + } catch (error) { + return error + } +} + +export async function signAndSendTezosTransaction(provider: IProvider): Promise { + try { + await setProvider(provider) + // example address + const address = 'tz1dHzQTA4PGBk2igZ3kBrDsVXuvHdN8kvTQ' + + const op = await tezos.wallet + .transfer({ + to: address, + amount: 0.00005, + }) + .send() + + const txRes = await op.confirmation() + return txRes + } catch (error) { + return error + } +} +``` + +### Polkadot + +Here's how to implement the Polkadot RPC module: + +```tsx +// polkadotRPC.ts +import { ApiPromise, Keyring, WsProvider } from '@polkadot/api' +import { cryptoWaitReady } from '@polkadot/util-crypto' +import type { IProvider } from '@web3auth/modal' + +export async function makeClient(): Promise { + console.log('Establishing connection to Rococo Relay Chain RPC...') + const provider = new WsProvider('wss://rococo-rpc.polkadot.io') // roccoco testnet relay chain + const api = await ApiPromise.create({ provider }) + const resp = await api.isReady + console.log('Polkadot RPC is ready', resp) + return api +} + +export async function getPolkadotKeyPair(provider: IProvider): Promise { + await cryptoWaitReady() + const privateKey = (await provider.request({ + method: 'private_key', + })) as string + const keyring = new Keyring({ ss58Format: 42, type: 'sr25519' }) + const keyPair = keyring.addFromUri(`0x${privateKey}`) + return keyPair +} + +export async function getPolkadotAccounts(provider: IProvider): Promise { + const keyPair = await getPolkadotKeyPair(provider) + return keyPair.address +} + +export async function getPolkadotBalance(provider: IProvider): Promise { + const keyPair = await getPolkadotKeyPair(provider) + const api = await makeClient() + const data = await api.query.system.account(keyPair.address) + const accountData = data.toHuman() + return accountData.data.free +} + +export async function signAndSendPolkadotTransaction(provider: IProvider): Promise { + try { + const keyPair = await getPolkadotKeyPair(provider) + const api = await makeClient() + const txHash = await api.tx.balances + .transferKeepAlive('5Gzhnn1MsDUjMi7S4cN41CfggEVzSyM58LkTYPFJY3wt7o3d', 12345) + .signAndSend(keyPair) + return txHash.toHuman() + } catch (err: any) { + return err.toString() + } +} +``` + +## Next steps + +- If you want to integrate with a specific blockchain and you're having trouble with the code, please contact us + in our [community portal](https://web3auth.io/community/). +- Discover how to work with supported chains: + - [EVM-compatible chains](../../embedded-wallets/connect-blockchain/evm/) + - [Solana](../../embedded-wallets/connect-blockchain/solana/) + - [Standard approach to connect with non EVM chains](../../embedded-wallets/connect-blockchain/other/#standard-approach-for-connecting-with-non-evm-chains) +- Browse the [Embedded Wallets examples](https://github.com/Web3Auth/web3auth-pnp-examples/) diff --git a/src/pages/tutorials/sending-gasless-transaction.mdx b/src/pages/tutorials/sending-gasless-transaction.mdx new file mode 100644 index 00000000000..4b59e937e13 --- /dev/null +++ b/src/pages/tutorials/sending-gasless-transaction.mdx @@ -0,0 +1,349 @@ +--- +title: Send your first gasless transaction +image: 'img/tutorials/tutorials-banners/gasless-transaction.png' +description: Build gasless transactions with a paymaster using Embedded Wallets Native Account Abstraction (ERC-4337). Sponsor user gas fees in your dapp. +tags: [embedded wallets, account abstraction, gasless paymaster, erc-4337, web3auth] +date: October 22, 2024 +author: MetaMask Developer Relations +discourseTopicId: 2608 +--- + +import TabItem from '@theme/TabItem' +import Tabs from '@theme/Tabs' + +This guide demonstrates how you can use the Pimlico gasless Paymaster with Embedded Wallets' Account Abstraction +Provider to sponsor the transaction for your users without requiring the user to pay gas fees. + +:::note + +A paymaster is a vital component in the [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) standard, responsible for +covering transaction costs on behalf of the user. Various types of paymasters are available such as gasless paymasters, +ERC-20 paymasters, and more. + +::: + +:::tip + +Find the full [demo code on GitHub](https://github.com/Web3Auth/web3auth-examples/tree/main/other/smart-account-example). + +::: + +## Prerequisites + +- Pimlico Account: A Pimlico API key. You can get a free API key from [Pimlico Dashboard](https://dashboard.pimlico.io/apikeys). +- Embedded Wallets Web SDK: This guide assumes that you already know how to integrate the React SDK in your project. If + not, you can learn how to [integrate Embedded Wallets in your web app](/embedded-wallets/sdk/react/). + +## Step 1: Set up the dashboard + +1.1 If you haven't already, sign up on the [Embedded Wallets platform](https://developer.metamask.io). Access to the +Embedded Wallets base plan is free. + +1.2 Create a new project. + +:::tip + +See detailed [instructions on setting up the Embedded Wallets dashboard](/embedded-wallets/dashboard/). + +::: + +## Step 2: Integrate `AccountAbstractionProvider` + +The Embedded Wallets' account abstraction provider manages the complex logic behind configuring account abstraction, the bundler, and preparing user operations. If you're already using the Embedded Wallets SDK in your project, move +onto Step 3. + +2.1 Install [@web3auth/account-abstraction-provider](https://www.npmjs.com/package/@web3auth/account-abstraction-provider): + +```bash +npm install --save @web3auth/account-abstraction-provider +``` + +## Step 3: Configure the paymaster + +The `AccountAbstractionProvider` requires specific configurations to function correctly such as the +paymaster. Embedded Wallets supports custom paymaster configurations, allowing you to deploy your own paymaster and +integrate it with the provider. + +:::note[Paymaster] + +Note that paymaster support is not limited to Pimlico. You may choose from a variety of paymaster services available in +the ecosystem—giving you the flexibility to integrate any compatible paymaster service that suits your +requirements. See the documentation for +[React](../../embedded-wallets/sdk/react/advanced/smart-accounts#configure-bundler-and-paymaster), +[JS](../../embedded-wallets/sdk/js/advanced/smart-accounts#configure-bundler-and-paymaster), and +[Vue](../../embedded-wallets/sdk/vue/advanced/smart-accounts#configure-bundler-and-paymaster). + +::: + +In this guide, we use `SafeSmartAccount`, but you choose your favorite smart account provider from the +[available options](../../embedded-wallets/sdk/react/advanced/smart-accounts). + +:::note + +`SafeSmartAccount` is a Safe-based smart account implementation used to create and manage the user's contract wallet. +You can swap it for other supported [smart account](../../embedded-wallets/features/smart-accounts) types. + +::: + +Import the account abstraction provider and your chosen smart account implementation: + +```ts +// focus-start +import { + AccountAbstractionProvider, + SafeSmartAccount, +} from '@web3auth/account-abstraction-provider' +// focus-end + +const chainConfig = { + chainNamespace: CHAIN_NAMESPACES.EIP155, + chainId: '0xaa36a7', + rpcTarget: 'https://ethereum-sepolia.publicnode.com', + displayName: 'Ethereum Sepolia Testnet', + blockExplorerUrl: 'https://sepolia.etherscan.io', + ticker: 'ETH', + tickerName: 'Ethereum', + logo: 'https://cryptologos.cc/logos/ethereum-eth-logo.png', +} + +// focus-start +const accountAbstractionProvider = new AccountAbstractionProvider({ + config: { + chainConfig, + bundlerConfig: { + // Get the pimlico API Key from dashboard.pimlico.io + url: `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${pimlicoAPIKey}`, + }, + smartAccountInit: new SafeSmartAccount(), + paymasterConfig: { + // Get the pimlico API Key from dashboard.pimlico.io + url: `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${pimlicoAPIKey}`, + }, + }, +}) +// focus-end +``` + +## Step 4: Configure Embedded Wallets + +Once you have configured your `AccountAbstractionProvider`, you can now plug it in your Embedded Wallets Modal/No Modal +instance. If you are using an external wallets such as MetaMask, you can define whether you want to use the +`AccountAbstractionProvider`, or `EthereumPrivateKeyProvider` by setting the `useAAWithExternalWallet` in +`IWeb3AuthCoreOptions`. + +If you are setting `useAAWithExternalWallet` to `true`, it'll create a new smart account for your user, where the +signer/creator of the smart account would be the external wallet. + +If you are setting `useAAWithExternalWallet` to `false`, it'll skip creating a new smart account, and directly use +the external wallet to sign the transactions. + + + + + +```ts +import { EthereumPrivateKeyProvider } from "@web3auth/ethereum-provider"; +import { Web3Auth } from "@web3auth/modal"; + +const privateKeyProvider = new EthereumPrivateKeyProvider({ + // Use the chain config we declared earlier + config: { chainConfig }, +}); + +const web3auth = new Web3Auth({ + clientId: "YOUR_WEB3AUTH_CLIENT_ID", // Pass your Web3Auth Client ID, ideally using an environment variable + web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, + privateKeyProvider, + // Use the account abstraction provider we configured earlier + accountAbstractionProvider + // This will allow you to use EthereumPrivateKeyProvider for + // external wallets, while use the AccountAbstractionProvider + // for Web3Auth embedded wallets. + useAAWithExternalWallet: false, +}); +``` + + + + + +```ts +import { Web3AuthNoModal } from "@web3auth/no-modal"; +import { EthereumPrivateKeyProvider } from "@web3auth/ethereum-provider"; +import { AuthAdapter } from "@web3auth/auth-adapter"; + +const privateKeyProvider = new EthereumPrivateKeyProvider({ + config: { chainConfig }, +}); + +const web3auth = new Web3AuthNoModal({ + clientId: "YOUR_WEB3AUTH_CLIENT_ID", // Pass your Web3Auth Client ID, ideally using an environment variable + web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, + privateKeyProvider, + // Use the account abstraction provider we configured earlier + accountAbstractionProvider + // This will allow you to use EthereumPrivateKeyProvider for + // external wallets, while use the AccountAbstractionProvider + // for Web3Auth embedded wallets. + useAAWithExternalWallet: false, +}); + +const authadapter = new AuthAdapter(); +web3auth.configureAdapter(authadapter); +``` + + + + +## Step 5: Configure the signer + +The Embedded Wallets smart account feature is compatible with popular signer SDKs, including Wagmi, Ethers, and Viem. +You can choose your preferred package to configure the signer. + +You can retrieve the provider to configure the signer from your Embedded Wallets instance. + +:::info Wagmi + +Wagmi doesn't require any special configuration to use the signer with smart accounts. Once you have set up your +Embedded Wallets provider and connected your wallet, Wagmi's hooks (such as `useSigner` or `useAccount`) will automatically +use the smart account as the signer. You can interact with smart accounts using Wagmi just like you would with a regular +EOA (Externally Owned Account) signer; no additional setup is needed. + +::: + + + + + +```tsx +import { createWalletClient } from 'viem' + +// Use your Web3Auth instance to retreive the provider. +const provider = web3auth.provider + +const walletClient = createWalletClient({ + transport: custom(provider), +}) +``` + + + + + +```tsx +import { ethers } from 'ethers' + +// Use your Web3Auth instance to retreive the provider. +const provider = web3auth.provider + +const ethersProvider = new ethers.providers.Web3Provider(provider) +const signer = await ethersProvider.getSigner() +``` + + + + +## Step 6: Send a transaction + +Developers can use their preferred signer or Wagmi hooks to initiate onchain transactions, while Web3Auth manages the +creation and submission of the user operation. Only the `to`, `data`, and `value` fields need to be provided. Any +additional parameters will be ignored and automatically overridden. + +To ensure reliable execution, the bundler client sets `maxFeePerGas` and `maxPriorityFeePerGas` values. If custom values +are required, developers can use the +[Viem BundlerClient](https://viem.sh/account-abstraction/clients/bundler#bundler-client) to manually construct and send +the user operation. + +Since smart accounts are deployed as smart contracts, the user's first transaction also triggers the onchain deployment +of their wallet. + + + + + +```tsx +import { useSendTransaction } from 'wagmi' + +const { data: hash, sendTransaction } = useSendTransaction() + +// Convert 1 ether to WEI format +const value = web3.utils.toWei(1) + +sendTransaction({ to: 'DESTINATION_ADDRESS', value, data: '0x' }) + +const { + data: receipt, + isLoading: isConfirming, + isSuccess: isConfirmed, +} = useWaitForTransactionReceipt({ + hash, +}) +``` + + + + +```tsx +// Convert 1 ether to WEI format +const amount = ethers.parseEther('1.0') + +// Submits a user operation to the blockchain +const transaction = await signer.sendTransaction({ + to: 'DESTINATION_ADDRESS', + value: amount, + // This will perform the transfer of ETH + data: '0x', +}) + +// Wait for the transaction to be mined +const receipt = await transaction.wait() +``` + + + + +```tsx +// Convert 1 ether to WEI format +const amount = parseEther('1') + +// Submits a user operation to the blockchain +const hash = await walletClient.sendTransaction({ + to: 'DESTINATION_ADDRESS', + value: amount, + // This will perform the transfer of ETH + data: '0x', +}) + +// Wait for the transaction to be mined +const receipt = await publicClient.waitForTransactionReceipt({ hash }) +``` + + + + +Congratulations, you have successfully sent your first gasless transaction using the Pimlico paymaster with Embedded +Wallets Account Abstraction Provider. + +## Next steps + +- Learn more about advanced features of the Account Abstraction Provider like performing [batch transactions using + ERC-20 paymaster](/embedded-wallets/sdk/react). diff --git a/src/pages/tutorials/upgrade-eoa-to-smart-account.md b/src/pages/tutorials/upgrade-eoa-to-smart-account.md new file mode 100644 index 00000000000..5a38a49c1a9 --- /dev/null +++ b/src/pages/tutorials/upgrade-eoa-to-smart-account.md @@ -0,0 +1,498 @@ +--- +title: Upgrade an EOA to a smart account +description: Upgrade a MetaMask EOA to a smart account using MetaMask Connect and Wagmi. +image: 'img/tutorials/tutorials-banners/upgrade-eoa-to-smart-account.png' +tags: [MetaMask Connect, wagmi, EOA, smart account, EIP-7702, EIP-5792] +date: Aug 22, 2025 +author: MetaMask Developer Relations +discourseTopicId: 2614 +--- + +This tutorial walks you through upgrading a MetaMask externally owned account (EOA) to a [MetaMask smart account](/smart-accounts-kit/concepts/smart-accounts) via [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702), and sending an [atomic batch transaction](/metamask-connect/evm/guides/send-transactions/batch-transactions) via [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792). +You will use a provided template, which sets up MetaMask SDK with a [Next.js](https://nextjs.org/docs) and [Wagmi](https://wagmi.sh/) dapp. + +## Prerequisites + +- [Node.js](https://nodejs.org/) version 18 or later installed +- An [Infura API key](/developer-tools/dashboard/get-started/create-api) from the MetaMask Developer dashboard +- [MetaMask](https://metamask.io/) installed, with an EOA that has Sepolia ETH + :::note + You can use the [MetaMask faucet](/developer-tools/faucet) to get Sepolia ETH. + ::: + +## Steps + +### 1. Set up the project + +1. Clone the [`MetaMask/7702-livestream-demo`](https://github.com/MetaMask/7702-livestream-demo) repository: + + ```bash + git clone git@github.com:MetaMask/7702-livestream-demo.git + ``` + +2. Switch to the `feat/mm-sdk` branch: + + ```bash + cd 7702-livestream-demo && git switch feat/mm-sdk + ``` + +3. Install dependencies: + + ```bash + npm install + ``` + +4. Run the development server and navigate to [`http://localhost:3000`](http://localhost:3000/): + + ```bash + npm run dev + ``` + + The initial template displays with non-functional buttons: + +

    + SDK 7702 initial template +

    + +### 2. Configure the MetaMask connector + +In the root directory, create a `.env.local` file. +Add a `NEXT_PUBLIC_INFURA_API_KEY` environment variable, replacing `` with your Infura API key: + +```text title=".env.local" +NEXT_PUBLIC_INFURA_API_KEY= +``` + +In `src/providers/AppProvider.tsx`, configure the Wagmi [MetaMask connector](https://wagmi.sh/react/api/connectors/metaMask) using your Infura API key: + +```tsx title="AppProvider.tsx" +"use client"; + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { createConfig, http, WagmiProvider } from "wagmi"; +import { sepolia } from "viem/chains"; +import { ReactNode } from "react"; +// add-next-line +import { metaMask } from "wagmi/connectors"; + +// remove-next-line +- export const connectors = [] +// add-start ++ export const connectors = [ ++ metaMask({ ++ infuraAPIKey: process.env.NEXT_PUBLIC_INFURA_API_KEY, ++ }), ++ ]; +// add-end +// ... +``` + +### 3. Create a connect and disconnect button + +In `src/app/page.tsx`, use the `useAccount`, `useConnect`, and `useDisconnect` hooks from Wagmi, along with the MetaMask connector, to create a button to connect and disconnect your MetaMask wallet, and display the connection status: + +```tsx title="page.tsx" +"use client"; + +import Image from "next/image"; +// add-start ++ import { metaMask } from "wagmi/connectors"; ++ import { useAccount, useConnect, useDisconnect } from "wagmi"; +// add-end + +export default function Home() { +// add-start ++ const { connect } = useConnect(); ++ const { disconnect } = useDisconnect(); ++ const { address, isConnected } = useAccount(); +// add-end + +// add-start ++ const formatAddress = (addr: string) => { ++ return `${addr.slice(0, 6)}...${addr.slice(-4)}`; ++ }; +// add-end + + return ( + // ... +// remove-start +-
      +-
    1. +- Get started by editing{" "} +- +- src/app/page.tsx +- +- . +-
    2. +-
    3. +- Save and see your changes instantly. +-
    4. +-
    + +-
    +// remove-end +// add-start ++ {/* Wallet connection section */} ++
    ++

    Wallet Connection

    +// add-end + +// add-start ++ {/* Connection status */} ++
    ++ {isConnected ? ( ++
    ++
    ++ Connected to {formatAddress(address!)} ++
    ++ ) : ( ++
    ++
    ++ Not connected ++
    ++ )} ++
    +// add-end + +// remove-start +- +// remove-end +// add-start ++ {/* Connect/disconnect button */} ++ +// add-end + // ... +``` + +In the development server, test that the button works to connect and disconnect from your MetaMask wallet. +When connected, the interface displays your connected wallet address: + +
    +
    + SDK disconnected +
    +
    + SDK connected +
    +
    + +### 4. Handle and send batch transactions + +In `src/app/page.tsx`, use the [`useSendCalls`](https://wagmi.sh/react/api/hooks/useSendCalls) hook from Wagmi to handle and send [atomic batch transactions](/metamask-connect/evm/guides/send-transactions/batch-transactions). +Also use React's `useState` hook to handle the transaction state. +The following example sends 0.001 and 0.0001 ETH in a batch transaction. +Replace `` with recipient addresses of your choice: + +```tsx title="page.tsx" +"use client"; + +import Image from "next/image"; +import { metaMask } from "wagmi/connectors"; +// remove-next-line +- import { useAccount, useConnect, useDisconnect } from "wagmi"; +// add-start ++ import { useAccount, useConnect, useDisconnect, useSendCalls } from "wagmi"; ++ import { useState } from "react"; ++ import { parseEther } from "viem"; +// add-end + +export default function Home() { + const { connect } = useConnect(); + const { disconnect } = useDisconnect(); + const { address, isConnected } = useAccount(); +// add-start ++ const { sendCalls, error, isPending, isSuccess, data, reset } = useSendCalls(); ++ const [transactionHash, setTransactionHash] = useState(null); ++ const [statusError, setStatusError] = useState(null); +// add-end + +// add-start ++ const handleSendTransaction = () => { ++ if (!isConnected) return; ++ ++ // Reset previous states ++ setTransactionHash(null); ++ setStatusError(null); ++ reset(); ++ ++ sendCalls({ ++ calls: [ ++ { ++ to: "", ++ value: parseEther("0.001"), ++ }, ++ { ++ to: "", ++ value: parseEther("0.0001"), ++ }, ++ ], ++ }); ++ }; +// add-end + // ... +``` + +Then, create a button to send batch transactions, and display the transaction state (pending, success, or error). +Also, update the connect/disconnect button to reset states when disconnected: + +```tsx title="page.tsx" +// ... + {/* Connect/disconnect button */} + +// remove-start +- +// remove-end +
    + +// add-start ++ {/* Batch transaction section */} ++
    ++

    Send Batch Transaction

    +// add-end + +// add-start ++ {/* Send batch transaction button */} ++ +// add-end + +// add-start ++ {/* Transaction state */} ++ {isPending && ( ++
    ++
    ++ Transaction pending... ++
    ++ )} ++ ++ {isSuccess && data && ( ++
    ++
    ++
    ++ ++ Transaction submitted successfully! ++ ++
    ++
    ++

    ++ Data ID:{" "} ++ {data.id} ++

    ++
    ++
    ++ )} ++ ++ {error && ( ++
    ++
    Transaction Error
    ++
    {error.message}
    ++
    ++ )} ++
    +// add-end +// ... +``` + +In the development server, test that the button works to send batch transactions from your wallet. +Ensure you are connected to the Sepolia network in MetaMask. +MetaMask prompts you to upgrade your EOA to a smart account in order to send a batch transaction: + +
    +
    + SDK send batch transactions button +
    +
    + SDK upgrade EOA to smart account +
    +
    + +### 5. Get the status of batch transactions + +In `src/app/page.tsx`, use the [`getCallsStatus`](https://wagmi.sh/core/api/actions/getCallsStatus) action from Wagmi to get the status of sent batch transactions: + +```tsx title="page.tsx" +"use client"; + +import Image from "next/image"; +import { metaMask } from "wagmi/connectors"; +import { useAccount, useConnect, useDisconnect, useSendCalls } from "wagmi"; +import { useState } from "react"; +import { parseEther } from "viem"; +// add-start ++ import { getCallsStatus } from "@wagmi/core"; ++ import { wagmiConfig as config } from "@/providers/AppProvider"; +// add-end + +export default function Home() { + const { connect } = useConnect(); + const { disconnect } = useDisconnect(); + const { address, isConnected } = useAccount(); + const { sendCalls, error, isPending, isSuccess, data, reset } = useSendCalls(); + const [transactionHash, setTransactionHash] = useState(null); + const [statusError, setStatusError] = useState(null); +// add-next-line ++ const [statusLoading, setStatusLoading] = useState(false); + +// add-start ++ const handleGetCallsStatus = async () => { ++ if (!data?.id) return; ++ ++ setStatusLoading(true); ++ setStatusError(null); ++ ++ try { ++ const status = await getCallsStatus(config, { id: data.id }); ++ console.log("Transaction status:", status); ++ ++ if ( ++ status.status === "success" && ++ status.receipts?.[0]?.transactionHash ++ ) { ++ setTransactionHash(status.receipts[0].transactionHash); ++ } else if (status.status === "failure") { ++ setStatusError("Transaction failed"); ++ } ++ } catch (err) { ++ console.error("Error getting call status:", err); ++ setStatusError( ++ err instanceof Error ? err.message : "Failed to get transaction status" ++ ); ++ } finally { ++ setStatusLoading(false); ++ } ++ }; +// add-end + // ... +``` + +Then, create a button to check the batch transaction status: + +```tsx title="page.tsx" +// ... + + {/* Transaction state */} + // ... + +// add-start ++ {/* Check transaction status button */} ++ {data && ( ++ ++ )} +// add-end + +// add-start ++ {/* Status error */} ++ {statusError && ( ++
    ++
    Status Check Error
    ++
    {statusError}
    ++
    ++ )} +// add-end + +// add-start ++ {/* Transaction hash */} ++ {transactionHash && ( ++
    ++
    ++ Transaction Confirmed! ++
    ++ ++
    ++ )} +// add-end +// ... +``` + +In the development server, when you send a successful batch transaction, the success state and the **Check Transaction Status** button appear. +When you select the **Check Transaction Status** button, if the transaction is confirmed, a link to Etherscan with your transaction hash appears: + +
    +
    + SDK successful 7702 transaction +
    +
    + SDK check transaction status +
    +
    + +You have successfully used the SDK to upgrade a MetaMask EOA to a MetaMask smart account, send an atomic batch transaction, and check its status! + +## Resources + +- View the `feat-mm-sdk-final` branch of the [`MetaMask/7702-livestream-demo`](https://github.com/MetaMask/7702-livestream-demo/tree/feat-mm-sdk-final) repository for the completed implementation of this tutorial. +- Watch the [live coding session](https://www.youtube.com/watch?v=crMqCb8RPEE) on YouTube, in which the MetaMask DevRel team walks through setting up EIP-7702 functionality from the initial template. +- See the [Smart Accounts Kit EIP-7702 quickstart](/smart-accounts-kit/get-started/smart-account-quickstart/eip7702) to learn how to use the Smart Accounts Kit to upgrade an EOA to a MetaMask smart account. diff --git a/src/pages/tutorials/use-erc20-paymaster.md b/src/pages/tutorials/use-erc20-paymaster.md new file mode 100644 index 00000000000..963f60fe1f0 --- /dev/null +++ b/src/pages/tutorials/use-erc20-paymaster.md @@ -0,0 +1,174 @@ +--- +title: Use an ERC-20 paymaster with a smart account +image: 'img/tutorials/tutorials-banners/use-erc20-paymaster.png' +description: Enable users to pay gas fees with an ERC-20 token using a smart account and paymaster. +tags: [delegation toolkit, smart accounts kit, ERC-20 paymaster, smart accounts] +keywords: [delegation, smart accounts kit, ERC-20 paymaster, smart accounts, USDC, ERC-4337] +date: Sep 2, 2025 +author: MetaMask Developer Relations +discourseTopicId: 2602 +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +This tutorial walks you through using an ERC-20 paymaster with [MetaMask Smart Accounts](/smart-accounts-kit/concepts/smart-accounts), enabling users to pay gas fees in USDC. +This tutorial uses Pimlico's paymaster, but you can use any paymaster of your choice. + +## About paymasters + +A paymaster is an important component of the [account abstraction (ERC-4337)](/smart-accounts-kit/concepts/smart-accounts) standard, responsible for abstracting gas fees for end users. +There are different types of paymasters, such as gasless paymasters and ERC-20 paymasters. +While a gasless paymaster covers the transaction on behalf of the user, an ERC-20 paymaster allows users to pay gas fees using a supported ERC-20 token. +This removes the need for users to hold native tokens, allowing them to perform onchain actions using only stablecoins. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. +- [Create a Pimlico API key](https://docs.pimlico.io/guides/create-api-key#create-api-key). + +## Steps + +### 1. Install the Smart Accounts Kit + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) in your project: + +```bash npm2yarn +npm install @metamask/smart-accounts-kit +``` + +### 2. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +You will configure a smart account and Bundler Client with the Public Client, which you can use to query the signer's account state and interact with the blockchain network. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 3. Set up a Paymaster Client + +Set up a Paymaster Client +using Viem's [`createPaymasterClient`](https://viem.sh/account-abstraction/clients/paymaster) function. This client interacts with the paymaster service, enabling users to pay gas fees in USDC. + +Replace `` with your Pimlico API key: + +```typescript +import { createPaymasterClient } from 'viem/account-abstraction' + +const paymasterClient = createPaymasterClient({ + transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), +}) +``` + +### 4. Set up a Bundler Client + +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +You can use the bundler service to estimate gas for user operations and submit transactions to the network. + +To use the ERC-20 paymaster, configure the `paymasterContext` with the ERC-20 token you wish to use to pay for gas fees. +For this tutorial, specify the Sepolia USDC token address. + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' + +// USDC address on Ethereum Sepolia. +const token = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), + paymasterContext: { + token, + }, +}) +``` + +### 5. Create and fund a smart account + +Create a [Hybrid smart account](/smart-accounts-kit/guides/smart-accounts/create-smart-account/#hybrid-smart-account). +A Hybrid smart account is a flexible smart account implementation that supports both an EOA owner and any number of passkey (WebAuthn) signers. + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' + +const account = privateKeyToAccount('0x...') + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) +``` + +Fund the smart account with some Sepolia USDC to pay gas fees. + +:::note +You can use [Circle's faucet](https://faucet.circle.com/) to get Sepolia USDC. +::: + +### 6. Send a user operation + +The ERC-20 paymaster works by transferring the token from the smart account, and reimbursing itself for paying the gas fees on the user's behalf. + +To send a user operation with the ERC-20 paymaster, use the [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method from the Bundler Client. +You must include a call approving the ERC-20 token to be used by the paymaster. +To modify the token allowance for the paymaster, perform a write operation on the USDC contract. +For this tutorial, set an allowance of 10 USDC tokens. + +:::note +In a production dapp, you should first check the existing token allowance and only approve the amount required by the paymaster. +::: + +Batch the approve call with other onchain actions you want to perform using the ERC-20 paymaster. +Pass the `paymasterClient` from [Step 3](#3-set-up-a-paymaster-client) to the `paymaster` property. + +```typescript +import { parseAbi, parseEther } from 'viem' + +// Appropriate fee per gas must be determined for the bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const pimlicoPaymasterAddress = '0x777777777777AeC03fd955926DbF81597e66834C' + +// 10 USDC in wei format. Since USDC has 6 decimals, the wei value is 10 * 10^6. +const approvalAmount = 10000000n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + // USDC approve call + { + // USDC token address + to: token, + abi: parseAbi(['function approve(address,uint)']), + functionName: 'approve', + args: [pimlicoPaymasterAddress, approvalAmount], + }, + // Batch the approve call with other onchain actions. + { + to: '0x1234567890123456789012345678901234567890', + value: parseEther('1'), + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, + paymaster: paymasterClient, +}) +``` + +## Next steps + +- Learn more about [smart account implementations](/smart-accounts-kit/guides/smart-accounts/create-smart-account). +- To sponsor gas for end users, see how to [send a gasless transaction](/smart-accounts-kit/guides/smart-accounts/send-gasless-transaction). diff --git a/src/pages/tutorials/use-passkey-as-backup-signer.md b/src/pages/tutorials/use-passkey-as-backup-signer.md new file mode 100644 index 00000000000..49f38334c05 --- /dev/null +++ b/src/pages/tutorials/use-passkey-as-backup-signer.md @@ -0,0 +1,193 @@ +--- +title: Use a passkey as a backup signer +image: 'img/tutorials/tutorials-banners/use-passkey-as-backup-signer.png' +description: Use a passkey as a backup signer for a MetaMask smart account. +tags: [delegation toolkit, smart accounts kit, passkey, backup signer, smart account] +keywords: [delegation, smart accounts kit, passkey, webauthn, P-256, backup signer, smart account] +date: Aug 27, 2025 +author: MetaMask Developer Relations +discourseTopicId: 2612 +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +This tutorial walks you through using a passkey as a backup signer for your [MetaMask smart account](/smart-accounts-kit/concepts/smart-accounts). + +## About passkeys + +An externally owned account (EOA) uses the secp256k1 elliptic curve to generate key pairs and signatures. +In contrast, a passkey (WebAuthn credential) uses the secp256r1 (P-256) elliptic curve to generate key pairs and signatures. +Passkeys eliminate the need for traditional seed phrases that are difficult to remember, enabling a more seamless and secure way for users to access their web3 wallets. + +MetaMask Smart Accounts offer a [Hybrid implementation](/smart-accounts-kit/concepts/smart-accounts/#hybrid-smart-account), which supports signature validation for both secp256k1 and secp256r1 curves. +This allows you to add a passkey as a backup signer for your smart account. + +You can add passkeys during smart account creation or after the account has been deployed. +This tutorial walks you through adding a passkey signer to an already deployed smart account. + +## Prerequisites + +- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. +- Install [Yarn](https://yarnpkg.com/), + [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. + +## Steps + +### 1. Install dependencies + +Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and [Ox SDK](https://oxlib.sh/#installation) in your project: + +```bash npm2yarn +npm install @metamask/smart-accounts-kit ox +``` + +### 2. Set up a Public Client + +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +You will configure a smart account and Bundler Client with the Public Client, which you can use to query the signer's account state and interact with the blockchain network. + +```typescript +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) +``` + +### 3. Set up a Bundler Client + +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +You can use the bundler service to estimate gas for user operations and submit transactions to the network. + +```typescript +import { createBundlerClient } from 'viem/account-abstraction' + +const bundlerClient = createBundlerClient({ + client: publicClient, + transport: http('https://your-bundler-rpc.com'), +}) +``` + +### 4. Create and deploy a smart account + +Create and deploy a [Hybrid smart account](/smart-accounts-kit/guides/smart-accounts/create-smart-account), with a private key signer. +The Hybrid implementation supports adding additional passkey signers. + +```typescript +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' +import { privateKeyToAccount } from 'viem/accounts' +import { zeroAddress } from 'viem' + +const account = privateKeyToAccount('0x...') + +// Create the smart account. +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [account.address, [], [], []], + deploySalt: '0x', + signer: { account }, +}) + +// Deploy the smart account by sending a user operation. +// Appropriate fee per gas must be determined for the bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [{ to: zeroAddress }], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + +### 5. Create a passkey + +To add a passkey signer, use Viem's [`createWebAuthnCredential`](https://viem.sh/account-abstraction/accounts/webauthn/createWebAuthnCredential) function to securely register the passkey (WebAuthn credential). + +```ts +import { createWebAuthnCredential } from 'viem/account-abstraction' + +const credential = await createWebAuthnCredential({ + name: 'MetaMask Smart Account', +}) +``` + +### 6. Add the passkey as a backup signer + +Use the `HybridDeleGator` contract namespace from the Smart Accounts Kit to encode the calldata required to add the passkey signer. +The encoding function needs the X and Y coordinates of the P-256 public key. +Since WebAuthn credentials store a compressed public key, you need to use the [Ox SDK](https://oxlib.sh/#installation) to deserialize it, and extract the X and Y coordinates. + +Once the calldata is prepared, send it to your smart account address to register the passkey as a backup signer. + +```ts +import { PublicKey } from 'ox' +import { toHex } from 'viem' +import { HybridDeleGator, P256Owner } from '@metamask/smart-accounts-kit/contracts' + +// Deserialize the compressed public key. +const publicKey = PublicKey.fromHex(credential.publicKey) + +const p256Owner: P256Owner = { + keyId: toHex(credential.id), + x: publicKey.x, + y: publicKey.y, +} + +const data = HybridDeleGator.encode.addKey({ + p256Owner, +}) + +// Appropriate fee per gas must be determined for the bundler being used. +const maxFeePerGas = 1n +const maxPriorityFeePerGas = 1n + +const userOperationHash = await bundlerClient.sendUserOperation({ + account: smartAccount, + calls: [ + { + to: smartAccount.address, + data, + }, + ], + maxFeePerGas, + maxPriorityFeePerGas, +}) +``` + +### 7. (Optional) Use the passkey signer + +You can now use the passkey signer to access your smart account and sign transactions. +If you ever lose your primary signer (private key) used in [Step 4](#4-create-and-deploy-a-smart-account), you can use the passkey as a secure backup method to retain access to your smart account. + +Use the [Viem WebAuthn Account](https://viem.sh/account-abstraction/accounts/webauthn) to configure your passkey as a MetaMask smart account signer. + +```ts +import { Address } from 'ox' +import { toWebAuthnAccount } from 'viem/account-abstraction' +import { toHex } from 'viem' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +// Use the deserialized public key from the previous step. +const owner = Address.fromPublicKey(publicKey) + +// Use the credential from the previous step. +const webAuthnAccount = toWebAuthnAccount({ credential }) + +const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + deployParams: [owner, [toHex(credential.id)], [publicKey.x], [publicKey.y]], + deploySalt: '0x', + signer: { webAuthnAccount, keyId: toHex(credential.id) }, +}) +``` + +## Next steps + +- Learn more about [smart account implementations](/smart-accounts-kit/guides/smart-accounts/create-smart-account). +- To sponsor gas fees when adding a passkey as a backup signer, see how to [send a gasless transaction](/smart-accounts-kit/guides/smart-accounts/send-gasless-transaction). diff --git a/src/plugins/docusaurus-plugin-tutorials/index.js b/src/plugins/docusaurus-plugin-tutorials/index.js new file mode 100644 index 00000000000..c7fa737f715 --- /dev/null +++ b/src/plugins/docusaurus-plugin-tutorials/index.js @@ -0,0 +1,45 @@ +const path = require('path') +const fs = require('fs') +const util = require('util') +const glob = require('glob') +const matter = require('gray-matter') + +const globAsync = util.promisify(glob) +const readFileAsync = util.promisify(fs.readFile) + +module.exports = (context, options) => ({ + name: 'docusaurus-plugin-tutorials', + getPathsToWatch() { + const dir = path.resolve(context.siteDir, 'src', 'pages', 'tutorials') + return [`${dir}/**/*.{md,mdx}`] + }, + async loadContent() { + const dir = path.resolve(context.siteDir, 'src', 'pages', 'tutorials') + + const filenames = await globAsync('**/*.{md,mdx}', { cwd: dir, nodir: true }) + const frontMatters = {} + + for (const filename of filenames) { + const src = await readFileAsync(path.join(dir, filename), 'utf-8') + const { data } = matter(src) + const splits = filename.split('.') + splits.pop() + const name = splits.join('.') // Trim .md + frontMatters[name] = data + } + + return frontMatters + }, + async contentLoaded({ content, actions }) { + const { createData, addRoute } = actions + const contentHub = await createData('tutorials.json', JSON.stringify(content)) + + // Create the hub page that lists all tutorials + addRoute({ + path: '/tutorials', + exact: true, + component: '@site/src/components/TutorialsPage', + modules: { content: contentHub }, + }) + }, +}) diff --git a/src/plugins/docusaurus-plugin-virtual-files/index.js b/src/plugins/docusaurus-plugin-virtual-files/index.js new file mode 100644 index 00000000000..7420bd3f2b0 --- /dev/null +++ b/src/plugins/docusaurus-plugin-virtual-files/index.js @@ -0,0 +1,107 @@ +const axios = require('axios') +const util = require('util') +const fs = require('fs') +const path = require('path') +const joi = require('joi') +const readFileAsync = util.promisify(fs.readFile) +const writeFileAsync = util.promisify(fs.writeFile) + +const environment = process.env.IB_ENV || 'development' + +async function fetchHostedFile(filename) { + try { + const response = await axios.get('https://raw.githubusercontent.com/' + filename) + var fileContent = response.data + if (typeof fileContent !== 'string') { + fileContent = JSON.stringify(fileContent, null, 2) + } + return fileContent + } catch (e) { + return '' // Return empty string as fallback + } +} + +const qsFileLinks = require('../../utils/qs-file-links.json') +module.exports = (context, options) => ({ + name: 'docusaurus-plugin-virtual-files', + async loadContent() { + const dir = path.resolve(context.siteDir, options.rootDir) + const filenames = Object.values(qsFileLinks) + const fileContents = {} + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } + + if (environment === 'development') { + var data = '' + for (const filename of filenames) { + const filePath = path.join(dir, filename.replaceAll('/', '-')) + try { + data = await readFileAsync(filePath, 'utf8') + } catch (e) { + data = await fetchHostedFile(filename) + + try { + await writeFileAsync(filePath, data) + } catch (error) { + console.log(`Error saving ${filename} to cache: ${error.message}`) + } + } + fileContents[filename] = data + } + } else { + for (const filename of filenames) { + fileContents[filename] = await fetchHostedFile(filename) + } + } + + console.log(`✅ Virtual files plugin: Loaded ${Object.keys(fileContents).length} files`) + return fileContents + }, + async contentLoaded({ content, actions }) { + const { createData, addRoute, setGlobalData } = actions + + // Only expose the explicitly opted-in keys as global data (loaded on every page). + // All other files are served as per-route modules via addRoute below. + const globalDataKeys = options.globalDataKeys ?? [] + const globalDataSubset = {} + for (const shortKey of globalDataKeys) { + const filename = qsFileLinks[shortKey] + if (filename !== undefined && content[filename] !== undefined) { + globalDataSubset[filename] = content[filename] + } + } + setGlobalData(globalDataSubset) + + // Create JSON data file + const files = await createData('files.json', JSON.stringify(content)) + + const routePath = '/quickstart' + + // This is the single canonical `/quickstart` route. The pages plugin is + // configured (in `docusaurus.config.js`) to exclude `quickstart/index.jsx` + // so it doesn't auto-generate a duplicate, module-less route for the same + // path. The builder navigates entirely via query strings on this path + // (e.g. `/quickstart/?product=...&framework=...&stepIndex=...`), so no + // catch-all child route is needed. A previous `${routePath}/*` splat route + // was removed because it served no real page and emitted a malformed + // `/quickstart/*/` URL into the sitemap. + addRoute({ + path: routePath, + exact: true, + component: '@site/src/pages/quickstart', + modules: { + files, + }, + }) + }, +}) + +module.exports.validateOptions = ({ options, validate }) => + validate( + joi.object({ + rootDir: joi.string().required(), + globalDataKeys: joi.array().items(joi.string()).default([]), + }), + options + ) diff --git a/src/plugins/launchdarkly/index.ts b/src/plugins/launchdarkly/index.ts index 6cf02f5dd13..9be85680f9d 100644 --- a/src/plugins/launchdarkly/index.ts +++ b/src/plugins/launchdarkly/index.ts @@ -1,21 +1,21 @@ -import * as path from "path"; +import * as path from 'path' const LDPlugin = () => { return { - name: "docusaurus-plugin-launchdarkly", + name: 'docusaurus-plugin-launchdarkly', getClientModules() { - return [path.resolve(__dirname, "./ldClient")]; + return [path.resolve(__dirname, './ldClient')] }, configureWebpack() { return { resolve: { alias: { - launchdarkly: path.resolve(__dirname, "./ldClient.ts"), + launchdarkly: path.resolve(__dirname, './ldClient.ts'), }, }, - }; + } }, - }; -}; + } +} -export default LDPlugin; +export default LDPlugin diff --git a/src/plugins/launchdarkly/ldClient.ts b/src/plugins/launchdarkly/ldClient.ts index e6501e33837..21398583b7a 100644 --- a/src/plugins/launchdarkly/ldClient.ts +++ b/src/plugins/launchdarkly/ldClient.ts @@ -1,32 +1,32 @@ -import { initialize } from "launchdarkly-js-client-sdk"; -import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; -import siteConfig from "@generated/docusaurus.config"; -import Cookies from "js-cookie"; +import { initialize } from 'launchdarkly-js-client-sdk' +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' +import siteConfig from '@generated/docusaurus.config' +import Cookies from 'js-cookie' export default (function () { if (!ExecutionEnvironment.canUseDOM) { - return null; + return null } - const { LD_CLIENT_ID } = siteConfig.customFields; - const COOKIE_NAME = "feature_preview"; - const feature_preview = Cookies.get(COOKIE_NAME); + const { LD_CLIENT_ID } = siteConfig.customFields + const COOKIE_NAME = 'feature_preview' + const feature_preview = Cookies.get(COOKIE_NAME) const context = { - kind: "user", + kind: 'user', anonymous: true, - key: "ld-anonymous-user-key", + key: 'ld-anonymous-user-key', ...(feature_preview && { feature_preview }), - }; + } const ldClient = initialize(LD_CLIENT_ID as string, context, { allAttributesPrivate: true, - bootstrap: "localStorage", - }); + bootstrap: 'localStorage', + }) - ldClient.on("ready", () => { - console.log("LaunchDarkly client ready"); - }); + ldClient.on('ready', () => { + console.log('LaunchDarkly client ready') + }) - return ldClient; -})(); + return ldClient +})() diff --git a/src/plugins/llms-html-injector/index.js b/src/plugins/llms-html-injector/index.js new file mode 100644 index 00000000000..03cab71db25 --- /dev/null +++ b/src/plugins/llms-html-injector/index.js @@ -0,0 +1,1270 @@ +const path = require('path') +const fs = require('fs/promises') + +// Sentinel attributes / strings used to make HTML and markdown post-processing +// idempotent across re-runs (e.g. when scripts/verify-llms-output.js is invoked +// against an already-processed outDir). +const MD_ALT_MARKER = 'data-llms-md-alt' +const BODY_DIRECTIVE_MARKER = 'data-llms-directive' +const MD_DIRECTIVE_LINE = '> For the complete documentation index, see [llms.txt](/llms.txt).' + +// Matches the opening tag of every `` (KaTeX +// always emits this exact class with no additional classes on the wrapper +// itself; the mathml subtree is the off-screen MathML rendering used by +// screen readers). The `[^>]*` allow for any other attributes (rare but +// possible if upstream rehype plugins add them). The capture group is +// reused to splice the marker into the same position in the tag. +const KATEX_MATHML_OPEN_TAG_RE = + /"']|"[^"]*"|'[^']*')*?\bclass="katex-mathml"(?:[^>"']|"[^"]*"|'[^']*')*?)>/g + +// Visible-but-screen-reader-only directive injected at the top of every +// `` in the build. AFDocs scans `` (excluding nav/script/style) +// for a mention of `llms.txt`, so this satisfies `llms-txt-directive-html`. +// `.sr-only` is defined in src/scss/commons/_utils.scss and loaded site-wide +// via src/scss/custom.scss, so no styling work is needed at the page level. +function buildBodyDirective(siteUrl) { + // The href is intentionally site-relative (`/llms.txt`) so it works on the + // production host and any preview/staging deployment alike. The siteUrl + // argument is accepted for symmetry with the head-link injector and to + // allow a future absolute variant without touching call sites. + void siteUrl + return ( + `
    ` + + 'For AI agents: a documentation index is available at ' + + '/llms.txt. A markdown version of this page is ' + + 'available at the same URL with .md appended (or via Accept: text/markdown).' + + `
    ` + ) +} + +/** + * Build the URL prefix the upstream `docusaurus-plugin-llms` uses when it + * stamps absolute links into the generated `llms*.txt` indexes and `.md` + * files. The upstream concatenates `siteConfig.url` with `siteConfig.baseUrl` + * (trimmed of any trailing slash), so when the site is deployed under a + * non-root base path (e.g. `DEST=/staging/` in CI) the emitted URLs look like + * `https://docs.metamask.io/staging/...`. + * + * Both `rewriteLlmsIndexes` (find-and-replace match keys) and + * `injectAlternateLinks` (`` hrefs) must use the same + * prefix; otherwise the rewrites silently no-op and the alternate links 404. + * + * Mirrors `node_modules/docusaurus-plugin-llms/lib/index.js`. + */ +function resolveSiteUrl(siteConfig) { + const url = (siteConfig && siteConfig.url) || '' + const rawBase = (siteConfig && siteConfig.baseUrl) || '' + const base = rawBase.endsWith('/') ? rawBase.slice(0, -1) : rawBase + return `${url}${base}` +} + +/** + * Vercel sets several deployment URL env vars on every build: + * + * - `VERCEL_URL` — the deployment-specific host + * (e.g. `metamask-docs-f8nytczy3-consensys.vercel.app`). Changes on + * every deploy. + * - `VERCEL_BRANCH_URL` — the stable branch alias + * (e.g. `metamask-docs-git-my-branch-consensys.vercel.app`). Same URL + * across rebuilds of the same branch — this is the URL collaborators + * and CI tools normally test against. + * - `VERCEL_ENV` — `production`, `preview`, or `development`. + * + * On preview/development deployments we want the curated `static/llms.txt`, + * the generated `llms-*.txt` index files, and the per-page `.md` link + * bodies to point at the same host AFDocs is being pointed at — otherwise + * AFDocs sees the absolute URLs as cross-origin and silently degrades + * checks like `llms-txt-links-markdown` and `llms-txt-coverage` to + * "skipped: all links external". + * + * `VERCEL_BRANCH_URL` is preferred because it matches the URL most reviewers + * paste into `npx afdocs check`. `VERCEL_URL` is the fallback when the + * branch URL isn't available (e.g. on `vercel dev`, where only the + * deployment-specific URL is set). Returns null on production deployments + * and outside Vercel so the canonical `siteConfig.url` is preserved. + */ +function resolvePreviewSiteUrl() { + const env = process.env.VERCEL_ENV + const host = process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL + if (!host) return null + // VERCEL_ENV is "preview" for branch deploys (PRs, branch URLs) and + // "development" when running `vercel dev`. Both should rewrite to the + // ephemeral host. "production" deploys keep the canonical URL. + if (env !== 'preview' && env !== 'development') return null + return `https://${host}` +} + +// Source path prefixes that Docusaurus strips when constructing public URLs. +// Mirrors `pathTransformation.ignorePaths` we pass to `docusaurus-plugin-llms`. +const URL_STRIPPED_PREFIXES = ['src/pages/'] + +// Path prefix → all-pages bucket filename. Generated files live alongside the +// existing per-product `llms-.txt` files in the build root and are +// referenced from `static/llms.txt` so the AFDocs walker descends one level +// into them and discovers every sitemap URL (fixes `llms-txt-coverage`). +const ALL_PAGES_BUCKETS = [ + { + prefix: '/metamask-connect/', + filename: 'llms-all-metamask-connect.txt', + title: 'All MetaMask Connect pages', + }, + { + prefix: '/embedded-wallets/', + filename: 'llms-all-embedded-wallets.txt', + title: 'All Embedded Wallets pages', + }, + { + prefix: '/smart-accounts-kit/', + filename: 'llms-all-smart-accounts-kit.txt', + title: 'All Smart Accounts Kit pages', + }, + { prefix: '/services/', filename: 'llms-all-services.txt', title: 'All Services pages' }, + { prefix: '/snaps/', filename: 'llms-all-snaps.txt', title: 'All Snaps pages' }, + { + prefix: '/developer-tools/', + filename: 'llms-all-dashboard.txt', + title: 'All Developer dashboard pages', + }, + { prefix: '/tutorials/', filename: 'llms-all-tutorials.txt', title: 'All Tutorials pages' }, +] +const ALL_PAGES_MISC_FILENAME = 'llms-all-misc.txt' +const ALL_PAGES_MISC_TITLE = 'All other documentation pages' + +// docusaurus-plugin-llms is wrapped (rather than registered separately) because +// Docusaurus 3.x runs `postBuild` hooks concurrently via `Promise.all`. As two +// independent plugins, the injector below would race against the generator and +// find an empty outDir. Wrapping guarantees the generator's postBuild completes +// before we normalize/rewrite/inject. +const upstreamLlmsPlugin = require('docusaurus-plugin-llms').default + +/** + * Docusaurus plugin that: + * + * 1. Delegates per-section `llms-.txt` and per-page `.md` generation + * to `docusaurus-plugin-llms` (the upstream walks raw source MDX). + * + * 2. Normalizes the per-page `.md` files so their location mirrors the public + * URL of the corresponding HTML page (e.g. `embedded-wallets/README.md` -> + * `embedded-wallets.md`, `src/pages/tutorials/foo.md` -> `tutorials/foo.md`). + * + * 3. Replaces every per-page `.md` body with markdown derived from the + * rendered HTML `
    ` (node-html-markdown). This is the only way + * to get true HTML/`.md` parity for pages assembled from MDX `import` + * partials, which the upstream plugin cannot resolve. Fixes + * `markdown-content-parity`. + * + * 4. Prepends a `> For the complete documentation index, see [llms.txt](/llms.txt).` + * blockquote to every per-page `.md`. Fixes `llms-txt-directive-md`. + * + * 5. Rewrites every `build/llms*.txt` URL so it points at the normalized + * `.md` location, eliminating stale "links not in sitemap" warnings. + * + * 6. Prunes link-index `llms-*.txt` files of any link whose target URL is + * absent from the build's sitemap (defensive — only operates on + * non-`-full` link indexes to avoid corrupting embedded content). + * + * 7. Generates `llms-all-.txt` files from the build's sitemap so + * `llms-txt-coverage` reaches 100% deterministically. The static root + * `llms.txt` links to these files; the AFDocs walker descends one level + * and picks up every sitemap URL. + * + * 8. Injects `` into `` and + * a hidden `
    ` directive at the top of `` of every doc page, + * satisfying `llms-txt-directive-html` and the existing markdown-alt + * discovery hook for HTML clients. + * + * Together these steps satisfy every Agent Score check in the + * content-discoverability and observability categories. + */ +async function postProcessLlmsOutput(outDir, siteUrl) { + if (!siteUrl) { + throw new Error( + '[llms-html-injector] postProcessLlmsOutput requires a siteUrl. ' + + 'Pass the value produced by resolveSiteUrl(siteConfig) so the URL prefix ' + + '(including any non-root baseUrl such as /staging/) matches what ' + + 'docusaurus-plugin-llms emitted into the generated files.' + ) + } + + const renames = await normalizeMarkdownLayout(outDir) + console.log( + `[llms-html-injector] Normalized ${renames.size} .md file(s) into URL-aligned positions` + ) + + const regen = await regenerateMdFromHtml(outDir) + console.log( + `[llms-html-injector] Regenerated ${regen.regenerated} per-page .md from rendered HTML, ` + + `created ${regen.created} new .md for pages without an upstream-emitted sibling ` + + `(skipped ${regen.skipped}: unreadable HTML or empty
    )` + ) + + const directiveCount = await prependMdDirective(outDir) + console.log(`[llms-html-injector] Prepended llms.txt directive to ${directiveCount} .md file(s)`) + + const rewriteCount = await rewriteLlmsIndexes(outDir, renames, siteUrl) + console.log(`[llms-html-injector] Updated URLs in ${rewriteCount} llms*.txt file(s)`) + + // Normalize the sitemap *before* reading its URLs: normalizeSitemap drops + // ``s shadowed by a vercel.json redirect (they 3XX on the deployed + // site) and strips trailing slashes from dotted-segment routes. Reading the + // sitemap afterward ensures pruneStaleLlmsLinks and generateAllPagesIndex + // operate on the same 200-only URL set the deployed sitemap exposes, so the + // generated llms-all-*.txt indexes never point agents at redirecting pages. + const sitemap = await normalizeSitemap(outDir, siteUrl) + if (sitemap.skipped) { + console.warn( + '[llms-html-injector] No sitemap.xml found in outDir; skipping sitemap normalization.' + ) + } else { + console.log( + `[llms-html-injector] Sitemap: stripped trailing slash from ${sitemap.rewritten} dotted-segment (s) ` + + `and dropped ${sitemap.dropped} URL(s) shadowed by a vercel.json redirect` + ) + } + + const sitemapUrls = await readSitemapUrls(outDir) + if (sitemapUrls) { + const stale = await pruneStaleLlmsLinks(outDir, sitemapUrls, siteUrl) + console.log( + `[llms-html-injector] Pruned ${stale.removed} stale link(s) from ${stale.fileCount} link-index file(s)` + ) + + const all = await generateAllPagesIndex(outDir, siteUrl, sitemapUrls) + console.log( + `[llms-html-injector] Generated ${all.fileCount} llms-all-*.txt index file(s) covering ${all.urlCount} sitemap URL(s)` + ) + } else { + console.warn( + '[llms-html-injector] No sitemap.xml found in outDir; skipping pruneStaleLlmsLinks and generateAllPagesIndex.' + ) + } + + const { injected, missing, skippedRoot, bodyInjected, katexMarked, canonicalFixed } = + await injectAlternateLinks(outDir, siteUrl) + console.log( + `[llms-html-injector] Injected markdown alternate link into ${injected} HTML pages ` + + `(skipped ${missing} pages with no matching .md sibling, ` + + `${skippedRoot} root index.html page(s) by design)` + ) + console.log( + `[llms-html-injector] Injected sr-only llms.txt body directive into ${bodyInjected} HTML pages` + ) + console.log( + `[llms-html-injector] Marked ${katexMarked} KaTeX MathML span(s) as data-markdown-ignore` + ) + console.log( + `[llms-html-injector] Stripped trailing slash from canonical/og:url on ${canonicalFixed} dotted-route page(s)` + ) + + // On Vercel preview/development deployments, rewrite every absolute URL in + // generated llms*.txt files and per-page .md files from the canonical + // production host to the preview's auto-assigned host. The HTML alternate + // link injected above already uses a path-only href, so HTML files don't + // need this pass — only text artifacts that the llmstxt.org spec requires + // to carry absolute URLs. + const previewSiteUrl = resolvePreviewSiteUrl() + if (previewSiteUrl && previewSiteUrl !== siteUrl) { + const rewriteStats = await rewriteHostInBuildArtifacts(outDir, siteUrl, previewSiteUrl) + const hostSource = process.env.VERCEL_BRANCH_URL ? 'VERCEL_BRANCH_URL' : 'VERCEL_URL' + console.log( + `[llms-html-injector] Vercel preview detected (${hostSource}=${process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL}); ` + + `rewrote ${siteUrl} -> ${previewSiteUrl} in ${rewriteStats.txtFiles} llms*.txt file(s) ` + + `and ${rewriteStats.mdFiles} per-page .md file(s)` + ) + } +} + +module.exports = function llmsHtmlInjectorPlugin(context, options = {}) { + const inner = upstreamLlmsPlugin(context, options) + const siteUrl = resolveSiteUrl(context && context.siteConfig) + + return { + ...inner, + name: 'llms-html-injector', + async postBuild(props) { + if (typeof inner.postBuild === 'function') { + await inner.postBuild.call(inner, props) + } + await postProcessLlmsOutput(props.outDir, siteUrl) + }, + } +} + +// Exported for scripts/verify-llms-output.js, which invokes the generator +// directly and then runs only the post-processing stage. +module.exports.postProcessLlmsOutput = postProcessLlmsOutput +module.exports.resolveSiteUrl = resolveSiteUrl + +/** + * Walk every `.md` file under `outDir`, skipping the llms*.txt index files, + * and move it to its URL-aligned target path if different. Returns a map of + * old-relative-path -> new-relative-path (using forward slashes, no leading `/`). + */ +async function normalizeMarkdownLayout(outDir) { + const renames = new Map() + const allMd = await collectMarkdownFiles(outDir) + + const dirsToPrune = new Set() + + for (const absFrom of allMd) { + const relFrom = toPosix(path.relative(outDir, absFrom)) + const relTo = urlAlignedRelative(relFrom) + if (!relTo || relTo === relFrom) continue + + const absTo = path.join(outDir, relTo) + + let targetExists = true + try { + await fs.access(absTo) + } catch { + targetExists = false + } + + if (targetExists) { + console.warn( + `[llms-html-injector] Target ${relTo} already exists; dropping duplicate source ${relFrom}` + ) + await fs.unlink(absFrom) + renames.set(relFrom, relTo) + dirsToPrune.add(path.dirname(absFrom)) + continue + } + + await fs.mkdir(path.dirname(absTo), { recursive: true }) + await fs.rename(absFrom, absTo) + renames.set(relFrom, relTo) + dirsToPrune.add(path.dirname(absFrom)) + } + + await pruneEmptyDirs(outDir, dirsToPrune) + return renames +} + +async function pruneEmptyDirs(outDir, dirs) { + const root = path.resolve(outDir) + for (const start of dirs) { + let current = path.resolve(start) + while (current.startsWith(root) && current !== root) { + let entries + try { + entries = await fs.readdir(current) + } catch { + break + } + if (entries.length > 0) break + try { + await fs.rmdir(current) + } catch { + break + } + current = path.dirname(current) + } + } +} + +async function collectMarkdownFiles(outDir, acc = []) { + const entries = await fs.readdir(outDir, { withFileTypes: true }) + for (const entry of entries) { + const full = path.join(outDir, entry.name) + if (entry.isDirectory()) { + await collectMarkdownFiles(full, acc) + } else if ( + entry.name.endsWith('.md') && + !/^llms.*\.txt$/.test(entry.name) && + !/^llms.*\.md$/.test(entry.name) + ) { + acc.push(full) + } + } + return acc +} + +function urlAlignedRelative(relFrom) { + let p = relFrom + for (const prefix of URL_STRIPPED_PREFIXES) { + if (p.startsWith(prefix)) { + p = p.slice(prefix.length) + break + } + } + if (p === 'README.md' || p === 'index.md') return null + p = p.replace(/\/(README|index)\.md$/, '.md') + return p +} + +async function rewriteLlmsIndexes(outDir, renames, siteUrl) { + if (renames.size === 0) return 0 + const entries = await fs.readdir(outDir, { withFileTypes: true }) + let count = 0 + for (const entry of entries) { + if (!entry.isFile()) continue + if (!/^llms.*\.txt$/.test(entry.name)) continue + const abs = path.join(outDir, entry.name) + let text = await fs.readFile(abs, 'utf8') + let changed = false + for (const [from, to] of renames) { + const fromUrl = `${siteUrl}/${from}` + const toUrl = `${siteUrl}/${to}` + if (text.includes(fromUrl)) { + text = text.split(fromUrl).join(toUrl) + changed = true + } + } + if (changed) { + await fs.writeFile(abs, text, 'utf8') + count++ + } + } + return count +} + +/** + * Walk `build/**\/index.html`, and for each page that has a sibling `.md` at + * the URL-aligned location, inject a `` + * into the ``. Independently, inject a hidden `
    ` directive into the + * `` of every page so HTML-only agents can discover `/llms.txt`. + * + * Also marks every `` with `data-markdown-ignore`. + * KaTeX renders each math expression three times in the DOM (`mrow` text + + * `` LaTeX source + the visual `.katex-html`), which AFDocs' + * `markdown-content-parity` HTML extractor concatenates into segments like + * `retrievePubKey()retrievePubKey()retrievePubKey()` that can never match + * the single `$retrievePubKey()$` in the regenerated `.md`. Marking the + * MathML subtree as `data-markdown-ignore` makes AFDocs strip it before + * extracting text, leaving only the visual rendering — invisible to the + * markdown side via `htmlToMarkdown`'s own `.katex` replacement, but + * structurally aligned with what the parity check measures. + */ +async function injectAlternateLinks(outDir, siteUrl) { + let injected = 0 + let missing = 0 + let skippedRoot = 0 + let bodyInjected = 0 + let katexMarked = 0 + let canonicalFixed = 0 + await visit(outDir) + return { injected, missing, skippedRoot, bodyInjected, katexMarked, canonicalFixed } + + async function visit(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = path.join(dir, entry.name) + if (entry.isDirectory()) { + await visit(full) + } else if (entry.name === 'index.html') { + const result = await injectOne(full) + if (result.altLink === true) injected++ + else if (result.altLink === false) missing++ + else if (result.altLink === 'root') skippedRoot++ + if (result.bodyDirective) bodyInjected++ + if (result.canonicalFixed) canonicalFixed++ + katexMarked += result.katexMarked + } + } + } + + async function injectOne(htmlAbs) { + const relDir = toPosix(path.relative(outDir, path.dirname(htmlAbs))) + let html + try { + html = await fs.readFile(htmlAbs, 'utf8') + } catch { + return { altLink: false, bodyDirective: false, katexMarked: 0 } + } + + let changed = false + let altLinkResult + + if (!relDir || relDir === '.') { + altLinkResult = 'root' + } else { + const mdRel = `${relDir}.md` + const mdAbs = path.join(outDir, mdRel) + let mdExists = true + try { + await fs.access(mdAbs) + } catch { + mdExists = false + } + if (!mdExists) { + altLinkResult = false + } else if (html.includes(MD_ALT_MARKER) || !html.includes('')) { + altLinkResult = null + } else { + // Use a path-only href (`/foo/bar.md`) rather than an absolute URL. + // Browsers and AFDocs both resolve relative hrefs against the page's + // origin, so the same HTML works correctly on production + // (docs.metamask.io), Vercel preview deployments + // (`*.vercel.app`), and `localhost` without any host-rewrite step + // touching HTML files. The `siteUrl` parameter is retained for + // signature compatibility but no longer baked into the href. + void siteUrl + const href = `/${mdRel}` + const tag = `` + html = html.replace('', `${tag}`) + altLinkResult = true + changed = true + } + } + + let bodyDirectiveAdded = false + if (!html.includes(BODY_DIRECTIVE_MARKER)) { + const directive = buildBodyDirective(siteUrl) + // Insert just after the opening tag so the directive is at the + // very top of the document body, well before navigation/header markup. + // Use a regex on the first tag rather than a naive string + // replace to handle attributes/whitespace variations. + const bodyTagMatch = html.match(/]*>/i) + if (bodyTagMatch) { + const insertAt = bodyTagMatch.index + bodyTagMatch[0].length + html = html.slice(0, insertAt) + directive + html.slice(insertAt) + bodyDirectiveAdded = true + changed = true + } + } + + // Mark every KaTeX MathML wrapper with data-markdown-ignore. The marker + // is idempotent: we skip any opening tag that already carries the + // attribute (which a previous run may have added) so re-invoking the + // postBuild stage against an already-processed outDir does not append + // duplicate attributes. + let katexMarkedHere = 0 + html = html.replace(KATEX_MATHML_OPEN_TAG_RE, (match, attrs) => { + if (/\bdata-markdown-ignore\b/.test(attrs)) return match + katexMarkedHere++ + return `` + }) + if (katexMarkedHere > 0) changed = true + + // Normalize trailing slashes in canonical/og:url metadata for "dotted" + // routes. Docusaurus (`trailingSlash: true`) always emits a trailing-slash + // canonical, but Vercel (`trailingSlash: true`) treats any final path + // segment containing a dot (e.g. `use-web3.js`, version `1.0.0`, + // `android-v7.1.1-to-v7.1.2`) as a file and 308-strips the slash. That + // makes the canonical point to a redirect. Stripping the slash here aligns + // the canonical/og:url with the URL Vercel actually serves with a 200. + let canonicalFixedHere = false + if (relDir && relDir !== '.' && lastSegmentHasDot(relDir)) { + const beforeCanonical = html + html = stripDottedTrailingSlashInMetadata(html) + if (html !== beforeCanonical) { + canonicalFixedHere = true + changed = true + } + } + + if (changed) { + await fs.writeFile(htmlAbs, html, 'utf8') + } + + return { + altLink: altLinkResult, + bodyDirective: bodyDirectiveAdded, + katexMarked: katexMarkedHere, + canonicalFixed: canonicalFixedHere, + } + } +} + +/** + * Return true when the final non-empty segment of a route/path contains a dot. + * These are the routes Vercel treats as files and serves without a trailing + * slash (308-stripping any trailing-slash variant). + */ +function lastSegmentHasDot(routePath) { + const segments = routePath.split('/').filter(Boolean) + const last = segments[segments.length - 1] || '' + return last.includes('.') +} + +/** + * Strip the trailing slash from the `` href and the + * `og:url` content in a page's HTML. Only called for dotted routes, where the + * emitted absolute URL is guaranteed to be this page's own trailing-slash URL. + */ +function stripDottedTrailingSlashInMetadata(html) { + // + html = html.replace(/(]*\brel="canonical"[^>]*\bhref=")([^"]+?)\/("[^>]*>)/i, '$1$2$3') + // (property first) + html = html.replace( + /(]*\bproperty="og:url"[^>]*\bcontent=")([^"]+?)\/("[^>]*>)/i, + '$1$2$3' + ) + // (content first) + html = html.replace( + /(]*\bcontent=")([^"]+?)\/("[^>]*\bproperty="og:url"[^>]*>)/i, + '$1$2$3' + ) + return html +} + +/** + * Generate (or regenerate) every per-page `.md` from its rendered HTML + * `
    `. This achieves true HTML/MD parity AND fills coverage gaps: + * + * - The upstream `docusaurus-plugin-llms` reads raw source MDX and + * cannot resolve `import` partials, leaving pages built from imported + * components nearly empty in the upstream `.md` (e.g. + * `services/reference/.../eth_sendrawtransaction`). Regenerating from + * the rendered HTML resolves every partial and component. + * + * - Some pages exist in the build with NO upstream-emitted `.md` at all + * (e.g. Docusaurus-versioned docs: gator's `current` version publishes + * under `/smart-accounts-kit/development/...` while the upstream only + * emits a single `.md` per source file at the version-less path). The + * ghost URLs fail AFDocs' `markdown-url-support`, `content-negotiation`, + * and `llms-txt-directive-md` checks. Walking `build/**\/index.html` + * and creating a `.md` sibling for any page that lacks one closes + * that gap deterministically. + * + * Algorithm: + * 1. Walk every `build/**\/index.html` (skipping the root index.html, + * which has no meaningful `.md` companion). + * 2. Compute the URL-aligned `.md` path (`.md`). + * 3. Read the HTML, parse with cheerio, select `
    `, strip + * `data-markdown-ignore` plus nav/script/style/aside. + * 4. Convert the remaining HTML to markdown via node-html-markdown + * (GFM-aware: tables, strikethrough, line breaks). + * 5. Write the `.md`, creating the directory if needed. + * + * Frontmatter is intentionally not preserved: the upstream-generated `.md` + * frontmatter mirrors the source MDX frontmatter, but the rendered HTML + * already inlines the resolved title/description/etc. into the article body + * via Docusaurus components, so the new `.md` is self-contained. + */ +async function regenerateMdFromHtml(outDir) { + const mdConverter = makeMarkdownConverter() + const cheerio = require('cheerio') + + let regenerated = 0 + let created = 0 + let skipped = 0 + + await visit(outDir) + return { regenerated, created, skipped } + + // Sequential is fine: ~2.5k pages * ~10ms parse + convert is well under a + // minute. Parallelism would add complexity without measurable benefit at + // this scale and risk hitting the open-file-descriptor limit. + async function visit(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = path.join(dir, entry.name) + if (entry.isDirectory()) { + await visit(full) + } else if (entry.name === 'index.html') { + await processOne(full, dir) + } + } + } + + async function processOne(htmlAbs, dir) { + const relDir = toPosix(path.relative(outDir, dir)) + // Skip the site root: `/index.html` would map to a top-level + // `.md` that has no canonical URL counterpart in the markdown space. + if (!relDir || relDir === '.') return + + let html + try { + html = await fs.readFile(htmlAbs, 'utf8') + } catch { + skipped++ + return + } + + const newBody = htmlToMarkdown(html, cheerio, mdConverter) + if (!newBody) { + skipped++ + return + } + + const mdAbs = path.join(outDir, `${relDir}.md`) + let existed = true + try { + await fs.access(mdAbs) + } catch { + existed = false + } + + if (!existed) { + await fs.mkdir(path.dirname(mdAbs), { recursive: true }) + } + await fs.writeFile(mdAbs, newBody, 'utf8') + if (existed) regenerated++ + else created++ + } +} + +function htmlToMarkdown(html, cheerio, mdConverter) { + const $ = cheerio.load(html) + let $article = $('article').first() + if ($article.length === 0) { + $article = $('main').first() + } + if ($article.length === 0) return null + + // KaTeX renders each math expression as a `.katex` container holding BOTH a + // `.katex-mathml` (MathML for screen readers, with a `` element whose + // child `` and child `` both produce the same text) AND a + // `.katex-html` (visual rendering, marked `aria-hidden="true"`). If we + // simply pass the container through to the markdown converter, the + // resulting markdown contains every math expression two or three times + // (mrow text + annotation text + visual text), which AFDocs' content-parity + // check counts as "missing from markdown" relative to the rendered HTML's + // deduplicated visual text. + // + // Replace each `.katex` with a `` element holding the **visual** + // text extracted from `.katex-html`. NHM converts `` to a single + // backtick span (`` `n` ``) in the .md, and AFDocs' markdown stripper + // protects backtick spans then restores their bare content as plain text. + // The HTML side (post-`injectAlternateLinks`) marks `.katex-mathml` with + // `data-markdown-ignore` so AFDocs only sees the `.katex-html` rendering + // — the exact same string we embed here. Both sides thus normalize to + // identical text, so prose sentences with inline math (`\sigma` → σ, + // `a_1` → a1, etc.) substring-match cleanly. Using the LaTeX annotation + // source instead would re-introduce the mismatch that broke parity on + // `embedded-wallets/infrastructure/sss-architecture` (52% missing). + $article.find('.katex').each((_, el) => { + const $el = $(el) + const visual = $el.find('.katex-html').first().text().trim() + const annotation = $el.find('annotation[encoding="application/x-tex"]').first().text().trim() + const inner = visual || annotation + if (!inner) { + $el.remove() + return + } + const $code = $('') + $code.text(inner) + $el.replaceWith($code) + }) + + // Strip elements that are intentionally human-only (chrome wrappers tagged + // with data-markdown-ignore in src/theme/DocItem/Layout/index.jsx) plus + // structural noise the converter would otherwise leave as empty markdown. + // `.katex` elements are gone by this point so the aria-hidden selector + // only catches non-math hidden content (e.g. anchor link icons). + $article.find('[data-markdown-ignore]').remove() + $article.find('nav, script, style, aside, [aria-hidden="true"]').remove() + // The body directive injected by injectAlternateLinks() lives outside + //
    , so it is not present here. No removal needed. + + // Flatten Docusaurus chrome inside
    elements. Docusaurus wraps + // collapsible content like this: + // + //
    + // Title + //
    + //
    + //
    + //

    real content

    + //
    + //
    + //
    + //
    + // + // The custom NHM translator below preserves
    / as raw + // HTML wrappers and recurses into children. Without this flattening, the + // emitted .md would carry every wrapper
    , which AFDocs' + // markdown-content-parity normalizer collapses to text (`` becomes + // `x`), smushing classnames like `collapsibleContent_i85q` into adjacent + // prose and breaking substring matches against the clean HTML segments. + // + // Unwrap iteratively so arbitrary depths of nested wrapper
    s flatten. + // We only unwrap direct children of
    that are
    s with either + // no class or the Docusaurus collapsible-content class — never
    s + // that the author intentionally placed (which always carry meaningful + // class names). + $article.find('details').each((_, el) => { + const $det = $(el) + Object.keys($det.attr() || {}).forEach(attr => $det.removeAttr(attr)) + $det.children('summary').each((__, sEl) => { + const $sum = $(sEl) + Object.keys($sum.attr() || {}).forEach(attr => $sum.removeAttr(attr)) + }) + let didUnwrap = true + while (didUnwrap) { + didUnwrap = false + $det.children('div').each((__, dEl) => { + const $d = $(dEl) + const cls = $d.attr('class') || '' + if (!cls.trim() || /\bcollapsibleContent[_-]/.test(cls)) { + $d.replaceWith($d.contents()) + didUnwrap = true + } + }) + } + }) + + const contentHtml = ($article.html() || '').trim() + if (!contentHtml) return null + + const md = mdConverter.translate(contentHtml).trim() + if (!md) return null + return md + '\n' +} + +function makeMarkdownConverter() { + const { NodeHtmlMarkdown } = require('node-html-markdown') + // node-html-markdown is GFM-aware by default (tables, strikethrough, line + // breaks), and ATX-only for headings, so no plugin equivalent of + // turndown-plugin-gfm is required. The remaining style options mirror the + // previous turndown configuration: fenced code blocks with ```, `-` + // bullets (NHM defaults to `*`), `_` for emphasis, `**` for strong, + // inline links over reference style. + const options = { + codeFence: '```', + codeBlockStyle: 'fenced', + bulletMarker: '-', + emDelimiter: '_', + strongDelimiter: '**', + useInlineLinks: true, + // Override both default escapes to a narrower set. Character sequences + // that have no ambiguous meaning in our doc body — square brackets in + // prose like "(string) [optional]", parentheses, hash symbols + // mid-sentence, asterisks adjacent to letters etc. — shouldn't get + // backslash-escaped. NHM's defaults would insert `\[`, `\]`, `\#`, + // `\>`, `\*`, `\_`, etc., none of which the AFDocs + // `markdown-content-parity` normalizer strips. The result is segments + // like `callGasLimit: (string) [optional] - description` failing to + // match `callGasLimit: (string) \[optional\] - description` even + // though the prose is identical. Underscores inside identifiers are + // also escaped by default (`my_var` -> `my\_var`), which breaks the + // same substring check. + // + // `globalEscape` is narrowed to backticks ONLY. A literal backtick in + // a text node (i.e. outside any ``/`
    ` — those elements set
    +    // `noEscape: true` in NHM's default translators, so this regex is not
    +    // applied to their contents) is the one character we cannot leave raw:
    +    // unescaped, it would open an unintended inline code span in the
    +    // emitted markdown, splicing surrounding prose into a `` block
    +    // when the markdown is rendered. The other characters NHM escapes by
    +    // default (`\\`, `*`, `_`, `~`, `[`, `]`) are intentionally left raw
    +    // for the parity-check reasons above. `lineStartEscape` is reduced
    +    // to the sequences that would actually produce broken markdown if
    +    // left raw at the start of a line: a leading `#`/`>` (could create a
    +    // heading or blockquote) or a leading `-`/`*`/`+` followed by
    +    // whitespace (could create a list item). A leading `\d+.`
    +    // escape was previously included, but NHM applies these escapes to
    +    // the text content of headings BEFORE prefixing `### ` etc.: a
    +    // heading like `

    1. Set up the project

    ` becomes + // `### 1\. Set up the project`, and AFDocs' + // markdown-content-parity stripper does not consume the literal `\`, + // so the segment fails to match the HTML side `1. Set up the + // project`. Body lists are emitted by NHM's `
      `/`
    1. ` + // translators directly (which insert their own `1. ` markers), so + // dropping this escape only affects free-standing `1. foo` text at + // line start — which our docs do not produce outside list contexts. + // NHM's TS signature documents the replacement as a string, but it + // passes the tuple straight through to `String.prototype.replace()`, + // which accepts a function at runtime; the function form is the only + // way to express the per-branch backslash positioning below. + globalEscape: [/`/g, '\\$&'], + lineStartEscape: [ + /^([#>])|^([-*+])(?=\s)/gm, + (match, hashOrGt, bullet) => { + if (hashOrGt !== undefined) return '\\' + hashOrGt + if (bullet !== undefined) return '\\' + bullet + return match + }, + ], + } + const customTranslators = { + // Keep `
      ` and `` as raw HTML wrappers (GFM renders + // them natively in `.md`), but let NHM convert their children to + // markdown so the body of a collapsible block is plain markdown — not + // raw HTML chrome. + // + // The blank line between `` and the first content element is + // load-bearing: GFM-flavoured markdown parsers only treat inline-HTML + // children as markdown when there's a blank line separator. The + // `postfix: '
    \n\n'` plus NHM's own `\n\n` around block + // children produce that separator. + // + // The previous translator returned `content: node.outerHTML`, which + // embedded Docusaurus class wrappers (`details_lb9f`, + // `collapsibleContent_i85q`, etc.) verbatim into the .md. AFDocs' + // markdown-content-parity normalizer collapses `` to its content, + // jamming those class names into adjacent prose and breaking + // substring matches against the rendered HTML's clean text segments. + // The cheerio pre-pass in `htmlToMarkdown` flattens those wrappers + // before NHM ever sees the tree. + details: { + prefix: '
    \n', + postfix: '\n
    ', + surroundingNewlines: 2, + noEscape: true, + }, + summary: { + prefix: '', + postfix: '\n\n', + noEscape: true, + }, + } + return new NodeHtmlMarkdown(options, customTranslators) +} + +/** + * Prepend a single-line blockquote pointing to `/llms.txt` to every per-page + * `.md`. Idempotent: skips files that already contain the directive (so + * scripts/verify-llms-output.js can be re-run safely against an existing + * outDir). + */ +async function prependMdDirective(outDir) { + const mdFiles = await collectMarkdownFiles(outDir) + let updated = 0 + for (const mdAbs of mdFiles) { + const text = await fs.readFile(mdAbs, 'utf8') + if (text.includes(MD_DIRECTIVE_LINE)) continue + + // If a file still has YAML frontmatter (i.e. `regenerateMdFromHtml` + // skipped it because no HTML sibling was found), insert the directive + // after the closing `---` so frontmatter parsers still see the document + // as well-formed. + let next + const fmMatch = text.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n/) + if (fmMatch) { + const idx = fmMatch[0].length + next = text.slice(0, idx) + '\n' + MD_DIRECTIVE_LINE + '\n\n' + text.slice(idx) + } else { + next = MD_DIRECTIVE_LINE + '\n\n' + text + } + await fs.writeFile(mdAbs, next, 'utf8') + updated++ + } + return updated +} + +/** + * Convert a `vercel.json` redirect `source` into an anchored RegExp matching a + * URL pathname (trailing slash stripped). Mirrors Vercel's path-to-regexp + * subset we use: `:name*` / `:name+` match across segments, `:name` matches a + * single segment. + */ +function redirectSourceToRegExp(source) { + let s = source.replace(/\/+$/, '') + // Escape regex metacharacters, but leave `:`/`*`/`+` for param handling. + s = s.replace(/[.^${}()|[\]\\?]/g, '\\$&') + // `:name*` or `:name+` -> match across one or more segments (`.*`). + s = s.replace(/:\w+[*+]/g, '.*') + // `:name` -> match a single path segment. + s = s.replace(/:\w+/g, '[^/]+') + return new RegExp(`^${s}$`) +} + +/** + * Load the list of redirect matchers from `vercel.json` (located in the repo + * root, one level above the build `outDir`). Returns an empty array if the file + * is missing or unparseable so sitemap normalization degrades gracefully. + */ +async function loadRedirectMatchers(outDir) { + const vercelPath = path.join(outDir, '..', 'vercel.json') + let raw + try { + raw = await fs.readFile(vercelPath, 'utf8') + } catch { + return [] + } + let parsed + try { + parsed = JSON.parse(raw) + } catch { + return [] + } + const redirects = Array.isArray(parsed.redirects) ? parsed.redirects : [] + const matchers = [] + for (const r of redirects) { + if (!r || typeof r.source !== 'string') continue + try { + matchers.push(redirectSourceToRegExp(r.source)) + } catch { + // Ignore sources we can't compile. + } + } + return matchers +} + +/** + * Normalize `build/sitemap.xml` so every listed URL returns 200 (not a 3XX): + * + * - Strip the trailing slash from ``s whose final path segment contains + * a dot (Vercel serves these without a trailing slash; see + * `stripDottedTrailingSlashInMetadata`). + * - Drop entire `` entries whose pathname is shadowed by a `vercel.json` + * redirect (e.g. `.../eth_newpendingtransactionfilter/`, `.../tron/web/`), + * since those 3XX-redirect on the deployed site and should not be indexed. + */ +async function normalizeSitemap(outDir, siteUrl) { + const xmlPath = path.join(outDir, 'sitemap.xml') + let xml + try { + xml = await fs.readFile(xmlPath, 'utf8') + } catch { + return { skipped: true, rewritten: 0, dropped: 0 } + } + + const firstIdx = xml.indexOf('') + const lastIdx = xml.lastIndexOf('') + if (firstIdx === -1 || lastIdx === -1) { + return { skipped: false, rewritten: 0, dropped: 0 } + } + const head = xml.slice(0, firstIdx) + const tail = xml.slice(lastIdx + ''.length) + const blocksRegion = xml.slice(firstIdx, lastIdx + ''.length) + const blocks = blocksRegion.match(/[\s\S]*?<\/url>/g) || [] + + const matchers = await loadRedirectMatchers(outDir) + let rewritten = 0 + let dropped = 0 + const kept = [] + + for (const block of blocks) { + const locMatch = block.match(/([^<]+)<\/loc>/) + if (!locMatch) { + kept.push(block) + continue + } + const loc = locMatch[1].trim() + let pathname + try { + pathname = loc.startsWith(siteUrl) ? loc.slice(siteUrl.length) : new URL(loc).pathname + } catch { + pathname = loc + } + if (!pathname.startsWith('/')) pathname = `/${pathname}` + const pathNoSlash = pathname.replace(/\/+$/, '') || '/' + + if (matchers.some(re => re.test(pathNoSlash))) { + dropped++ + continue + } + + if (lastSegmentHasDot(pathname)) { + const newLoc = loc.replace(/\/+$/, '') + if (newLoc !== loc) { + kept.push(block.replace(/[^<]+<\/loc>/, `${newLoc}`)) + rewritten++ + continue + } + } + kept.push(block) + } + + const newXml = head + kept.join('\n') + tail + if (newXml !== xml) { + await fs.writeFile(xmlPath, newXml, 'utf8') + } + return { skipped: false, rewritten, dropped } +} + +/** + * Read `` URLs from build/sitemap.xml. Returns null if the sitemap is + * absent (e.g. when the script is run against an outDir that wasn't produced + * by a full Docusaurus build). + */ +async function readSitemapUrls(outDir) { + const xmlPath = path.join(outDir, 'sitemap.xml') + let xml + try { + xml = await fs.readFile(xmlPath, 'utf8') + } catch { + return null + } + const matches = xml.match(/([^<]+)<\/loc>/g) || [] + return matches.map(m => m.replace(/<\/?loc>/g, '').trim()) +} + +/** + * Prune links from per-section LINK-INDEX `llms-*.txt` files (i.e. the + * `fullContent: false` ones — filenames not containing `-full`) whose target + * page is absent from the build's sitemap. + * + * The `-full.txt` files are intentionally left alone: they intersperse + * markdown links with embedded page content, so removing a single link line + * would orphan the content block beneath it and corrupt the file. The + * link-index files are pure link lists, so safe to filter line-by-line. + */ +async function pruneStaleLlmsLinks(outDir, sitemapUrls, siteUrl) { + // Normalize sitemap URLs so trailing-slash variants both match. + const sitemapSet = new Set() + for (const url of sitemapUrls) { + sitemapSet.add(url) + sitemapSet.add(url.endsWith('/') ? url.slice(0, -1) : url + '/') + } + + const entries = await fs.readdir(outDir, { withFileTypes: true }) + let removed = 0 + let fileCount = 0 + + for (const entry of entries) { + if (!entry.isFile()) continue + if (!/^llms-[^.]+\.txt$/.test(entry.name)) continue + if (entry.name.includes('-full')) continue + if (entry.name.startsWith('llms-all-')) continue + + const abs = path.join(outDir, entry.name) + const text = await fs.readFile(abs, 'utf8') + const lines = text.split('\n') + const filtered = [] + let changed = false + + for (const line of lines) { + const linkMatch = line.match(/\[[^\]]+\]\(([^)]+)\)/) + if (linkMatch) { + const url = linkMatch[1].trim() + if (url.startsWith(siteUrl + '/')) { + // Map a `/.md` link to its corresponding HTML route. + // Docusaurus is configured with `trailingSlash: true`, so the route + // ends with `/`. Try both forms to be safe. + const htmlUrl = url.endsWith('.md') ? url.slice(0, -'.md'.length) + '/' : url + const htmlNoSlash = htmlUrl.endsWith('/') ? htmlUrl.slice(0, -1) : htmlUrl + if (!sitemapSet.has(htmlUrl) && !sitemapSet.has(htmlNoSlash)) { + removed++ + changed = true + continue + } + } + } + filtered.push(line) + } + + if (changed) { + await fs.writeFile(abs, filtered.join('\n'), 'utf8') + fileCount++ + } + } + + return { removed, fileCount } +} + +/** + * Generate `llms-all-.txt` files from the build's sitemap. Each + * file lists every sitemap URL whose path starts with the matching prefix + * (and a `llms-all-misc.txt` for anything that doesn't). + * + * Each entry takes the form `- [](.md)`, pointing at the per-page + * markdown that exists in the build. The static root `llms.txt` references + * each of these files so the AFDocs walker (which descends one level into + * linked `.txt` files) discovers every sitemap URL, pushing + * `llms-txt-coverage` to 100%. + */ +async function generateAllPagesIndex(outDir, siteUrl, sitemapUrls) { + const buckets = new Map() + for (const b of ALL_PAGES_BUCKETS) { + buckets.set(b.filename, { ...b, links: [] }) + } + buckets.set(ALL_PAGES_MISC_FILENAME, { + filename: ALL_PAGES_MISC_FILENAME, + title: ALL_PAGES_MISC_TITLE, + prefix: '', + links: [], + }) + + let urlCount = 0 + const seen = new Set() + + for (const rawUrl of sitemapUrls) { + if (!rawUrl.startsWith(siteUrl)) continue + const pathPart = rawUrl.slice(siteUrl.length) || '/' + + // Skip the homepage (no .md sibling — root LLMS surface is static/llms.txt) + // and AFDocs-builtin non-doc patterns. + if (pathPart === '/' || pathPart === '') continue + if ( + /^\/(blog|pricing|about|career|careers|job|jobs|contact|legal|privacy|terms|login|signup|sign-up|sign-in|register|404|500)(\/|$)/.test( + pathPart + ) + ) { + continue + } + + if (seen.has(pathPart)) continue + seen.add(pathPart) + + // Map a directory-style URL (`/foo/bar/`) to its `.md` sibling + // (`/foo/bar.md`). `trailingSlash: true` is assumed. + const mdPath = pathPart.endsWith('/') ? pathPart.slice(0, -1) + '.md' : pathPart + '.md' + const mdUrl = `${siteUrl}${mdPath}` + const label = pathPart.replace(/^\/|\/$/g, '') || pathPart + + let bucket = null + for (const b of ALL_PAGES_BUCKETS) { + if (pathPart.startsWith(b.prefix)) { + bucket = buckets.get(b.filename) + break + } + } + if (!bucket) bucket = buckets.get(ALL_PAGES_MISC_FILENAME) + bucket.links.push(`- [${label}](${mdUrl})`) + urlCount++ + } + + let fileCount = 0 + for (const bucket of buckets.values()) { + if (bucket.links.length === 0) continue + const header = + `# ${bucket.title}\n\n` + + `> Auto-generated complete index of every page in this section. ` + + `Generated from build/sitemap.xml so coverage stays in sync with the deployed site.\n\n` + + `## Pages\n\n` + const body = bucket.links.join('\n') + '\n' + await fs.writeFile(path.join(outDir, bucket.filename), header + body, 'utf8') + fileCount++ + } + + return { fileCount, urlCount } +} + +/** + * Rewrite every literal occurrence of `fromHost` to `toHost` in: + * + * - `build/llms*.txt` (root): hand-curated `llms.txt`, the upstream-emitted + * per-section `llms-.txt` / `llms--full.txt`, and the + * `llms-all-.txt` we generate from the sitemap. + * - Every per-page `.md` under `outDir` (excluding `llms*.md` to mirror + * `collectMarkdownFiles()`). + * + * Used only on Vercel preview/development deployments to swap the canonical + * production host (`https://docs.metamask.io`) for the deploy's auto-assigned + * `https://*.vercel.app` host so AFDocs running against the preview URL sees + * same-origin links it can resolve, and so the `llms-txt-coverage` walker + * actually descends into the linked `.txt` files (it skips cross-origin + * links). HTML files are intentionally untouched: the alternate link is now + * path-only (`/foo.md`), and rewriting other absolute URLs in HTML would + * break canonical/OG/JSON-LD metadata that should keep the canonical host + * even on preview. + * + * Plain string replace is sufficient and safer than a regex: `fromHost` is a + * fully-qualified URL, so the chance of an accidental match inside prose is + * effectively zero. + */ +async function rewriteHostInBuildArtifacts(outDir, fromHost, toHost) { + if (fromHost === toHost) return { txtFiles: 0, mdFiles: 0 } + + let txtFiles = 0 + let mdFiles = 0 + + const rootEntries = await fs.readdir(outDir, { withFileTypes: true }) + for (const entry of rootEntries) { + if (!entry.isFile()) continue + if (!/^llms.*\.txt$/.test(entry.name)) continue + const abs = path.join(outDir, entry.name) + const text = await fs.readFile(abs, 'utf8') + if (!text.includes(fromHost)) continue + await fs.writeFile(abs, text.split(fromHost).join(toHost), 'utf8') + txtFiles++ + } + + const mdAbsPaths = await collectMarkdownFiles(outDir) + for (const mdAbs of mdAbsPaths) { + const text = await fs.readFile(mdAbs, 'utf8') + if (!text.includes(fromHost)) continue + await fs.writeFile(mdAbs, text.split(fromHost).join(toHost), 'utf8') + mdFiles++ + } + + return { txtFiles, mdFiles } +} + +function toPosix(p) { + return p.split(path.sep).join('/') +} diff --git a/src/plugins/llms-html-injector/options.js b/src/plugins/llms-html-injector/options.js new file mode 100644 index 00000000000..18b34ed4606 --- /dev/null +++ b/src/plugins/llms-html-injector/options.js @@ -0,0 +1,264 @@ +/** + * Single source of truth for the options passed to `docusaurus-plugin-llms` + * (via the `llms-html-injector` wrapper). + * + * Two consumers must agree exactly on this configuration: + * + * - `docusaurus.config.js` registers the plugin at build time. + * - `scripts/verify-llms-output.js` invokes the generator directly to sanity- + * check the same output locally without running a full Docusaurus build. + * + * Previously these two files each maintained their own copy of the options + * object (kept in sync only by comment), so adding, removing, or renaming an + * entry in one file silently desynced the verify script — defeating its + * purpose as a sanity check. Centralizing here makes drift impossible. + * + * This file is plain CommonJS with no Docusaurus-specific imports so it can + * be `require()`d by a standalone Node script. Do not import from + * `@docusaurus/*` or anything that pulls in ESM-only deps. + */ + +// Source-tree globs that should never be walked by the generator. Comments +// inline below explain non-obvious exclusions. +const ignoreFiles = [ + 'node_modules/**', + 'build/**', + '.docusaurus/**', + '.llms-verify/**', + '.cursor/**', + '.github/**', + '.husky/**', + '.vscode/**', + '.integrationBuilderCache/**', + 'scripts/**', + 'static/**', + 'src/components/**', + 'src/theme/**', + 'src/lib/**', + 'src/config/**', + 'src/hooks/**', + 'src/utils/**', + 'src/plugins/**', + 'src/specs/**', + 'src/client/**', + 'src/scss/**', + // Quickstart "builder" markdown is content fragments embedded by the + // builder UI, not standalone routes; include only the entry pages. + 'src/pages/quickstart/builder/**', + 'src/pages/quickstart/commonSteps/**', + 'i18n/**', + '*.config.js', + '*.json', + '*.lock', + 'README.md', + 'CONTRIBUTING.md', + 'AGENTS.md', + 'LICENSE*', + 'gator_versioned_docs/**', +] + +// Per-section indexes (`fullContent: false`) stay under the AFDocs 50,000-char +// `llms-txt-size` threshold for individual indexes. The `-full.txt` variants +// contain the bulk page content for each product. +// +// The Embedded Wallets section is intentionally split into four `-full.txt` +// files. A single `llms-embedded-wallets-full.txt` was previously ~3.9 MB, +// exceeding most agent context windows; the sub-domain split keeps each file +// under ~1.5 MB while preserving complete coverage. +const customLLMFiles = [ + { + filename: 'llms-embedded-wallets.txt', + includePatterns: ['embedded-wallets/**/*.{md,mdx}'], + fullContent: false, + title: 'MetaMask Embedded Wallets documentation', + description: 'Documentation links for MetaMask Embedded Wallets', + }, + { + filename: 'llms-embedded-wallets-sdk-full.txt', + includePatterns: ['embedded-wallets/sdk/**/*.{md,mdx}'], + fullContent: true, + title: 'MetaMask Embedded Wallets SDKs', + description: + 'Complete documentation for Embedded Wallets SDKs (React, Vue, JS, Node, Android, iOS, React Native, Flutter, Unity, Unreal)', + }, + { + filename: 'llms-embedded-wallets-evm-full.txt', + includePatterns: ['embedded-wallets/connect-blockchain/evm/**/*.{md,mdx}'], + fullContent: true, + title: 'MetaMask Embedded Wallets EVM chain connections', + description: 'Complete documentation for connecting Embedded Wallets to EVM-compatible chains', + }, + { + filename: 'llms-embedded-wallets-non-evm-full.txt', + includePatterns: [ + 'embedded-wallets/connect-blockchain/solana/**/*.{md,mdx}', + 'embedded-wallets/connect-blockchain/other/**/*.{md,mdx}', + 'embedded-wallets/connect-blockchain/*.{md,mdx}', + ], + fullContent: true, + title: 'MetaMask Embedded Wallets non-EVM chain connections', + description: + 'Complete documentation for connecting Embedded Wallets to Solana and other non-EVM chains', + }, + { + filename: 'llms-embedded-wallets-platform-full.txt', + includePatterns: [ + 'embedded-wallets/authentication/**/*.{md,mdx}', + 'embedded-wallets/features/**/*.{md,mdx}', + 'embedded-wallets/dashboard/**/*.{md,mdx}', + 'embedded-wallets/infrastructure/**/*.{md,mdx}', + 'embedded-wallets/troubleshooting/**/*.{md,mdx}', + 'embedded-wallets/migration-guides/**/*.{md,mdx}', + 'embedded-wallets/*.{md,mdx}', + ], + fullContent: true, + title: 'MetaMask Embedded Wallets platform features', + description: + 'Complete documentation for Embedded Wallets authentication, features, dashboard, infrastructure, and troubleshooting', + }, + { + filename: 'llms-metamask-connect.txt', + includePatterns: ['metamask-connect/**/*.{md,mdx}'], + fullContent: false, + title: 'MetaMask Connect documentation', + description: 'Documentation links for MetaMask Connect', + }, + { + filename: 'llms-metamask-connect-full.txt', + includePatterns: ['metamask-connect/**/*.{md,mdx}'], + fullContent: true, + title: 'MetaMask Connect documentation', + description: 'Complete documentation for MetaMask Connect', + }, + { + filename: 'llms-smart-accounts-kit.txt', + includePatterns: ['smart-accounts-kit/**/*.{md,mdx}'], + fullContent: false, + title: 'MetaMask Smart Accounts Kit documentation', + description: 'Documentation links for MetaMask Smart Accounts Kit', + }, + { + filename: 'llms-smart-accounts-kit-full.txt', + includePatterns: ['smart-accounts-kit/**/*.{md,mdx}'], + fullContent: true, + title: 'MetaMask Smart Accounts Kit documentation', + description: 'Complete documentation for MetaMask Smart Accounts Kit', + }, + { + filename: 'llms-snaps.txt', + includePatterns: ['snaps/**/*.{md,mdx}'], + fullContent: false, + title: 'Snaps documentation', + description: 'Documentation links for Snaps', + }, + { + filename: 'llms-snaps-full.txt', + includePatterns: ['snaps/**/*.{md,mdx}'], + fullContent: true, + title: 'Snaps documentation', + description: 'Complete documentation for Snaps', + }, + { + filename: 'llms-tutorials.txt', + includePatterns: ['src/pages/tutorials/**/*.{md,mdx}'], + fullContent: false, + title: 'Tutorials', + description: 'Documentation links for MetaMask tutorials', + }, + { + filename: 'llms-tutorials-full.txt', + includePatterns: ['src/pages/tutorials/**/*.{md,mdx}'], + fullContent: true, + title: 'Tutorials', + description: 'Complete documentation for MetaMask tutorials', + }, + { + filename: 'llms-dashboard.txt', + includePatterns: ['developer-tools/dashboard/**/*.{md,mdx}'], + fullContent: false, + title: 'Developer dashboard documentation', + description: 'Documentation links for MetaMask Developer dashboard', + }, + { + filename: 'llms-dashboard-full.txt', + includePatterns: ['developer-tools/dashboard/**/*.{md,mdx}'], + fullContent: true, + title: 'Developer dashboard documentation', + description: 'Complete documentation for MetaMask Developer dashboard', + }, + { + filename: 'llms-services.txt', + // `*.{md,mdx}` (not `*.md`) is required: every `services/reference/**` + // JSON-RPC method page is an `.mdx` file (e.g. `zks_l1chainid.mdx`, + // `starknet_syncing.mdx`, `eth_simulatev1.mdx`). Matching only `.md` + // here silently excluded ~1k reference pages from the generated index. + includePatterns: ['services/**/*.{md,mdx}'], + fullContent: false, + title: 'Services documentation', + description: 'Documentation links for MetaMask services', + }, + { + filename: 'llms-services-full.txt', + includePatterns: ['services/**/*.{md,mdx}'], + fullContent: true, + title: 'Services documentation', + description: 'Complete documentation for MetaMask services', + }, + { + filename: 'llms-agent-wallet.txt', + includePatterns: ['agent-wallet/**/*.{md,mdx}'], + fullContent: false, + title: 'MetaMask Agent Wallet documentation', + description: 'Documentation links for MetaMask Agent Wallet', + }, + { + filename: 'llms-agent-wallet-full.txt', + includePatterns: ['agent-wallet/**/*.{md,mdx}'], + fullContent: true, + title: 'MetaMask Agent Wallet documentation', + description: 'Complete documentation for MetaMask Agent Wallet', + }, +] + +// Full options object passed to the plugin. Both `docusaurus.config.js` and +// `scripts/verify-llms-output.js` consume this directly; do not spread or +// partially copy it from a single call site. +// +// Inline notes for non-obvious flags: +// - `docsDir: '.'` — collect from the site root so every product +// folder is discoverable (each entry filters +// itself via `includePatterns`). +// - `generateLLMsTxt: false` and `generateLLMsFullTxt: false` — the root +// `llms.txt` is hand-curated at `static/llms.txt` +// to stay under the AFDocs 50,000-char +// `llms-txt-size` threshold; a monolithic +// `llms-full.txt` would exceed every agent's +// context window. +// - `generateMarkdownFiles: true` — emit an individual `.md` next to every +// doc page so `.md` URLs return 200 (Agent Score +// `markdown-url-support` / `llms-txt-directive-md`). +// - `pathTransformation.ignorePaths: ['src/pages']` — strip the `src/pages` +// prefix from generated URLs so a file at +// `src/pages/quickstart/foo.md` resolves to +// `/quickstart/foo/`, matching the public route. +const llmsPluginOptions = { + docsDir: '.', + generateLLMsTxt: false, + generateLLMsFullTxt: false, + generateMarkdownFiles: true, + ignoreFiles, + excludeImports: true, + removeDuplicateHeadings: true, + pathTransformation: { + ignorePaths: ['src/pages'], + }, + customLLMFiles, +} + +// Export the options object as the module default. `customLLMFiles` and +// `ignoreFiles` are already reachable as properties on the exported object; +// do NOT add a self-referential `llmsPluginOptions` property here — Docusaurus +// runs `JSON.stringify` over the entire site config during `genSiteConfig` +// (codegen.js), and a cycle would crash the build with +// `TypeError: Converting circular structure to JSON`. +module.exports = llmsPluginOptions diff --git a/src/plugins/mm-scss-utils/index.js b/src/plugins/mm-scss-utils/index.js new file mode 100644 index 00000000000..8bb87bbfc01 --- /dev/null +++ b/src/plugins/mm-scss-utils/index.js @@ -0,0 +1,29 @@ +const path = require('path') + +module.exports = function (context, options) { + return { + name: 'mm-scss-utils', + configureWebpack(config, isServer, utils) { + return { + module: { + rules: [ + { + test: /\.scss$/, + use: [ + { + loader: 'sass-loader', + options: { + sassOptions: { + includePaths: [path.resolve(context.siteDir, 'src/scss')], + }, + additionalData: `@use "sass:math"; @import "${path.resolve(context.siteDir, 'src/scss/utils/global-import')}";`, + }, + }, + ], + }, + ], + }, + } + }, + } +} diff --git a/src/plugins/mm-scss-utils/package.json b/src/plugins/mm-scss-utils/package.json new file mode 100644 index 00000000000..381a6182e5e --- /dev/null +++ b/src/plugins/mm-scss-utils/package.json @@ -0,0 +1,5 @@ +{ + "name": "mm-scss-utils", + "version": "0.0.0", + "private": true +} diff --git a/src/plugins/osano.ts b/src/plugins/osano.ts new file mode 100644 index 00000000000..52c955a20cb --- /dev/null +++ b/src/plugins/osano.ts @@ -0,0 +1,24 @@ +const OsanoPlugin = () => { + return { + name: 'docusaurus-plugin-osano', + injectHtmlTags() { + // Prevent Osano from running in Vercel preview/dev builds where it can block React hydration. + if (process.env.VERCEL_ENV !== 'production') { + return {} + } + + return { + headTags: [ + { + tagName: 'script', + attributes: { + src: 'https://cmp.osano.com/AzZMxHTbQDOQD8c1J/84e64bce-4a70-4dcc-85cb-7958f22b2371/osano.js', + }, + }, + ], + } + }, + } +} + +export default OsanoPlugin diff --git a/src/plugins/plugin-json-rpc.ts b/src/plugins/plugin-json-rpc.ts index a3ecbaa1a9f..ccb122ae830 100644 --- a/src/plugins/plugin-json-rpc.ts +++ b/src/plugins/plugin-json-rpc.ts @@ -1,32 +1,91 @@ +import NodePolyfillPlugin from 'node-polyfill-webpack-plugin' +import * as path from 'path' + export interface ResponseItem { - name: string; - data: any | null; - error: Error | null | boolean; + name: string + data: any | null + error: Error | null | boolean +} + +interface MethodItem { + name: string +} + +// Method sorting configuration +const METHOD_SORT_PRIORITIES = { + wallet_: 1, // Highest priority - appears first + eth_: 2, // Second priority + personal_: 3, // Third priority + web3_: 4, // Fourth priority + // Default priority for any other prefixes + default: 999, +} + +const METHOD_SORT_CONFIG = { + priorities: METHOD_SORT_PRIORITIES, +} + +// Helper function to extract method prefix +const getMethodPrefix = (methodName: string): string => { + const prefix = methodName.split('_')[0] + '_' + return prefix +} + +// Sort methods by priority group, then alphabetically within each group +const sortMethods = (items: MethodItem[], sortConfig = METHOD_SORT_CONFIG) => { + return [...items].sort((a, b) => { + const aPrefix = getMethodPrefix(a.name) + const bPrefix = getMethodPrefix(b.name) + + const aPriority = sortConfig.priorities[aPrefix] || sortConfig.priorities.default + const bPriority = sortConfig.priorities[bPrefix] || sortConfig.priorities.default + + // First sort by priority group + if (aPriority !== bPriority) { + return aPriority - bPriority + } + + // Then sort alphabetically within the same group + return a.name.localeCompare(b.name) + }) } async function fetchData(url: string, name: string): Promise { try { - const response = await fetch(url, { method: "GET" }); - const data = await response.json(); - return { name, data, error: false }; + const response = await fetch(url, { method: 'GET' }) + if (!response.ok) { + return { + name, + data: null, + error: new Error(`HTTP error! status: ${response.status}`), + } + } + const data = await response.json() + return { name, data, error: false } } catch (error) { - return { name, data: null, error: true }; + return { + name, + data: null, + error: error instanceof Error ? error : new Error(String(error)), + } } } async function fetchMultipleData( - requests: { url: string; name: string }[], + requests: { url: string; name: string }[] ): Promise { - const promises = requests.map(({ url, name }) => fetchData(url, name)); - const responses = await Promise.all(promises); - return responses; + const promises = requests.map(({ url, name }) => fetchData(url, name)) + const responses = await Promise.all(promises) + return responses } -const RPC_NETWORK_URL = "https://sot-network-methods.vercel.app/specs"; +export const RPC_NETWORK_URL = 'https://sot-network-methods.vercel.app/specs' +// export const MM_RPC_URL = 'https://metamask.github.io/api-specs/latest/openrpc.json' +// export const MM_REF_PATH = 'metamask-connect/evm/reference/json-rpc-methods' export enum NETWORK_NAMES { - linea = "linea", - metamask = "metamask", + linea = 'linea', + // metamask = 'metamask', } const requests = [ @@ -34,24 +93,90 @@ const requests = [ url: `${RPC_NETWORK_URL}/${NETWORK_NAMES.linea}`, name: NETWORK_NAMES.linea, }, - { - url: "https://metamask.github.io/api-specs/latest/openrpc.json", - name: NETWORK_NAMES.metamask, - }, -]; + // { + // url: MM_RPC_URL, + // name: NETWORK_NAMES.metamask, + // }, +] + +export const prepareLinkItems = ( + items: MethodItem[], + refPath: string, + sortConfig = METHOD_SORT_CONFIG +): { type: string; label: string; href: string }[] => { + const sortedItems = sortMethods(items, sortConfig) + + return sortedItems.map(method => ({ + type: 'link', + label: method.name, + href: `/${refPath}/${method.name.toLowerCase()}`, + })) +} + +export const fetchAndGenerateDynamicSidebarItems = async ( + url: string, + refPath: string, + network: string +) => { + const dynamicRefItems = await fetchData(url, network) + if (dynamicRefItems.data && !dynamicRefItems.error) { + return prepareLinkItems(dynamicRefItems.data.methods, refPath) + } + return [] +} export default function useNetworksMethodPlugin() { return { - name: "plugin-json-rpc", - async contentLoaded({ actions }) { - const { setGlobalData } = actions; - await fetchMultipleData(requests) - .then((responseArray) => { - setGlobalData({ netData: responseArray }); + name: 'plugin-json-rpc', + async loadContent() { + return await fetchMultipleData(requests) + .then(responseArray => { + return responseArray }) .catch(() => { - setGlobalData({ netData: [] }); - }); + return [] + }) }, - }; + async contentLoaded({ content, actions }) { + const { addRoute, createData, setGlobalData } = actions + setGlobalData({ netData: content }) + /* + const dynamicRoutes = content.find(item => item.name === NETWORK_NAMES.metamask) + if (dynamicRoutes) { + const methodsData = await createData( + 'methodsData.json', + JSON.stringify(dynamicRoutes.data.methods) + ) + for (const method of dynamicRoutes.data.methods) { + await addRoute({ + path: `/${MM_REF_PATH}/${method.name.toLowerCase()}`, + component: require.resolve('../components/CustomReferencePage/index.tsx'), + modules: { + methodsData: methodsData, + }, + exact: true, + customData: { ...method, networkName: NETWORK_NAMES.metamask }, + }) + } + } + */ + }, + configureWebpack() { + return { + plugins: [new NodePolyfillPlugin()], + resolve: { + alias: { + '@site-global': path.resolve(__dirname, '../methodsData.json'), + fs: false, + module: false, + child_process: false, + worker_threads: false, + 'uglify-js': false, + '@swc/core': false, + esbuild: false, + }, + }, + } + }, + } } diff --git a/src/plugins/plugin-snaps-docs.ts b/src/plugins/plugin-snaps-docs.ts new file mode 100644 index 00000000000..8b382ebbf07 --- /dev/null +++ b/src/plugins/plugin-snaps-docs.ts @@ -0,0 +1,191 @@ +import * as path from 'path' +import { readFileSync } from 'fs' +import { mkdir, writeFile } from 'fs/promises' +import prettier, { type Options as PrettierOptions } from 'prettier' +import { LoadContext, Plugin } from '@docusaurus/types' + +export const SNAPS_RPC_URL = 'https://metamask.github.io/snaps/schema/latest/schema.json' +export const SNAPS_REF_PATH = 'snaps/reference/snaps-api' + +type ExampleSnippet = { + name?: string + language?: string + content?: string +} + +type ExampleGroup = { + examples?: ExampleSnippet | ExampleSnippet[] +} + +/** Method object from the Snaps JSON schema (minimal fields used here). */ +type SnapsSchemaMethod = Record & { name: string } + +function getPrettierParser(language: string): 'babel' | 'typescript' | null { + const lang = language.toLowerCase() + if ( + lang === 'js' || + lang === 'javascript' || + lang === 'jsx' || + lang === 'mjs' || + lang === 'cjs' + ) { + return 'babel' + } + if ( + lang === 'ts' || + lang === 'tsx' || + lang === 'typescript' || + lang === 'mts' || + lang === 'cts' + ) { + return 'typescript' + } + return null +} + +/** + * Formats TypeScript/JavaScript example snippets with the repo Prettier config (single quotes). + * JSON snippets (for example manifest blocks) are left unchanged. + */ +async function formatMethodExamples(method: SnapsSchemaMethod, prettierOptions: PrettierOptions) { + const raw = method.examples as ExampleGroup | ExampleGroup[] | undefined + if (raw === undefined) { + return + } + + const formatSnippet = async (snippet: ExampleSnippet) => { + if (typeof snippet.content !== 'string' || !snippet.content.trim()) { + return + } + const lang = (snippet.language || '').toLowerCase() + if (lang === 'json' || lang === 'json5') { + return + } + const parser = getPrettierParser(lang) + if (!parser) { + return + } + try { + snippet.content = await prettier.format(snippet.content, { + ...prettierOptions, + parser, + }) + } catch { + // Keep schema text if Prettier cannot parse it. + } + } + + const formatGroup = async (group: ExampleGroup) => { + if (!group?.examples) { + return + } + const list = Array.isArray(group.examples) ? group.examples : [group.examples] + for (const s of list) { + await formatSnippet(s) + } + } + + if (Array.isArray(raw)) { + for (const g of raw) { + await formatGroup(g) + } + } else { + await formatGroup(raw) + } +} + +export default function useSnapsDocsPlugin(context: LoadContext): Plugin { + /** + * Fetch the Snaps API schema from the specified URL and return the list of methods. If the fetch + * fails, an error is thrown with the appropriate message. + * + * @returns A promise that resolves to an array of Snaps API methods. + */ + async function fetchSnapsMethods() { + return await fetch(SNAPS_RPC_URL).then(response => { + if (!response.ok || response.status !== 200) { + throw new Error(`Failed to fetch Snaps API schema: ${response.statusText}`) + } + + return response.json() + }) + } + + /** + * Generate documentation files for each Snaps API method. The method information is fetched from + * the Snaps API schema, and a Markdown file is created for each method in the appropriate + * directory. If the reference directory does not exist, it is created before writing the files. + * + * This should be run as a CLI command (`snaps:generate`) before starting Docusaurus to ensure + * that the documentation files are generated and available for the site build. By generating the + * documentation files as a separate step, `@docusaurus/plugin-content-docs` can properly process + * them and include them in the site navigation. + */ + async function generateSnapsDocs() { + const methods = (await fetchSnapsMethods()) as SnapsSchemaMethod[] + const prettierOptions = JSON.parse( + readFileSync(path.join(context.siteDir, '.prettierrc'), 'utf8') + ) as PrettierOptions + + for (const method of methods) { + await formatMethodExamples(method, prettierOptions) + } + + // Ensure the reference directory exists before trying to write files. + await mkdir(path.join(context.siteDir, SNAPS_REF_PATH), { + recursive: true, + }) + + for (const method of methods) { + const methodName = method.name.toLowerCase() + const filePath = path.join( + context.siteDir, + 'snaps', + 'reference', + 'snaps-api', + `${methodName}.mdx` + ) + + // The upstream schema occasionally embeds insecure `http://docs.metamask.io` + // links (for example in the `wallet_snap` description). Normalize them to + // HTTPS so the rendered pages don't link from an HTTPS page to HTTP. + const methodJson = JSON.stringify(method).replaceAll( + 'http://docs.metamask.io', + 'https://docs.metamask.io' + ) + + const content = `--- +id: ${methodName} +title: ${method.name} +description: Reference documentation for the \`${method.name}\` method of the Snaps API. +hide_title: true +hide_table_of_contents: true +--- + +import SnapsAPIReference from '@site/src/components/SnapsAPIReference/index.mdx'; + + +` + + await writeFile(filePath, content) + } + } + + return { + name: 'plugin-snaps-docs', + + /** + * Hook into the Docusaurus CLI to add a custom command (`snaps:generate`) that generates + * documentation for Snaps API methods. + * + * @see {@link generateSnapsDocs} for the implementation of the documentation generation logic. + * @param cli - The Docusaurus CLI instance to extend with the custom command. + */ + extendCli(cli) { + cli + .command('snaps:generate') + .description('Generate documentation for Snaps API methods') + .action(async () => await generateSnapsDocs()) + }, + } +} diff --git a/src/plugins/segment/index.ts b/src/plugins/segment/index.ts new file mode 100644 index 00000000000..8f96e7b864e --- /dev/null +++ b/src/plugins/segment/index.ts @@ -0,0 +1,12 @@ +import * as path from 'path' + +const SegmentPlugin = () => { + return { + name: 'docusaurus-plugin-segment', + getClientModules() { + return [path.resolve(__dirname, './segment')] + }, + } +} + +export default SegmentPlugin diff --git a/src/plugins/segment/package.json b/src/plugins/segment/package.json new file mode 100644 index 00000000000..c829d75e009 --- /dev/null +++ b/src/plugins/segment/package.json @@ -0,0 +1,7 @@ +{ + "name": "docusaurus-plugin-segment", + "version": "1.0.0", + "description": "Custom Segment analytics plugin for Docusaurus", + "main": "index.ts", + "type": "module" +} diff --git a/src/plugins/segment/segment.ts b/src/plugins/segment/segment.ts new file mode 100644 index 00000000000..64e432c4803 --- /dev/null +++ b/src/plugins/segment/segment.ts @@ -0,0 +1,107 @@ +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' +import siteConfig from '@generated/docusaurus.config' + +// Only run on client-side +if (!ExecutionEnvironment.canUseDOM) { + // Do nothing on server-side +} else { + const { SEGMENT_ANALYTICS_KEY } = siteConfig.customFields + const isProd = process.env.NODE_ENV === 'production' + const isVercel = process.env.VERCEL === '1' + + // Only initialize Segment in production or Vercel deployments + if ((isProd || isVercel) && typeof window !== 'undefined' && SEGMENT_ANALYTICS_KEY) { + // Load Segment script + ;(function () { + var analytics = ((window as any).analytics = (window as any).analytics || []) + if (!analytics.initialize) { + if (analytics.invoked) { + if (window.console && console.error) { + console.error('Segment snippet included twice.') + } + return + } + analytics.invoked = true + analytics.methods = [ + 'trackSubmit', + 'trackClick', + 'trackLink', + 'trackForm', + 'pageview', + 'identify', + 'reset', + 'group', + 'track', + 'ready', + 'alias', + 'debug', + 'page', + 'once', + 'off', + 'on', + 'addSourceMiddleware', + 'addIntegrationMiddleware', + 'setAnonymousId', + 'addDestinationMiddleware', + ] + analytics.factory = function (method: string) { + return function () { + var args = Array.prototype.slice.call(arguments) + args.unshift(method) + analytics.push(args) + return analytics + } + } + for (var i = 0; i < analytics.methods.length; i++) { + var key = analytics.methods[i] + analytics[key] = analytics.factory(key) + } + analytics.load = function (key: string, options: any) { + var script = document.createElement('script') + script.type = 'text/javascript' + script.async = true + script.src = 'https://cdn.segment.com/analytics.js/v1/' + key + '/analytics.min.js' + var first = document.getElementsByTagName('script')[0] + first.parentNode?.insertBefore(script, first) + analytics._loadOptions = options + } + analytics.SNIPPET_VERSION = '4.15.3' + analytics.load(SEGMENT_ANALYTICS_KEY as string, { + cookie: { sameSite: 'None', secure: true }, + }) + } + })() + + // Track initial page view + ;(window as any).analytics.page() + + // Track subsequent page views on route changes + const originalPushState = history.pushState + const originalReplaceState = history.replaceState + + history.pushState = function (...args) { + originalPushState.apply(history, args) + // Use setTimeout to ensure the page change is complete + setTimeout(() => { + ;(window as any).analytics.page() + }, 0) + } + + history.replaceState = function (...args) { + originalReplaceState.apply(history, args) + // Use setTimeout to ensure the page change is complete + setTimeout(() => { + ;(window as any).analytics.page() + }, 0) + } + + window.addEventListener('popstate', () => { + // Use setTimeout to ensure the page change is complete + setTimeout(() => { + ;(window as any).analytics.page() + }, 0) + }) + } +} + +export default null diff --git a/src/plugins/sentry/index.ts b/src/plugins/sentry/index.ts index c8c8c7d8a78..16069828537 100644 --- a/src/plugins/sentry/index.ts +++ b/src/plugins/sentry/index.ts @@ -1,21 +1,21 @@ -import * as path from "path"; +import * as path from 'path' const SentryPlugin = () => { return { - name: "docusaurus-plugin-sentry", + name: 'docusaurus-plugin-sentry', getClientModules() { - return [path.resolve(__dirname, "./sentry")]; + return [path.resolve(__dirname, './sentry')] }, configureWebpack() { return { resolve: { alias: { - "sentry-plugin": path.resolve(__dirname, "./sentry.ts"), + 'sentry-plugin': path.resolve(__dirname, './sentry.ts'), }, }, - }; + } }, - }; -}; + } +} -export default SentryPlugin; +export default SentryPlugin diff --git a/src/plugins/sentry/sentry.ts b/src/plugins/sentry/sentry.ts index 6b7d162baa4..022b51ed3ca 100644 --- a/src/plugins/sentry/sentry.ts +++ b/src/plugins/sentry/sentry.ts @@ -1,15 +1,15 @@ -import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; -import siteConfig from "@generated/docusaurus.config"; -import * as Sentry from "@sentry/browser"; +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment' +import siteConfig from '@generated/docusaurus.config' +import * as Sentry from '@sentry/browser' -const isProd = process.env.NODE_ENV === "production"; +const isProd = process.env.NODE_ENV === 'production' export default (function () { if (!ExecutionEnvironment.canUseDOM) { - return null; + return null } - const { SENTRY_KEY } = siteConfig.customFields; + const { SENTRY_KEY } = siteConfig.customFields Sentry.init({ dsn: SENTRY_KEY as string, @@ -18,11 +18,11 @@ export default (function () { sampleRate: isProd ? 0.25 : 0, tracesSampleRate: 0, debug: !isProd, - }); + }) Sentry.replayIntegration({ maskAllText: false, - }); + }) - return Sentry; -})(); + return Sentry +})() diff --git a/src/scss/app.scss b/src/scss/app.scss new file mode 100644 index 00000000000..bb3ef2f0325 --- /dev/null +++ b/src/scss/app.scss @@ -0,0 +1,306 @@ +@import 'commons/reset'; +@import 'commons/typescale'; +@import 'commons/utils'; +@import 'commons/animations'; +@import 'elements/form'; +@import 'elements/contentful-rich-text'; + +:root { + // Defines a CSS variable to reduce motion for all CSS animations & transitions + // You can use it as such: + // animation: name calc(var(--motion) * 1s) linear forwards; + // transition: name calc(var(--motion) * 1s) ease; + --motion: 1; + --motion-speed: 0.55s; + --spring-ease: #{$gentle-ease}; + --general-white: #fff; + --general-white-off: #f7f9fc; + --general-gray-light: #e9edf6; + --general-gray: #c8ceda; + --general-gray-mid: #a1a8b7; + --general-gray-dark: #393d46; + --general-black-light: #242628; + --general-black-mid: #1b1b1b; + --general-black-mid-opacity-100: #1b1b1b00; + --general-black: #0a0a0a; + --consumer-orange-light: #ffa680; + --consumer-orange: #ff5c16; + --consumer-orange-dark: #661800; + --consumer-purple-light: #eac2ff; + --consumer-purple: #d075ff; + --consumer-purple-dark: #3d065f; + --consumer-green-light: #e5ffc3; + --consumer-green: #baf24a; + --consumer-green-dark: #013330; + --consumer-blue-light: #cce7ff; + --consumer-blue: #89b0ff; + --consumer-blue-dark: #190066; + --developer-orange-light: #ffa680; + --developer-orange: #ff5c16; + --developer-orange-dark: #661800; + --developer-purple-light: #eac2ff; + --developer-purple: #d075ff; + --developer-purple-dark: #3d065f; + --developer-green-light: #e5ffc3; + --developer-green: #baf24a; + --developer-blue-light: #cce7ff; + --developer-blue: #89b0ff; + --institution-purple-tint: #eac2ff; + --institution-purple-light: #dd9bff; + --institution-purple: #d075ff; + --institution-purple-dark: #3d065f; + --institution-purple-dark-2: #25043a; + --institution-green-tint: #e5ffc3; + --institution-green-light: #d0f987; + --institution-green: #baf24a; + --institution-green-dark: #013330; + --institution-green-dark-2: #012321; + --institution-blue-tint: #cce7ff; + --institution-blue-light: #abccff; + --institution-blue: #89b0ff; + --institution-blue-dark: #190066; + --institution-blue-dark-2: #0c0033; + --error: #dc2626; + --site-container-max-width: #{$site-container-max-width}; + + // Page Padding Variables + --page-padding-x: #{$page-padding-x-mobile}; + + // Header Height Variables + --header-desktop: #{$header-desktop-height}; + --header-mobile: #{$header-mobile-height}; + --header-toast-bar-enabled: 1; + --header-toast-bar-height: 4.1rem; + --header-height: var(--header-mobile); + --header-has-sub-nav: 0; + --header-dynamic-height: calc( + var(--header-height) + (var(--header-height) * var(--header-has-sub-nav)) + + var(--header-toast-bar-height) * var(--header-toast-bar-enabled) + ); + + // CSS Grid Columns Variables + --columns-count: #{$grid-column-count}; + + @include bp('tablet') { + --page-padding-x: #{$page-padding-x-tablet}; + } + + @include bp('desktop') { + --page-padding-x: #{$page-padding-x-desktop}; + } + + @include bp('tablet') { + --header-height: var(--header-desktop); + } + + @include bp('tablet') { + --columns-count: #{$grid-column-count-tablet}; + } + + @include bp('desktop') { + --columns-count: #{$grid-column-count-desktop}; + } + + // Fallback from linear() function is not supported + @supports (animation-timing-function: linear(0, 1)) { + --spring-ease: #{$spring-ease}; + } + + @media (prefers-reduced-motion: reduce) { + --motion: 0; + } +} + +* { + -webkit-tap-highlight-color: rgb(var(--general-black) 0); + -webkit-tap-highlight-color: transparent; + + &::selection { + color: var(--color-selection, var(--general-white)); + background: var(--background-selection, var(--general-black)); + } +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + + font-family: var(--font-mm-geist); + font-size: 10px; + font-weight: normal; + font-style: normal; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + -ms-font-smoothing: antialiased; + font-smoothing: antialiased; + + &.no-scroll { + overflow: hidden; + } + + &.progress { + cursor: progress; + + * { + cursor: progress; + } + } +} + +html, +body { + overscroll-behavior: none; + width: 100%; +} + +body { + position: relative; + + font-size: 2rem; + line-height: 1.5; + color: var(--general-black); + + background: var(--general-white); + + @include bp('tablet') { + font-size: 2.4rem; + } +} + +// Main WebGL Container +.webgl { + pointer-events: none; + + position: fixed; + z-index: 90; + top: 0; + left: 0; +} + +/* stylelint-disable declaration-no-important */ +.stats { + top: initial !important; + bottom: 0; +} + +// Main Container +.main-wrapper { + .container { + width: calc(100% - var(--page-padding-x) * 2); + max-width: none; + margin: 0 auto; + + @include bp('tablet') { + max-width: none; + } + } +} + +// Page Padding (Header Height) +.page { + padding-top: calc( + var(--header-height) + (var(--header-height) * var(--header-has-sub-nav)) + + (calc(var(--header-toast-bar-height) * var(--header-toast-bar-enabled))) + ); + padding-bottom: 9rem; + + > section:has(+ .has-flap-top), + > section:has(+ .has-cut-off-corner-top) { + position: relative; + + &:after { + content: ''; + + position: absolute; + bottom: calc(-15rem + 1px); + left: 0; + + width: 100%; + height: 15rem; + + background-color: var(--color-primary); + } + } + + > section.has-cut-off-corner-bottom + section { + position: relative; + + &:before { + content: ''; + + position: absolute; + z-index: -1; + top: calc(-15rem + 1px); + left: 0; + + width: 100%; + height: 15rem; + + background-color: var(--color-primary); + } + } + + // Fix background color of last element when footer is dark mode + main:has(+ footer.is-dark-mode) & { + > section:nth-last-child(1) { + &:after { + content: ''; + + position: absolute; + bottom: calc(-10rem + 1px); + + width: 100%; + height: 10rem; + + background-color: var(--color-primary); + } + } + } + + @include bp('desktop') { + padding-top: calc( + var(--header-height) + (var(--header-height) * var(--header-has-sub-nav)) + + (calc(var(--header-toast-bar-height) * var(--header-toast-bar-enabled))) - 1px + ); + padding-bottom: 6rem; + } +} + +.subgrid-container { + @include subgrid; +} + +.page-section { + padding: 3.2rem 0; + + & + section { + padding-top: 0; + } + + &:last-child { + margin-bottom: -2.6rem; + padding-bottom: 0; + } + + @include bp('tablet') { + padding: 8rem 0; + } + + @include bp('desktop') { + &:last-child { + margin-bottom: 0; + padding-bottom: 5rem; + } + } +} + +.fox-mascot-fallback-image { + position: relative; + padding: 2rem; +} diff --git a/src/scss/commons/_animations.scss b/src/scss/commons/_animations.scss new file mode 100644 index 00000000000..2350dca6035 --- /dev/null +++ b/src/scss/commons/_animations.scss @@ -0,0 +1,197 @@ +@keyframes translate-arrow { + 0% { + transform: translate3d(0%, 0%, 0); + } + + 20% { + transform: translate3d(100%, -100%, 0); + } + + 20.001% { + transform: translate3d(0%, 0%, 0); + } +} + +@keyframes mm-poly-variable-font-reveal { + 0% { + --variable-font-reso: 0; + } + + 20% { + --variable-font-reso: 1; + } + + 40% { + --variable-font-reso: 2; + } + + 60% { + --variable-font-reso: 3; + } + + 80% { + --variable-font-reso: 4; + } + + 100% { + --variable-font-reso: 5; + } +} + +.mm-poly-variable-font-reveal { + animation-name: mm-poly-variable-font-reveal; + animation-duration: calc(var(--motion) * 0.75s); + animation-timing-function: linear; + animation-fill-mode: forwards; + + @media (prefers-reduced-motion: no-preference) { + --variable-font-reso: 0; + } + + @media (prefers-reduced-motion: reduce) { + --variable-font-reso: 5; + } +} + +@keyframes mm-kf-reveal-animation-headline-mask-line-1 { + 0% { + clip-path: polygon(0 76%, 2% 98%, 7% 99%, 0 100%); + } + + 50% { + clip-path: polygon(0 70%, 19% 33%, 49% 100%, 0% 100%); + } + + 100% { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); + } +} + +@keyframes mm-kf-reveal-animation-headline-mask-line-2 { + 0% { + clip-path: polygon(32% 0, 100% 0, 100% 1%, 69% 1%); + } + + 25% { + clip-path: polygon(32% 0, 100% 0, 100% 2%, 70% 45%); + } + + 50% { + clip-path: polygon(29% 0, 100% 0, 100% 11%, 70% 75%); + } + + 75% { + clip-path: polygon(13% 0, 100% 0, 100% 68%, 31% 81%); + } + + 100% { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); + } +} + +@keyframes mm-kf-reveal-animation-headline-mask-line-3 { + 0% { + clip-path: polygon(0 0, 2% 0, 2% 6%, 1% 7%); + } + + 25% { + clip-path: polygon(0 0, 32% 21%, 10% 31%, 1% 35%); + } + + 50% { + clip-path: polygon(0 0, 62% 49%, 22% 87%, 0 91%); + } + + 75% { + clip-path: polygon(0 0, 83% 15%, 68% 100%, 0 98%); + } + + 100% { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); + } +} + +@keyframes mm-kf-reveal-animation-headline-mask-line-4 { + 0% { + clip-path: polygon(90% 0, 100% 0, 100% 3%, 96% 4%); + } + + 25% { + clip-path: polygon(63% 0, 100% 0%, 100% 36%, 85% 41%); + } + + 50% { + clip-path: polygon(45% 0, 100% 0%, 100% 53%, 70% 63%); + } + + 75% { + clip-path: polygon(16% 0, 100% 0%, 100% 85%, 46% 100%); + } + + 100% { + clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%); + } +} + +@keyframes mm-kf-reveal-animation-from-bottom { + 0% { + transform: translateY(2.5rem); + opacity: 0; + } + + 100% { + transform: translateY(0); + opacity: 1; + } +} + +.mm-reveal-animation-headline { + width: fit-content; + margin-left: -2rem; + padding: 0 2rem; + + @include bp('tablet') { + .mm-reveal-animation-headline-start & { + clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); + + &:nth-child(4n + 1) { + animation: mm-kf-reveal-animation-headline-mask-line-1 0.65s linear 0s 1 alternate forwards; + } + + &:nth-child(4n + 2) { + animation: mm-kf-reveal-animation-headline-mask-line-2 0.65s linear 0s 1 alternate forwards; + } + + &:nth-child(4n + 3) { + animation: mm-kf-reveal-animation-headline-mask-line-3 0.65s linear 0s 1 alternate forwards; + } + + &:nth-child(4n + 4) { + animation: mm-kf-reveal-animation-headline-mask-line-4 0.65s linear 0s 1 alternate forwards; + } + } + } +} + +.mm-reveal-animation-description { + .mm-reveal-animation-headline-start & { + transform: translateY(2rem); + opacity: 0; + animation: mm-kf-reveal-animation-from-bottom calc(var(--motion) * var(--motion-speed) / 0.5) + $gentle-ease 0.6s 1 normal forwards; + } +} + +.mm-reveal-animation-button { + @include bp('tablet') { + transform: translateY(2.5rem); + opacity: 0; + + .mm-reveal-animation-headline-start & { + transform: translateY(2rem); + opacity: 0; + animation: mm-kf-reveal-animation-from-bottom calc(var(--motion) * var(--motion-speed) / 0.5) + $gentle-ease 0.8s 1 normal forwards; + } + } +} diff --git a/src/scss/commons/_reset.scss b/src/scss/commons/_reset.scss new file mode 100644 index 00000000000..fde1001f9ff --- /dev/null +++ b/src/scss/commons/_reset.scss @@ -0,0 +1,187 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + + font: inherit; + font-size: 100%; + vertical-align: baseline; + + border: 0; +} + +/* HTML5 display-role reset for older browsers */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + +body { + line-height: 1; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +// RESET +input, +button, +label { + cursor: inherit; +} + +a { + color: currentcolor; +} + +button { + user-select: none; + background: none; +} + +a, +li, +button { + outline-color: var(--general-white); +} + +input, +select, +button, +textarea { + padding: 0; + + font-family: inherit; + + appearance: none; + border: none; + outline: none; +} + +input[type='submit'] { + cursor: inherit; +} + +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus input:-webkit-autofill, +textarea:-webkit-autofill, +textarea:-webkit-autofill:hover textarea:-webkit-autofill:focus, +select:-webkit-autofill, +select:-webkit-autofill:hover, +select:-webkit-autofill:focus { + box-shadow: 0 0 0 1000px var(--general-white) inset; +} diff --git a/src/scss/commons/_typescale.scss b/src/scss/commons/_typescale.scss new file mode 100644 index 00000000000..5ddcd36e1f7 --- /dev/null +++ b/src/scss/commons/_typescale.scss @@ -0,0 +1,325 @@ +/* +* Font Families +*/ + +.font-mm-sans { + font-family: var(--font-mm-sans); +} + +.font-mm-sans-mono { + font-family: var(--font-mm-sans-mono); +} + +.font-mm-sans-variable { + font-family: var(--font-mm-sans-variable); + font-variation-settings: 'wdth' var(--variable-font-wdth); +} + +.font-mm-poly-variable { + --variable-font-wdth: 20; + --variable-font-reso: 5; + + font-family: var(--font-mm-poly-variable); + font-variation-settings: + 'wdth' var(--variable-font-wdth), + 'RESO' var(--variable-font-reso); +} + +.font-primary { + font-family: var(--font-mm-geist); +} + +/* +* Font Weights +*/ + +.font-weight-medium { + font-weight: 500; +} + +/* +* Links +*/ + +a:not(.text-decoration-none) { + text-decoration: none; + + @include hover { + text-decoration: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.4rem; + } +} + +.text-decoration-underline, +a.text-decoration-underline { + text-decoration: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.4rem; +} + +/* +* Utils +*/ + +.uppercase { + text-transform: uppercase; +} + +.lowercase { + text-transform: lowercase; +} + +.capitalize { + text-transform: capitalize; +} + +.text-decoration-none { + text-decoration: none; +} + +/* +* Display +*/ + +.type-display-xxl { + font-size: 6.4rem; + line-height: 100%; + letter-spacing: -0.06rem; + + @include bp('desktop') { + font-size: 16rem; + letter-spacing: -0.096rem; + } +} + +.type-display-xl { + font-size: 5.6rem; + line-height: 100%; + letter-spacing: -0.048rem; + + @include bp('desktop') { + font-size: 12.8rem; + letter-spacing: -0.076rem; + } +} + +.type-display-l { + font-size: 4.8rem; + line-height: 100%; + + @include bp('desktop') { + font-size: 10.4rem; + } +} + +.type-display-ml { + font-size: 4rem; + line-height: 100%; + + @include bp('desktop') { + font-size: 8rem; + } +} + +.type-display-m { + font-size: 3.2rem; + line-height: 100%; + + @include bp('desktop') { + font-size: 6.4rem; + } +} + +.type-display-s { + font-size: 2.4rem; + line-height: 100%; + + @include bp('desktop') { + font-size: 5.6rem; + } +} + +/* +* Heading +*/ + +.type-heading-xxl { + font-size: 6rem; + line-height: 113.333%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 9.6rem; + line-height: 108.333%; + } +} + +.type-heading-xl { + font-size: 4.8rem; + line-height: 116.667%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 7.6rem; + line-height: 110.526%; + } +} + +.type-heading-l { + font-size: 3.8rem; + line-height: 126.316%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 5.5rem; + line-height: 113.333%; + } +} + +.type-heading-ml { + font-size: 3.2rem; + line-height: 125%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 4.8rem; + line-height: 116.667%; + } +} + +.type-heading-m { + font-size: 2.4rem; + line-height: 133.333%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 3.8rem; + line-height: 120%; + } +} + +.type-heading-sm { + font-size: 2.2rem; + line-height: 140%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 3rem; + line-height: 125%; + } +} + +.type-heading-s { + font-size: 2rem; + line-height: 150%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 2.2rem; + line-height: 133.333%; + } +} + +.type-heading-xs { + font-size: 1.8rem; + line-height: 166.667%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 1.8rem; + line-height: 140%; + } +} + +.type-heading-xxs { + font-size: 1.6rem; + line-height: 157%; + + &.uppercase { + line-height: 100%; + } + + @include bp('desktop') { + font-size: 1.6rem; + line-height: 150%; + } +} + +/* +* Paragraph +*/ + +.type-paragraph-l { + font-size: 1.8rem; + line-height: 144.444%; + + @include bp('desktop') { + font-size: 2rem; + line-height: 140%; + } +} + +.type-paragraph-m { + font-size: 1.6rem; + line-height: 150%; +} + +.type-paragraph-s { + font-size: 1.4rem; + line-height: 166.667%; + + @include bp('desktop') { + line-height: 150%; + } +} + +/* +* Labels +*/ + +.type-label { + font-size: 1.2rem; + + @include bp('desktop') { + font-size: 1.6rem; + } +} + +.type-label-eyebrow { + font-size: 1.5rem; + line-height: 150%; +} + +.type-label-caption { + font-size: 1.2rem; + line-height: 166.667%; + + @include bp('desktop') { + line-height: 150%; + } +} diff --git a/src/scss/commons/_utils.scss b/src/scss/commons/_utils.scss new file mode 100644 index 00000000000..db82d07fa3f --- /dev/null +++ b/src/scss/commons/_utils.scss @@ -0,0 +1,30 @@ +.flex { + display: flex; +} + +.flex-col { + flex-direction: column; +} + +.sr-only { + position: absolute; + + overflow: hidden; + + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + + white-space: nowrap; + + clip: rect(0, 0, 0, 0); + border-width: 0; +} + +.inset-0 { + position: absolute; + inset: 0; + width: 100%; + height: 100%; +} diff --git a/src/scss/custom.scss b/src/scss/custom.scss new file mode 100644 index 00000000000..659eb75f1ab --- /dev/null +++ b/src/scss/custom.scss @@ -0,0 +1,1373 @@ +@import './app.scss'; +@import './theme/fonts'; +@import './theme/button'; +@import './theme/markdown'; +@import './theme/markdown-cards'; +@import './theme/admonition-type'; +@import './theme/sidebar'; +@import './theme/toc'; +@import './theme/interactive-box'; +@import './theme/prism-code'; +@import './theme/react-dropdown'; +@import './theme/react-tippy'; +@import './theme/doc-search'; +@import './theme/tags-listing'; + +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ +/* You can override the default Infima variables here. */ +:root { + --font-mm-poly-variable: 'MM Poly Variable', 'Arial Bold', 'Gadget', sans-serif; + --font-mm-sans: 'MM Sans', Arial, 'Helvetica Neue', Helvetica, sans-serif; + --font-mm-sans-mono: 'MM Sans Mono', 'Andale Mono', AndaleMono, monospace; + --font-mm-sans-variable: 'MM Sans Variable', Arial, 'Helvetica Neue', Helvetica, sans-serif; + --font-mm-geist: 'Geist', Arial, 'Helvetica Neue', Helvetica, sans-serif; + --ifm-color-primary: var(--developer-purple); + --ifm-color-primary-dark: var(--developer-purple-dark); + --ifm-color-primary-darker: var(--institution-purple-dark-2); + --ifm-color-primary-darkest: var(--institution-purple-dark-2); + --ifm-color-primary-light: var(--developer-purple-light); + --ifm-color-primary-lighter: var(--developer-purple-tint); + --ifm-color-primary-lightest: var(--institution-purple-tint); + + --ifm-color-secondary-lighter: var(--general-gray-light); + + --ifm-heading-color: var(--general-black); + --color-text-heading: var(--ifm-heading-color); + --color-text: var(--general-black); + --color-text-paragraph: var(--color-text); + --select-arrow: url('data:image/svg+xml,'); + + /* Links */ + --ifm-link-color: var(--general-black); + --ifm-link-hover-color: var(--ifm-color-primary); + + /* Sidebar */ + --doc-sidebar-width: auto !important; + --ifm-hover-overlay: var(--general-gray-light); + --ifm-menu-color-active: var(--general-black); + --ifm-menu-color: var(--general-gray-dark); + --ifm-menu-link-padding-horizontal: 2rem; + --ifm-menu-link-sublist-icon: url('data:image/svg+xml,'); + + /* TOC */ + --ifm-toc-border-color: var(--general-gray-light); + --ifm-toc-padding-vertical: 1em; + --ifm-code-background: #e6e6e6; + --ifm-toc-link-color: var(--general-gray-dark); + + /* Flask */ + --mm-flask-background-color: var(--ifm-color-primary-light); + --mm-flask-color: var(--general-black); + + /* Tags */ + --tag-text-color: var(--general-black); + --tag-border-color: var(--general-gray); + --tag-background-color: var(--general-white); + --tag-background-color-hover: var(--general-black); + --tag-text-color-hover: var(--general-white); + + --ifm-font-family-monospace: var(--font-mm-sans-mono); + --ifm-heading-font-family: var(--ifm-font-family-monospace); + --ifm-font-family-base: var(--font-mm-geist); + --font-family-sans: var(--font-mm-sans); + + --ifm-color-success: var(--developer-green-light); + --ifm-color-info: var(--developer-blue-light); + --ifm-color-warning: var(--developer-purple-light); + --ifm-color-danger: var(--developer-orange-light); + + /* Note */ + --ifm-color-secondary-contrast-background: var(--general-gray-light); + --ifm-color-secondary-contrast-foreground: var(--general-black); + + /* Info */ + --ifm-color-info-contrast-background: var(--developer-blue-light); + --ifm-color-info-contrast-foreground: var(--consumer-blue-dark); + + /* Success */ + --ifm-color-success-contrast-background: var(--developer-green-light); + --ifm-color-success-contrast-foreground: var(--consumer-green-dark); + + /* Warning */ + --ifm-color-warning-contrast-background: var(--developer-orange-light); + --ifm-color-warning-contrast-foreground: var(--consumer-orange-dark); + + /* Danger */ + --ifm-color-danger-contrast-background: var(--developer-orange-light); + --ifm-color-danger-contrast-foreground: var(--consumer-orange-dark); + + --ifm-color-white: var(--general-white); + --ifm-color-black: var(--general-black); + + --ifm-color-content-secondary: var(--general-gray-dark); + + --ifm-background-color: var(--general-white); + + --ifm-container-width-xl: var(--site-container-max-width); + --ifm-global-spacing: #{$grid-gutter-width}; + + /* Button */ + --ifm-button-color: var(--general-white); + --ifm-button-background-color: var(--general-black); + --ifm-button-border-width: 0.1rem; + --ifm-button-border-radius: 10rem; + --ifm-button-size-multiplier: 1.6; + --ifm-button-font-weight: 500; + --ifm-button-padding-vertical: 0.875rem; + --ifm-button-padding-horizontal: 1.5rem; + + /* Header */ + --ifm-navbar-height: var(--header-height); + --ifm-navbar-link-hover-color: var(--developer-purple); + + /* Footer */ + --ifm-footer-background-color: var(--general-white); + + /* Search */ + --search-item-link: var(--general-black); + --search-item-link-hover: var(--ifm-color-primary-dark); + --search-input-focus: var(--general-black); + + /* Code Block */ + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-code-border-radius: 0; + --prism-background-color: var(--general-black-light); + --ifm-code-font-size: 1.6rem; + + /* Inline code */ + --inline-code-font: 'Andale Mono', AndaleMono, Menlo, Consolas, Monaco, 'Courier New', monospace; + --inline-code-font-size: 0.85em; + --inline-code-font-weight: 600; + --inline-code-baseline-nudge: -0.045em; + --inline-code-border-radius: 0.35rem; + --inline-code-padding: 0.05em 0.25em; + + /* Markdown: Tables */ + --ifm-table-border-color: var(--general-gray-light); + --ifm-table-head-background: var(--general-white-off); + --ifm-table-stripe-background: var(--general-white-off); + + @include bp('tablet') { + --ifm-global-spacing: #{$grid-gutter-width-tablet}; + } + + @include bp('desktop') { + --ifm-global-spacing: #{$grid-gutter-width-desktop}; + --doc-sidebar-width: 30rem !important; + } +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: var(--developer-green); + --ifm-color-primary-dark: var(--institution-green-dark); + --ifm-color-primary-darker: var(--institution-green-dark-2); + --ifm-color-primary-darkest: var(--institution-green-dark-2); + --ifm-color-primary-light: var(--developer-green-light); + --ifm-color-primary-lighter: var(--developer-green-tint); + --ifm-color-primary-lightest: var(--institution-green-tint); + + --ifm-background-surface-color: var(--general-black-light) !important; + + /* Links */ + --ifm-link-color: var(--general-white); + --ifm-link-hover-color: var(--ifm-color-primary); + + /* Sidebar */ + --ifm-hover-overlay: var(--general-black-light) !important; + --ifm-menu-color-active: var(--general-white) !important; + --ifm-menu-color: var(--general-white) !important; + + /* TOC */ + --ifm-toc-border-color: var(--general-gray) !important; + --ifm-code-background: #4d5059; + --ifm-toc-link-color: var(--general-gray); + + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + + /* Flask */ + --mm-flask-background-color: var(--ifm-color-primary); + --mm-flask-color: var(--general-black); + + /* Tags */ + --tag-text-color: var(--general-white); + --tag-border-color: var(--general-white); + --tag-background-color: var(--general-gray-dark); + --tag-background-color-hover: var(--general-white); + --tag-text-color-hover: var(--general-black); + + --ifm-color-success: var(--developer-green); + --ifm-color-info: var(--developer-blue); + --ifm-color-warning: var(--developer-purple); + --ifm-color-danger: var(--developer-orange); + + /* Note */ + --ifm-color-secondary-contrast-background: var(--general-black-light) !important; + + /* Info */ + --ifm-color-info-contrast-background: var(--consumer-blue-dark) !important; + --ifm-color-info-contrast-foreground: var(--consumer-blue-light) !important; + + /* Success */ + --ifm-color-success-contrast-background: var(--consumer-green-dark) !important; + --ifm-color-success-contrast-foreground: var(--consumer-green-light) !important; + + /* Warning */ + --ifm-color-warning-contrast-background: var(--consumer-orange-dark) !important; + --ifm-color-warning-contrast-foreground: var(--consumer-orange-light) !important; + + /* Danger */ + --ifm-color-danger-contrast-background: var(--consumer-orange-dark) !important; + --ifm-color-danger-contrast-foreground: var(--consumer-orange-light) !important; + + --ifm-background-color: var(--general-gray-dark); + + --ifm-heading-color: var(--general-white); + --color-text: var(--general-white); + --select-arrow: url('data:image/svg+xml,'); + + /* Header */ + --ifm-navbar-link-hover-color: var(--developer-green); + + /* Footer */ + --ifm-footer-background-color: var(--general-black-light); + + /* Search */ + --search-item-link: var(--general-white); + --search-item-link-hover: var(--ifm-color-primary); + --search-input-focus: var(--general-gray); + + /* Markdown: Tables */ + --ifm-table-border-color: var(--general-black-light); + --ifm-table-head-background: var(--general-black-mid); + --ifm-table-stripe-background: var(--general-black-light) !important; +} + +body { + height: auto !important; /* Fix for Dark Theme */ + -webkit-text-size-adjust: 100%; /* Fix for iOS */ + + [data-theme='dark'] & { + background: var(--general-gray-dark); + color: var(--general-white); + } + + @include bp('tablet') { + font-size: 2rem; + } +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--ifm-font-family-base); + font-weight: 500; +} + +h1 { + @extend .type-heading-m; +} + +h2 { + @extend .type-heading-sm; +} + +h3 { + @extend .type-heading-s; +} + +h4 { + @extend .type-heading-xs; +} + +h5 { + @extend .type-heading-xxs; +} + +h6 { + @extend .type-heading-xxs; +} + +p, +ul, +ol { + font-size: 1.6rem; + margin: 2rem 0; +} + +.alert { + border: none; +} + +.container { + padding: 0; +} + +[class*='docMainContainer'], +[class*='mainContainer'] { + padding: 2rem 0 0; + + @include bp('desktop') { + padding: 2.8rem 0 0 5rem; + } +} + +.row { + margin: 0 calc(var(--ifm-spacing-horizontal) * -1 / 2); +} + +.col { + padding: 0 calc(var(--ifm-spacing-horizontal) / 2); +} + +.getfeedback-hidden { + display: none !important; +} + +.hidden { + display: none !important; +} + +/* NavBar */ + +.colorModeToggle_DEke { + margin: 0 1.4rem 0 0.8rem !important; + button { + height: 2rem; + width: 2rem; + svg { + height: 2rem; + width: 2rem; + } + } +} + +.navbar__brand { + margin-right: 2rem !important; +} + +.DocSearch-Button-Placeholder { + font-size: 1.4rem !important; +} + +.DocSearch-Button-Keys { + gap: 0 !important; +} + +.DocSearch-Button-Key { + font-size: 1.6rem !important; +} + +.DocSearch-Button-Key:last-child { + display: none !important; +} + +.DocSearch-Button-Key:first-child { + width: auto !important; + padding: 0 0.35rem !important; + gap: 0.15rem; +} + +.DocSearch-Button-Key:first-child::after { + content: 'K'; + font-size: 1.2rem; + line-height: 1; +} + +/* Breadcrumbs */ + +.breadcrumbs { + margin-top: 0 !important; + margin-bottom: 2rem !important; +} + +.breadcrumbs__link { + font-size: 1.3rem !important; +} + +.markdown [class*='collapsibleContent'] { + padding-top: 0 !important; +} + +/* Images */ + +.imgRow { + display: flex; +} + +.imgCol { + flex: 50%; + padding: 10px; + text-align: center; +} + +.appScreen { + border: 1px solid #dcdcdc; + border-radius: 0.5rem; +} + +.docImg { + display: block; + width: 100%; + max-width: 800px; + border-radius: 8px; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + margin: 16px 0; +} + +/* Doc version banner */ + +.theme-doc-version-banner { + font-size: 1.6rem; +} + +/* Header */ + +.navbar { + --ifm-navbar-padding-horizontal: 3rem; + box-shadow: none; + border-bottom: 1px solid var(--ifm-toc-border-color); + padding: 0 var(--page-padding-x); + + &__brand { + margin-right: 4rem; + @media screen and (min-width: 1200px) { + margin-right: 7.2rem; + } + } + + &__toggle { + margin-right: 1.6rem; + } + + &__logo { + height: 3.2rem; + width: 6.5rem; + } + + &__title { + display: none; + } + + &__item { + line-height: 0; + padding: 0; + } + + &__items--right > :last-child { + right: var(--page-padding-x); + } + + &__link { + font-size: 1.6rem; + font-weight: 500; + line-height: 124%; + padding: calc(2rem + var(--ifm-navbar-padding-vertical)) 0.6rem; + @media screen and (min-width: 1050px) { + padding: calc(2rem + var(--ifm-navbar-padding-vertical)) 1rem; + } + @media screen and (min-width: 1200px) { + padding: calc(2rem + var(--ifm-navbar-padding-vertical)) 1.8rem; + } + @media screen and (min-width: 1900px) { + padding: calc(2rem + var(--ifm-navbar-padding-vertical)) 2.2rem; + } + + &:hover { + text-decoration: none !important; + } + } + + .DocSearch-Button { + background-color: var(--docsearch-searchbox-focus-background); + border: 1px solid var(--docsearch-searchbox-background); + } + + .toggleButton_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module { + &:hover { + background-color: transparent !important; + + svg path { + fill: var(--ifm-link-color); + } + } + } + + .toggle_node_modules-\@docusaurus-theme-classic-lib-theme-ColorModeToggle-styles-module { + margin: 0 1rem; + } + .dropdown__menu { + top: 0.2rem; + left: 2rem; + padding: 2rem 1.2rem; + border-radius: 0; + box-shadow: --ifm-link-color; + li:not(:last-child) { + padding-bottom: 2rem; + } + } + + .dropdown--hoverable:hover .dropdown__menu, + .dropdown--show .dropdown__menu { + transform: translateY(1rem) !important; + + [data-theme='dark'] & { + background: var(--general-gray-dark); + } + } + + .dropdown { + &__link { + font-size: 1.4rem; + + &:hover, + &--active { + background-color: transparent; + text-decoration: none !important; + color: var(--ifm-navbar-link-hover-color); + } + } + } + + .dropdown--hoverable:hover .dropdown__menu, + .dropdown--show .dropdown__menu { + opacity: 1; + pointer-events: all; + visibility: visible; + } +} + +/* Footer */ +.footer { + padding: 4.6rem var(--page-padding-x) 3rem; + border-top: 1px solid var(--general-gray-light); + + @include bp('tablet') { + padding: 8rem var(--page-padding-x); + .container { + max-width: none; + } + } + + [data-theme='dark'] & { + border-top: 1px solid transparent; + } + + &__items { + line-height: 3.5rem; + } + + &__item { + margin-bottom: 2rem; + + @include bp('tablet') { + margin-bottom: 0; + } + } + + &__links { + padding-bottom: 2.6rem; + max-width: 122rem; + margin: auto; + + @include bp('tablet') { + padding-bottom: 9.6rem; + } + } + + &__title { + font-size: 1.6rem; + font-weight: 400; + line-height: 124%; + color: var(--general-gray-dark); + margin-bottom: 1rem; + + @include bp-max('tablet') { + margin-bottom: 1.8rem; + } + + [data-theme='dark'] & { + color: var(--general-gray); + } + } + + &__link-item { + font-size: 1.5rem; + font-weight: 500; + line-height: 124%; + color: var(--general-black); + + [data-theme='dark'] & { + color: var(--general-gray); + } + + &:hover { + text-decoration: none !important; + color: var(--ifm-navbar-link-hover-color); + } + } + + &__logo { + max-width: 6.4rem; + margin-bottom: 1rem; + + @include bp('tablet') { + max-width: 12.4rem; + margin-bottom: 2rem; + } + } + + &__bottom { + a { + opacity: 1; + } + } + + #manage-cookie-btn { + font-size: 1.5rem; + font-weight: 500; + line-height: 124%; + + color: var(--general-black); + + [data-theme='dark'] & { + color: var(--general-gray); + } + + &:hover { + text-decoration: none !important; + color: var(--ifm-navbar-link-hover-color); + } + } + + &__copyright { + font-size: 1.2rem; + font-style: normal; + font-weight: 400; + line-height: 1.8rem; + + [data-theme='dark'] & { + color: var(--general-gray); + } + } +} + +.docusaurus-openrpc { + article { + @extend .markdown; + max-width: 80rem; + } +} + +/* Code Focus & Blur Effects */ +%blur-transition { + filter: blur(0.5px); + opacity: 0.3; + transition: + filter 0.2s ease, + opacity 0.2s ease; + will-change: filter, opacity; +} + +%clear-blur { + filter: none; + opacity: 1; +} + +.code-unfocus { + @extend %blur-transition; +} + +.blurred-code { + .token-line:not(.code-focus) { + @extend %blur-transition; + } + + .code-focus { + @extend %clear-blur; + } + + &:hover .token-line:not(.code-focus) { + @extend %clear-blur; + } +} + +code:hover .code-unfocus { + @extend %clear-blur; +} + +.git-diff-remove { + background-color: #ff000020; + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + border-left: 3px solid #ff000080; +} + +.git-diff-add { + background-color: #1aff0020; + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + border-left: 3px solid #1aff0080; +} + +.nav-dropdown-menu { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: 16px; + gap: var(--ifm-spacing-horizontal); + border-radius: 8px; + + ul { + display: flex; + flex-direction: column; + gap: 4px; + padding: 0; + list-style: none; + color: var(--ifm-navbar-link-color); + } + + a { + position: relative; // Needed for ::before to be positioned correctly + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + width: 350px; + padding-left: 0; + margin: 0; + color: var(--ifm-navbar-link-color); + border-radius: 8px; + text-decoration: none !important; + gap: 10px; + + &::before { + content: ''; + position: absolute; + left: -6px; + top: 0; + bottom: 0; + width: 3px; + background-color: var(--ifm-color-primary); + opacity: 0; + transition: opacity 0.2s ease; + border-radius: 1px; + } + + &:hover::before { + opacity: 1; + } + + div { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + text-align: left; + padding: 0; + } + + span { + display: flex; + align-items: flex-start; + justify-content: center; + padding: 5px; + background-color: var(--ifm-code-background); + border-radius: 8px; + + svg { + display: inline-block; + vertical-align: top; + width: 26px; + height: 24px; + color: var(--ifm-menu-color); + transition: color 0.2s ease; + } + } + + &:hover span { + background-color: var(--ifm-color-primary-light); + + svg { + color: var(--ifm-color-primary); + } + } + + h2 { + @extend .dropdown__link; + font-family: var(--ifm-font-family-base); + font-size: 1.6rem !important; + font-weight: 500; + text-decoration: none !important; + margin: 0 0 4px 0; + color: inherit; + } + + p { + font-family: var(--ifm-font-family-base); + font-size: 1.4rem; + line-height: 1.8rem; + font-weight: 400 !important; + color: var(--ifm-menu-color); + text-decoration: none !important; + margin: 0; + } + } +} + +.nav-dropdown-menu a:hover h2 { + color: inherit !important; +} + +@include bp-max('tablet') { + .nav-dropdown-menu ul { + gap: 15px; + } + + .nav-dropdown-menu a { + width: 80%; + } +} + +div[class^='theme-announcement-bar'] { + font-family: var(--font-mm-geist); + font-size: 1.4rem; + padding: 0.5rem 2rem; + text-align: center; + border-bottom: 1px solid var(--general-gray-light); + background-color: var(--developer-purple-light); + color: var(--color-text); + + a { + color: var(--ifm-link-color); + text-decoration: underline; + font-weight: 500; + + &:hover { + color: var(--ifm-link-hover-color); + } + } + + [data-theme='dark'] & { + background-color: var(--developer-purple-light); + color: var(--general-black); + + a { + color: var(--general-black); + + &:hover { + color: var(--developer-purple); + } + } + } +} + +/* Hides right-side navbar items (Faucet, Help, etc.) on small viewports + to make room for left-side navbar labels. */ +@media (max-width: 1196px) { + .navbar__items--right .navbar__item { + display: none; + } + + [class*='docMainContainer'], + [class*='mainContainer'] { + padding: 2rem 0 0 2rem; + } +} + +/* Fixes bug: Removes sidebar logo appearing on Wallet RPC reference pages */ +.sidebar_mhZE .sidebarLogo_F_0z { + display: none !important; +} + +.sidebar_mhZE { + padding-top: var(--ifm-navbar-height) !important; +} + +.pageWrapper .sidebar_mhZE { + padding-top: 0 !important; +} + +/* Add scroll padding to account for sticky product banner */ +html { + scroll-padding-top: 10rem; +} + +.sdk-menu { + display: flex; + flex-direction: row; + border-radius: 8px; + padding: 0; +} + +.sdk-menu h2 { + font-family: var(--ifm-font-family-base); + font-size: 1.6rem; + font-weight: 500 !important; + margin: 0 0 4px 0; +} + +.sdk-menu h3 { + font-family: var(--ifm-font-family-base); + text-transform: uppercase; + font-size: 1.2rem; + line-height: 1.5; + font-weight: 500 !important; + color: var(--ifm-menu-color); + padding-left: 14px; + margin: 0; + margin-top: 14px; + opacity: 0.8; +} + +.sdk-menu p { + font-family: var(--ifm-font-family-base); + font-size: 1.4rem; + line-height: 1.8rem; + font-weight: 400 !important; + margin: 0; + color: var(--ifm-menu-color); +} + +.product-selection-menu { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: space-between; + padding: 16px; + gap: var(--ifm-spacing-horizontal); + border-radius: 8px; + background-color: var(--ifm-background-surface-color); + margin: 0; +} + +.product-selection-menu ul { + display: flex; + padding-left: 0; + color: var(--ifm-navbar-link-color); + list-style-type: none; + flex-direction: column; + gap: 4px; +} + +.product-selection-menu a { + display: flex; + padding-left: 14px; + color: var(--ifm-navbar-link-color); + flex-direction: row; + justify-content: space-between; + width: 190px; + align-items: center; + border-radius: 8px; + margin: 0; + border: 0; + background-color: var(--ifm-background-surface-color); + transition: + background-color 0.2s ease, + color 0.2s ease; + text-decoration: none !important; + + &:hover, + &:focus { + background-color: var(--ifm-hover-overlay); + color: var(--ifm-navbar-link-hover-color); + outline: none; + } +} + +.product-selection-menu .selected { + background-color: var(--ifm-color-primary); + color: var(--general-white); + + &:hover { + background-color: var(--ifm-color-primary); + color: var(--general-white); + } +} + +/* Dark mode: Use dark text on primary color for better contrast */ +[data-theme='dark'] .product-selection-menu .selected { + color: var(--general-black); + + &:hover { + color: var(--general-black); + } +} + +.product-selection-menu a div { + font-family: var(--ifm-font-family-base); + padding: 10px; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + text-align: left; + margin: 0; +} + +.product-selection-menu a h2 { + font-family: var(--ifm-font-family-base); + font-size: 1.6rem !important; + font-weight: 500; + text-decoration: none !important; + margin: 0 0 4px 0; + color: inherit; +} + +.product-selection-menu a p { + font-family: var(--ifm-font-family-base); + font-size: 1.4rem; + line-height: 1.8rem; + font-weight: 400 !important; + color: var(--ifm-menu-color); + text-decoration: none !important; + margin: 0; +} + +.sdk-selection-menu { + display: none; + flex-direction: row; + align-items: flex-start; + justify-content: space-between; + padding: 16px; + gap: var(--ifm-spacing-horizontal); + border-radius: 8px; +} + +.selected-menu { + display: flex !important; +} + +.sdk-selection-menu ul { + display: flex; + padding-left: 0; + color: var(--ifm-navbar-link-color); + list-style-type: none; + flex-direction: column; + gap: 4px; +} + +.sdk-selection-menu a { + position: relative; + display: flex; + padding-left: 14px; + color: var(--ifm-navbar-link-color); + flex-direction: row; + justify-content: flex-start; + width: 240px; + align-items: center; + border-radius: 8px; + margin: 0; + text-decoration: none !important; + transition: + background-color 0.2s ease, + color 0.2s ease; + + &::before { + content: ''; + position: absolute; + left: -2px; + top: 0; + bottom: 0; + width: 3px; + background-color: var(--ifm-color-primary); + opacity: 0; + transition: opacity 0.2s ease; + border-radius: 1px; + } + + &:hover, + &:focus { + background-color: var(--ifm-hover-overlay); + color: var(--ifm-navbar-link-hover-color); + outline: none; + + &::before { + opacity: 1; + } + + span { + background-color: var(--ifm-color-primary-light); + + svg { + color: var(--ifm-color-primary); + } + } + } +} + +/* Dark mode: Better contrast for SDK selection menu hover/focus */ +[data-theme='dark'] .sdk-selection-menu a:hover, +[data-theme='dark'] .sdk-selection-menu a:focus { + span { + background-color: var(--ifm-color-primary); + + svg { + color: var(--general-black); + } + } +} + +.sdk-selection-menu a div { + font-family: var(--ifm-font-family-base); + padding: 10px; + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + text-align: left; + margin: 0; +} + +.sdk-selection-menu a h2 { + font-family: var(--ifm-font-family-base); + font-size: 1.6rem !important; + font-weight: 500; + text-decoration: none !important; + margin: 0 0 4px 0; + color: inherit; + transition: color 0.2s ease; +} + +.sdk-selection-menu a p { + font-family: var(--ifm-font-family-base); + font-size: 1.4rem; + line-height: 1.8rem; + font-weight: 400 !important; + color: var(--ifm-menu-color); + text-decoration: none !important; + margin: 0; +} + +.sdk-selection-menu a span { + display: flex; + background-color: var(--ifm-code-background); + border-radius: 8px; + margin: 0; + text-align: center; + align-items: center; + justify-content: center; + padding: 5px; +} + +.sdk-selection-menu a:has(p) { + align-items: flex-start; +} + +.sdk-selection-menu a:has(p) span { + margin-top: 10px; +} + +.sdk-selection-menu a span svg { + height: 24px; + width: 24px; + color: var(--ifm-menu-color); + display: block; + position: relative; + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); +} + +.sdk-selection-menu a span svg.icon-thin { + width: 22px; + height: 22px; +} + +@media screen and (max-width: 996px) { + .sdk-selection-menu { + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + padding: 0; + gap: 0; + } + + .sdk-selection-menu ul { + gap: 0; + } + + .sdk-selection-menu a { + width: 100%; + justify-content: flex-start; + } +} + +@media screen and (max-width: 996px) { + .sdk-menu { + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + padding: 0; + gap: 0; + margin: 0; + width: 100%; + } + + .product-selection-menu { + display: none; + } + + .sdk-selection-menu { + display: flex; + } + + #pnp-menu h3::before { + content: 'Plug and Play - '; + } + + #core-kit-sfa-menu h3::before { + content: 'Core Kit SFA - '; + } + + #core-kit-mfa-menu h3::before { + content: 'Core Kit MFA - '; + } + + #wallet-ecosystems-menu h3::before { + content: 'Wallet Ecosystems - '; + } + + #helper-sdks-menu h3::before { + content: 'Helper SDKs - '; + } + + .sdk-selection-menu { + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + padding: 0; + gap: 0; + } + + .sdk-selection-menu ul { + gap: 0; + } + + .sdk-selection-menu a { + width: 100%; + justify-content: flex-start; + } +} +.sdk-sidebar-container { + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0.8rem; + margin-bottom: 1.6rem; + overflow: hidden; +} + +.sdk-sidebar-option { + display: flex; + flex-direction: column; + justify-content: center; + background-color: transparent; + padding: 1.6rem 1.6rem; + color: var(--ifm-menu-color); + font-size: 1.6rem; + line-height: 124%; + font-weight: 500; + text-decoration: none; + border-bottom: 1px solid var(--ifm-color-emphasis-200); + transition: all 0.2s ease; + cursor: pointer; + + &:last-child { + border-bottom: none; + } + + &:hover { + background-color: var(--ifm-hover-overlay); + color: var(--ifm-menu-color-active); + text-decoration: none; + } +} + +.sdk-sidebar-option-selected { + display: flex; + flex-direction: column; + justify-content: center; + background-color: var(--ifm-color-primary-lightest); + padding: 1rem 1.5rem; + color: var(--ifm-menu-color-active); + font-size: 1.6rem; + line-height: 124%; + font-weight: 600; + border-bottom: 1px solid var(--ifm-color-emphasis-200); + + &:last-child { + border-bottom: none; + } + + [data-theme='dark'] & { + background-color: var(--ifm-color-emphasis-200); + } +} + +.sdk-sidebar-dropdown-container { + display: flex; + margin-top: 0.8rem; + align-items: center; + gap: 1rem; + font-size: 1.4rem; + color: var(--ifm-color-emphasis-700); + font-weight: 500; +} + +.sdk-sidebar-dropdown { + flex: 1; + border: 1px solid var(--ifm-color-emphasis-300); + background-color: var(--ifm-background-surface-color); + border-radius: 0.4rem; + padding: 0.6rem 1rem; + font-size: 1.4rem; + color: var(--ifm-color-emphasis-800); + font-family: inherit; + font-weight: 500; + transition: all 0.2s ease; + + /* Use theme's select arrow */ + appearance: none; + background-image: var(--select-arrow); + background-repeat: no-repeat; + background-position: right 1rem center; + background-size: 0.8rem; + padding-right: 2.8rem; + + &:focus { + outline: none; + border-color: var(--ifm-color-primary); + box-shadow: 0 0 0 1px var(--ifm-color-primary-light); + } + + &:hover { + border-color: var(--ifm-color-primary); + } + + [data-theme='dark'] & { + border-color: var(--ifm-color-emphasis-400); + + &:hover { + border-color: var(--ifm-color-primary); + } + } +} + +.sdk-sidebar-description { + margin-top: 0.4rem; + color: var(--ifm-color-emphasis-600); + font-size: 1.2rem; + font-weight: 400; + line-height: 1.4; +} diff --git a/src/scss/elements/_contentful-rich-text.scss b/src/scss/elements/_contentful-rich-text.scss new file mode 100644 index 00000000000..f3747e46718 --- /dev/null +++ b/src/scss/elements/_contentful-rich-text.scss @@ -0,0 +1,109 @@ +.contentful-rich-text-styles { + font-size: 1.6rem; + line-height: 150%; + color: var(--general-gray-dark); + + .richtext-h2, + .richtext-h3 { + margin-top: 6rem; + margin-bottom: 2.4rem; + font-family: var(--font-mm-sans); + color: var(--general-black); + + &:first-child { + margin-top: 0; + } + + &.uppercase { + line-height: 100%; + } + } + + .richtext-h2 { + font-size: 2rem; + line-height: 1.4; + + @include bp('tablet') { + font-size: 3.4rem; + line-height: 116.667%; + } + } + + .richtext-h3 { + font-size: 1.6rem; + line-height: 1.5; + + @include bp('tablet') { + font-size: 2rem; + line-height: 140%; + } + } + + .richtext-hr { + height: 1px; + margin: 4rem 0; + background: var(--general-gray-light); + border: 0; + + @include bp('desktop') { + margin: 6rem 0 5.5rem; + } + } + + .richtext-ul { + margin-left: 2.5rem; + list-style: outside; + + li { + margin-bottom: 1rem; + font-size: 1.6rem; + line-height: 150%; + color: var(--general-gray-dark); + + ol, + ul { + margin-top: 1rem; + } + } + } + + .richtext-a { + font-weight: 500; + color: var(--consumer-orange-dark); + text-decoration-line: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.2rem; + + @include bp('desktop') { + &:hover { + text-decoration: none; + } + } + } + + .richtext-b { + font-weight: 500; + color: var(--general-gray-dark); + } + + .richtext-i { + font-style: italic; + } + + .richtext-p { + margin-bottom: 2.2rem; + + font-size: 1.6rem; + line-height: 150%; + color: var(--general-gray-dark); + white-space: normal; + + &:last-child { + margin-bottom: 0; + } + } + + .richtext-u { + text-decoration: underline; + } +} diff --git a/src/scss/elements/_form.scss b/src/scss/elements/_form.scss new file mode 100644 index 00000000000..11f27c8707f --- /dev/null +++ b/src/scss/elements/_form.scss @@ -0,0 +1,48 @@ +label { + cursor: pointer; + display: block; + margin-bottom: 0.3rem; +} + +input[type='email'], +input[type='number'], +input[type='tel'], +input[type='text'], +input[type='url'], +textarea, +select { + width: 100%; + padding: 1.2rem 1.6rem; + + color: var(--general-black); + + background-color: var(--general-white); + border: 1px solid var(--general-gray); + border-radius: 0.4rem; + + transition: + color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease, + border-color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease; + + &:focus { + border-color: var(--general-dark); + } +} + +input:not([type='search']) { + height: 4.2rem; + + &::placeholder { + color: var(--general-gray-dark); + opacity: 1; + } + + &::-ms-placeholder { + color: var(--general-gray-dark); + } +} + +textarea { + resize: vertical; + height: 8rem; +} diff --git a/src/scss/theme/_admonition-type.scss b/src/scss/theme/_admonition-type.scss new file mode 100644 index 00000000000..56acef279f3 --- /dev/null +++ b/src/scss/theme/_admonition-type.scss @@ -0,0 +1,193 @@ +[class*='admonition'].alert { + margin: 0; +} + +[class*='admonition'] { + ul { + list-style-position: outside; + list-style-type: disc; + margin: 1rem 1.6rem; + } + p { + margin-top: 0.6rem; + margin-bottom: 0.6rem; // For instances where we have multiple paragraphs in an admonition + } +} + +.alert { + padding: 2.4rem; + border-radius: 0; + color: var(--general-black); + box-shadow: none; + + [class*='admonitionHeading'] { + @extend .type-heading-xxs; + @extend .font-weight-medium; + font-family: var(--ifm-font-family-base); + display: flex; + align-items: center; + font-size: 1.4rem; + font-weight: 600; + letter-spacing: 0.02rem; + color: var(--ifm-alert-foreground-color); + margin-bottom: 0.6rem; + [class*='admonitionIcon'] { + display: flex; + font-size: 1rem; + margin-right: 0.8rem; + } + + code { + margin-inline: 0.3em; + padding: 0em 0.2em; + } + } + + [class*='admonitionContent'] { + @extend .type-paragraph-m; + margin-top: 0rem; + } + + a { + font-weight: 400; + color: var(--ifm-alert-foreground-color); + text-decoration-color: var(--ifm-alert-foreground-color); + text-decoration: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.3rem; + + &:hover { + text-underline-offset: 0.3rem; + } + } + + p, + ul { + code { + @extend .type-heading-xxs; + font-family: var(--inline-code-font); + color: var(--ifm-alert-foreground-color); + padding: var(--inline-code-padding); + background-color: var(--ifm-code-background); + border: none; + border-radius: var(--inline-code-border-radius); + font-size: var(--inline-code-font-size) !important; + font-weight: var(--inline-code-font-weight) !important; + position: relative !important; + top: var(--inline-code-baseline-nudge) !important; + } + + a code { + color: inherit; + } + } + + &--secondary { + --ifm-alert-background-color-highlight: #0a0a0a1a; + + a { + color: black !important; + html[data-theme='dark'] & { + color: white !important; + } + &:hover { + color: var(--developer-purple) !important; + html[data-theme='dark'] & { + color: var(--developer-green) !important; + } + } + } + } + + &--info { + --ifm-alert-background-color-highlight: #1900661a; + + a { + &:hover { + color: var(--consumer-blue) !important; + } + } + } + + &--success { + --ifm-alert-background-color-highlight: #0133301a; + + a { + &:hover { + color: var(--consumer-green) !important; + } + } + } + + &--warning, + &--danger { + --ifm-alert-background-color-highlight: #6618001a; + + a { + &:hover { + color: var(--consumer-orange) !important; + } + } + } + + &.theme-admonition-flaskOnly { + a { + &:hover { + color: var(--consumer-purple-dark) !important; + } + } + } + + [data-theme='dark'] & { + color: var(--general-white); + + code { + color: inherit; + } + + &--secondary { + --ifm-alert-background-color-highlight: #ffffff1a; + + a { + color: var(--consumer-green) !important; + + &:hover { + color: var(--consumer-green-light) !important; + } + } + } + + &--info { + --ifm-alert-background-color-highlight: #cce7ff1a; + color: var(--consumer-blue-light); + } + + &--success { + --ifm-alert-background-color-highlight: #e5ffc31a; + color: var(--consumer-green-light); + } + + &--warning, + &--danger { + --ifm-alert-background-color-highlight: #ffa6801a; + color: var(--consumer-orange-light); + } + + &.theme-admonition-flaskOnly { + --ifm-alert-background-color: var(--developer-purple-dark); + color: var(--developer-purple-light); + + [class*='admonitionHeading'] { + color: var(--developer-purple-light); + } + + a { + color: var(--developer-purple-light); + + &:hover { + color: var(--consumer-green-light) !important; + } + } + } + } +} diff --git a/src/scss/theme/_button.scss b/src/scss/theme/_button.scss new file mode 100644 index 00000000000..2513a44b31e --- /dev/null +++ b/src/scss/theme/_button.scss @@ -0,0 +1,23 @@ +.button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.8rem; + height: 4.2rem; + line-height: 1; + text-transform: uppercase; + + &--light { + background-color: var(--general-white); + color: var(--general-black); + + &:hover { + color: var(--general-black); + } + } + + svg { + width: 1rem; + height: 1rem; + } +} diff --git a/src/scss/theme/_doc-search.scss b/src/scss/theme/_doc-search.scss new file mode 100644 index 00000000000..93ab42ffbf5 --- /dev/null +++ b/src/scss/theme/_doc-search.scss @@ -0,0 +1,593 @@ +[data-theme='light'] .DocSearch { + /* --docsearch-primary-color: var(--ifm-color-primary); */ + /* --docsearch-text-color: var(--ifm-font-color-base); */ + --docsearch-muted-color: var(--general-gray-mid); + --docsearch-container-background: rgba(10, 10, 10, 0.9); + /* Modal */ + --docsearch-modal-background: var(--ifm-color-secondary-lighter); + /* Search box */ + --docsearch-searchbox-background: var(--ifm-color-secondary); + --docsearch-searchbox-focus-background: var(--general-gray-light); + --docsearch-primary-color: var(--general-black); + --docsearch-searchbox-shadow: 0 0 0 0.2rem var(--docsearch-primary-color); + --docsearch-highlight-color: var(--general-black); + /* Hit */ + --docsearch-hit-color: var(--ifm-font-color-base); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--ifm-color-white); + /* Footer */ + --docsearch-footer-background: var(--ifm-color-white); + + // Light mode: keep text/icons dark; use a light highlight background for hover/selection. + // We use !important here because DocSearch styles and our shared rules below + // set a dark background for hover/selection. + .DocSearch-Hit[aria-selected='true'] a, + .DocSearch-Hit[aria-selected='false'] a:hover { + background-color: var(--docsearch-hit-highlight-color) !important; + color: var(--general-black) !important; + } + + .DocSearch-Hit[aria-selected='true'] + a + :is(.DocSearch-Hit-title, .DocSearch-Hit-path, .DocSearch-Hit-text), + .DocSearch-Hit[aria-selected='false'] + a:hover + :is(.DocSearch-Hit-title, .DocSearch-Hit-path, .DocSearch-Hit-text) { + color: var(--general-black) !important; + } +} + +[data-theme='dark'] .DocSearch { + --docsearch-text-color: var(--ifm-font-color-base); + --docsearch-muted-color: var(--general-gray-mid); + --docsearch-container-background: rgba(10, 10, 10, 0.9); + /* Modal */ + --docsearch-modal-background: var(--general-gray-dark); + /* Search box */ + --docsearch-searchbox-background: var(--general-gray-dark); + --docsearch-searchbox-focus-background: var(--general-black-mid); + --docsearch-searchbox-shadow: 0 0 0 0.2rem var(--general-black-light); + --docsearch-highlight-color: var(--general-white); + + /* Hit */ + --docsearch-hit-color: var(--ifm-font-color-base); + --docsearch-hit-active-color: var(--ifm-color-white); + --docsearch-hit-background: var(--general-black-light); + /* Footer */ + --docsearch-footer-background: var(--ifm-background-surface-color); + --docsearch-key-gradient: linear-gradient( + -26.5deg, + var(--ifm-color-emphasis-200) 0%, + var(--ifm-color-emphasis-100) 100% + ); +} + +.DocSearch { + --docsearch-spacing: 1.2rem; + --docsearch-modal-width: 74.5rem; + --docsearch-modal-height: 60rem; + --docsearch-searchbox-height: 5.6rem; + --docsearch-footer-height: 4.4rem; + + .DocSearch-Button { + border: 1px solid var(--docsearch-primary-color); + background-color: var(--docsearch-searchbox-focus-background); + box-shadow: 0 0 0 0.1rem var(--docsearch-primary-color); + } + + .DocSearch-Button:hover { + box-shadow: 0 0 0 0.2rem var(--docsearch-primary-color); + } + + .DocSearch-Button:focus-visible { + box-shadow: 0 0 0 0.3rem var(--docsearch-primary-color); + } + + .DocSearch-Modal { + border-radius: 0; + margin: 0; + + @include bp('tablet') { + margin: 6rem auto auto; + border-radius: 0.8rem; + } + } + + .DocSearch-Dropdown-Container { + width: calc(var(--docsearch-modal-width) - var(--docsearch-spacing) * 2); + overflow: hidden; + + @include bp-max('tablet') { + max-width: 100%; + } + } + + .DocSearch-Form { + border-radius: 0.4rem; + } + + // Make "Clear the query" less prominent: icon-only clear affordance. + // Keeps the accessible label/title intact, but visually renders a small "×" icon. + .DocSearch-Clear { + font-size: 0; + width: 2.8rem; + height: 2.8rem; + padding: 0; + display: inline-flex; + align-items: center; + justify-content: center; + color: transparent; + } + + .DocSearch-Clear::before { + content: ''; + width: 1.6rem; + height: 1.6rem; + background-color: var(--docsearch-icon-color); + -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 3h6l1 2h5v2H3V5h5l1-2Zm1 6h2v10h-2V9Zm4 0h2v10h-2V9ZM7 9h2v10H7V9Zm-1 12h12a2 2 0 0 0 2-2V7H4v12a2 2 0 0 0 2 2Z'/%3E%3C/svg%3E") + no-repeat center / contain; + mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 3h6l1 2h5v2H3V5h5l1-2Zm1 6h2v10h-2V9Zm4 0h2v10h-2V9ZM7 9h2v10H7V9Zm-1 12h12a2 2 0 0 0 2-2V7H4v12a2 2 0 0 0 2 2Z'/%3E%3C/svg%3E") + no-repeat center / contain; + } + + .DocSearch-Clear:hover::before { + background-color: var(--docsearch-highlight-color); + } + + .DocSearch-Input { + font-size: 2rem; + font-weight: 400; + + &::placeholder { + color: var(--docsearch-muted-color); + font-weight: 300; + opacity: 0.75; + } + } + + .DocSearch-Help { + font-size: 1.4rem; + } + + .DocSearch-Hit-icon { + display: flex; + align-items: center; + justify-content: flex-start; + width: 2rem; + height: 2rem; + } + + .DocSearch-Label { + font-size: 1.2rem; + } + + .DocSearch-ErrorScreen, + .DocSearch-NoResults, + .DocSearch-StartScreen { + padding: 3.6rem 0; + } + + // No results: render the query on its own line to avoid overlap when wrapping + .DocSearch-NoResults .DocSearch-Title { + line-height: 1.2; + } + + .DocSearch-NoResults .DocSearch-Title > strong { + display: block; + margin-top: 0.2em; + line-height: 1.2; + overflow-wrap: anywhere; + word-break: break-word; + } + + .DocSearch-Dropdown { + margin-top: 0.2rem; + } + + .DocSearch-Hit-source { + font-weight: 500; + } + + .DocSearch-Hit[aria-selected='true'], + .DocSearch-Hit[aria-selected='false'] { + a { + text-decoration: none; + + @include bp('tablet') { + padding-top: 0.6rem; + padding-bottom: 0.6rem; + } + + &:hover { + text-decoration: none; + background-color: var(--general-black); + + .DocSearch-Hit-title, + .DocSearch-Hit-path { + color: var(--docsearch-hit-active-color); + } + } + } + + mark { + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.4rem; + } + } + + .DocSearch-Hit[aria-selected='true'] a { + background-color: var(--general-black); + + .DocSearch-Hit-title, + .DocSearch-Hit-path { + color: var(--docsearch-hit-active-color); + } + } + + .DocSearch-HitsFooter a { + border-bottom: none; + text-decoration: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.4rem; + + &:hover { + color: var(--docsearch-highlight-color); + } + } +} + +.main-wrapper { + .search-page-wrapper & { + margin: auto; + + .container { + width: calc(100% - var(--page-padding-x) * 2); + + @include bp('tablet') { + margin: 0 !important; + width: 100%; + } + } + + @include bp('tablet') { + max-width: 92.5rem; + min-width: 91.5rem; + } + + .col--8 { + font-size: 1.4rem; + font-weight: 400; + + @include bp('tablet') { + font-size: 1.6rem; + } + } + + .margin-vert--lg { + h1 { + padding: 3rem 0 2rem; + + @include bp('tablet') { + padding: 6.5rem 0 3rem; + } + } + } + + form input { + font-size: 1.6rem; + border: 1px solid var(--ifm-toc-border-color); + background: transparent; + + html[data-theme='dark'] & { + background-color: var(--general-gray-dark); + } + + &::placeholder { + font-size: 1.6rem; + } + + &:focus { + border: 1px solid var(--search-input-focus); + } + } + + main { + margin-top: 4rem; + } + + article { + padding: 2rem 0; + } + + h2 { + a { + color: var(--search-item-link); + @extend h3; + + &:hover { + color: var(--search-item-link-hover); + text-decoration: none; + } + } + } + + .breadcrumbs { + &__item:not(:last-child):after { + opacity: 1; + height: 1rem; + width: 0.7rem; + background-repeat: no-repeat; + background-size: 100%; + } + } + + .breadcrumbs, + p { + font-size: 1.6rem; + margin-top: 0.5rem; + } + + .search-result-match { + background-color: var(--ifm-code-background); + } + } +} + +/* Floating Ask AI launcher (portaled to body; not inside .DocSearch-Sidepanel). */ +button.DocSearch-SidepanelButton.floating { + --docsearch-sidepanel-primary: var(--developer-purple); + --docsearch-sidepanel-primary-dark: var(--developer-purple-dark); + color: var(--general-black); + width: auto !important; + min-width: 3.25rem; + padding: 0.5rem 1.2rem; + gap: 0.6rem; + border-radius: 10rem; + font-family: var(--ifm-font-family-base); + font-weight: 600; + + &:hover, + &:focus { + color: var(--general-white); + } + + /* Upstream only renders an icon for floating; add a visible label (aria-label already set by DocSearch). */ + &::after { + content: 'Ask AI'; + font-size: 1.3rem; + line-height: 1; + white-space: nowrap; + } + + svg { + flex-shrink: 0; + color: inherit; + } + + @include bp('tablet') { + width: auto !important; + height: 4rem; + min-height: 4rem; + padding: 0.5rem 1.4rem; + + &::after { + font-size: 1.4rem; + } + + svg { + height: 2rem; + width: 2rem; + } + } +} + +/* Algolia Ask AI Sidepanel */ +div[class*='DocSearch-Sidepanel'] { + font-family: var(--ifm-font-family-base) !important; + + .DocSearch-Sidepanel-Title { + font-size: 1.6rem !important; + font-family: var(--ifm-font-family-base) !important; + } + + .DocSearch-Sidepanel-Header-TitleIcon { + height: 1.6rem !important; + width: 1.6rem !important; + } + + .DocSearch-Sidepanel-Screen--title { + font-size: 2.4rem !important; + font-family: var(--ifm-font-family-base) !important; + } + + .DocSearch-Sidepanel-Screen--introduction { + font-size: 1.2rem !important; + line-height: 1.5 !important; + } + + .DocSearch-Sidepanel--powered-by { + font-size: 1rem !important; + } + + [class*='Answer'], + [class*='answer'], + [class*='Response'], + [class*='response'] { + p { + margin-bottom: 1rem !important; + line-height: 1.2 !important; + } + h1, + h2, + h3, + h4 { + margin-top: 1.2rem !important; + margin-bottom: 0.5rem !important; + line-height: 1.2 !important; + } + ol, + ul { + margin: 0.6rem 0 1rem 0 !important; + padding-left: 1.5rem !important; + } + li { + margin-bottom: 0.5rem !important; + line-height: 1.5 !important; + } + pre { + margin: 0.8rem 0 1rem !important; + } + a { + display: inline !important; + } + } + + textarea { + resize: none !important; + background: transparent !important; + width: 100% !important; + min-height: 24px !important; + max-height: 160px !important; + height: auto !important; + overflow-y: auto !important; + font-size: 1.2rem !important; + font-weight: 400 !important; + line-height: 1.4 !important; + color: inherit !important; + padding: 0.2rem 0 !important; + scroll-behavior: smooth; + + &::placeholder { + opacity: 0.65; + font-weight: 400; + } + } + + [class*='ChatInput'], + [class*='chat-input'], + .DocSearch-ChatInputWrapper { + display: flex !important; + align-items: flex-end !important; + gap: 0.8rem !important; + background-color: #0d1117 !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + border-radius: 1.2rem !important; + padding: 1rem 1.2rem !important; + transition: border-color 0.18s ease !important; + + &:focus-within { + border-color: rgba(255, 255, 255, 0.28) !important; + box-shadow: 0 0 0 3px rgba(103, 58, 183, 0.18) !important; + } + } + + /* Related Sources */ + .DocSearch-AskAiScreen-RelatedSources-List a { + display: flex !important; + gap: 8px !important; + font-size: 1.4rem !important; + } + + /* Submit & Stop Button */ + .DocSearch-Sidepanel-Prompt--submit, + .DocSearch-Sidepanel-Prompt--stop { + position: absolute !important; + right: 0.5rem !important; + bottom: 0.5rem !important; + width: 1.6rem !important; + height: 1.6rem !important; + } + + .DocSearch-Footer { + padding: 0.8rem 1.2rem 1rem !important; + background: transparent !important; + border-top: 1px solid rgba(255, 255, 255, 0.06) !important; + } + + /* AI can make mistakes */ + [class*='Disclaimer'], + [class*='disclaimer'] { + font-size: 1.1rem !important; + opacity: 0.65 !important; + text-align: center !important; + padding: 0.4rem 0 0.6rem !important; + } +} + +/* Dark mode */ +[data-theme='dark'] div[class*='DocSearch-Sidepanel'] { + background-color: #1b1b1d !important; + color: #e3e3e3 !important; + + [class*='MessageContent'], + [class*='message-content'], + [class*='AskAiScreen'] { + background-color: #1b1b1d !important; + color: #e3e3e3 !important; + } + + .DocSearch-Sidepanel-Header { + background-color: #1b1b1d !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important; + color: #e3e3e3 !important; + } + + /* Source */ + .DocSearch-AskAiScreen-RelatedSources-List a { + background-color: #2a2a2e !important; + color: #e3e3e3 !important; + border-color: rgba(255, 255, 255, 0.08) !important; + } + + .DocSearch-AskAiScreen-MessageContent-Tool { + color: #939397 !important; + } + + /* Code blocks */ + code { + color: #e3e3e3 !important; + } +} + +/* ── Light mode ── */ +[data-theme='light'] div[class*='DocSearch-Sidepanel'] { + [class*='ChatInput'], + [class*='chat-input'], + .DocSearch-ChatInputWrapper { + background-color: #f5f5f7 !important; + border-color: rgba(0, 0, 0, 0.1) !important; + + &:focus-within { + border-color: rgba(0, 0, 0, 0.3) !important; + box-shadow: 0 0 0 3px rgba(98, 0, 234, 0.1) !important; + } + } + + .DocSearch-AskAiScreen-MessageContent-Tool { + color: #939397 !important; + } + + [class*='Answer'], + [class*='answer'], + [class*='Response'], + [class*='response'] { + code { + color: #373739 !important; + } + li { + color: #1a1a1a !important; + } + li::marker { + color: #1a1a1a !important; + } + } + + [class*='Disclaimer'], + [class*='disclaimer'] { + color: #373738 !important; + } + + button[type='submit'] { + background-color: rgb(34, 93, 195) !important; + } +} diff --git a/src/scss/theme/_fonts.scss b/src/scss/theme/_fonts.scss new file mode 100644 index 00000000000..904c9da4b72 --- /dev/null +++ b/src/scss/theme/_fonts.scss @@ -0,0 +1,62 @@ +@font-face { + font-family: 'MM Poly Variable'; + src: url('/fonts/MM-Poly/MM_Poly-Variable.woff2') format('woff2-variations'); + font-style: normal; + font-display: swap; + font-variation-settings: 'wdth' 25; +} + +@font-face { + font-family: 'MM Sans Variable'; + src: url('/fonts/MM-Sans/MM_Sans-Variable.woff2') format('woff2-variations'); + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'MM Sans'; + src: url('/fonts/MM-Sans/MM_Sans-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'MM Sans Mono'; + src: url('/fonts/MM-Sans/MM_Sans_Mono-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Geist'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fonts/Geist/Geist-Regular.woff2') format('woff2'); +} + +@font-face { + font-family: 'Geist'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fonts/Geist/Geist-Medium.woff2') format('woff2'); +} + +@font-face { + font-family: 'Geist'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/fonts/Geist/Geist-Bold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Geist'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url('/fonts/Geist/Geist-RegularItalic.woff2') format('woff2'); +} diff --git a/src/scss/theme/_interactive-box.scss b/src/scss/theme/_interactive-box.scss new file mode 100644 index 00000000000..060ba717dff --- /dev/null +++ b/src/scss/theme/_interactive-box.scss @@ -0,0 +1,196 @@ +.interactive-right-sidebar { + .container { + margin: 0; + max-width: none; + width: 100% !important; + + .row, + .col { + margin: 0; + padding: 0; + max-width: none; + align-items: center !important; + + &.col--9 { + flex: 0 0 60%; + } + + &.col--3 { + flex: 0 0 40%; + } + + .col-xs-2 { + flex: 0 0 100%; + margin-bottom: 0.8rem; + } + } + + .array-item { + margin-bottom: 1.6rem; + } + + .array-item-toolbox { + gap: 0.4rem; + margin-bottom: 0; + margin-top: -1.6rem; + justify-content: flex-end !important; + } + } + + .control-label, + label { + font-size: 1.2rem; + margin-bottom: 0.8rem; + } + + legend { + font-size: 1.2rem; + margin-bottom: 0.6rem; + } + + .unsupported-field { + font-size: 1.2rem; + + pre { + padding: 1.6rem; + } + } + + &#method select, + &#method input, + &#interactive-box select, + &#interactive-box input { + border-radius: var(--ifm-global-radius); + border: 1px solid var(--general-gray); + font-size: 1.2rem; + padding: 0.8rem; + background: var(--docsearch-searchbox-focus-background); + color: var(--docsearch-text-color); + transition: border var(--ifm-transition-fast) ease; + + background-color: transparent; + } + + &#method select, + &#interactive-box select { + position: relative; + padding: 1.4rem; + margin-bottom: 1.6rem; + background: var(--select-arrow); + background-repeat: no-repeat; + background-size: 1rem 0.7rem; + background-position: 96% center; + } + + &#method input[type='checkbox'], + &#interactive-box input[type='checkbox'] { + appearance: auto; + width: 1.6rem; + height: 1.6rem; + } + + &#interactive-box .form-group { + margin-top: 0 !important; + margin-bottom: 0 !important; + + > fieldset { + display: block; + margin-bottom: 1.6rem; + } + } + + &#interactive-box .form-group.form-group { + width: 100%; + + &.field-object .form-additional { + width: auto !important; + margin: 1.6rem 1.6rem 1.6rem 0; + } + + &.form-additional.col-xs-5 { + width: 100% !important; + margin-right: 0; + } + + &.field-string, + &.field-integer, + &.field-array { + margin-bottom: 1.6rem !important; + } + } + + h3 { + font-size: 2rem; + margin-bottom: 0.9rem; + } + + h4 { + font-size: 1.6rem; + margin-bottom: 2.2rem; + } + + .button:not(.button--block) { + width: 4.2rem; + height: 4.2rem; + min-width: 4.2rem !important; + min-height: 4.2rem !important; + max-width: 4.2rem !important; + max-height: 4.2rem !important; + font-size: 1.8rem; + line-height: 0 !important; + + &.button--primary { + --ifm-button-background-color: var(--general-black); + --ifm-button-color: var(--general-white); + border: none; + padding: 0; + + [data-theme='dark'] & { + --ifm-button-background-color: var(--general-white); + --ifm-button-color: var(--general-black); + } + } + } + + .button { + background-color: var(--general-black); + color: var(--ifm-button-color); + border: var(--general-black); + + [data-theme='dark'] & { + background-color: var(--general-white); + color: var(--general-black); + border: var(--general-white); + } + + &.button--block { + margin-top: 2rem; + + @include bp('tablet') { + margin-top: 0; + } + } + + &.object-property-expand { + margin: 0; + } + } + + .alert { + padding: 1.3rem 1.6rem 1.6rem 1.6em; + font-size: 1.2rem; + border-left: 0.8rem solid var(--consumer-orange); + color: var(--consumer-orange-dark); + clip-path: polygon(0% 25%, 5% 0%, 100% 0, 100% 75%, 95% 100%, 0 100%); + margin-top: 1.6rem; + + [data-theme='dark'] & { + color: var(--consumer-orange-light); + } + } + + .theme-code-block { + border-radius: 0; + margin-top: 1.4rem; + } +} diff --git a/src/scss/theme/_markdown-cards.scss b/src/scss/theme/_markdown-cards.scss new file mode 100644 index 00000000000..2f446141e47 --- /dev/null +++ b/src/scss/theme/_markdown-cards.scss @@ -0,0 +1,111 @@ +.cards { + display: grid; + grid-auto-rows: auto; + grid-gap: 2rem; + margin-top: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); + margin-bottom: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); + + @include bp('tablet') { + grid-template-columns: repeat(2, 1fr); + } +} + +.sl-inline, +.sl-prose li p, +.sl-prose p > a > img, +.tags_jXut, +svg { + display: inline; +} + +.card { + border: none; + border-radius: 0; + box-shadow: none; + background: none; + + &__wrapper { + background-color: var(--ifm-hover-overlay); + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 3.2rem; + position: relative; + height: 100%; + text-decoration: none; + color: var(--general-black); + clip-path: polygon( + 0 2.2rem, + 2.2rem 0, + 100% 0, + 100% calc(100% - 2.2rem), + calc(100% - 2.2rem) 100%, + 0 100% + ); + min-height: 26.7rem; + + @include bp(desktop) { + min-height: 27rem; + } + + &::before { + position: absolute; + content: ''; + top: 0; + left: 0; + width: 1rem; + height: 100%; + opacity: 0; + transition: opacity calc(var(--motion) * var(--motion-speed)) $gentle-ease; + background-color: var(--ifm-color-primary); + } + + h3 { + @extend h4; + } + + a, + li { + color: var(--ifm-heading-color); + font-size: 1.6rem; + } + } + &__header { + padding: 0; + } + + &__body { + padding: 0; + + ul { + list-style: none; + + li { + &::before { + content: '\2022'; + font-size: 3rem; + padding-right: 0.6rem; + position: relative; + top: 0.1rem; + line-height: 0; + } + } + } + } + + &:hover { + filter: drop-shadow(0 0.8rem 2rem rgba(0, 0, 0, 0.1)); + + .card__wrapper { + background-color: var(--general-white); + + &::before { + opacity: 1; + } + + html[data-theme='dark'] & { + background-color: var(--general-black); + } + } + } +} diff --git a/src/scss/theme/_markdown.scss b/src/scss/theme/_markdown.scss new file mode 100644 index 00000000000..9048ae90ebe --- /dev/null +++ b/src/scss/theme/_markdown.scss @@ -0,0 +1,278 @@ +.markdown { + --ifm-h1-vertical-rhythm-top: 3; + --ifm-h2-vertical-rhythm-top: 3; + --ifm-h3-vertical-rhythm-top: 2.5; + --ifm-heading-vertical-rhythm-top: 2.75; + + --ifm-h1-vertical-rhythm-bottom: 2.35; + --ifm-heading-vertical-rhythm-bottom: 1; + + padding: 2.4rem 0 0 0; + + @include bp('desktop') { + padding: 0; + } + + strong, + b { + font-weight: 500; + } + + i, + em { + font-style: italic; + } + + /* Links */ + > p, + > span, + > h1, + > h2, + > h3, + > h4, + > h5, + > h6, + > ul, + > ol, + table, + .cards { + a { + color: var(--ifm-link-color); + text-decoration: underline; + text-decoration-color: var(--ifm-link-color); + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.3rem; + transition: color var(--ifm-transition-fast) var(--ifm-transition-timing-default); + font-weight: 400; + + &:hover { + color: var(--ifm-link-hover-color); + text-decoration: underline; + text-decoration-color: var(--ifm-link-hover-color); + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.3rem; + } + } + } + + p a, + li a { + font-weight: 400; + text-underline-offset: 0.3rem; + } + + > ol { + list-style: decimal; + margin-left: 2rem; + + li { + margin-bottom: 1rem; + } + } + + > ol ol { + margin-top: 1rem; + + li { + margin-left: 2rem; + margin-bottom: 1rem; + } + } + + ul ol { + margin-top: 1rem; + margin-left: 3rem; + margin-bottom: 2rem; + + li { + margin-bottom: 1rem; + } + } + + > ul { + margin-left: 2rem; + list-style-type: disc; + list-style-position: outside; + + li { + margin-bottom: 1rem; + ol, + ul { + margin-top: 1rem; + } + } + } + + ul ul { + list-style-type: circle; + margin-left: 1.6rem; + } + + ul ul ul { + list-style-type: square; + } + + code { + padding: var(--inline-code-padding); + font-family: var(--inline-code-font); + background-color: var(--ifm-code-background); + border: none; + box-shadow: none; + border-radius: var(--inline-code-border-radius); + } + + pre code, + [class*='codeBlockContainer'] code { + background-color: transparent; + border-radius: 0; + } + + p + [class*='codeBlockContainer'] { + margin-top: 1rem; + } + + h1 > code, + h2 > code, + h3 > code, + h4 > code, + h5 > code, + p > code, + ul li > code, + ol li > code, + a > code, + table > code, + table td > code, + table th > code, + span > code { + font-size: var(--inline-code-font-size); + font-weight: var(--inline-code-font-weight); + position: relative; + top: var(--inline-code-baseline-nudge); + } + + table { + font-size: 1.6rem; + line-height: 150%; + border-collapse: collapse; + margin-top: calc(var(--ifm-heading-vertical-rhythm-top) * var(--ifm-leading)); + + thead tr { + border-bottom: 1px solid; + } + + th { + font-weight: 500; + } + + th, + td { + vertical-align: middle; + text-align: left; + padding: 1.2rem; + } + } + + details { + @extend .type-paragraph-m; + box-shadow: none; + padding: 2rem; + background-color: var(--ifm-color-secondary-contrast-background); + border: none; + color: var(--ifm-heading-color) !important; + margin: calc(var(--ifm-leading) * 2) 0; + font-weight: 500; + + ul { + margin-left: 0; + list-style-type: none; + + li { + margin-bottom: 1rem; + + &::before { + content: '\2022'; + font-size: 3rem; + padding-right: 0.6rem; + position: relative; + top: 0.1rem; + line-height: 0; + } + + ol, + ul { + margin-top: 1rem; + } + } + } + + [class*='collapsibleContent'] { + border-top: 1px solid var(--ifm-code-background); + margin-top: 2rem; + padding-top: 2rem; + font-weight: 400 !important; + } + + p code, + li code, + td code, + th code, + a code, + summary code { + @extend .type-paragraph-s; + color: var(--ifm-heading-color) !important; + background-color: var(--ifm-code-background); + border: none; + border-radius: var(--inline-code-border-radius); + font-size: var(--inline-code-font-size); + font-weight: var(--inline-code-font-weight); + position: relative; + top: var(--inline-code-baseline-nudge); + } + + table tr:nth-child(2n) { + background-color: var(--ifm-table-stripe-background); + } + } + + details > summary code, + [class*='details'] > summary code { + font-size: 0.9em !important; + text-transform: none; + } + + [class*='details'] > summary { + @extend .type-heading-xxs; + font-family: var(--ifm-font-family-base); + font-size: 1.4rem; + font-weight: 600; + letter-spacing: 0.02rem; + text-transform: uppercase; + color: var(--ifm-heading-color); + line-height: 1.25; + padding-left: 2.5rem; + position: relative; + list-style: none; + cursor: pointer; + margin: 0; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 50%; + width: 0.6rem; + height: 0.6rem; + margin-top: -0.65rem; + background-color: var(--ifm-heading-color); + clip-path: polygon(20% 10%, 20% 90%, 85% 50%); + transform-origin: 50% 50%; + transform: rotate(0deg); + transition: transform 0.15s ease; + } + } + + details[open] > summary::before, + [class*='details'][open] > summary::before { + transform: rotate(90deg); + } +} diff --git a/src/scss/theme/_prism-code.scss b/src/scss/theme/_prism-code.scss new file mode 100644 index 00000000000..2910257448a --- /dev/null +++ b/src/scss/theme/_prism-code.scss @@ -0,0 +1,139 @@ +/** + * prism.js Dark theme for JavaScript, CSS and HTML + * Based on the slides of the talk “/Reg(exp){2}lained/” + * @author Lea Verou + */ +code[class*='language-'], +pre[class*='language-'] { + font-family: var(--inline-code-font); + line-height: 1.5; + hyphens: none; + color: var(--general-gray) !important; + text-align: left; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + tab-size: 4; + white-space: pre; + font-size: 1.4rem; + padding: 2rem; + background: none; + + @media (width <= 768px) { + padding: 2rem; + } +} + +[class*='codeBlockTitle'] { + background-color: var(--general-black-light); + border-bottom: 1px solid var(--general-gray-dark) !important; + padding: 1.2rem 2rem !important; + + @media (width <= 768px) { + padding: 0.8rem 2rem !important; + } +} + +[class*='codeBlockTitle'] + [class*='codeBlockContent'] { + code[class*='language-'], + pre[class*='language-'] { + padding-top: 1.2rem; + } +} + +pre code { + padding: 0 !important; +} + +.prism-code { + background-color: var(--general-black-light) !important; +} + +[class*='buttonGroup'] { + top: 0.8rem !important; + right: 0.8rem !important; + + button { + border-radius: 0 !important; + } +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6f6f6f !important; +} + +.token.punctuation { + color: var(--general-gray) !important; +} + +.token.property, +.token.boolean, +.token.number, +.token.constant, +.token.symbol { + color: var(--developer-blue) !important; +} + +.token.function { + color: var(--developer-green) !important; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.tag, +.token.builtin, +.token.inserted { + color: var(--developer-purple) !important; +} + +.token.entity, +.token.url, +.language-css .token.string, +.token.attr-value, +.style .token.string, +.token.variable { + color: var(--developer-purple) !important; +} + +.token.atrule, +.token.keyword { + color: var(--developer-blue) !important; +} + +.token.regex, +.token.important { + color: var(--developer-purple) !important; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.deleted { + color: var(--error) !important; +} + +.token.plain { + color: var(--general-gray) !important; +} + +@media print { + code[class*='language-'], + pre[class*='language-'] { + text-shadow: none; + } +} diff --git a/src/scss/theme/_react-dropdown.scss b/src/scss/theme/_react-dropdown.scss new file mode 100644 index 00000000000..0a1ac50bd2e --- /dev/null +++ b/src/scss/theme/_react-dropdown.scss @@ -0,0 +1,33 @@ +.react-dropdown-select-dropdown { + > .react-dropdown-select-item { + color: var(--general-black); + + &.react-dropdown-select-item-selected { + background-color: var(--consumer-purple); + } + + &:not(.react-dropdown-select-item-selected):hover, + &:not(.react-dropdown-select-item-selected):focus { + background-color: var(--consumer-purple-light); + } + + [data-theme='dark'] & { + &.react-dropdown-select-item-selected { + background-color: var(--consumer-green); + } + + &:not(.react-dropdown-select-item-selected):hover, + &:not(.react-dropdown-select-item-selected):focus { + background-color: var(--consumer-green-light); + } + } + } +} + +.react-dropdown-select.select-lang { + min-width: 100px; + + input { + height: auto; + } +} diff --git a/src/scss/theme/_react-tippy.scss b/src/scss/theme/_react-tippy.scss new file mode 100644 index 00000000000..6f8ec2db49c --- /dev/null +++ b/src/scss/theme/_react-tippy.scss @@ -0,0 +1,90 @@ +.tippy-popper[x-placement^='top'] [x-arrow] { + border-top: 0.7rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='top'] [x-arrow].arrow-small { + border-top: 0.5rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='top'] [x-arrow].arrow-big { + border-top: 1rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='bottom'] [x-arrow] { + border-bottom: 0.7rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='bottom'] [x-arrow].arrow-small { + border-bottom: 0.5rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='bottom'] [x-arrow].arrow-big { + border-bottom: 1rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='left'] [x-arrow] { + border-left: 0.7rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='left'] [x-arrow].arrow-small { + border-left: 0.5rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='left'] [x-arrow].arrow-big { + border-left: 1rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='right'] [x-arrow] { + border-right: 0.7rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='right'] [x-arrow].arrow-small { + border-right: 0.5rem solid var(--general-black) !important; +} +.tippy-popper[x-placement^='right'] [x-arrow].arrow-big { + border-right: 1rem solid var(--general-black) !important; +} +.tippy-tooltip { + background-color: var(--general-black) !important; +} +.tippy-tooltip [x-circle] { + background-color: var(--general-black) !important; +} + +[data-theme='dark'] { + .tippy-popper[x-placement^='top'] [x-arrow] { + border-top: 0.7rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='top'] [x-arrow].arrow-small { + border-top: 0.5rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='top'] [x-arrow].arrow-big { + border-top: 1rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='bottom'] [x-arrow] { + border-bottom: 0.7rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='bottom'] [x-arrow].arrow-small { + border-bottom: 0.5rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='bottom'] [x-arrow].arrow-big { + border-bottom: 1rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='left'] [x-arrow] { + border-left: 0.7rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='left'] [x-arrow].arrow-small { + border-left: 0.5rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='left'] [x-arrow].arrow-big { + border-left: 1rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='right'] [x-arrow] { + border-right: 0.7rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='right'] [x-arrow].arrow-small { + border-right: 0.5rem solid var(--general-white) !important; + } + .tippy-popper[x-placement^='right'] [x-arrow].arrow-big { + border-right: 1rem solid var(--general-white) !important; + } + .tippy-tooltip { + background-color: var(--general-white) !important; + } + .tippy-tooltip [x-circle] { + background-color: var(--general-white) !important; + } + .tippy-tooltip-content { + color: var(--general-black); + } +} diff --git a/src/scss/theme/_sidebar.scss b/src/scss/theme/_sidebar.scss new file mode 100644 index 00000000000..fe948befa43 --- /dev/null +++ b/src/scss/theme/_sidebar.scss @@ -0,0 +1,327 @@ +.menu { + /* Sidebar "guide line" (vertical tree line) color */ + --doc-sidebar-guide-line-color: var(--ifm-toc-border-color); + /* Single source of truth for the tree-line X position (used by lines + selected highlight) */ + --doc-sidebar-line-x: 1.6rem; + /* Indentation step applied at each nesting level so line spacing + text spacing + * stay consistent for level 2/3/4/... */ + --doc-sidebar-indent-step: calc(var(--ifm-menu-link-padding-horizontal) - 0.6rem); + /* Selected item background tint (fallback first, then color-mix for nicer tinting) */ + --doc-sidebar-selected-bg: rgba(186, 242, 74, 0.1); + --doc-sidebar-selected-bg: color-mix(in srgb, var(--ifm-color-primary) 14%, transparent); + + @include bp('tablet') { + --doc-sidebar-line-x: 2.4rem; + } + + &.thin-scrollbar { + padding: 1rem 0 0; + } + + .navbar-sidebar__back { + background-color: transparent; + margin-top: 1.4rem; + + @include bp-max('tablet') { + padding-left: 2.1rem; + } + } + + &__list { + /* The tree line is positioned relative to the list's padding box. + * We store the current list padding-left so selected-row highlights can + * compute a matching x-offset in the row coordinate space. */ + --doc-sidebar-list-padding-left: 0px; + + padding-top: 0; + padding-bottom: 0; + + @include bp('tablet') { + padding-top: 0.5rem; + padding-bottom: 1rem; + } + + /* Consistent nesting indentation: every nested list adds the same step */ + .menu__list { + flex: 0 0 100%; + padding-top: 0rem; + padding-bottom: 0rem; + margin-bottom: 0.25rem; + padding-left: var(--doc-sidebar-indent-step); + --doc-sidebar-list-padding-left: var(--doc-sidebar-indent-step); + } + + /* Vertical guide lines (tree lines) for expanded category trees (level 1+). */ + .menu__list-item.theme-doc-sidebar-item-category-level-1 > .menu__list, + .menu__list-item.theme-doc-sidebar-item-category-level-2 > .menu__list, + .menu__list-item.theme-doc-sidebar-item-category-level-3 > .menu__list, + .menu__list-item.theme-doc-sidebar-item-category-level-4 > .menu__list, + .menu__list-item.theme-doc-sidebar-item-category-level-5 > .menu__list, + .menu__list-item.theme-doc-sidebar-item-category-level-6 > .menu__list { + position: relative; + + &::before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: var(--doc-sidebar-line-x); + width: 1px; + background: var(--doc-sidebar-guide-line-color); + pointer-events: none; + opacity: 0; + } + } + + .menu__list-item.theme-doc-sidebar-item-category-level-1:not(.menu__list-item--collapsed) + > .menu__list::before, + .menu__list-item.theme-doc-sidebar-item-category-level-2:not(.menu__list-item--collapsed) + > .menu__list::before, + .menu__list-item.theme-doc-sidebar-item-category-level-3:not(.menu__list-item--collapsed) + > .menu__list::before, + .menu__list-item.theme-doc-sidebar-item-category-level-4:not(.menu__list-item--collapsed) + > .menu__list::before, + .menu__list-item.theme-doc-sidebar-item-category-level-5:not(.menu__list-item--collapsed) + > .menu__list::before, + .menu__list-item.theme-doc-sidebar-item-category-level-6:not(.menu__list-item--collapsed) + > .menu__list::before { + opacity: 1; + } + .theme-doc-sidebar-item-link-level-1 { + padding-bottom: 0.4rem; + } + .theme-doc-sidebar-item-category-level-1 { + padding-bottom: 0.4rem; + } + } + + &__list-item { + position: relative; + z-index: 1; + width: 100%; + + /* Reduce top-level nav emphasis (level 1). */ + &.theme-doc-sidebar-item-category-level-1 > .menu__list-item-collapsible > .menu__link { + font-size: 1.5rem; + font-weight: 400; + } + + /* Top-level doc pages (e.g. "Introduction") are link items, not categories. */ + &.theme-doc-sidebar-item-link-level-1 > .menu__link { + font-size: 1.5rem; + font-weight: 400; + } + + /* Only the active page should be bold; keep ancestor path normal weight. */ + + &-collapsible { + border-radius: 0; + } + + /* Hover: no background/bar (TOC-like). Only a subtle text emphasis. */ + &-collapsible:hover { + background-image: none !important; + background-color: transparent !important; + background: transparent !important; /* override Infima `background:` shorthand */ + } + + /* Active (expanded category row): no bar, no filled background, just typography */ + &-collapsible--active { + background-image: none !important; + background-color: transparent !important; + background: transparent !important; /* override Infima `background:` shorthand */ + } + + /* Apply the subtle hover emphasis to the text inside collapsible rows */ + &-collapsible:hover .menu__link { + color: var(--ifm-menu-color-active); + /* Faux-bold without reflow (more stable than font-weight changes) */ + text-shadow: 0 0 0 currentColor; + } + + &.theme-doc-sidebar-item-category-level-2, + &.theme-doc-sidebar-item-category-level-3, + &.theme-doc-sidebar-item-category-level-4, + &.theme-doc-sidebar-item-category-level-5, + &.theme-doc-sidebar-item-category-level-6, + &.theme-doc-sidebar-item-link-level-2, + &.theme-doc-sidebar-item-link-level-3, + &.theme-doc-sidebar-item-link-level-4, + &.theme-doc-sidebar-item-link-level-5, + &.theme-doc-sidebar-item-link-level-6 { + a { + color: var(--ifm-menu-color); + font-weight: 400; + font-size: 1.5rem; + } + + &:not(:first-child) { + margin-top: 0rem; + } + } + + &:not( + :first-child, + .theme-doc-sidebar-item-link-level-2, + .theme-doc-sidebar-item-link-level-3, + .theme-doc-sidebar-item-link-level-4, + .theme-doc-sidebar-item-link-level-5, + .theme-doc-sidebar-item-link-level-6 + ) { + margin-top: 0rem; + } + } + + &__link { + color: var(--ifm-menu-color-active); + font-size: 1.7rem; + line-height: 124%; + text-decoration: none; + font-weight: 500; + /* Ensure background fills the full row */ + display: flex; + width: 100%; + box-sizing: border-box; + padding: 0.6rem 1.6rem; + border-radius: 0; + text-decoration: none !important; + + @include bp('tablet') { + padding: 0.6rem 2.4rem; + } + + &--active { + color: var(--ifm-menu-color-active); + /* Docusaurus applies `menu__link--active` to the active page *and* its ancestor + * categories. Keep active color, but don't bold the whole ancestor path. */ + font-weight: inherit; + text-shadow: none; + /* Selected item: no bar / no filled background */ + background-image: none !important; + background-color: transparent !important; + + + .menu__caret { + opacity: 1; + } + } + + /* Only the actual selected page link should be bold. */ + &[aria-current='page'] { + /* Selected page: keep the *normal* text color (no green), rely on highlight only */ + font-weight: inherit; + text-shadow: none; + color: var(--ifm-menu-color) !important; + + &:hover, + &:focus-visible { + color: var(--ifm-menu-color) !important; + text-shadow: none; + } + } + + /* Hover: slight contrast, no "highlight bar" */ + &:hover:not([aria-current='page']), + &:focus-visible:not([aria-current='page']) { + background-image: none !important; + background-color: transparent !important; + background: transparent !important; /* override Infima `background:` shorthand */ + color: var(--ifm-menu-color-active); + /* Faux-bold without reflow (more stable than font-weight changes) */ + text-shadow: 0 0 0 currentColor; + } + } + + /* Selected item highlight: apply to the *row header only* (not the whole
  • ), + * otherwise expanded categories would tint their entire subtree. We also avoid + * relying on `:has()` by using `data-current-page` (stamped by our swizzled components). */ + + /* Link items: the row is the direct child. */ + .menu__list-item[data-current-page='true'] > a.menu__link { + position: relative; + } + .menu__list-item[data-current-page='true'] > a.menu__link::before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + /* Convert list-space line position to row-space by subtracting the list padding-left. */ + left: calc(var(--doc-sidebar-line-x) - var(--doc-sidebar-list-padding-left) + 0.5px); + right: 0; + background: var(--doc-sidebar-selected-bg); + pointer-events: none; + z-index: 0; + } + + /* Top-level link items (level 1): no meaningful tree line on the row, so let the + * selected highlight run full-width. */ + .menu__list-item.theme-doc-sidebar-item-link-level-1[data-current-page='true'] + > a.menu__link::before { + left: 0; + } + .menu__list-item[data-current-page='true'] > a.menu__link > * { + position: relative; + z-index: 1; + } + + /* Category items: the row header is the collapsible wrapper. */ + .menu__list-item[data-current-page='true'] > .menu__list-item-collapsible { + position: relative; + } + .menu__list-item[data-current-page='true'] > .menu__list-item-collapsible::before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: calc(var(--doc-sidebar-line-x) - var(--doc-sidebar-list-padding-left) + 0.5px); + right: 0; + background: var(--doc-sidebar-selected-bg); + pointer-events: none; + z-index: 0; + } + .menu__list-item[data-current-page='true'] > .menu__list-item-collapsible > * { + position: relative; + z-index: 1; + } + + &__caret { + padding: 1rem 2rem 1rem 1rem; + opacity: 0.25; + + &::before { + background: var(--ifm-menu-link-sublist-icon); + background-repeat: no-repeat; + background-size: contain; + height: 0.7rem; + width: 0.9rem; + content: ''; + } + } + + &__link--active + &__caret::before { + opacity: 1; + } + + &__link--non-collapsible { + cursor: default; + } +} + +/* Dark mode: make tree lines more subtle */ +[data-theme='dark'] .menu { + --doc-sidebar-guide-line-color: rgba(255, 255, 255, 0.12); + --doc-sidebar-selected-bg: rgba(186, 242, 74, 0.14); +} + +.theme-doc-sidebar-container { + @include bp-max('desktop') { + border-right: none !important; + } +} + +.navbar-sidebar { + @include bp-max('tablet') { + &__brand { + padding: 0 var(--page-padding-x); + } + } +} diff --git a/src/scss/theme/_tags-listing.scss b/src/scss/theme/_tags-listing.scss new file mode 100644 index 00000000000..b5eead98930 --- /dev/null +++ b/src/scss/theme/_tags-listing.scss @@ -0,0 +1,108 @@ +.main-wrapper { + .docs-tags-doc-list-page & { + h1 { + padding: 3rem 0 2rem; + + @include bp('tablet') { + padding: 4.5rem 0 3rem; + } + } + + header { + a { + color: var(--search-item-link); + text-decoration: underline; + text-decoration-thickness: 0.1rem; + text-underline-offset: 0.4rem; + text-decoration-color: currentColor; + + &:hover { + color: var(--search-item-link-hover); + } + } + } + + article { + padding: 2rem 0; + margin: 0 !important; + border-bottom: 1px solid var(--ifm-toc-border-color); + + h2 { + color: inherit; + @extend h3; + } + + a { + &:hover { + text-decoration: none !important; + + color: var(--search-item-link-hover); + } + } + + p { + font-size: 1.6rem; + margin-top: 0.5rem; + } + } + } + + .docs-tags-list-page & { + h1 { + padding: 3rem 0 2rem; + + @include bp('tablet') { + padding: 4.5rem 0 3rem; + } + } + + h2 { + color: inherit; + @extend h3; + } + + ul { + li { + margin: 0; + } + + a { + font-size: 1.2rem; + line-height: 0; + font-weight: 500; + color: var(--tag-text-color); + padding: 0.5rem 0.9rem; + margin: 0; + border: 1px solid var(--tag-border-color); + background-color: var(--tag-background-color); + transition: + border var(--ifm-transition-fast), + color var(--ifm-transition-fast), + background var(--ifm-transition-fast); + border-radius: var(--ifm-global-radius); + + &::before, + &::after { + content: none !important; + } + + &:hover { + text-decoration: none !important; + text-decoration: none; + color: var(--tag-text-color-hover); + background-color: var(--tag-background-color-hover); + border: 1px solid var(--tag-background-color-hover); + } + + span { + margin-left: 0.5rem; + } + } + } + + hr { + background-color: var(--ifm-toc-border-color); + margin: 2.6rem 0; + } + } +} diff --git a/src/scss/theme/_toc.scss b/src/scss/theme/_toc.scss new file mode 100644 index 00000000000..a33b2e6ec0e --- /dev/null +++ b/src/scss/theme/_toc.scss @@ -0,0 +1,110 @@ +/* Target ToC container using attribute selector for CSS modules compatibility */ +[class*='tableOfContents'] { + margin-top: -3rem; + top: calc(var(--ifm-navbar-height) + 4rem) !important; +} + +/* Increase offset when SubNavBar is present to clear the sticky banner */ +body:has([class*='subNavBar']) [class*='tableOfContents'] { + top: calc(var(--ifm-navbar-height) + 9rem) !important; +} + +.table-of-contents { + &__left-border { + border-left: 0.2rem solid var(--ifm-color-primary); + padding-top: 0; + padding-bottom: 0; + padding-left: 1rem; + margin-top: 0.5rem; + + &.interactive-right-sidebar { + border-left: none; + padding: 3rem 0.8rem 4.6rem; + + @include bp('tablet') { + border-left: 1px solid var(--ifm-toc-border-color); + padding: 0 2.4rem; + } + } + } + + &__link { + font-size: 1.3rem; + font-weight: 400; + line-height: 124%; + text-decoration: none !important; + color: var(--ifm-toc-link-color); + opacity: 0.9; + + &:hover, + &--active { + color: var(--ifm-menu-color-active); + opacity: 1; + + code { + color: var(--ifm-menu-color-active); + } + } + + code { + font-family: var(--inline-code-font); + font-size: 1.2rem; + font-weight: var(--inline-code-font-weight); + line-height: 1.1; + border-radius: var(--inline-code-border-radius); + background-color: var(--ifm-code-background); + border: none; + padding: var(--inline-code-padding); + hyphens: auto; + position: relative; + top: var(--inline-code-baseline-nudge); + } + } + li { + margin: 1.3rem 0.2rem; + } + ul > li { + margin: 1.3rem 0.8rem; + } +} + +.theme-doc-toc-mobile { + background-color: transparent !important; + border: 1px solid var(--general-gray); + margin: 0rem 0 1rem 0 !important; + + [data-theme='dark'] & { + border: 1px solid var(--ifm-toc-border-color) !important; + } + + button { + font-size: 1.6rem; + font-weight: 500; + line-height: 124%; + padding: 1rem 1.6rem; + + &:after { + background: var(--ifm-menu-link-sublist-icon) 50% 50% / 1rem 1rem no-repeat; + height: 1rem; + width: 1rem; + } + + & + div { + border-top: 1px solid var(--general-gray); + padding: 0 0.8rem 0; + + [data-theme='dark'] & { + border-top: 1px solid var(--ifm-toc-border-color) !important; + } + } + } + + ul { + border-top: 1px solid transparent !important; + padding-left: 0.2rem; + + & > li { + margin: 1.5rem 0.8rem !important; + } + } +} diff --git a/src/scss/utils/_breakpoints.scss b/src/scss/utils/_breakpoints.scss new file mode 100644 index 00000000000..c433e3d1734 --- /dev/null +++ b/src/scss/utils/_breakpoints.scss @@ -0,0 +1,35 @@ +/* +* Breakpoints +*/ +$tablet: 768px; +$desktop: 997px; +$tablet-max: calc(#{$tablet} - 1px); +$desktop-max: calc(#{$desktop} - 1px); + +@mixin bp($class) { + @if $class == tablet { + @media screen and (min-width: $tablet) { + @content; + } + } @else if $class == desktop { + @media screen and (min-width: $desktop) { + @content; + } + } @else { + @warn "responsive mixin supports: tablet, desktop"; + } +} + +@mixin bp-max($class) { + @if $class == tablet { + @media screen and (max-width: $tablet-max) { + @content; + } + } @else if $class == desktop { + @media screen and (max-width: $desktop-max) { + @content; + } + } @else { + @warn "responsive mixin supports: tablet, desktop"; + } +} diff --git a/src/scss/utils/_ease.scss b/src/scss/utils/_ease.scss new file mode 100644 index 00000000000..c5614fdadcf --- /dev/null +++ b/src/scss/utils/_ease.scss @@ -0,0 +1,69 @@ +// Cubic +$cubic-in: cubic-bezier(0.55, 0.055, 0.675, 0.19); +$cubic-out: cubic-bezier(0.215, 0.61, 0.355, 1); +$cubic-in-out: cubic-bezier(0.645, 0.045, 0.355, 1); + +// Circ +$circ-in: cubic-bezier(0.6, 0.04, 0.98, 0.335); +$circ-out: cubic-bezier(0.075, 0.82, 0.165, 1); +$circ-in-out: cubic-bezier(0.785, 0.135, 0.15, 0.86); + +// Expo +$expo-in: cubic-bezier(0.95, 0.05, 0.795, 0.035); +$expo-out: cubic-bezier(0.19, 1, 0.22, 1); +$expo-in-out: cubic-bezier(1, 0, 0, 1); + +// Quad +$quad-in: cubic-bezier(0.55, 0.085, 0.68, 0.53); +$quad-out: cubic-bezier(0.25, 0.46, 0.45, 0.94); +$quad-in-out: cubic-bezier(0.455, 0.03, 0.515, 0.955); + +// Quart +$quart-in: cubic-bezier(0.895, 0.03, 0.685, 0.22); +$quart-out: cubic-bezier(0.165, 0.84, 0.44, 1); +$quart-in-out: cubic-bezier(0.77, 0, 0.175, 1); + +// Quint +$quint-in: cubic-bezier(0.755, 0.05, 0.855, 0.06); +$quint-out: cubic-bezier(0.23, 1, 0.32, 1); +$quint-in-out: cubic-bezier(0.86, 0, 0.07, 1); + +// Sine +$sine-in: cubic-bezier(0.47, 0, 0.745, 0.715); +$sine-out: cubic-bezier(0.39, 0.575, 0.565, 1); +$sine-in-out: cubic-bezier(0.445, 0.05, 0.55, 0.95); + +// Back +$back-in: cubic-bezier(0.6, -0.28, 0.735, 0.045); +$back-out: cubic-bezier(0.175, 0.885, 0.32, 1.275); +$back-in-out: cubic-bezier(0.68, -0.55, 0.265, 1.55); + +// Figma Gentle +$gentle-ease: cubic-bezier(0.4, 1.35, 0.5, 0.97); + +// Linear Spring +$spring-ease: linear( + 0, + 0.007, + 0.03 2.1%, + 0.122 4.6%, + 0.243 6.9%, + 0.645 13.7%, + 0.85 18.1%, + 0.926, + 0.987, + 1.032 24.7%, + 1.064 27.1%, + 1.077 28.7%, + 1.085, + 1.088 32.3%, + 1.086 34.3%, + 1.074 37.8%, + 1.033 45.8%, + 1.015 50%, + 1.002 54.7%, + 0.994 59.6%, + 0.992 66.4%, + 0.999 85%, + 1.001 +); diff --git a/src/scss/utils/_global-import.scss b/src/scss/utils/_global-import.scss new file mode 100644 index 00000000000..d107b61103b --- /dev/null +++ b/src/scss/utils/_global-import.scss @@ -0,0 +1,5 @@ +@import 'ease'; +@import 'mixin'; +@import 'grid'; +@import 'variables'; +@import 'breakpoints'; diff --git a/src/scss/utils/_grid.scss b/src/scss/utils/_grid.scss new file mode 100644 index 00000000000..d5bde9de5f7 --- /dev/null +++ b/src/scss/utils/_grid.scss @@ -0,0 +1,121 @@ +@use 'sass:math'; + +// LOCAL HELPERS +@function calculate-column-span( + $total-column-count, + $gutter-width, + $page-padding, + $column-count, + $offset: 0 +) { + @return calc( + ((100vw - #{$page-padding * 2}) / #{$total-column-count}) * #{$column-count} - + #{($total-column-count - $column-count) * math.div($gutter-width, $total-column-count)} + + #{$offset} + ); +} + +@function calculate-column-offset-left( + $total-column-count, + $gutter-width, + $page-padding, + $column-count, + $offset: 0 +) { + @return calc( + ( + (100vw - #{$page-padding * 2}) / #{$total-column-count} + + #{math.div($gutter-width, $total-column-count)} + ) * + #{$column-count} + #{$offset} + ); +} + +// FUNCTIONS +@function get-grid-column-span($column-count, $offset: 0) { + @return calculate-column-span( + $grid-column-count, + $grid-gutter-width, + $page-padding-x-mobile, + $column-count, + $offset + ); +} + +@function get-grid-column-span-desktop($column-count, $offset: 0) { + @return calculate-column-span( + $grid-column-count-desktop, + $grid-gutter-width-desktop, + $page-padding-x-desktop, + $column-count, + $offset + ); +} + +@function get-grid-position-start($column-count-start, $offset: 0) { + @return calculate-column-offset-left( + $grid-column-count, + $grid-gutter-width, + $page-padding-x-mobile, + $column-count-start, + $offset + ); +} + +@function get-grid-position-start-desktop($column-count-start, $offset: 0) { + @return calculate-column-offset-left( + $grid-column-count-desktop, + $grid-gutter-width-desktop, + $page-padding-x-desktop, + $column-count-start, + $offset + ); +} + +// MIXINS + +// PARENT MIXINS +@mixin grid { + display: grid; + grid-gap: $grid-gutter-width; + grid-template-columns: repeat(#{$grid-column-count}, 1fr); + padding: 0; + + @include bp('tablet') { + grid-gap: $grid-gutter-width-tablet; + grid-template-columns: repeat(#{$grid-column-count-tablet}, 1fr); + } + + @include bp('desktop') { + grid-gap: $grid-gutter-width-desktop; + grid-template-columns: repeat(#{$grid-column-count-desktop}, 1fr); + } + + // This enables default grid width, but we might not need it. + // > * { + // @include grid-column-span($grid-column-count); + + // @include bp('tablet') { + // @include grid-column-span($grid-column-count-tablet); + // } + + // @include bp('desktop') { + // @include grid-column-span($grid-column-count-desktop); + // } + // } +} + +@mixin subgrid { + display: grid; + grid-template-columns: subgrid; +} + +// CHILD MIXINS + +@mixin grid-column-span($column-count) { + grid-column: span $column-count / span $column-count; +} + +@mixin grid-column-start($column-count-start) { + grid-column-start: $column-count-start; +} diff --git a/src/scss/utils/_mixin.scss b/src/scss/utils/_mixin.scss new file mode 100644 index 00000000000..1e19f84ebd1 --- /dev/null +++ b/src/scss/utils/_mixin.scss @@ -0,0 +1,46 @@ +// Grid +@function span($col, $shrink: false) { + $shrink: if($shrink, 1, 0); + + @return $col * $column + ($col - $shrink) * $gutter; +} + +// hover media query +@mixin hover { + @media (hover: hover) { + &:hover { + @content; + } + } +} + +// css line-clamp +// https://css-tricks.com/almanac/properties/l/line-clamp/ +@mixin line-clamp($value: 2) { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + + -webkit-line-clamp: var(--line-clamp, $value); +} + +// parameters with quotes are optional +@mixin animate( + $animation, + $duration, + $timing-function, + $delay: '', + $iteration-count: '', + $direction: '', + $fill-mode: '', + $play-state: '' +) { + animation: $animation $duration $timing-function #{$delay} #{$iteration-count} #{$direction} + #{$fill-mode} #{$play-state}; +} + +@mixin keyframes($name) { + @keyframes #{$name} { + @content; + } +} diff --git a/src/scss/utils/_variables.scss b/src/scss/utils/_variables.scss new file mode 100644 index 00000000000..a3324eb076a --- /dev/null +++ b/src/scss/utils/_variables.scss @@ -0,0 +1,19 @@ +// Layout +$tablet-mockup-width: 834; +$desktop-mockup-width: 1440; +$page-padding-x-mobile: 1.6rem; +$page-padding-x-tablet: 1.6rem; +$page-padding-x-desktop: 2.4rem; +$site-container-max-width: 1920px; + +// Grid +$grid-column-count: 8; +$grid-gutter-width: 0.8rem; +$grid-column-count-tablet: 8; +$grid-gutter-width-tablet: 1.6rem; +$grid-column-count-desktop: 16; +$grid-gutter-width-desktop: 1.6rem; + +// Header +$header-mobile-height: 6.1rem; +$header-desktop-height: 8rem; diff --git a/src/specs/linea/openrpc.json b/src/specs/linea/openrpc.json new file mode 100644 index 00000000000..33fb2fdc080 --- /dev/null +++ b/src/specs/linea/openrpc.json @@ -0,0 +1,18299 @@ +{ + "openrpc": "1.0.0", + "info": { + "version": "1.0.0", + "title": "Linea JSON-RPC Specification", + "description": "Linea is a type 2 zero knowledge Ethereum Virtual Machine (zkEVM). Linea allows you to deploy any smart contract, use any tool, and develop as if you're building on Ethereum. For users, this enables the experience and security guarantees of Ethereum, but with lower transaction costs.", + "license": { + "name": "MIT" + } + }, + "methods": [ + { + "name": "admin_addPeer", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Archive" + }, + { + "name": "Besu" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in for admin_addPeer", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_addPeer", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_changeLogLevel", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_changeLogLevel", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_generateLogBloomCache", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_generateLogBloomCache", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_logsRemoveCache", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_logsRemoveCache", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_logsRepairCache", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_logsRepairCache", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_nodeInfo", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_nodeInfo", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_peers", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_peers", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "admin_removePeer", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "admin_removePeer", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_accountAt", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_accountAt", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_accountRange", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_accountRange", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_batchSendRawTransaction", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_batchSendRawTransaction", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_getBadBlocks", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_getBadBlocks", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_getRawBlock", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Besu" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_getRawBlock", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_getRawHeader", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Besu" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_getRawHeader", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_metrics", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_metrics", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_replayBlock", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Besu" + }, + { + "name": "Archive" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_replayBlock", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_resyncWorldstate", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_resyncWorldstate", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_setHead", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_setHead", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_standardTraceBadBlockToFile", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_standardTraceBadBlockToFile", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_standardTraceBlockToFile", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_standardTraceBlockToFile", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_storageRangeAt", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_storageRangeAt", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_traceBlock", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "debug_traceBlock", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "debug_traceBlockByHash", + "tags": [ + { + "name": "Paid plan" + } + ], + "summary": "Get trace by block hash", + "description": "This request returns tracer objects for the given block hash.", + "params": [ + { + "name": "blockHash", + "required": true, + "schema": { + "description": "A string representing the hash (32 bytes) of a block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "name": "tracerConfig", + "description": "Apply one of the following options to customize the tracer.", + "required": true, + "schema": { + "anyOf": [ + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["callTracer"] + }, + "onlyTopCall": { + "description": "When `true`, will only trace the primary (top-level) call and not any sub-calls. It eliminates the additional processing for each call frame.", + "type": "boolean" + }, + "withLog": { + "description": "When `true`, instructs the tracer to also collect the logs emitted during each call.", + "type": "boolean" + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The prestate tracer has two modes, `prestate` and `diff`. The prestate mode returns the accounts necessary to execute a given transaction. `diff` mode returns the differences between the transaction's pre- and post-state (what changed *because* the transaction happened). The prestateTracer defaults to `prestate` mode. It reexecutes the given transaction and tracks every part of state that's touched.", + "type": "string", + "enum": ["prestateTracer"] + }, + "diffMode": { + "type": "boolean", + "default": false, + "description": "Setting this to `true` enables `diff` mode. In `diff` mode, the result contains a pre and a post object." + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["flatCallTracer"] + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["4byteTracer"] + } + } + } + ] + } + } + ], + "result": { + "name": "debug_traceBlockByHashResponse", + "description": "Returns the specified tracer type object.", + "schema": { + "anyOf": [ + { + "description": "This returns all the call frames executed during a transaction, including depth 0. The result provides a nested list of call frames. They form a tree with the top-level call at root and sub-calls as children of the higher levels.", + "properties": { + "calls": { + "type": "object", + "items": { + "anyOf": [ + { + "transactionInfo": null, + "type": "object", + "properties": { + "tracerData": { + "type": "object", + "description": "Tracer object.", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "linkedCalls": { + "type": "array", + "description": "A recursive structure that nests additional call frames. Each call frame can, in turn, make sub-calls, and the calls field within each frame captures those sub-calls.", + "items": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "calls": null, + "description": "Next call object." + } + ] + } + } + } + }, + { + "type": "array", + "description": "Participant account, balance, and transaction count.", + "items": { + "type": "object", + "properties": { + "address": { + "description": "Participant account.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "balance": { + "description": "Balance.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + } + } + } + }, + { + "type": "array", + "description": "An array of trace results from the 4byteTracer.", + "items": { + "type": "object", + "properties": { + "result": { + "type": "object", + "description": "A map where the key is a function selector and calldata size, and the value is the number of occurrences.", + "additionalProperties": { + "type": "integer", + "description": "Number of occurrences of the function call with the specified selector and calldata size." + } + }, + "transactionHash": { + "description": "The transaction hash that the traces relate to.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + { + "description": "Returns all the call frames executed during a transaction in a flat structure. Each call frame includes details about the action taken, gas used, and other transaction information. Unlike `callTracer`, this result is not nested.\n", + "type": "object", + "title": "TracerObject", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "32-byte block hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "subtraces": { + "type": "integer", + "description": "The number of subtraces that occurred within the call." + }, + "traceAddress": { + "type": "array", + "description": "The trace address showing the nested level of the call.", + "items": { + "type": "integer" + } + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionPosition": { + "type": "integer", + "description": "The position of the transaction within the block." + } + } + } + ] + } + }, + "examples": [ + { + "name": "debug_traceBlockByHashExampleCallTracer", + "jsonrpc": "2.0", + "method": "debug_traceBlockByHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd713b3656eb77f26bb6c95d459b3479b3327e7c639622b5a78de1b529021d272" + }, + { + "name": "tracerConfig", + "value": { + "tracer": "callTracer", + "tracerConfig": { + "onlyTopCall": false, + "withLog": false + } + } + } + ], + "result": { + "name": "debug_traceBlockByHashCallTracerExampleResponse", + "value": { + "calls": [ + { + "calls": [ + { + "calls": [ + { + "calls": [ + { + "calls": [ + { + "from": "0x81f6138153d473e8c5ecebd3dc8cd4903506b075", + "gas": "0x11f8", + "gasUsed": "0x0", + "input": "0x", + "to": "0xc08e5aba57275df66488973b97d233ee4eba5179", + "type": "CALL", + "value": "0x881af82a81a4000" + } + ] + }, + { + "from": "0x5f688f563dc16590e570f97b542fa87931af2fed", + "gas": "0x2be7e", + "gasUsed": "0x6c96", + "input": "0x203bd15f00000000000000000000000000000000000000000000000000000000000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e470000000000000000000000000000000000000000000000000000000000008eb3252dd050cf1396907a4d94e4757d0cc4e82bd2a5e14c4dee2cafa24695f56765000000000000000000000000c08e5aba57275df66488973b97d233ee4eba51790000000000000000000000000000000000000000000000000000000000095a6400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000000", + "to": "0x81f6138153d473e8c5ecebd3dc8cd4903506b075", + "type": "CALL", + "value": "0x0" + } + ] + }, + { + "from": "0x1a44076050125825900e736c501f859c50fe728c", + "gas": "0x2f21a", + "gasUsed": "0x9576", + "input": "0x13137d6500000000000000000000000000000000000000000000000000000000000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e470000000000000000000000000000000000000000000000000000000000008eb3252dd050cf1396907a4d94e4757d0cc4e82bd2a5e14c4dee2cafa24695f5676500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000408804c5dcd9796f22558464e6fe5bddf16a7c70000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002b01000d000000000000000000000000c08e5aba57275df66488973b97d233ee4eba51790000000000095a640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "to": "0x5f688f563dc16590e570f97b542fa87931af2fed", + "type": "CALL", + "value": "0x0" + } + ] + }, + { + "from": "0x0408804c5dcd9796f22558464e6fe5bddf16a7c7", + "gas": "0x34008", + "gasUsed": "0xdff4", + "input": "0x0c0c389e00000000000000000000000000000000000000000000000000000000000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e470000000000000000000000000000000000000000000000000000000000008eb30000000000000000000000005f688f563dc16590e570f97b542fa87931af2fed252dd050cf1396907a4d94e4757d0cc4e82bd2a5e14c4dee2cafa24695f5676500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002b01000d000000000000000000000000c08e5aba57275df66488973b97d233ee4eba51790000000000095a640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "to": "0x1a44076050125825900e736c501f859c50fe728c", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0x0408804c5dcd9796f22558464e6fe5bddf16a7c7", + "gas": "0x57b12", + "gasUsed": "0x11708", + "input": "0xcfc3257000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005f688f563dc16590e570f97b542fa87931af2fed00000000000000000000000000000000000000000000000000000000000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e470000000000000000000000000000000000000000000000000000000000008eb3252dd050cf1396907a4d94e4757d0cc4e82bd2a5e14c4dee2cafa24695f56765000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000034008000000000000000000000000000000000000000000000000000000000000002b01000d000000000000000000000000c08e5aba57275df66488973b97d233ee4eba51790000000000095a640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "to": "0x41abb80c2c404dec94b9f09bf758b8fa22ebbc73", + "type": "DELEGATECALL", + "value": "0x0" + }, + { + "from": "0xe93685f3bba03016f02bd1828badd6195988d950", + "gas": "0x60324", + "gasUsed": "0x1605b", + "input": "0xcfc3257000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005f688f563dc16590e570f97b542fa87931af2fed00000000000000000000000000000000000000000000000000000000000075e80000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e470000000000000000000000000000000000000000000000000000000000008eb3252dd050cf1396907a4d94e4757d0cc4e82bd2a5e14c4dee2cafa24695f56765000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000034008000000000000000000000000000000000000000000000000000000000000002b01000d000000000000000000000000c08e5aba57275df66488973b97d233ee4eba51790000000000095a640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "to": "0x0408804c5dcd9796f22558464e6fe5bddf16a7c7", + "type": "CALL", + "value": "0x0", + "txHash": "0xd19361dd3b67fa3bf31be06593c0bf3b190d8e5a6cd4149d06d148eaed976d92" + } + ] + } + ] + } + } + }, + { + "name": "debug_traceBlockByHashExample4byteTracer", + "jsonrpc": "2.0", + "method": "debug_traceBlockByHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd713b3656ebb7f26bb6c95d459b3479b3327e7c639622b5a78de1b529021d272" + }, + { + "name": "tracerConfig", + "value": { + "tracer": "4byteTracer" + } + } + ], + "result": { + "name": "debug_traceBlockByHash4byteTracerExampleResponse", + "description": "4byteTracer response providing a map whose keys are SELECTOR-CALLDATASIZE and the values are number of occurrences of this key.", + "value": { + "traces": [ + { + "result": { + "0x0c0c389e-352": 1, + "0x13137d65-352": 1, + "0x203bd15f-256": 1, + "0xcfc32570-416": 2 + }, + "txHash": "0xd19361dd3b67fa3bf31be06593c0bf3b190d8e5a6cd4149d06d148eaed976d92" + }, + { + "result": { + "0x051456a8-288": 1, + "0x23b872dd-96": 2, + "0x2cc4081e-608": 1, + "0x4625a94d-192": 2, + "0x6cb568c1-128": 1, + "0x70a08231-32": 2, + "0x7132bb7f-288": 1, + "0xabcef554-32": 2, + "0xb1dd61b6-0": 1, + "0xf7888aec-64": 2, + "0xf9609f08-64": 1 + }, + "txHash": "0x0a4d6f4bd64b0874b45e9c2656260f81941142183322b84e9ee72fc4cff960c2" + }, + { + "result": {}, + "txHash": "0xf59cd5e2838fa5643d054c265e93e898982ad778c8c1779d6ab532c0c0374722" + }, + { + "result": { + "0xa2a9539c-256": 2 + }, + "txHash": "0x7722a7f28b9f293539fe6f3cfc81640c877ce1c2b36926686916590ed5b964be" + }, + { + "result": { + "0xa2a9539c-256": 2 + }, + "txHash": "0x0b4abb0d825bb8ea65e943752c23d7929b421880f2d191563dc025dd871d6f25" + }, + { + "result": { + "0xa2a9539c-256": 2 + }, + "txHash": "0x06a50602ed0e7bd2fdfba5cb2640dd26c2b5a652a59faa9a2576e045305a0dc1" + }, + { + "result": { + "0xd123b4d8-960": 2 + }, + "txHash": "0xbd95b970d10b04c119af4211b6cc2ee35553fcc8dece61bdb749a34634d294d4" + }, + { + "result": {}, + "txHash": "0x43cc3e8e4b9031d1cf82dbb308770f47bcb302360f5ea1547ae295c9a4987980" + }, + { + "result": {}, + "txHash": "0x36d54f9282787b6eb08530e9005fce730cfa97b23615d5b0d" + } + ] + } + } + } + ] + }, + { + "name": "debug_traceBlockByNumber", + "tags": [ + { + "name": "Paid plan" + }, + { + "name": "Archive" + } + ], + "summary": "Get trace by block number", + "description": "This request returns tracer objects for the given block identified by number or tag.", + "params": [ + { + "name": "block", + "description": "Block number or string tag.", + "required": true, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + }, + { + "name": "tracerConfig", + "description": "Apply one of the following options to customize the tracer.", + "required": true, + "schema": { + "anyOf": [ + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["callTracer"] + }, + "onlyTopCall": { + "description": "When `true`, will only trace the primary (top-level) call and not any sub-calls. It eliminates the additional processing for each call frame.", + "type": "boolean" + }, + "withLog": { + "description": "When `true`, instructs the tracer to also collect the logs emitted during each call.", + "type": "boolean" + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The prestate tracer has two modes, `prestate` and `diff`. The prestate mode returns the accounts necessary to execute a given transaction. `diff` mode returns the differences between the transaction's pre- and post-state (what changed *because* the transaction happened). The prestateTracer defaults to `prestate` mode. It reexecutes the given transaction and tracks every part of state that's touched.", + "type": "string", + "enum": ["prestateTracer"] + }, + "diffMode": { + "type": "boolean", + "default": false, + "description": "Setting this to `true` enables `diff` mode. In `diff` mode, the result contains a pre and a post object." + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["flatCallTracer"] + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["4byteTracer"] + } + } + } + ] + } + } + ], + "result": { + "name": "debug_traceBlockByNumberResponse", + "description": "Returns the specified tracer type object.", + "schema": { + "anyOf": [ + { + "description": "This returns all the call frames executed during a transaction, including depth 0. The result provides a nested list of call frames. They form a tree with the top-level call at root and sub-calls as children of the higher levels.", + "properties": { + "calls": { + "type": "object", + "items": { + "anyOf": [ + { + "transactionInfo": null, + "type": "object", + "properties": { + "tracerData": { + "type": "object", + "description": "Tracer object.", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "linkedCalls": { + "type": "array", + "description": "A recursive structure that nests additional call frames. Each call frame can, in turn, make sub-calls, and the calls field within each frame captures those sub-calls.", + "items": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "calls": null, + "description": "Next call object." + } + ] + } + } + } + }, + { + "type": "array", + "description": "Participant account, balance, and transaction count.", + "items": { + "type": "object", + "properties": { + "address": { + "description": "Participant account.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "balance": { + "description": "Balance.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + } + } + } + }, + { + "type": "array", + "description": "An array of trace results from the 4byteTracer.", + "items": { + "type": "object", + "properties": { + "result": { + "type": "object", + "description": "A map where the key is a function selector and calldata size, and the value is the number of occurrences.", + "additionalProperties": { + "type": "integer", + "description": "Number of occurrences of the function call with the specified selector and calldata size." + } + }, + "transactionHash": { + "description": "The transaction hash that the traces relate to.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + { + "description": "Returns all the call frames executed during a transaction in a flat structure. Each call frame includes details about the action taken, gas used, and other transaction information. Unlike `callTracer`, this result is not nested.\n", + "type": "object", + "title": "TracerObject", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "32-byte block hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "subtraces": { + "type": "integer", + "description": "The number of subtraces that occurred within the call." + }, + "traceAddress": { + "type": "array", + "description": "The trace address showing the nested level of the call.", + "items": { + "type": "integer" + } + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionPosition": { + "type": "integer", + "description": "The position of the transaction within the block." + } + } + } + ] + } + }, + "examples": [ + { + "name": "debug_traceBlockByNumberExample", + "jsonrpc": "2.0", + "method": "debug_traceBlockByNumber", + "id": 1, + "params": [ + { + "name": "block", + "value": "0x4d0c" + }, + { + "name": "tracerOptions", + "value": "callTracer" + } + ], + "result": { + "name": "debug_traceBlockByNumberExampleResponse", + "value": { + "calls": [ + { + "calls": [ + { + "from": "0x032b241de86a8660f1ae0691a4760b426ea246d7", + "gas": "0x45f9a", + "gasUsed": "0xc4c", + "input": "0xbecbcc6a0000000000000000000000000a3bb08b3a15a19b4de82f8acfc862606fb69a2d000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f0000000000000000000000000000000000000000000000000000000000000bb8", + "output": "0x000000000000000000000000f8018b964ac00227b892a8d3c48e682217f90bab", + "to": "0x45e5f26451cdb01b0fa1f8582e0aad9a6f27c218", + "type": "STATICCALL" + }, + { + "calls": [ + { + "calls": [ + { + "from": "0xf8018b964ac00227b892a8d3c48e682217f90bab", + "gas": "0x2e09b", + "gasUsed": "0x787f", + "input": "0xa9059cbb00000000000000000000000018badf36ec74dae9d3f028805b58c8ca277752680000000000000000000000000000000000000000000000050b5c0ef5d801d97c", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0x0a3bb08b3a15a19b4de82f8acfc862606fb69a2d", + "type": "CALL", + "value": "0x0" + }, + { + "from": "0xf8018b964ac00227b892a8d3c48e682217f90bab", + "gas": "0x1a1b9", + "gasUsed": "0x216", + "input": "0x70a08231000000000000000000000000f8018b964ac00227b892a8d3c48e682217f90bab", + "output": "0x00000000000000000000000000000000000000000000000007c9a71528aa4bd5", + "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "type": "STATICCALL" + } + ] + } + ] + } + ] + }, + { + "calls": [ + { + "from": "0xe2df725e44ab983e8513ecfc9c3e13bc21ea867e", + "gas": "0x1c721", + "gasUsed": "0x750a", + "input": "0xa9059cbb000000000000000000000000272e156df8da513c69cb41cc7a99185d53f926bb00000000000000000000000000000000000000000000000000157f47b74c925b", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001", + "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "type": "CALL", + "value": "0x0" + } + ] + } + ] + } + } + } + ] + }, + { + "name": "debug_traceTransaction", + "tags": [ + { + "name": "Paid plan" + } + ], + "summary": "Get trace by transaction hash", + "description": "This request returns tracer objects for the given transaction hash.", + "params": [ + { + "name": "transactionHash", + "description": "A string representing the hash (32 bytes) of a transaction.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "name": "tracerConfig", + "description": "Apply one of the following options to customize the tracer, including an optional timeout.", + "required": true, + "schema": { + "type": "object", + "anyOf": [ + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["callTracer"] + }, + "onlyTopCall": { + "description": "When `true`, will only trace the primary (top-level) call and not any sub-calls. It eliminates the additional processing for each call frame.", + "type": "boolean" + }, + "withLog": { + "description": "When `true`, instructs the tracer to also collect the logs emitted during each call.", + "type": "boolean" + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The prestate tracer has two modes, `prestate` and `diff`. The prestate mode returns the accounts necessary to execute a given transaction. `diff` mode returns the differences between the transaction's pre- and post-state (what changed *because* the transaction happened). The prestateTracer defaults to `prestate` mode. It reexecutes the given transaction and tracks every part of state that's touched.", + "type": "string", + "enum": ["prestateTracer"] + }, + "diffMode": { + "type": "boolean", + "default": false, + "description": "Setting this to `true` enables `diff` mode. In `diff` mode, the result contains a pre and a post object." + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["flatCallTracer"] + } + } + }, + { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["4byteTracer"] + } + } + } + ], + "properties": { + "timeout": { + "description": "Specifies a maximum time for how long the trace operation should run before timing out. Valid units are `ns`, `us`, `ms`, `s`. For example, \"5s\" for 5 seconds or \"3s30ms\" for 3.03 seconds.", + "type": "string", + "example": "5s", + "pattern": "^(10s|[0-9]s([0-9]{1,2}ms)?)?$" + } + } + } + } + ], + "result": { + "name": "debug_traceTransactionResponse", + "description": "Returns the specified tracer type object.", + "schema": { + "anyOf": [ + { + "description": "This returns all the call frames executed during a transaction, including depth 0. The result provides a nested list of call frames. They form a tree with the top-level call at root and sub-calls as children of the higher levels.", + "properties": { + "calls": { + "type": "object", + "items": { + "anyOf": [ + { + "transactionInfo": null, + "type": "object", + "properties": { + "tracerData": { + "type": "object", + "description": "Tracer object.", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "linkedCalls": { + "type": "array", + "description": "A recursive structure that nests additional call frames. Each call frame can, in turn, make sub-calls, and the calls field within each frame captures those sub-calls.", + "items": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "calls": null, + "description": "Next call object." + } + ] + } + } + } + }, + { + "type": "array", + "description": "Participant account, balance, and transaction count.", + "items": { + "type": "object", + "properties": { + "address": { + "description": "Participant account.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "balance": { + "description": "Balance.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + } + } + } + }, + { + "type": "array", + "description": "An array of trace results from the 4byteTracer.", + "items": { + "type": "object", + "properties": { + "result": { + "type": "object", + "description": "A map where the key is a function selector and calldata size, and the value is the number of occurrences.", + "additionalProperties": { + "type": "integer", + "description": "Number of occurrences of the function call with the specified selector and calldata size." + } + }, + "transactionHash": { + "description": "The transaction hash that the traces relate to.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + { + "description": "Returns all the call frames executed during a transaction in a flat structure. Each call frame includes details about the action taken, gas used, and other transaction information. Unlike `callTracer`, this result is not nested.\n", + "type": "object", + "title": "TracerObject", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "32-byte block hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "subtraces": { + "type": "integer", + "description": "The number of subtraces that occurred within the call." + }, + "traceAddress": { + "type": "array", + "description": "The trace address showing the nested level of the call.", + "items": { + "type": "integer" + } + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionPosition": { + "type": "integer", + "description": "The position of the transaction within the block." + } + } + } + ] + } + }, + "examples": [ + { + "name": "debug_traceTransactionExample", + "jsonrpc": "2.0", + "method": "debug_traceTransaction", + "id": 1, + "params": [ + { + "name": "transactionHash", + "value": "0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c" + }, + { + "name": "tracerConfig", + "value": { + "tracer": "callTracer", + "tracerConfig": { + "onlyTopCall": true, + "timeout": "3s30ms" + } + } + } + ], + "result": { + "name": "debug_traceTransactionExampleResponse", + "value": { + "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", + "gas": "0x5208", + "gasUsed": "0x5208", + "input": "0x", + "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", + "type": "CALL", + "value": "0x2ca186f5fda8004" + } + } + } + ] + }, + { + "name": "eth_accounts", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Returns a null value", + "description": "Typically, this request returns a list of addresses owned by a user. However, as Infura doesn't support \"unlocking\" of accounts, consider sending a pre-signed raw transactions using `eth_sendRawTransaction`.", + "params": [], + "result": { + "name": "eth_accountsResponse", + "description": "This request returns an empty object because Infura does not support \"unlocking\" accounts.", + "schema": { + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + } + }, + "examples": [ + { + "name": "eth_accountsExample", + "jsonrpc": "2.0", + "method": "eth_accounts", + "id": 1, + "params": [], + "result": { + "name": "eth_accountsExampleResponse", + "value": [] + } + } + ] + }, + { + "name": "eth_blockNumber", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get the latest block number", + "description": "This request returns a hexadecimal of the current/latest block number.", + "params": [], + "result": { + "name": "eth_blockNumberResponse", + "schema": { + "description": "The current block number the client is on, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "examples": [ + { + "name": "eth_blockNumberExample", + "jsonrpc": "2.0", + "method": "eth_blockNumber", + "id": 1, + "params": [], + "result": { + "name": "eth_blockNumberExampleResponse", + "value": "0x8a369b" + } + } + ] + }, + { + "name": "eth_call", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Execute a new message call", + "description": "This request executes a new message call without creating a transaction on the blockchain. It allows you to invoke a contract function locally to interact with smart contracts and query data without modifying the blockchain state or consuming gas. `eth_call` is ideal for retrieving data, simulating transactions, or testing contract interactions. \nYou may (optionally) specify a block identifier to simulate the transaction on, or estimate gas usage based on the state of the blockchain at that block.\nIf the execution continues beyond the gas cap (10x the block gas limit), the node stops the simulation and returns an error. This prevents demand for excessive computational resource use or API abuse.\n", + "params": [ + { + "name": "transaction", + "required": true, + "schema": { + "type": "object", + "description": "Transaction object generic to all Linea-supported transactions. All transaction call object parameters are optional.", + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "Address of the action receiver.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender. `eth_call` consumes zero gas, but this schema supports other executions that might need this parameter. `eth_estimateGas` ignores this value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Input data; alternative term for `data`.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei. Used only in non-[EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) transactions.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "default": "0x0" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee, in wei, the sender is willing to pay per gas above the base fee. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxPriorityFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list; a list of addresses and storage keys that the transaction plans to access.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + { + "name": "block", + "required": false, + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_callResponse", + "description": "Note that, an `execution reverted` message suggests that the transaction would fail on-chain or that the contract logic has conditions that aren't met when simulating the transaction.", + "schema": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "examples": [ + { + "name": "eth_callExample", + "jsonrpc": "2.0", + "method": "eth_call", + "id": 1, + "params": [ + { + "name": "transaction", + "value": { + "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "input": { + "description": "This example provides the function selector for the totalSupply() function in the ERC-20 token standard.", + "value": "0x18160ddd" + } + } + }, + { + "name": "block", + "value": "0x980a20" + } + ], + "result": { + "name": "eth_callExampleResponse", + "value": "0x00000000000000000000000000000000000000000000070083c753e38b19336e" + } + } + ] + }, + { + "name": "eth_chainId", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get `chainId`", + "description": "This request returns the chain ID, a unique identifier across all EVM-compatible networks. This value is critical for transaction replay protection introduced by [EIP-155](https://eips.ethereum.org/EIPS/eip-155).", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "mainnet_eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_chainId", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + }, + { + "name": "testnet_eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_chainId", + "id": 1, + "result": { + "description": "Example of a response from a Linea Sepolia node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe705" + } + } + ] + }, + { + "name": "eth_coinbase", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_coinbase", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "eth_createAccessList", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Internal" + }, + { + "name": "Archive" + } + ], + "summary": "Create access list for EIP-2930 or EIP-1559 transactions", + "description": "This request generates an access list that you can include in an EIP-2930 or EIP-1559 transaction. This allows you to optimize gas usage for such transactions by preloading storage locations or contract addresses.\n**Important**\n This request consumes gas because it involves processing the transaction data to predict which addresses and storage locations will be accessed. However, the access list generated helps optimize the gas usage of the actual transaction by preloading these addresses and storage slots, ultimately reducing the overall gas cost during execution.\n", + "params": [ + { + "name": "transaction", + "description": "Transaction call object.", + "required": true, + "schema": { + "type": "object", + "description": "Transaction object generic to all Linea-supported transactions. All transaction call object parameters are optional.", + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "Address of the action receiver.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender. `eth_call` consumes zero gas, but this schema supports other executions that might need this parameter. `eth_estimateGas` ignores this value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Input data; alternative term for `data`.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei. Used only in non-[EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) transactions.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "default": "0x0" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee, in wei, the sender is willing to pay per gas above the base fee. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxPriorityFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list; a list of addresses and storage keys that the transaction plans to access.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + { + "name": "block", + "required": false, + "description": "Block number or string tag.", + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + } + ], + "result": { + "name": "eth_createAccessListResponse", + "schema": { + "type": "object", + "description": "Access list object and approximate gas cost for the transaction if the access list is included.", + "additionalProperties": false, + "properties": { + "accessList": { + "description": "Access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "gasUsed": { + "description": "Gas used.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + "examples": [ + { + "name": "eth_createAccessListExample", + "description": "This example demonstrates how a `from` address (a wallet) is used to create a new smart contract. The absence of a `to` address indicates that the transaction is for contract deployment, and the `data` field contains the contract code to be deployed.", + "jsonrpc": "2.0", + "method": "eth_createAccessList", + "id": 1, + "params": [ + { + "name": "Transaction", + "value": { + "from": "0x188e0B45cEdd8F5e425e73c8aa7953B92115ec24", + "data": "0x608060806080608155" + } + }, + { + "name": "Block", + "value": "latest" + } + ], + "result": { + "name": "eth_createAccessListExampleResponse", + "description": "Gas used by generating the access list, addresses, and associated storage keys that will likely be accessed during the transaction.", + "value": { + "accessList": [ + { + "address": "0xa02457e5dfd32bda5fc7e1f1b008aa5979568150", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000081" + ] + } + ], + "gasUsed": "0x2710" + } + } + } + ] + }, + { + "name": "eth_estimateGas", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get gas estimate", + "description": "This request returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction is *not* added to the blockchain. Expect a significant overestimate (for reasons including EVM mechanics and node performance). Consider using `linea_estimateGas` instead.\nThe min gas price for inclusion in the transaction pool is set to 0.02 gwei for mainnet. Practical minimum gas price depends on both the transaction's properties and L1 fees.\nIf the execution continues beyond the gas cap (10x the block gas limit), the node stops the simulation and returns an error. This prevents demand for excessive computational resource use or API abuse.\n", + "params": [ + { + "name": "transaction", + "description": "Transaction call object. For `eth_estimateGas`, fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply).", + "required": true, + "schema": { + "type": "object", + "description": "Transaction object generic to all Linea-supported transactions. All transaction call object parameters are optional.", + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "Address of the action receiver.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender. `eth_call` consumes zero gas, but this schema supports other executions that might need this parameter. `eth_estimateGas` ignores this value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Input data; alternative term for `data`.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei. Used only in non-[EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) transactions.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "default": "0x0" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee, in wei, the sender is willing to pay per gas above the base fee. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxPriorityFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list; a list of addresses and storage keys that the transaction plans to access.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + { + "name": "block", + "required": false, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + } + ], + "result": { + "name": "eth_estimateGasResponse", + "description": "The gas estimate for the transaction, in hexadecimal.", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "examples": [ + { + "name": "eth_estimateGasExample", + "jsonrpc": "2.0", + "method": "eth_estimateGas", + "id": 1, + "params": [ + { + "name": "transaction", + "value": { + "from": "0x188e0B45cedd8f5e425e73c8aa7953b92115ec24", + "to": "0x791A479620F2A5cf58BB53D45CD3Ec72cFef22Fe", + "value": "0x28F" + } + } + ], + "result": { + "name": "eth_estimateGasExampleResponse", + "value": "0x5208" + } + } + ] + }, + { + "name": "eth_feeHistory", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get transaction fee history", + "description": "This request returns historical transaction base fee per gas and effective priority fee per gas for the filtered block range, allowing you to track trends over time.", + "params": [ + { + "name": "blockCount", + "description": "Hexadecimal or decimal integer of the number of blocks for which historical fee data is required; up to maximum of 1024 blocks. Clients will return less than the requested range if not all blocks are available.", + "required": true, + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x5" + } + }, + { + "name": "newestBlock", + "description": "Hexadecimal or decimal integer representing the highest number block of the requested range, or one of the string tags. Defines the starting point for fetching fee history information. The history will go from this point backward to the provided blockCount, if that data is available.", + "required": true, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + }, + { + "name": "rewardPercentiles", + "description": "Pass empty array if this request is not required. An ordered array of integers of reward percentile values; from smallest to largest as floating point value between 0 and 100. For each block in the requested range, the transactions are sorted in ascending order by effective tip per gas and the corresponding effective tip for the percentile then determined, accounting for gas consumed.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "number" + } + } + } + ], + "result": { + "name": "eth_feeHistoryResponse", + "schema": { + "description": "Fee history for the returned block range. If not all blocks are available, this will be a subsection of the requested range.", + "type": "object", + "required": ["oldestBlock", "baseFeePerGas", "gasUsedRatio"], + "properties": { + "oldestBlock": { + "description": "Hexadecimal of the integer for the lowest number block of returned range.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "An array of block base fees per gas. The extra value is the next block after the newest block in the returned range.", + "type": "array", + "items": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "gasUsedRatio": { + "description": "An array of block gas used ratios. These are calculated as the ratio of `gasUsed` to `gasLimit`.", + "type": "array", + "items": { + "description": "Normalized ratio.", + "type": "number", + "minimum": 0, + "maximum": 1 + } + }, + "reward": { + "description": "A two-dimensional array of effective priority fees per gas at the requested block percentiles. The first dimension of the array reflects the percentiles requested. The second reflects the number of blocks that percentile data is returned for.", + "type": "array", + "items": { + "description": "An array of effective priority fee per gas data points from a single block. All zeroes are returned if the block is empty.", + "type": "array", + "items": { + "description": "A given percentile sample of effective priority fees per gas from a single block in ascending order, weighted by gas used. Zeroes are returned if the block is empty.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + } + }, + "examples": [ + { + "name": "eth_feeHistoryLineaExample", + "jsonrpc": "2.0", + "method": "eth_feeHistory", + "id": 1, + "params": [ + { + "name": "blockCount", + "value": "0x5" + }, + { + "name": "newestBlock", + "value": "0x7" + }, + { + "name": "rewardPercentiles", + "value": [20, 30] + } + ], + "result": { + "name": "eth_feeHistoryLineaExampleResponse", + "value": { + "type": "object", + "schema": null, + "properties": { + "baseFeePerGas": ["0x7", "0x7", "0x7", "0x7", "0x7", "0x7"], + "gasUsedRatio": [ + 0.00726516393442623, 0.014271704918032787, 0.00034426229508196723, + 0.00034426229508196723, 0.00034426229508196723 + ], + "oldestBlock": "0x3", + "reward": [ + ["0xd8f4285", "0xd8f4285"], + ["0xd8f4285", "0xd8f4285"], + ["0xd8f4285", "0xd8f4285"], + ["0xd8f4285", "0xd8f4285"], + ["0xd8f4285", "0xd8f4285"] + ] + } + } + } + } + ] + }, + { + "name": "eth_gasPrice", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get current price per gas", + "description": "This request returns the current price per gas in wei. The price reflects the percentile gas unit price for the most recent blocks. By default, the last 100 blocks are examined and the 50th percentile gas unit price (that's, the median value) is returned.\nIf there are no blocks, the value for `minGasPrice` is returned. \n", + "params": [], + "result": { + "name": "eth_gasPriceResponse", + "schema": { + "description": "The current percentile gas unit price for the most recent blocks in wei, as a hexadecimal value.", + "properties": { + "gasPrice": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x3938700" + } + } + } + }, + "examples": [ + { + "name": "eth_gasPriceExample", + "jsonrpc": "2.0", + "method": "eth_gasPrice", + "id": 1, + "params": [], + "result": { + "name": "eth_gasPriceExampleResponse", + "value": "0x3938700" + } + } + ] + }, + { + "name": "eth_getBalance", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Archive" + } + ], + "summary": "Get balance of an account", + "description": "This request returns the balance in wei of the given account address/condition.", + "params": [ + { + "name": "address", + "description": "A string that represents a 20-byte Linea address to check the balance of.", + "required": true, + "schema": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + { + "name": "block", + "description": "Block number in hexadecimal, block hash, or one of the string tags for the block to filter by.", + "required": true, + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getBalanceResponse", + "description": "The balance in wei, as a hexadecimal value.", + "schema": { + "type": "object", + "properties": { + "balance": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x44082C7F6987" + } + } + } + }, + "examples": [ + { + "name": "eth_getBalanceExample", + "jsonrpc": "2.0", + "method": "eth_getBalance", + "id": 1, + "params": [], + "result": { + "name": "eth_getBalanceExampleResponse", + "value": "0x1bcb27a395c3" + } + } + ] + }, + { + "name": "eth_getBlockByHash", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get block by block hash", + "description": "This request returns block data for the given block hash. You can use this method to view the transactions in a block, or the transaction hashes.", + "params": [ + { + "name": "blockHash", + "required": true, + "schema": { + "description": "A string representing the hash (32 bytes) of a block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "name": "hydratedTransactions", + "description": "For hashes pass `false`, for detailed transaction objects, pass `true`.", + "required": true, + "schema": { + "type": "boolean", + "example": false + } + } + ], + "result": { + "name": "getBlockByHashResponse", + "description": "Block object or `null` when there is no corresponding block.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "required": [ + "hash", + "parentHash", + "sha3Uncles", + "miner", + "stateRoot", + "transactionsRoot", + "receiptsRoot", + "logsBloom", + "number", + "gasLimit", + "gasUsed", + "timestamp", + "extraData", + "mixHash", + "nonce", + "size", + "transactions", + "uncles" + ], + "additionalProperties": false, + "properties": { + "hash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentHash": { + "description": "32 byte hex value of the hash of the parent block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "sha3Uncles": { + "description": "SHA3 of the uncle's data in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "miner": { + "description": "Not relevant to Proof of Stake/Linea. Applied to Proof of Work. Address to pay mining rewards to the coinbase transaction that rewarded the miner for their work.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "stateRoot": { + "description": "Root of the final state trie for the block as 32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionsRoot": { + "description": "Root of the transaction trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "receiptsRoot": { + "description": "Root of the receipts trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "difficulty": { + "description": "Not relevant to Proof of Stake/Linea. Difficulty for this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "number": { + "description": "Block number; `null` when block is pending.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasLimit": { + "description": "Maximum gas allowed in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "Total gas used by all transactions in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Unix timestamp (milliseconds) for block assembly.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "extraData": { + "description": "Extra data field for this block.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "mixHash": { + "description": "Not relevant to Proof of Stake/Linea. Hash used in the Proof of Work process.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Proof of Work nonce; not relevant to Proof of Stake/Linea. Hash of the generated Proof of Work.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "totalDifficulty": { + "description": "Not relevant to Proof of Stake/Linea. Total difficulty of the chain until this block. This value will always be `0` for an uncle block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "The block's base fee per gas; empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "withdrawalsRoot": { + "description": "Root of the trie containing withdrawal receipts in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentBeaconBlockRoot": { + "description": "Root of the parent Beacon Chain block. This ties the execution layer to the consensus layer in Proof of Stake.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "size": { + "description": "Size of block in bytes.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactions": { + "description": "Array of transaction objects, or 32 byte transaction hashes depending on the specified parameter.", + "anyOf": [ + { + "title": "Transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "Full transactions", + "type": "array", + "items": { + "type": "object", + "description": "Transaction information.", + "title": "Contextual information", + "required": [ + "blockHash", + "blockNumber", + "from", + "hash", + "transactionIndex" + ], + "unevaluatedProperties": false, + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "required": [ + "accessList", + "blobVersionedHashes", + "chainId", + "gas", + "input", + "maxFeePerBlobGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "to", + "type", + "value", + "yParity" + ], + "title": "Unsigned 4844 transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "type", + "value", + "yParity" + ], + "title": "Unsigned 1559 Transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "value", + "yParity" + ], + "title": "Unsigned 2930 transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "required": [ + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "v", + "value" + ], + "title": "Unsigned Legacy transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + ] + }, + "withdrawals": { + "type": "array", + "items": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + } + }, + "uncles": { + "description": "Array of uncle hashes.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getBlockByHashExample", + "jsonrpc": "2.0", + "method": "eth_getBlockByHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5" + }, + { + "name": "hydratedTransactions", + "value": false + } + ], + "result": { + "name": "eth_getBlockByHashExampleResponse", + "description": "Block information.", + "value": { + "baseFeePerGas": "0x7", + "difficulty": "0x2", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f37f...", + "gasLimit": "0x3a2c940", + "gasUsed": "0x108061", + "hash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "logsBloom": "0x04000004000c00000000100000000021000000001400524800000000000...", + "miner": "0x0000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x4ff31d", + "parentHash": "0x8f702c7b4b88546f07cf66f09e46a6693a810131018b61a4ea257d369ace01c8", + "receiptsRoot": "0x70e4d96f4800e8c86ae75de75de1846da140a853d1e29fdae46400d93f85f4b8", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0xf74", + "stateRoot": "0x0411d23f01843fc2f08dc97ed9da86d19232c3c0ee6cd6e66a0fbf65ee7f0333", + "timestamp": "0x66630dae", + "totalDifficulty": "0x9fe63b", + "transactions": [ + "0xd34e34e1bf1c940b7524c7180c1c8ca83fd886d736df5537214d5715365a4e29", + "0x78109d6f5d643369fbf0ff432bc0c89a150f1c96d849f06cde2fccde7cd4cb25", + "0x5b4ad10868aea3dbcb8999554e5ba86992a189b65f64e7e762f2e19830766de2", + "0x058e58b8fcd988f7cdc8b9ea10811405c83e1b107c9d0c008ee4716f35bee2d2", + "0x15bb69f5c0e7b43321c69917600665632e4a49dbfb84eeb21c31afb02f2bb49b", + "0x8d9c25bf2dcbd1b148137702cf748ee18600d7df7a374da7b72a56200166fb7d", + "0xee8270208bea7bee60eb10de43f7a46ae81f972e7473627d89311163dd068db8", + "0x645ceec2a8aa92bcf2491bc97b4ac98aa2acb360627aecb2391c6d7b9a841e9f", + "0xdcca21e756689b7bea9b5534698435b7ea729c852e50256f21832943f475c00f", + "0x61db38d84032e85e77e927172ada7062f1747c09078ffa1131fea374d4e1c177", + "0xd35b3f5490f13717b99efa6f1e8f2eabaf75b6e1e5ccff0c837c1e11731b0fd2", + "0x466864e901219e93de7ea03ac640f2b7cabf2f96dda62e0ed3b9a236c1a401e8" + ], + "transactionsRoot": "0xd5100dcb4f1adad04c51fdea94706b145cb4218c69c6b4415ee165f1d7e6434e", + "uncles": [] + } + } + } + ] + }, + { + "name": "eth_getBlockByNumber", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get block by block number", + "description": "This request returns block data for the given block number. You can use this method to view the transactions in a block, or the transaction hashes.", + "params": [ + { + "name": "block", + "description": "Block number or string tag.", + "required": true, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + }, + { + "name": "hydratedTransactions", + "description": "For hashes pass `false`, for detailed transaction objects, pass `true`.", + "required": true, + "schema": { + "type": "boolean", + "example": false + } + } + ], + "result": { + "name": "eth_getBlockByNumberResponse", + "description": "Block object, or `null` when there is no block.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "required": [ + "hash", + "parentHash", + "sha3Uncles", + "miner", + "stateRoot", + "transactionsRoot", + "receiptsRoot", + "logsBloom", + "number", + "gasLimit", + "gasUsed", + "timestamp", + "extraData", + "mixHash", + "nonce", + "size", + "transactions", + "uncles" + ], + "additionalProperties": false, + "properties": { + "hash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentHash": { + "description": "32 byte hex value of the hash of the parent block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "sha3Uncles": { + "description": "SHA3 of the uncle's data in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "miner": { + "description": "Not relevant to Proof of Stake/Linea. Applied to Proof of Work. Address to pay mining rewards to the coinbase transaction that rewarded the miner for their work.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "stateRoot": { + "description": "Root of the final state trie for the block as 32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionsRoot": { + "description": "Root of the transaction trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "receiptsRoot": { + "description": "Root of the receipts trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "difficulty": { + "description": "Not relevant to Proof of Stake/Linea. Difficulty for this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "number": { + "description": "Block number; `null` when block is pending.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasLimit": { + "description": "Maximum gas allowed in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "Total gas used by all transactions in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Unix timestamp (milliseconds) for block assembly.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "extraData": { + "description": "Extra data field for this block.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "mixHash": { + "description": "Not relevant to Proof of Stake/Linea. Hash used in the Proof of Work process.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Proof of Work nonce; not relevant to Proof of Stake/Linea. Hash of the generated Proof of Work.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "totalDifficulty": { + "description": "Not relevant to Proof of Stake/Linea. Total difficulty of the chain until this block. This value will always be `0` for an uncle block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "The block's base fee per gas; empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "withdrawalsRoot": { + "description": "Root of the trie containing withdrawal receipts in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentBeaconBlockRoot": { + "description": "Root of the parent Beacon Chain block. This ties the execution layer to the consensus layer in Proof of Stake.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "size": { + "description": "Size of block in bytes.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactions": { + "description": "Array of transaction objects, or 32 byte transaction hashes depending on the specified parameter.", + "anyOf": [ + { + "title": "Transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "Full transactions", + "type": "array", + "items": { + "type": "object", + "description": "Transaction information.", + "title": "Contextual information", + "required": [ + "blockHash", + "blockNumber", + "from", + "hash", + "transactionIndex" + ], + "unevaluatedProperties": false, + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "required": [ + "accessList", + "blobVersionedHashes", + "chainId", + "gas", + "input", + "maxFeePerBlobGas", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "to", + "type", + "value", + "yParity" + ], + "title": "Unsigned 4844 transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "type", + "value", + "yParity" + ], + "title": "Unsigned 1559 Transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "value", + "yParity" + ], + "title": "Unsigned 2930 transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "required": [ + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "v", + "value" + ], + "title": "Unsigned Legacy transaction", + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + ] + }, + "withdrawals": { + "type": "array", + "items": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + } + }, + "uncles": { + "description": "Array of uncle hashes.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getBlockByNumberExample", + "jsonrpc": "2.0", + "method": "eth_getBlockByNumber", + "id": 1, + "params": [ + { + "name": "block", + "value": "0x4ff31d" + }, + { + "name": "hydratedTransactions", + "value": false + } + ], + "result": { + "name": "eth_getBlockByNumberExampleResponse", + "description": "Block information.", + "value": { + "baseFeePerGas": "0x7", + "difficulty": "0x2", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f37...", + "gasLimit": "0x3a2c940", + "gasUsed": "0x108061", + "hash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "logsBloom": "0x04000004000c0000000010000000002100000000140052480000000...", + "miner": "0x0000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x4ff31d", + "parentHash": "0x8f702c7b4b88546f07cf66f09e46a6693a810131018b61a4ea257d369ace01c8", + "receiptsRoot": "0x70e4d96f4800e8c86ae75de75de1846da140a853d1e29fdae46400d93f85f4b8", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0xf74", + "stateRoot": "0x0411d23f01843fc2f08dc97ed9da86d19232c3c0ee6cd6e66a0fbf65ee7f0333", + "timestamp": "0x66630dae", + "totalDifficulty": "0x9fe63b", + "transactions": [ + "0xd34e34e1bf1c940b7524c7180c1c8ca83fd886d736df5537214d5715365a4e29", + "0x78109d6f5d643369fbf0ff432bc0c89a150f1c96d849f06cde2fccde7cd4cb25", + "0x5b4ad10868aea3dbcb8999554e5ba86992a189b65f64e7e762f2e19830766de2", + "0x058e58b8fcd988f7cdc8b9ea10811405c83e1b107c9d0c008ee4716f35bee2d2", + "0x15bb69f5c0e7b43321c69917600665632e4a49dbfb84eeb21c31afb02f2bb49b", + "0x8d9c25bf2dcbd1b148137702cf748ee18600d7df7a374da7b72a56200166fb7d", + "0xee8270208bea7bee60eb10de43f7a46ae81f972e7473627d89311163dd068db8", + "0x645ceec2a8aa92bcf2491bc97b4ac98aa2acb360627aecb2391c6d7b9a841e9f", + "0xdcca21e756689b7bea9b5534698435b7ea729c852e50256f21832943f475c00f", + "0x61db38d84032e85e77e927172ada7062f1747c09078ffa1131fea374d4e1c177", + "0xd35b3f5490f13717b99efa6f1e8f2eabaf75b6e1e5ccff0c837c1e11731b0fd2", + "0x466864e901219e93de7ea03ac640f2b7cabf2f96dda62e0ed3b9a236c1a401e8" + ], + "transactionsRoot": "0xd5100dcb4f1adad04c51fdea94706b145cb4218c69c6b4415ee165f1d7e6434e", + "uncles": [] + } + } + } + ] + }, + { + "name": "eth_getBlockReceipts", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get block receipts by block number", + "description": "This request returns all transaction receipts of the given block identified by block number, hash, or tag. Transaction receipts provide a way to track the success or failure of a transaction (`1` if successful and `0` if failed), as well as the amount of gas used and any event logs that might have been produced by a smart contract during the transaction.", + "params": [ + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, block hash, or one of the string tags.", + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getBlockReceiptsResponse", + "description": "Block object, or `null` when there is no block.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "array", + "items": { + "type": "object", + "description": "Receipt information", + "required": [ + "blockHash", + "blockNumber", + "from", + "cumulativeGasUsed", + "gasUsed", + "logs", + "logsBloom", + "transactionHash", + "transactionIndex", + "effectiveGasPrice" + ], + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "The position in the block, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "to": { + "description": "Address of the receiver or null in a contract creation transaction.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Recipient Address" + } + ] + }, + "cumulativeGasUsed": { + "description": "The sum of gas used by this transaction and all preceding transactions in the same block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction alone.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "contractAddress": { + "description": "The contract address created, if the transaction was a contract creation, otherwise null.", + "oneOf": [ + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Contract address" + }, + { + "title": "Null", + "type": "null" + } + ] + }, + "logs": { + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "root": { + "description": "The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "status": { + "description": "Either 0x1 (success) or 0x0 (failure). Only specified for transactions included after the Byzantium upgrade.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "enum": ["0x0", "0x1"] + }, + "effectiveGasPrice": { + "description": "The actual value per gas deducted from the sender's account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getBlockReceiptsExample", + "jsonrpc": "2.0", + "method": "eth_getBlockReceipts", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8" + } + ], + "result": { + "name": "eth_getBlockReceiptsExampleResponse", + "description": "Just 3 of many receipts.", + "value": [ + { + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "contractAddress": null, + "cumulativeGasUsed": "0x5208", + "effectiveGasPrice": "0x77359400", + "from": "0xd3d7dbe73bbdd5a5c7a49ca322763c4d400fc240", + "gasUsed": "0x5208", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000...", + "status": "0x1", + "to": "0x11e90f43a39f4409935f254fac26b360893f1785", + "transactionHash": "0x8eafa76140b66efeef371e5a62ad8b0fb16298eb349157ced4e1ec76b108cceb", + "transactionIndex": "0x0", + "type": "0x0" + }, + { + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "contractAddress": null, + "cumulativeGasUsed": "0x101f6", + "effectiveGasPrice": "0x59e78fe", + "from": "0x00381fd3e1ca2a3758bb86983836c645ca0c1f4a", + "gasUsed": "0xafee", + "logs": [ + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x0000000000000000000000000000000000000000000000000b6139a7cbd20000", + "logIndex": "0x0", + "removed": false, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000000381fd3e1ca2a3758bb86983836c645ca0c1f4a" + ], + "transactionHash": "0x962e545e8ac3caef02f251d175cb0519c14db387559bb5804e988e175b3bc6c4", + "transactionIndex": "0x1" + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000...", + "status": "0x1", + "to": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "transactionHash": "0x962e545e8ac3caef02f251d175cb0519c14db387559bb5804e988e175b3bc6c4", + "transactionIndex": "0x1", + "type": "0x0" + }, + { + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "contractAddress": null, + "cumulativeGasUsed": "0x1fc52", + "effectiveGasPrice": "0x4f20124", + "from": "0x685ee51518320a6625fa2bb523b2eab385df68b3", + "gasUsed": "0xfa5c", + "logs": [ + { + "address": "0xffbfd3124eae5938afd36294af98a6207567135b", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x0000000000000000000000000d92d3d772d85389b4b25d10dc52715546...", + "logIndex": "0x1", + "removed": false, + "topics": [ + "0x2f824f69f211e444df15d741157e83cdf23c50f39399b9523853a84b91379ca6" + ], + "transactionHash": "0x04d2b7d5c8e2452bfdafe1655bd88332ad5f0c14aafa574da794adf3d4e7e14f", + "transactionIndex": "0x2" + } + ], + "logsBloom": "0x0000000001000000000000000000000000000000000000000000...", + "status": "0x1", + "to": "0xffbfd3124eae5938afd36294af98a6207567135b", + "transactionHash": "0x04d2b7d5c8e2452bfdafe1655bd88332ad5f0c14aafa574da794adf3d4e7e14f", + "transactionIndex": "0x2", + "type": "0x2" + } + ] + } + } + ] + }, + { + "name": "eth_getBlockTransactionCountByHash", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get number of transactions by hash", + "description": "This request returns the number of transactions from the block matching the given block hash.", + "params": [ + { + "name": "blockHash", + "required": true, + "schema": { + "description": "A string representing the hash (32 bytes) of a block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "eth_getBlockTransactionCountByHashResponse", + "description": "The number of transactions in the block in hexadecimal, or `null` if no matching block hash is found.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null", + "title": "Not found" + }, + { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x21", + "title": "Transaction count" + } + ] + } + }, + "examples": [ + { + "name": "eth_getBlockTransactionCountByHashExample", + "jsonrpc": "2.0", + "method": "eth_getBlockTransactionCountByHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8" + } + ], + "result": { + "name": "eth_getBlockTransactionCountByHashExampleRespone", + "value": "0x21" + } + } + ] + }, + { + "name": "eth_getBlockTransactionCountByNumber", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get number of transactions by block number", + "description": "This request returns the number of transactions from the block matching the given block number.", + "params": [ + { + "name": "block", + "description": "Hexadecimal of the digital integer representing a block number, or one of the string tags.", + "required": true, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + } + ], + "result": { + "name": "eth_getBlockTransactionCountByNumberResponse", + "description": "The number of transactions in the block in hexadecimal, or `null` if not found.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + ] + } + }, + "examples": [ + { + "name": "eth_getBlockTransactionCountByNumberExample", + "jsonrpc": "2.0", + "method": "eth_getBlockTransactionCountByNumber", + "id": 1, + "params": [ + { + "name": "block", + "value": "0x4fde9d" + } + ], + "result": { + "name": "eth_getBlockTransactionCountByNumberExampleResponse", + "value": "0x21" + } + } + ] + }, + { + "name": "eth_getCode", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Archive" + } + ], + "summary": "Get smart contract code", + "description": "This request returns the compiled byte code of a smart contract, if any, at a given address and block.", + "params": [ + { + "name": "address", + "required": true, + "schema": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, block hash, or one of the string tags.", + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getCodeResponse", + "description": "The compiled byte code of the smart contract at the given address. Linea stores compiled smart contract code as a hexadecimal value.", + "schema": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "examples": [ + { + "name": "eth_getCodeExample", + "jsonrpc": "2.0", + "method": "eth_getCode", + "id": 1, + "params": [ + { + "name": "address", + "value": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f" + }, + { + "name": "block", + "value": "0x927cf4" + } + ], + "result": { + "name": "eth_getCodeExampleResponse", + "value": "0x6060604052600436106100af576000357c01000000000...." + } + } + ] + }, + { + "name": "eth_getFilterChanges", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Internal" + } + ], + "summary": "Poll recent filter events", + "description": "This request polls for event data as required by the filter with the given Id (created using `eth_newFilter` or `eth_newBlockFilter`). It returns an array of logs which occurred since last poll.", + "params": [ + { + "name": "filterId", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + ], + "result": { + "name": "eth_getFilterChangesResponse", + "description": "Array of log objects for the requested filter data available either since filter creation or last poll of filter.", + "schema": { + "oneOf": [ + { + "title": "New block or transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "New logs", + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getFilterChangesExample", + "description": "Example filter applying Id for a \"new block\" filter.", + "jsonrpc": "2.0", + "method": "eth_getFilterChanges", + "id": 1, + "params": [ + { + "name": "filterId", + "value": "0x814451e169814a572e72a081e72982f9d8e55449c55490b48ca4eff1d5d7cead" + } + ], + "result": { + "name": "eth_getFilterChangesExampleResponse", + "description": "Block hashes of new blocks since filter creation or last poll.", + "value": [ + "0x4d1c9238adcaaf6aef9ca7aca3effc48b16a91015ddab263bb7c573618407251", + "0xc1d56d50a1002eb59a357f1044e26b88cd2ce3f30c6302d75758ffd654fedc29", + "0xc2f5350ca7a75badf56aff7bed3a698572de6732f3fd654304c03e4b71e7f209", + "0x236dd785e2e1105f14abbb31ac687487b56df01a10356e6b841b06019347db24", + "0xd0e3028e097256e0d84402bfe92d88b4aa595b8c9b71967ae5b9de34a3bd36ba", + "0x3e21808a8446e9178ca26b42c13db816226b788d9b62da0960a5f5aff8d879ac", + "0x3a21615c326d660e8d78ec94b61816652b7be863e8fad2380d98dc6277e0d57c", + "0xd8336eabe49935e67c9173066e804f5d6071c7b32b548cadd20e3ccd6b2e76dc", + "0x354bc7a9135f75fcf0bfc3613c887868532c65093a1bee3fe6ede293cdbb780b", + "0x627cc2af92ee82bc8bb486f3a746f3bc0e79d0867296423fb41315514011ff55" + ] + } + } + ] + }, + { + "name": "eth_getFilterLogs", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Internal" + } + ], + "summary": "Poll all filter events", + "description": "This request returns an array of all logs matching the filter with the given Id \n(created using `eth_newFilter`). \n**Important**:\n- This method doesn't support block filters as created by `eth_newBlockFilter`\n- For fetching historical data (logs prior to filter creation), use `eth_getLogs`\n", + "params": [ + { + "name": "filterId", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + ], + "result": { + "name": "eth_getFilterLogsResponse", + "description": "Log objects.", + "schema": { + "oneOf": [ + { + "title": "New block or transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "New logs", + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getFilterLogsExample", + "jsonrpc": "2.0", + "method": "eth_getFilterLogs", + "id": 1, + "params": [ + { + "name": "Filter identifier", + "value": "0x10ff28ad20da8c91dd9c5177d08895fb70d3ed94b684f30bb086fb90f6984e53" + } + ], + "result": { + "name": "eth_getFilterLogsExampleResponse", + "value": [] + } + } + ] + }, + { + "name": "eth_getLogs", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get logs", + "description": "This request passes a set of search conditions and returns an array of all logs matching those.", + "params": [ + { + "name": "filter", + "description": "Filter conditions for your search.", + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "fromBlock": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "toBlock": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "address": { + "oneOf": [ + { + "title": "Any address", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + }, + { + "description": "Hex-encoded address.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "title": "Addresses" + } + ] + }, + "topics": { + "description": "Filter topics.", + "oneOf": [ + { + "title": "Any topic match", + "type": "null" + }, + { + "title": "Specified filter topics", + "type": "array", + "items": { + "description": "Filter topic list entry.", + "oneOf": [ + { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Single topic match" + }, + { + "title": "Multiple topic match", + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ] + } + } + ] + } + } + } + } + ], + "result": { + "name": "eth_getLogsResponse", + "description": "Array of log objects.", + "schema": { + "oneOf": [ + { + "title": "New block or transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "New logs", + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getLogsExample", + "jsonrpc": "2.0", + "method": "eth_getLogs", + "id": 1, + "params": [ + { + "name": "filter", + "description": "Search terms to apply to this request.", + "value": { + "fromBlock": "0x4fde9d", + "toBlock": "0x4fde9d", + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "topics": [] + } + } + ], + "result": { + "name": "eth_getLogsExampleResponse", + "description": "Four records (of many) returned by the request.", + "value": [ + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x0000000000000000000000000000000000000000000000000b6139a7cbd20000", + "logIndex": "0x0", + "removed": false, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x00000000000000000000000000381fd3e1ca2a3758bb86983836c645ca0c1f4a" + ], + "transactionHash": "0x962e545e8ac3caef02f251d175cb0519c14db387559bb5804e988e175b3bc6c4", + "transactionIndex": "0x1" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x000000000000000000000000000000000000000000000000001057acf5f78000", + "logIndex": "0x18", + "removed": false, + "topics": [ + "0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "0x000000000000000000000000fe6508f0015c778bdcc1fb5465ba5ebe224c9912" + ], + "transactionHash": "0x1edcdbf205d33cb1f7f88eb58324f20aa32ad7af494ead208d7bc90762c304ea", + "transactionIndex": "0xa" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x000000000000000000000000000000000000000000000000001057acf5f78000", + "logIndex": "0x1a", + "removed": false, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000fe6508f0015c778bdcc1fb5465ba5ebe224c9912", + "0x000000000000000000000000586733678b9ac9da43dd7cb83bbb41d23677dfc3" + ], + "transactionHash": "0x1edcdbf205d33cb1f7f88eb58324f20aa32ad7af494ead208d7bc90762c304ea", + "transactionIndex": "0xa" + }, + { + "address": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", + "blockHash": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8", + "blockNumber": "0x4fde9d", + "data": "0x00000000000000000000000000000000000000000000000000138a64211903b7", + "logIndex": "0x2a", + "removed": false, + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000e24b4a292ba102a9b7b7f9de20718d7ba45ddb29", + "0x000000000000000000000000d804ba88371a3f00ddaca03cbc2b6c47f38105fc" + ], + "transactionHash": "0x3613dbdec4df03cd1efc903773ffad8703c8a6f902384299dc22e32bf3223fab", + "transactionIndex": "0x10" + } + ] + } + } + ] + }, + { + "name": "eth_getMinerDataByBlockHash", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Bespoke" + }, + { + "name": "Geth" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_getMinerDataByBlockHash", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "eth_getMinerDataByBlockNumber", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Bespoke" + }, + { + "name": "Besu" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_getMinerDataByBlockNumber", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "eth_getProof", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get Merkle proof", + "description": "This request returns the account information, storage values, and Merkle proof for a given account (and, optionally, storage values for given storage keys), supporting data verification.", + "params": [ + { + "name": "address", + "description": "A string identifier for the contract or EOA address (20 bytes).", + "required": true, + "schema": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + { + "name": "storageKeys", + "required": true, + "schema": { + "description": "Storage keys may be specified to retrieve the storage proofs for particular slots in a smart contract's storage. If not required, pass empty array.", + "type": "array", + "default": [], + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + } + } + }, + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, block hash, or one of the string tags.", + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getProofResponse", + "description": "Account proof object returned for the given account.", + "schema": { + "description": "Account proof.", + "type": "object", + "required": [ + "address", + "accountProof", + "balanceeth_getBalance", + "codeHash", + "nonce", + "storageHash", + "storageProof" + ], + "additionalProperties": false, + "properties": { + "address": { + "description": "The account address for which the Merkle proof is retrieved. This is an echo of the address passed in the request.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "accountProof": { + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `stateRoot`-Node, following the path of the address as key.", + "type": "array", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "balance": { + "description": "Hexadecimal of the balance in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "codeHash": { + "description": "The 32-byte hash of the account's code. For EOAs, this will be the hash of an empty string. For contract accounts, it represents the hash of the deployed contract code.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "storageHash": { + "description": "32-byte SHA3 hash of the storage root. All storage will deliver a Merkle proof starting with this root hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "storageProof": { + "description": "An array of requested storage-entries.", + "type": "array", + "items": { + "type": "object", + "required": ["key", "value", "proof"], + "additionalProperties": false, + "properties": { + "key": { + "description": "The requested storage key.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "value": { + "description": "The storage value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "proof": { + "type": "array", + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `storageHash` node and following the path of the key.", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + } + } + } + } + } + }, + "examples": [ + { + "name": "eth_getProofExample", + "jsonrpc": "2.0", + "method": "eth_getProof", + "id": 1, + "params": [ + { + "name": "address", + "value": "0x7F0d15C7FAae65896648C8273B6d7E43f58Fa842" + }, + { + "name": "storageKeys", + "value": [["0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"]] + }, + { + "name": "block", + "value": "latest" + } + ], + "result": { + "name": "eth_getProofExampleResponse", + "value": { + "accountProof": [ + "0xf90211a0d2055f3da7451f06ac53b35d3729fc8192382d0915736424665a83c6741df4ea...", + "0xf90211a08240dd659347a41078eed3c036d4ee577051cde7ce63942d755d9d8e795cfcc...", + "0xf90211a0229a27809010e39babd9e7ffe7a95d92309ed0996c8c1c6954b5d439d817e82...", + "0xf90211a0d99442fec74394991d81a27b2433979f4650aee6e21d3166a3d1a06e16cc7f7...", + "0xf90211a08f7ed368618eab7a47c550034fef18c54ad2b5ffc9fe7b1d5955a45d2f51e91...", + "0xf89180808080808080a05f1b4688b8385116ef65b021e0193fa11244005696c25de336f...", + "0xf86d9e20b884b45d46839a7e66ba35c504168d404ae8e87a72077873d13b7403b8b84cf..." + ], + "address": "0x7f0d15c7faae65896648c8273b6d7e43f58fa842", + "balance": "0x0", + "codeHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0", + "storageHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storageProof": [ + { + "key": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "proof": [], + "value": "0x0" + } + ] + } + } + } + ] + }, + { + "name": "eth_getStorageAt", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Archive" + } + ], + "summary": "Get value from storage", + "description": "This request returns the value from the given storage position of the provided contract's or externally owned account's (EOA).", + "params": [ + { + "name": "address", + "description": "A string identifier for the contract or EOA address (20 bytes).", + "required": true, + "schema": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + { + "name": "storageSlot", + "description": "The storage position or index, in hexadecimal.", + "required": true, + "schema": { + "description": "Hex-encoded 256 bit unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + }, + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, block hash, or one of the string tags.", + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getStorageAtResponse", + "schema": { + "description": "The data stored in the specified storage position at the specified address, in hexadecimal.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "examples": [ + { + "name": "eth_getStorageAtExample", + "jsonrpc": "2.0", + "method": "eth_getStorageAt", + "id": 1, + "params": [ + { + "name": "address", + "value": "0x7d43aabc515c356145049227cee54b608342c0ad" + }, + { + "name": "storageSlot", + "value": "0x5" + }, + { + "name": "block", + "value": "latest" + } + ], + "result": { + "name": "eth_getStorageAtExampleResponse", + "value": "\"0x00000000000000000000000034dfa1226f8b3e36fe597b34eea809a2b5c0bbf9" + } + } + ] + }, + { + "name": "eth_getTransactionByBlockHashAndIndex", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get transaction by block hash and index", + "description": "This request returns information about a transaction for the provided block hash and transaction index position.", + "params": [ + { + "name": "blockHash", + "required": true, + "description": "A string representing the hash (32 bytes) of a block.", + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "name": "transactionIndex", + "required": true, + "description": "The position in the block in hexadecimal.", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + ], + "result": { + "name": "eth_getTransactionByBlockHashAndIndexResponse", + "description": "Returns the transaction information or \"not found\".", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "title": "Linea transaction context", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "Signed 1559 transaction", + "description": "EIP-1559 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "type": "object", + "title": "Signed 2930 transaction", + "description": "EIP-2930 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "title": "Signed legacy transaction", + "required": ["gas", "gasPrice", "input", "nonce", "r", "s", "type", "v", "value"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getTransactionByBlockHashAndIndexExample", + "jsonrpc": "2.0", + "method": "eth_getTransactionByBlockHashAndIndex", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779" + }, + { + "name": "transactionIndex", + "value": "0x2" + } + ], + "result": { + "name": "eth_getTransactionByBlockHashAndIndexExampleResponse", + "value": { + "blockHash": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779", + "blockNumber": "0x49b95c", + "chainId": "0xe708", + "from": "0x05cc939ac053dc47366fe8032f9be00f5f33b508", + "gas": "0x439d0", + "gasPrice": "0x3dfd240", + "hash": "0x8b04f98bec033ccc46e13f01ed75e0b2b12c0dc8b7d7d16102cf2b4addeaa3b8", + "input": "0x83bd37f900011a51b19ce03dbe0cb44c1528e34a7edd7771e9af000...", + "nonce": "0x8d", + "r": "0xbc381ffdf71e5934df37913906305d88e06daf0051e69e42cabe4539e6fc4c58", + "s": "0x4d65409fdc70bb2d14926b038ac7a064d8cce583df50efb424438dfd9333d578", + "to": "0x2d8879046f1559e53eb052e949e9544bcb72f414", + "transactionIndex": "0x2", + "type": "0x0", + "v": "0x1ce33", + "value": "0x0" + } + } + } + ] + }, + { + "name": "eth_getTransactionByBlockNumberAndIndex", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get transaction by block identifier and index", + "description": "This request returns information about a transaction by block number or tag and the transaction's index position.", + "params": [ + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, or one of the string tags.", + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + }, + { + "name": "transactionIndex", + "required": true, + "description": "The position in the block, in hexadecimal.", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + ], + "result": { + "name": "eth_getTransactionByBlockNumberAndIndexResponse", + "description": "Returns the transaction information or \"not found\".", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "title": "Linea transaction context", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "Signed 1559 transaction", + "description": "EIP-1559 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "type": "object", + "title": "Signed 2930 transaction", + "description": "EIP-2930 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "title": "Signed legacy transaction", + "required": ["gas", "gasPrice", "input", "nonce", "r", "s", "type", "v", "value"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getTransactionByBlockNumberAndIndexExample", + "jsonrpc": "2.0", + "method": "eth_getTransactionByBlockNumberAndIndex", + "id": 1, + "params": [ + { + "name": "block", + "value": "0x49b95c" + }, + { + "name": "transactionIndex", + "value": "0x2" + } + ], + "result": { + "name": "eth_getTransactionByBlockNumberAndIndexExampleResponse", + "description": "Transaction information", + "value": { + "blockHash": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779", + "blockNumber": "0x49b95c", + "chainId": "0xe708", + "from": "0x05cc939ac053dc47366fe8032f9be00f5f33b508", + "gas": "0x439d0", + "gasPrice": "0x3dfd240", + "hash": "0x8b04f98bec033ccc46e13f01ed75e0b2b12c0dc8b7d7d16102cf2b4addeaa3b8", + "input": "0x83bd37f900011a51b19ce03dbe0cb44c1528e34a7edd7771e9af000...", + "nonce": "0x8d", + "r": "0xbc381ffdf71e5934df37913906305d88e06daf0051e69e42cabe4539e6fc4c58", + "s": "0x4d65409fdc70bb2d14926b038ac7a064d8cce583df50efb424438dfd9333d578", + "to": "0x2d8879046f1559e53eb052e949e9544bcb72f414", + "transactionIndex": "0x2", + "type": "0x0", + "v": "0x1ce33", + "value": "0x0" + } + } + } + ] + }, + { + "name": "eth_getTransactionByHash", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get transaction by transaction hash", + "description": "This request returns the information about a transaction for the given transaction hash.", + "params": [ + { + "name": "transactionHash", + "description": "A string representing the hash (32 bytes) of a transaction.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "eth_getTransactionByHashResponse", + "schema": { + "description": "Returns the transaction information or \"not found\".", + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "title": "Linea transaction context", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "oneOf": [ + { + "type": "object", + "title": "Signed 1559 transaction", + "description": "EIP-1559 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "type": "object", + "title": "Signed 2930 transaction", + "description": "EIP-2930 transaction.", + "required": [ + "accessList", + "chainId", + "gas", + "gasPrice", + "input", + "nonce", + "r", + "s", + "type", + "value" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "title": "Signed legacy transaction", + "required": ["gas", "gasPrice", "input", "nonce", "r", "s", "type", "v", "value"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getTransactionByHashExample", + "description": "Type 0 transaction.", + "jsonrpc": "2.0", + "method": "eth_getTransactionByHash", + "id": 1, + "params": [ + { + "name": "transactionHash", + "value": "0x1ecac319d356e2bd78262dc9efddb6b048f33e4c706f356d72768f87c5fc0753" + } + ], + "result": { + "name": "eth_getTransactionByHashExampleResponse", + "description": "Type 0/EIP-2930 transaction data.", + "value": { + "blockHash": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779", + "blockNumber": "0x49b95c", + "chainId": "0xe708", + "from": "0x188e0b45cedd8f5e425e73c8aa7953b92115ec24", + "gas": "0x2dc04", + "gasPrice": "0x3ba1f2a", + "hash": "0x1ecac319d356e2bd78262dc9efddb6b048f33e4c706f356d72768f87c5fc0753", + "input": "0xb93037010000000000000000000000000000000000000000000000000000...", + "nonce": "0x50", + "r": "0x9eb4ed965beb69b22086727a746bf7af81a1a54ba1b209582909b40bd4d30f77", + "s": "0x29ff48a513574546b651edb11c5f3ba61eb0758094f6c1f2bc617c860a736245", + "to": "0xef4fb24ad0916217251f553c0596f8edc630eb66", + "transactionIndex": "0x8", + "v": "0x1ce33", + "value": "0x79b3d693c7788" + } + } + } + ] + }, + { + "name": "eth_getTransactionCount", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Archive" + } + ], + "summary": "Get transaction count", + "description": "This request returns a count of transactions sent from a given address up to and including the provided block.", + "params": [ + { + "name": "address", + "description": "A string identifier for the contract or EOA address (20 bytes).", + "required": true, + "schema": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + { + "name": "block", + "required": true, + "description": "Block number in hexadecimal, block hash, or one of the string tags. Use the `pending` tag to get the next account nonce not used by any pending transactions.", + "schema": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + } + } + ], + "result": { + "name": "eth_getTransactionCountResponse", + "description": "The number of transactions sent from the specified address up to and including the specified block, in hexadecimal.", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "examples": [ + { + "name": "eth_getTransactionCountExample", + "jsonrpc": "2.0", + "method": "eth_getTransactionCount", + "id": 1, + "params": [ + { + "name": "address", + "value": "0x188e0B45cedd8f5e425e73c8aa7953b92115ec24" + }, + { + "name": "block", + "value": "0x4fb66d" + } + ], + "result": { + "name": "eth_getTransactionCountExampleResponse", + "value": "0x52" + } + } + ] + }, + { + "name": "eth_getTransactionReceipt", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get transaction receipt by hash", + "description": "This request returns the receipt of a transaction by transaction hash. Receipts for pending transactions aren't available.", + "params": [ + { + "name": "transactionHash", + "description": "A string representing the hash (32 bytes) of a transaction.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "eth_getTransactionReceiptResponse", + "description": "A transaction receipt object, or `null` when no receipt was found.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "type": "object", + "description": "Receipt information", + "required": [ + "blockHash", + "blockNumber", + "from", + "cumulativeGasUsed", + "gasUsed", + "logs", + "logsBloom", + "transactionHash", + "transactionIndex", + "effectiveGasPrice" + ], + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "The position in the block, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "to": { + "description": "Address of the receiver or null in a contract creation transaction.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Recipient Address" + } + ] + }, + "cumulativeGasUsed": { + "description": "The sum of gas used by this transaction and all preceding transactions in the same block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction alone.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "contractAddress": { + "description": "The contract address created, if the transaction was a contract creation, otherwise null.", + "oneOf": [ + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Contract address" + }, + { + "title": "Null", + "type": "null" + } + ] + }, + "logs": { + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "root": { + "description": "The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "status": { + "description": "Either 0x1 (success) or 0x0 (failure). Only specified for transactions included after the Byzantium upgrade.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "enum": ["0x0", "0x1"] + }, + "effectiveGasPrice": { + "description": "The actual value per gas deducted from the sender's account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_getTransactionReceiptExample", + "jsonrpc": "2.0", + "method": "eth_getTransactionReceipt", + "id": 1, + "params": [ + { + "name": "Transaction hash", + "value": "0x1ecac319d356e2bd78262dc9efddb6b048f33e4c706f356d72768f87c5fc0753" + } + ], + "result": { + "name": "eth_getTransactionReceiptExampleResponse", + "value": { + "blockHash": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779", + "blockNumber": "0x49b95c", + "contractAddress": null, + "cumulativeGasUsed": "0xadcd6", + "effectiveGasPrice": "0x3ba1f2a", + "from": "0x188e0b45cedd8f5e425e73c8aa7953b92115ec24", + "gasUsed": "0x21950", + "logs": [ + { + "address": "0xef4fb24ad0916217251f553c0596f8edc630eb66", + "blockHash": "0x3ff53efeec688238a8ecc0a1404221d1be3723aa6531f12f4d635dc8e7824779", + "blockNumber": "0x49b95c", + "data": "0x00000000000000000000000000000000000000000000000000000000000000e0a0...", + "logIndex": "0x14", + "removed": false, + "topics": ["0xfc8703fd57380f9dd234a89dce51333782d49c5902f307b02f03e014d18fe471"], + "transactionHash": "0x1ecac319d356e2bd78262dc9efddb6b048f33e4c706f356d72768f87c5fc0753", + "transactionIndex": "0x8" + } + ], + "logsBloom": "0x000000000000000000000000000000000000000000000000000000000000000000...", + "status": "0x1", + "to": "0xef4fb24ad0916217251f553c0596f8edc630eb66", + "transactionHash": "0x1ecac319d356e2bd78262dc9efddb6b048f33e4c706f356d72768f87c5fc0753", + "transactionIndex": "0x8", + "type": "0x0" + } + } + } + ] + }, + { + "name": "eth_getUncleByBlockHashAndIndex", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get uncle by block hash and index", + "description": "This request returns information about an uncle block given the block hash and the uncle index position.", + "params": [ + { + "name": "blockHash", + "description": "32-byte block hash.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "name": "index", + "description": "Hexadecimal of the uncle's index position. Also known as the storage.", + "required": true, + "schema": { + "description": "Hex-encoded 256 bit unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + ], + "result": { + "name": "eth_getUncleByBlockHashAndIndexResponse", + "description": "A block object, or null when no block was found, or `null` if not found.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + ] + } + }, + "examples": [ + { + "name": "eth_getUncleByBlockHashAndIndexExample", + "jsonrpc": "2.0", + "method": "eth_getUncleCountByBlockHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8" + }, + { + "name": "index", + "value": "0x0" + } + ], + "result": { + "name": "eth_getUncleByBlockHashAndIndexExampleResponse", + "value": null + } + } + ] + }, + { + "name": "eth_getUncleCountByBlockHash", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get number of uncles by block hash", + "description": "This request returns the number of uncles in a block from a block matching the given block hash.", + "params": [ + { + "name": "blockHash", + "description": "32-byte block hash.", + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "eth_getUncleCountByBlockHashResponse", + "description": "The number of uncles in the block in hexadecimal, or `null` if not found.", + "schema": { + "oneOf": [ + { + "description": "Not Found (null).", + "type": "null" + }, + { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + ] + } + }, + "examples": [ + { + "name": "eth_getUncleCountByBlockHashExample", + "jsonrpc": "2.0", + "method": "eth_getUncleCountByBlockHash", + "id": 1, + "params": [ + { + "name": "blockHash", + "value": "0xd459570b5d2994a81ec1875b058f665b7f9c006172a8bd2860de87aee9569ac8" + } + ], + "result": { + "name": "eth_getUncleCountByBlockHashExampleResponse", + "value": "0x0" + } + } + ] + }, + { + "name": "eth_maxPriorityFeePerGas", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get current max priority fee per gas", + "description": "This request returns an estimate of how much priority fee, in wei, you should pay to get a transaction included in a block.", + "params": [], + "result": { + "name": "eth_maxPriorityFeePerGasResponse", + "schema": { + "maxPriorityFeePerGas": { + "description": "The priority fee for block inclusion in wei, as a hexadecimal value.", + "$ref": "#/components/schemas/uint", + "example": "0x3b9aca00" + } + } + }, + "examples": [ + { + "name": "eth_maxPriorityFeePerGasExample", + "jsonrpc": "2.0", + "method": "eth_maxPriorityFeePerGas", + "id": 1, + "params": [], + "result": { + "name": "eth_maxPriorityFeePerGasExampleResponse", + "value": "0x3b9aca00" + } + } + ] + }, + { + "name": "eth_protocolVersion", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + } + ], + "summary": "Get client's protocol version", + "description": "This request returns the current Ethereum protocol version of the client run by the node serving the request. **Warning**, not all methods are supported by the same client across Infura.", + "params": [], + "result": { + "name": "eth_protocolVersionResponse", + "schema": { + "description": "The current Ethereum protocol version, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "examples": [ + { + "name": "eth_protocolVersionExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_protocolVersion", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_protocolVersionResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "eth_sendRawTransaction", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Submit a raw transaction", + "description": "This request submits a raw, pre-signed, transaction. Linea is compatible with the [London fork](https://ethereum.org/en/history/#london_facilities) and supports [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) type 2 transactions.\n\n**Important**:\n\n- The transaction must be signed externally using a private key. Consider using a wallet such as [MetaMask](https://metamask.io) or libraries such as [web3.js](https://docs.metamask.io/services/tutorials/ethereum/send-a-transaction/use-web3.js) or [ethers.js](https://docs.metamask.io/services/tutorials/ethereum/send-a-transaction/send-a-transaction-ethers). \n- Ensure the account controlled by the private key has enough funds to pay the network's gas fee.\n- The gas allocated to this transaction must cover both the value of the transaction and network gas fees.\n", + "params": [ + { + "name": "transaction", + "description": "Hex-encoded, serialized, pre-signed transaction data that includes all necessary fields (such as sender, recipient, value, gas, etc.) as required by the Ethereum transaction format. Linea supports 1559, 2930, and legacy transactions types.", + "required": true, + "schema": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + ], + "result": { + "name": "eth_sendRawTransactionResponse", + "description": "The transaction hash if the transaction was successfully broadcast, or a zero hash if the transaction is not yet included in a block. If creating a contract, consider using `eth_getTransactionReceipt` to get the contract address after the transaction is included.", + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "examples": [ + { + "name": "eth_sendRawTransactionExample", + "jsonrpc": "2.0", + "method": "eth_sendRawTransaction", + "id": 1, + "params": [ + { + "name": "transaction", + "value": "0xf869018203e882520894f17f52151..." + } + ], + "result": { + "name": "eth_sendRawTransactionExampleResponse", + "value": "0xe670ec64341771606e55d6b4ca35a1a6..." + } + } + ] + }, + { + "name": "eth_submitHashrate", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_submitHashrate", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "eth_submitWork", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Submit work solution", + "description": "This request is used for submitting a proof-of-work solution.", + "params": [], + "result": { + "name": "eth_submitWorkResponse", + "schema": { + "description": "Returns `true` if the provided solution is valid, otherwise `false`.", + "type": "boolean", + "example": "true" + } + }, + "examples": [ + { + "name": "eth_submitWorkExample", + "params": [], + "jsonrpc": "2.0", + "method": "eth_submitWork", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_submitWorkExampleResponse", + "value": "false" + } + } + ] + }, + { + "name": "eth_subscribe", + "tags": [ + { + "name": "WebSocket" + } + ], + "summary": "Create a new subscription", + "description": "This request creates a new subscription for particular events. The node returns a subscription ID. For each event that matches the subscription, a notification with relevant data is sent together with the subscription ID.\nThis must be a WebSocket request and is only available on mainnet. We recommend you use the WSS protocol to set up bidirectional stateful subscriptions. Stateless HTTP WebSockets are also supported.\n**We strongly recommend specifying a filter (addresses, topics, or both) when subscribing to the logs event.**\n", + "params": [ + { + "name": "events", + "description": "Specify one of the following subscription events.", + "required": true, + "schema": { + "anyOf": [ + { + "title": "newHeads", + "description": "This subscription returns a notification each time a new header is appended to the chain, including chain reorganizations. In a chain reorganization, the subscription emits all new headers for the new chain. Therefore, the subscription can emit multiple headers at the same height.", + "type": "string", + "enum": ["newHeads"] + }, + { + "title": "logs", + "description": "This subscription returns logs from newly imported blocks that match the specified filter criteria. If a chain reorganization occurs, logs from the old chain are resent with the removed property set to `true`. Logs from transactions that are included in the new chain are emitted. As a result, the same transaction might emit logs multiple times during a reorganization.", + "type": "object", + "properties": { + "logs": { + "type": "string", + "enum": ["logs"] + }, + "address": { + "description": "Optional filter to only return logs that are created from an array of (one or more) provided addresses.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + "topics": { + "type": "array", + "description": "Optionally filter by [topics](https://info.etherscan.com/what-is-event-logs). Topics are made available when contracts are deployed with an indexed keyword added to the parameter declarationFilter.\n - Topic 0: Is the first topic in the event log. It often represents an event or a primary identifier of an event, for example, the Keccak256 hash of the event signature.\n - Topic 1: The first indexed parameter (for example, sender address).\n - Topic 2: The second indexed parameter (for example, recipient address).\n - Topic 3: The third indexed parameter (for example, additional event-specific data).\n", + "items": { + "type": "string", + "example": "0xEventSignatureHash", + "default": null, + "maxItems": 4 + } + } + } + }, + { + "title": "newPendingTransactions", + "description": "This subscription returns the hash for all transactions that are added to the pending state and are signed with a key that's available in the node. When a transaction that was previously part of the canonical chain isn't part of the new canonical chain after a reorganization, it's emitted again.", + "type": "string", + "enum": ["newPendingTransactions"] + } + ] + } + } + ], + "result": { + "name": "subscriptionId", + "schema": { + "description": "The ID of the newly-created subscription on the node.", + "type": "string" + } + }, + "examples": [ + { + "name": "eth_subscribeExample_subscriptionID", + "jsonrpc": "2.0", + "method": "eth_subscribe", + "id": 1, + "params": [], + "result": { + "name": "eth_subscribeExampleResponse", + "description": "Subscription identifier.", + "value": "0x9cef478923ff08bf67fde6c64013158d" + } + } + ] + }, + { + "name": "eth_syncing", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get sync status", + "description": "This request returns an object with data about the sync status or `false`, indicating that that the node is fully synchronized.", + "params": [], + "result": { + "name": "syncingStatus", + "description": "Synchronization status data object, or `false` if not synchronizing.", + "schema": { + "description": "Syncing status.", + "oneOf": [ + { + "title": "Syncing progress", + "type": "object", + "properties": { + "startingBlock": { + "description": "Block number at which the import started, in hexadecimal. This will only be reset after the sync reaches the head.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x8A9D0" + }, + "currentBlock": { + "description": "Block number of the current syncing block, in hexadecimal. This is the same as `eth_blockNumber`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x8FA20" + }, + "highestBlock": { + "description": "Block number of the highest syncing block, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x90B70" + } + } + }, + { + "title": "Not syncing", + "description": "Should always return `false` if not syncing.", + "properties": { + "result": { + "type": "boolean", + "value": false + } + } + } + ] + } + }, + "examples": [ + { + "name": "eth_syncingExampleIsSync", + "params": [], + "jsonrpc": "2.0", + "method": "eth_syncing", + "id": 1, + "result": { + "name": "eth_syncingExampleIsSyncResponse", + "value": { + "startingBlock": "0x8A9D0", + "currentBlock": "0x8FA20", + "highestBlock": "0x90B70" + } + } + }, + { + "name": "eth_syncingExampleNoSync", + "params": [], + "jsonrpc": "2.0", + "method": "eth_syncing", + "id": 1, + "result": { + "name": "eth_syncingExampleNoSyncResponse", + "value": "false" + } + } + ] + }, + { + "name": "eth_uninstallFilter", + "tags": [ + { + "name": "EVM" + }, + { + "name": "Internal" + } + ], + "summary": "Uninstall filter", + "description": "This request uninstalls a filter that matches the given filter identifier.", + "params": [ + { + "name": "filterId", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + ], + "result": { + "name": "eth_uninstallFilterResponse", + "description": "Result is always given as `true`; as in \"filter doesn't exist\" or \"filter no longer exists\".", + "schema": { + "type": "boolean", + "value": true + } + }, + "examples": [ + { + "name": "eth_uninstallFilterExample", + "jsonrpc": "2.0", + "method": "eth_uninstallFilter", + "id": 1, + "params": [ + { + "name": "filterId", + "value": "0x8144b30022b5d309ac57b8e228d77d52d39a6e0b65e95123dd1e5d375b8b1be6" + } + ], + "result": { + "name": "eth_uninstallFilterExampleResponse", + "description": "Filter doesn't exist.", + "value": true + } + } + ] + }, + { + "name": "eth_unsubscribe", + "tags": [ + { + "name": "WebSocket" + } + ], + "summary": "Delete a subscription", + "description": "This request deletes an existing subscription based on the supplied subscription ID.", + "params": [ + { + "name": "subscriptionId", + "description": "Subscription identifier.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "result": { + "name": "successStatus", + "schema": { + "description": "Success status of the unsubscribe request.", + "type": "boolean", + "example": true + } + }, + "examples": [ + { + "name": "eth_unsubscribeExample", + "jsonrpc": "2.0", + "method": "eth_unsubscribe", + "id": 1, + "params": [ + { + "name": "subscriptionId", + "value": "0x9cef478923ff08bf67fde6c64013158d" + } + ], + "result": { + "name": "eth_unsubscribeExampleResponse", + "value": true + } + } + ] + }, + { + "name": "linea_estimateGas", + "tags": [ + { + "name": "EVM" + } + ], + "summary": "Get gas estimate", + "description": "This request returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction is *not* added to the blockchain. The min gas price for inclusion in the transaction pool is set to 0.02 gwei for mainnet. Practical minimum gas price depends on both the transaction's properties and L1 fees.\n`linea_estimateGas` uses the same inputs as the standard `eth_estimateGas`, but returns the recommended gas limit, the base fee per gas, and the priority fee per gas. We recommend using linea_estimateGas for more accurate results. Learn more about [estimating Linea gas fees](https://docs.linea.build/build-on-linea/gas-fees).\n", + "params": [ + { + "name": "transaction", + "description": "Transaction call object. For `linea_estimateGas`, fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply).", + "required": true, + "schema": { + "type": "object", + "description": "Transaction object generic to all Linea-supported transactions. All transaction call object parameters are optional.", + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "Address of the action receiver.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender. `eth_call` consumes zero gas, but this schema supports other executions that might need this parameter. `eth_estimateGas` ignores this value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Input data; alternative term for `data`.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei. Used only in non-[EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) transactions.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "default": "0x0" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee, in wei, the sender is willing to pay per gas above the base fee. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxPriorityFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list; a list of addresses and storage keys that the transaction plans to access.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + { + "name": "block", + "required": false, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + } + ], + "result": { + "name": "linea_estimateGasResponse", + "description": "The gas estimate for the transaction, in hexadecimal.", + "schema": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "examples": [ + { + "name": "linea_estimateGasExample", + "jsonrpc": "2.0", + "method": "linea_estimateGas", + "id": 1, + "params": [ + { + "name": "transaction", + "value": { + "from": "0x188e0B45cedd8f5e425e73c8aa7953b92115ec24", + "to": "0x791A479620F2A5cf58BB53D45CD3Ec72cFef22Fe", + "value": "0x28F" + } + } + ], + "result": { + "name": "linea_estimateGasExampleResponse", + "value": { + "baseFeePerGas": "0x7", + "gasLimit": "0x5208", + "priorityFeePerGas": "0x9c670ff" + } + } + } + ] + }, + { + "name": "linea_getTransactionExclusionStatusV1", + "tags": [ + { + "name": "Bespoke" + } + ], + "summary": "Verify if a transaction exceeded data line limits", + "description": "This request checks if a transaction was rejected for exceeding data line limits, preventing the prover from generating a proof to be included in a block. \nRejected transaction data is only available within seven days of the transaction attempt. Querying older transactions returns a null response.\n", + "params": [ + { + "name": "transactionHash", + "description": "A string representing the hash (32 bytes) of a transaction.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "linea_getTransactionExclusionStatusV1Response", + "schema": { + "oneOf": [ + { + "title": "Null response", + "type": "null" + }, + { + "title": "Exclusion details", + "type": "object", + "description": "Only returned for transactions rejected by the sequencer.", + "properties": { + "txHash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "txRejectionStage": { + "description": "The point at which the transaction was rejected:\n - SEQUENCER: Rejected by the sequencer\n - RPC: Rejected by an RPC node\n - P2P: Rejected by a P2P-connected node\n", + "type": "string", + "enum": ["SEQUENCER", "RPC", "P2P"] + }, + "reasonMessage": { + "description": "The reason the transaction was rejected.", + "type": "string" + }, + "blockNumber": { + "description": "Block number of the block that the transaction was rejected from, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Time of rejection, in ISO 8601 format.", + "type": "string" + } + } + } + ] + } + }, + "examples": [ + { + "name": "linea_getTransactionExclusionStatusV1Example_ResponseProvided", + "params": [ + { + "name": "transactionHash", + "value": "0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7" + } + ], + "jsonrpc": "2.0", + "method": "linea_getTransactionExclusionStatusV1", + "id": 1, + "result": { + "description": "Example of a transaction exclusion response.", + "name": "linea_getTransactionExclusionStatusV1ExampleResponse", + "value": { + "txHash": "0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7", + "from": "0x4d144d7b9c96b26361d6ac74dd1d8267edca4fc2", + "nonce": "0x64", + "txRejectionStage": "SEQUENCER", + "reasonMessage": "Transaction line count for module ADD=402 is above the limit 70", + "blockNumber": "0x3039", + "timestamp": "2024-08-22T09:18:51Z" + } + } + }, + { + "name": "linea_getTransactionExclusionStatusV1ExampleNull", + "params": [ + { + "name": "transactionHash", + "value": "0x526e56101cf39c1e717cef9cedf6fdddb42684711abda35bae51136dbb350ad7" + } + ], + "jsonrpc": "2.0", + "method": "linea_getTransactionExclusionStatusV1", + "id": 1, + "result": { + "description": "Null response due to data purge or transaction non exclusion.", + "name": "linea_getTransactionExclusionStatusV1Example_NullResponse", + "value": null + } + } + ] + }, + { + "name": "miner_changeTargetGasLimit", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "miner_changeTargetGasLimit", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "miner_setCoinbase", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "miner_setCoinbase", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "net_enode", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_enode", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "net_listening", + "tags": [ + { + "name": "Bespoke" + } + ], + "summary": "Get listening status", + "description": "This request returns `true` if the client is actively listening for network connections. **Warning**: Since Infura methods may be supported by different Ethereum clients, the result can't be considered a global status. It only reflects the listening status of the specific client handling this request.\n", + "params": [], + "result": { + "name": "net_listeningResponse", + "schema": { + "description": "Returns `true` If the client is actively listening for network connections, otherwise returns `false`.", + "type": "boolean", + "example": true + } + }, + "examples": [ + { + "name": "net_listeningExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_listening", + "id": 1, + "result": { + "description": "Example of a response from a Linea node.", + "name": "net_listeningExampleResponse", + "value": true + } + } + ] + }, + { + "name": "net_peerCount", + "tags": [ + { + "name": "Bespoke" + } + ], + "summary": "Get number of peers", + "description": "This request returns the number of peers currently connected to the client. **Warning**: Since Infura methods may be supported by different Ethereum clients, the result can't be considered a global status. It only reflects the number of peers currently connected to the specific client handling this request.\n", + "params": [], + "result": { + "name": "net_peerCountResponse", + "schema": { + "description": "The number of connected peers in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x64" + } + }, + "examples": [ + { + "name": "net_peerCountExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_peerCount", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "net_peerCountExampleResponse", + "value": "0x64" + } + } + ] + }, + { + "name": "net_services", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_services", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "net_version", + "tags": [ + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId`", + "description": "This request returns the `chainId` as a decimal where eth_chainId returns a hexadecimal.", + "params": [], + "result": { + "name": "net_versionResponse", + "schema": { + "description": "String representation of the chain ID.", + "type": "string" + } + }, + "examples": [ + { + "name": "maininet_net_versionExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_version", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "net_versionExampleResponse", + "value": "59144" + } + }, + { + "name": "testnet_net_versionExample", + "params": [], + "jsonrpc": "2.0", + "method": "net_version", + "id": 1, + "result": { + "description": "Example of a response from a Linea Sepolia node.", + "name": "net_versionExampleResponse", + "value": "59141" + } + } + ] + }, + { + "name": "plugins_reloadPluginConfig", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "plugins_reloadPluginConfig", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "rpc_modules", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "rpc_modules", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_block", + "tags": [ + { + "name": "Archive" + }, + { + "name": "Bespoke" + }, + { + "name": "Beta" + } + ], + "summary": "Get trace information", + "description": "This request returns trace data for all the transactions in a given block. This can be useful for debugging purposes or for analyzing the behavior of the chain.", + "params": [ + { + "name": "block", + "description": "Block number or string tag.", + "required": true, + "schema": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + } + } + ], + "result": { + "name": "trace_blockResponse", + "schema": { + "description": "An array of [calls to other contracts](https://docs.infura.io/api/networks/ethereum/json-rpc-methods/trace-methods#trace) containing one object per call, in transaction execution order." + } + }, + "examples": [ + { + "name": "trace_blockExample", + "params": [ + { + "name": "block", + "value": "0x4ff31d" + } + ], + "jsonrpc": "2.0", + "method": "trace_block", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "trace_blockExampleResponse", + "value": { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "action": { + "callType": "call", + "from": "0xf89d7b9c864f589bbf53a82105107622b35eaa40", + "gas": "0x10d88", + "input": "0x", + "to": "0x675ae26b90ec4a16ce0df8723c545f01f2cfe5c7", + "value": "0x60317a81f0400" + }, + "blockHash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "blockNumber": 5239581, + "result": { + "gasUsed": "0x0", + "output": "0x" + }, + "subtraces": 0, + "traceAddress": [], + "transactionHash": "0xd34e34e1bf1c940b7524c7180c1c8ca83fd886d736df5537214d5715365a4e29", + "transactionPosition": 0, + "type": "call" + }, + { + "action": { + "callType": "call", + "from": "0x893594fd296f4a7e9991aa416a37232da6e018aa", + "gas": "0x82f02", + "input": "0x83bd37f900015fbdf89403270a1846f5ae7d113a989f850d156600000a07e5679f99d6d...", + "to": "0x2d8879046f1559e53eb052e949e9544bcb72f414", + "value": "0x0" + }, + "blockHash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "blockNumber": 5239581, + "result": { + "gasUsed": "0x56737", + "output": "0x00000000000000000000000000000000000000000000000003888e23c0f08580" + }, + "subtraces": 3, + "traceAddress": [], + "transactionHash": "0x78109d6f5d643369fbf0ff432bc0c89a150f1c96d849f06cde2fccde7cd4cb25", + "transactionPosition": 1, + "type": "call" + }, + { + "action": { + "callType": "call", + "from": "0x2d8879046f1559e53eb052e949e9544bcb72f414", + "gas": "0x7fa25", + "input": "0x23b872dd000000000000000000000000893594fd296f4a7e9991aa416a37232da6e018a...", + "to": "0x5fbdf89403270a1846f5ae7d113a989f850d1566", + "value": "0x0" + }, + "blockHash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "blockNumber": 5239581, + "result": { + "gasUsed": "0x7ea7", + "output": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "subtraces": 0, + "traceAddress": [0], + "transactionHash": "0x78109d6f5d643369fbf0ff432bc0c89a150f1c96d849f06cde2fccde7cd4cb25", + "transactionPosition": 1, + "type": "call" + }, + { + "action": { + "callType": "call", + "from": "0x2d8879046f1559e53eb052e949e9544bcb72f414", + "gas": "0x76d2e", + "input": "0xcb70e2730000000000000000000000000000000000000000000000000000000000000060...", + "to": "0xd804ba88371a3f00ddaca03cbc2b6c47f38105fc", + "value": "0x0" + }, + "blockHash": "0xf9539cc20c8f5271ac12e6491c022f2e9faaaff1eca0000799e0a6e78d6050c5", + "blockNumber": 5239581, + "result": { + "gasUsed": "0x49af8", + "output": "0x" + }, + "subtraces": 3, + "traceAddress": [1], + "transactionHash": "0x78109d6f5d643369fbf0ff432bc0c89a150f1c96d849f06cde2fccde7cd4cb25", + "transactionPosition": 1, + "type": "call" + } + ] + } + } + } + ] + }, + { + "name": "trace_call", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Archive" + }, + { + "name": "Besu" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "trace_call", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_callMany", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Archive" + }, + { + "name": "Besu" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "trace_callMany", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_filter", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "trace_filter", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_get", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "trace_rawTransaction", + "params": [], + "jsonrpc": "2.0", + "method": "trace_get", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_rawTransaction", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "trace_rawTransaction", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_replayBlockTransactions", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Archive" + }, + { + "name": "Besu" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "trace_replayBlockTransactions", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "trace_transaction", + "tags": [ + { + "name": "Bespoke" + }, + { + "name": "Paid plan" + }, + { + "name": "Beta" + } + ], + "summary": "Get transaction trace", + "description": "This request returns a transaction processing trace for the specified transaction. This method can assist in improving smart contract performance by providing analysis of its internal transactions and execution steps. Use this information to identify bottlenecks and optimize the contract for better performance.", + "params": [ + { + "name": "transactionHash", + "description": "A string representing the hash (32 bytes) of a transaction.", + "required": true, + "schema": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ], + "result": { + "name": "transactionHashResponse", + "description": "A [trace](https://docs.infura.io/api/networks/linea/json-rpc-methods/trace-methods/#trace) and subtraces; in the order called by the transaction.\n", + "schema": { + "type": "array" + } + }, + "examples": [ + { + "name": "trace_transactionExample", + "params": [ + { + "name": "transactionHash", + "value": "0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c" + } + ], + "jsonrpc": "2.0", + "method": "trace_transaction", + "id": 1, + "result": { + "name": "trace_transactionExampleResponse", + "value": [ + { + "action": null, + "callType": "call", + "from": "0xa5ba45f484bc67fe293cf01f7d92d5ba3514dd42", + "gas": "0x0", + "input": "0x", + "to": "0x45a318273749d6eb00f5f6ca3bc7cd3de26d642a", + "value": "0x2ca186f5fda8004", + "blockHash": "0x3f1336edc5299a68dde4e4bfc870e2d81886f8e3c0fbe88279c56ca25bf013a5", + "blockNumber": 19724, + "result": { + "gasUsed": "0x0", + "output": "0x" + }, + "subtraces": 0, + "traceAddress": [], + "transactionHash": "0x5d3faa9b9605a8fb04d989a79bfe6d3b708bdcfc66048d2fe18ed2dda4a8297c", + "transactionPosition": 3, + "type": "call" + } + ] + } + } + ] + }, + { + "name": "txpool_besuPendingTransactions", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "txpool_besuPendingTransactions", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "txpool_besuStatistics", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "txpool_besuStatistics", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "txpool_besuTransactions", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "txpool_besuTransactions", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + }, + { + "name": "web3_clientVersion", + "tags": [ + { + "name": "Bespoke" + } + ], + "summary": "Get current client version", + "description": "This request returns the current client version, which includes details such as the client software name, version, operating system, architecture, and runtime environment. **Warning**: Not all methods are supported by the same client across Infura.\n", + "params": [], + "result": { + "name": "web3_clientVersionResponse", + "schema": { + "description": "A string representing the current client version.", + "type": "string" + } + }, + "examples": [ + { + "name": "web3_clientVersionExample", + "params": [], + "jsonrpc": "2.0", + "method": "web3_clientVersion", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "web3_clientVersionExampleResponse", + "value": "Geth/v1.13.15-stable-b278b28b/linux-amd64/go1.21.9" + } + } + ] + }, + { + "name": "web3_sha3", + "tags": [ + { + "name": "Internal" + }, + { + "name": "Geth" + }, + { + "name": "Bespoke" + } + ], + "summary": "Get `chainId` method standing in", + "description": "todo determine whether to document for internal use", + "params": [], + "result": { + "name": "eth_chainIdResponse", + "schema": { + "description": "Hexadecimal representation of the chain ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0xe728" + } + }, + "examples": [ + { + "name": "eth_chainIdExample", + "params": [], + "jsonrpc": "2.0", + "method": "web3_sha3", + "id": 1, + "result": { + "description": "Example of a response from a Linea mainnet node.", + "name": "eth_chainIdExampleResponse", + "value": "0xe728" + } + } + ] + } + ], + "components": { + "schemas": { + "JsonRpc": { + "value": "2.0", + "description": "The JSON-RPC protocol version." + }, + "Id": { + "description": "Your identifier for the request, echoed back in the response.", + "example": 1 + }, + "Method": { + "description": "Identifier for the RPC request, pass method name.", + "type": "string" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "addresses": { + "description": "Hex-encoded address.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + "byte": { + "description": "Hex-encoded byte.", + "type": "string", + "pattern": "^0x([0-9a-fA-F]?){1,2}$" + }, + "bytes": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "bytesMax32": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "bytes8": { + "description": "8 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "bytes32": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "bytes48": { + "description": "48 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{96}$" + }, + "bytes96": { + "description": "96 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{192}$" + }, + "bytes256": { + "description": "256 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "bytes65": { + "description": "65 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{130}$" + }, + "hash32": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "notFound": { + "description": "Not Found (null).", + "type": "null" + }, + "ratio": { + "description": "Normalized ratio.", + "type": "number", + "minimum": 0, + "maximum": 1 + }, + "uint": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "uint64": { + "description": "Hex-encoded 64 bit unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "uint256": { + "description": "Hex-encoded 256 bit unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "BadBlock": { + "description": "Bad block.", + "type": "object", + "required": ["block", "hash", "rlp"], + "additionalProperties": false, + "properties": { + "block": { + "description": "Block object.", + "type": "object", + "required": [ + "hash", + "parentHash", + "sha3Uncles", + "miner", + "stateRoot", + "transactionsRoot", + "receiptsRoot", + "logsBloom", + "number", + "gasLimit", + "gasUsed", + "timestamp", + "extraData", + "mixHash", + "nonce", + "size", + "transactions", + "uncles" + ], + "additionalProperties": false, + "properties": { + "hash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentHash": { + "description": "32 byte hex value of the hash of the parent block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "sha3Uncles": { + "description": "SHA3 of the uncle's data in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "miner": { + "description": "Not relevant to Proof of Stake. Applied to Proof of Work. Address to pay mining rewards to the coinbase transaction that rewarded the miner for their work.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "stateRoot": { + "description": "Root of the final state trie for the block as 32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionsRoot": { + "description": "Root of the transaction trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "receiptsRoot": { + "description": "Root of the receipts trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "difficulty": { + "description": "Not relevant to Proof of Stake. Difficulty for this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "number": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasLimit": { + "description": "Maximum gas allowed in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "Total gas used by all transactions in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Unix timestamp (milliseconds) for block assembly.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "extraData": { + "description": "Extra data field for this block.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "mixHash": { + "description": "Not relevant to Proof of Stake. Hash used in the Proof of Work process.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Proof of Work nonce; not relevant to Proof of Stake. Hash of the generated Proof of Work.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "totalDifficulty": { + "description": "Not relevant to Proof of Stake. Total difficulty of the chain until this block. This value will always be `0` for an uncle block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "The block's base fee per gas; empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "withdrawalsRoot": { + "description": "Root of the trie containing withdrawal receipts in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blobGasUsed": { + "description": "Total blob gas used in the block. Relevant to data availability and EIP-4844 (blob transactions).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "excessBlobGas": { + "description": "Excess blob gas that's carried over to the next block. Relevant for managing the blob gas market introduced in EIP-4844.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "parentBeaconBlockRoot": { + "description": "Root of the parent Beacon Chain block. This ties the execution layer to the consensus layer in Proof of Stake.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "size": { + "description": "Array of transaction objects, or 32 byte transaction hashes depending on the specified parameter.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactions": { + "anyOf": [ + { + "title": "Transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "Full transactions", + "type": "array", + "items": { + "type": "object", + "description": "Transaction information.", + "allOf": [ + { + "title": "Contextual information", + "required": [ + "blockHash", + "blockNumber", + "from", + "hash", + "transactionIndex" + ], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + ], + "title": "Signed transaction" + } + ] + } + } + ] + }, + "withdrawals": { + "type": "array", + "items": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + } + }, + "uncles": { + "description": "Array of uncle hashes.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "hash": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "rlp": { + "description": "RLP (Recursive Length Prefix); method used to serialize blocks, transactions, and other data in a compact, hex- and byte-encoded format.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + }, + "Block": { + "description": "Block object.", + "type": "object", + "required": [ + "hash", + "parentHash", + "sha3Uncles", + "miner", + "stateRoot", + "transactionsRoot", + "receiptsRoot", + "logsBloom", + "number", + "gasLimit", + "gasUsed", + "timestamp", + "extraData", + "mixHash", + "nonce", + "size", + "transactions", + "uncles" + ], + "additionalProperties": false, + "properties": { + "hash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentHash": { + "description": "32 byte hex value of the hash of the parent block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "sha3Uncles": { + "description": "SHA3 of the uncle's data in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "miner": { + "description": "Not relevant to Proof of Stake. Applied to Proof of Work. Address to pay mining rewards to the coinbase transaction that rewarded the miner for their work.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "stateRoot": { + "description": "Root of the final state trie for the block as 32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionsRoot": { + "description": "Root of the transaction trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "receiptsRoot": { + "description": "Root of the receipts trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "difficulty": { + "description": "Not relevant to Proof of Stake. Difficulty for this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "number": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasLimit": { + "description": "Maximum gas allowed in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "Total gas used by all transactions in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Unix timestamp (milliseconds) for block assembly.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "extraData": { + "description": "Extra data field for this block.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "mixHash": { + "description": "Not relevant to Proof of Stake. Hash used in the Proof of Work process.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Proof of Work nonce; not relevant to Proof of Stake. Hash of the generated Proof of Work.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "totalDifficulty": { + "description": "Not relevant to Proof of Stake. Total difficulty of the chain until this block. This value will always be `0` for an uncle block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "The block's base fee per gas; empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "withdrawalsRoot": { + "description": "Root of the trie containing withdrawal receipts in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blobGasUsed": { + "description": "Total blob gas used in the block. Relevant to data availability and EIP-4844 (blob transactions).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "excessBlobGas": { + "description": "Excess blob gas that's carried over to the next block. Relevant for managing the blob gas market introduced in EIP-4844.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "parentBeaconBlockRoot": { + "description": "Root of the parent Beacon Chain block. This ties the execution layer to the consensus layer in Proof of Stake.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "size": { + "description": "Array of transaction objects, or 32 byte transaction hashes depending on the specified parameter.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactions": { + "anyOf": [ + { + "title": "Transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "Full transactions", + "type": "array", + "items": { + "type": "object", + "description": "Transaction information.", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + ], + "title": "Signed transaction" + } + ] + } + } + ] + }, + "withdrawals": { + "type": "array", + "items": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + } + }, + "uncles": { + "description": "Array of uncle hashes.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "BlockNumberOrTag": { + "description": "Block number or tag.", + "oneOf": [ + { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "safe", "latest", "pending"], + "description": "Block tag.", + "title": "Block tag" + } + ] + }, + "BlockNumberOrTagOrHash": { + "description": "Block number, tag, or block hash.", + "anyOf": [ + { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "safe", "latest", "pending"], + "description": "Block tag." + }, + { + "description": "Block hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + ] + }, + "BlockTag": { + "type": "string", + "enum": ["earliest", "finalized", "safe", "latest", "pending"], + "description": "Descriptor of block by status. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n - `earliest`: The lowest numbered block the client has available.\n - `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n - `safe`: The most recent block that's safe from re-orgs under honest majority and certain synchronicity assumptions. \n - `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the\n canonical chain even under healthy/normal conditions. \n - `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n" + }, + "SyncingStatus": { + "oneOf": [ + { + "title": "Syncing", + "description": "Syncing progress.", + "type": "object", + "additionalProperties": false, + "properties": { + "startingBlock": { + "description": "A hexadecimal equivalent of the integer indicating the block at which the import started (will only be reset after the sync reaches the head).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "currentBlock": { + "description": "Block number as hex-encoded unsigned integer indicating the current block syncing data, same as `eth_blockNumber`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "highestBlock": { + "description": "Block number as hex-encoded unsigned integer indicating the highest block syncing data.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "title": "Not syncing", + "description": "Should always return false if not syncing.", + "type": "boolean", + "example": true + } + ] + }, + "FilterResults": { + "oneOf": [ + { + "title": "New block or transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "New logs", + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + } + ] + }, + "Filter": { + "type": "object", + "additionalProperties": false, + "properties": { + "fromBlock": { + "description": "From block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "toBlock": { + "description": "To block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "oneOf": [ + { + "anyAddress": null, + "title": "Any address", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "address": null, + "title": "Single address" + }, + { + "description": "Hex-encoded address.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "addresses": null, + "title": "Addresses" + } + ] + }, + "topics": { + "description": "Filter topics.", + "oneOf": [ + { + "title": "Any topic match", + "type": "null" + }, + { + "title": "Specified filter topics", + "type": "array", + "items": { + "description": "Filter topic list entry.", + "oneOf": [ + { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Single topic match" + }, + { + "title": "Multiple topic match", + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ] + } + } + ] + } + } + }, + "FilterTopics": { + "description": "Filter topics.", + "oneOf": [ + { + "title": "Any topic match", + "type": "null" + }, + { + "title": "Specified filter topics", + "type": "array", + "items": { + "description": "Filter topic list entry.", + "oneOf": [ + { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Single topic match" + }, + { + "title": "Multiple topic match", + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ] + } + } + ] + }, + "FilterTopic": { + "description": "Filter topic list entry.", + "oneOf": [ + { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Single topic match" + }, + { + "title": "Multiple topic match", + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ] + }, + "Log": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "ReceiptInfo": { + "type": "object", + "required": [ + "blockHash", + "blockNumber", + "from", + "cumulativeGasUsed", + "gasUsed", + "logs", + "logsBloom", + "transactionHash", + "transactionIndex", + "effectiveGasPrice" + ], + "additionalProperties": false, + "properties": { + "type": { + "description": "Hex-encoded byte.", + "type": "string", + "pattern": "^0x([0-9a-fA-F]?){1,2}$" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Address of the call initiator.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "to": { + "description": "Address of the receiver or null in a contract creation transaction.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Recipient Address" + } + ] + }, + "cumulativeGasUsed": { + "description": "The sum of gas used by this transaction and all preceding transactions in the same block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction alone.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blobGasUsed": { + "description": "The amount of blob gas used for this specific transaction. Only specified for blob transactions as defined by EIP-4844.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "contractAddress": { + "description": "The contract address created, if the transaction was a contract creation, otherwise null.", + "oneOf": [ + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + }, + { + "title": "No data", + "type": "null" + } + ] + }, + "logs": { + "description": "Logs.", + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "logsBloom": { + "description": "Logs bloom.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "root": { + "description": "The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "status": { + "description": "Either 1 (success) or 0 (failure). Only specified for transactions included after the Byzantium upgrade.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "enum": ["0x0", "0x1"] + }, + "effectiveGasPrice": { + "description": "The actual value per gas deducted from the sender's account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blobGasPrice": { + "description": "The actual value per gas deducted from the sender's account for blob gas. Only specified for blob transactions as defined by EIP-4844.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "AccountProof": { + "type": "object", + "required": [ + "address", + "accountProof", + "balanceeth_getBalance", + "codeHash", + "nonce", + "storageHash", + "storageProof" + ], + "additionalProperties": false, + "properties": { + "address": { + "description": "The account address for which the Merkle proof is retrieved. This is an echo of the address passed in the request.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "accountProof": { + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `stateRoot`-Node, following the path of the address as key.", + "type": "array", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "balance": { + "description": "Hexadecimal of the balance in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "codeHash": { + "description": "The 32-byte hash of the account's code. For EOAs, this will be the hash of an empty string. For contract accounts, it represents the hash of the deployed contract code.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "storageHash": { + "description": "32-byte SHA3 hash of the storage root. All storage will deliver a Merkle proof starting with this root hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "storageProof": { + "description": "An array of requested storage-entries.", + "type": "array", + "items": { + "type": "object", + "required": ["key", "value", "proof"], + "additionalProperties": false, + "properties": { + "key": { + "description": "The requested storage key.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "value": { + "description": "The storage value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "proof": { + "type": "array", + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `storageHash` node and following the path of the key.", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + } + } + } + } + }, + "StorageProof": { + "type": "object", + "required": ["key", "value", "proof"], + "additionalProperties": false, + "properties": { + "key": { + "description": "The requested storage key.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "value": { + "description": "The storage value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "proof": { + "type": "array", + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `storageHash` node and following the path of the key.", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + } + }, + "Transaction4844Unsigned": { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "AccessListEntry": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "AccessList": { + "description": "Access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "GenericTransaction": { + "type": "object", + "description": "Transaction object generic to all types.", + "additionalProperties": false, + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value sent with this transaction encoded as hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.\n", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "blobs": { + "description": "Raw blob data.", + "type": "array", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "Transaction1559Unsigned": { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "Transaction2930Unsigned": { + "type": "object", + "description": "EIP-2930 transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice", "chainId", "accessList"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "TransactionLegacyUnsigned": { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "TransactionUnsigned": { + "oneOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 transaction" + }, + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned legacy transaction" + } + ] + }, + "Transaction4844Signed": { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + "Transaction1559Signed": { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + "Transaction2930Signed": { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + "TransactionLegacySigned": { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + "TransactionSigned": { + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + ] + }, + "TransactionInfo": { + "type": "object", + "description": "Transaction information.", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + ], + "title": "Signed transaction" + } + ] + }, + "TxType": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "Withdrawal": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + }, + "LineaBlock": { + "type": "object", + "required": [ + "hash", + "parentHash", + "sha3Uncles", + "miner", + "stateRoot", + "transactionsRoot", + "receiptsRoot", + "logsBloom", + "number", + "gasLimit", + "gasUsed", + "timestamp", + "extraData", + "mixHash", + "nonce", + "size", + "transactions", + "uncles" + ], + "additionalProperties": false, + "properties": { + "hash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentHash": { + "description": "32 byte hex value of the hash of the parent block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "sha3Uncles": { + "description": "SHA3 of the uncle's data in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "miner": { + "description": "Not relevant to Proof of Stake/Linea. Applied to Proof of Work. Address to pay mining rewards to the coinbase transaction that rewarded the miner for their work.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "stateRoot": { + "description": "Root of the final state trie for the block as 32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionsRoot": { + "description": "Root of the transaction trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "receiptsRoot": { + "description": "Root of the receipts trie for the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "difficulty": { + "description": "Not relevant to Proof of Stake/Linea. Difficulty for this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "number": { + "description": "Block number; `null` when block is pending.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasLimit": { + "description": "Maximum gas allowed in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "Total gas used by all transactions in this block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Unix timestamp (milliseconds) for block assembly.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "extraData": { + "description": "Extra data field for this block.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "mixHash": { + "description": "Not relevant to Proof of Stake/Linea. Hash used in the Proof of Work process.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Proof of Work nonce; not relevant to Proof of Stake/Linea. Hash of the generated Proof of Work.", + "type": "string", + "pattern": "^0x[0-9a-f]{16}$" + }, + "totalDifficulty": { + "description": "Not relevant to Proof of Stake/Linea. Total difficulty of the chain until this block. This value will always be `0` for an uncle block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "baseFeePerGas": { + "description": "The block's base fee per gas; empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "withdrawalsRoot": { + "description": "Root of the trie containing withdrawal receipts in the block.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "parentBeaconBlockRoot": { + "description": "Root of the parent Beacon Chain block. This ties the execution layer to the consensus layer in Proof of Stake.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "size": { + "description": "Size of block in bytes.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactions": { + "description": "Array of transaction objects, or 32 byte transaction hashes depending on the specified parameter.", + "anyOf": [ + { + "title": "Transaction hashes", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + { + "title": "Full transactions", + "type": "array", + "items": { + "type": "object", + "description": "Transaction information.", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction index.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + { + "oneOf": [ + { + "description": "Signed 4844 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-4844 transaction.", + "required": [ + "type", + "nonce", + "to", + "gas", + "value", + "input", + "maxPriorityFeePerGas", + "maxFeePerGas", + "maxFeePerBlobGas", + "accessList", + "blobVersionedHashes", + "chainId" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerBlobGas": { + "description": "The maximum total fee per gas the sender is willing to pay for blob gas in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "blobVersionedHashes": { + "description": "List of versioned blob hashes associated with the transaction's EIP-4844 data blobs.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 4844 transaction" + }, + { + "title": "EIP-4844 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "R.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "S.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 1559 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 Transaction" + }, + { + "title": "EIP-1559 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": ". The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed 2930 Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "title": "EIP-2930 transaction signature properties", + "required": ["yParity", "r", "s"], + "properties": { + "yParity": { + "description": "The YParity (0 for even, 1 for odd) of the y-value of the secp256k1 signature.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "v": { + "description": "ECDSA Recovery ID. For backwards compatibility, `v` is optionally provided as an alternative to `yParity`. This field is DEPRECATED and all use of it should migrate to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + } + ], + "title": "Signed transaction" + } + ] + } + } + ] + }, + "withdrawals": { + "type": "array", + "items": { + "type": "object", + "description": "Validator withdrawal.", + "required": ["index", "validatorIndex", "address", "amount"], + "additionalProperties": false, + "properties": { + "index": { + "description": "Index of withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "validatorIndex": { + "description": "Index of validator that generated withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "address": { + "description": "Recipient address for withdrawal value.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "amount": { + "description": "Value contained in withdrawal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + } + } + } + }, + "uncles": { + "description": "Array of uncle hashes.", + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "LineaBlockNumberOrTag": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "LineaBlockNumberOrTagNoFinalized": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "LineaBlockNumberOrTagOrHash": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + }, + "LineaBlockNumberOrTagOrHashNoFinalized": { + "description": "Block number, block hash, or string tag.", + "anyOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + }, + { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Block hash" + } + ] + }, + "LineaBlockTag": { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n" + }, + "LineaBlockTagNoFinalized": { + "type": "string", + "enum": ["earliest", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block).\n- `earliest`: The lowest numbered block the client has available.\n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n" + }, + "LineaSubmitWork": { + "type": "array", + "description": "Positional parameters for the eth_submitWork method. The parameters are:\n1. nonce: 8 bytes (64 bits) representing the proof-of-work nonce.\n2. powHash: 32 bytes (256 bits) representing the hash of the block header.\n3. mixDigest: 32 bytes (256 bits) representing the mix digest from the mining algorithm.\n", + "items": { + "type": "string", + "pattern": "^0x[0-9a-fA-F]{1,64}$" + } + }, + "Linea4byteTracerConfig": { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["4byteTracer"] + } + } + }, + "Linea4byteTracerResponse": { + "type": "array", + "description": "An array of trace results from the 4byteTracer.", + "items": { + "type": "object", + "properties": { + "result": { + "type": "object", + "description": "A map where the key is a function selector and calldata size, and the value is the number of occurrences.", + "additionalProperties": { + "type": "integer", + "description": "Number of occurrences of the function call with the specified selector and calldata size." + } + }, + "transactionHash": { + "description": "The transaction hash that the traces relate to.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + }, + "LineaCallTracerConfig": { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["callTracer"] + }, + "onlyTopCall": { + "description": "When `true`, will only trace the primary (top-level) call and not any sub-calls. It eliminates the additional processing for each call frame.", + "type": "boolean" + }, + "withLog": { + "description": "When `true`, instructs the tracer to also collect the logs emitted during each call.", + "type": "boolean" + } + } + }, + "LineaCallTracerResponse": { + "description": "This returns all the call frames executed during a transaction, including depth 0. The result provides a nested list of call frames. They form a tree with the top-level call at root and sub-calls as children of the higher levels.", + "properties": { + "calls": { + "type": "object", + "items": { + "anyOf": [ + { + "transactionInfo": null, + "type": "object", + "properties": { + "tracerData": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "description": "Tracer object." + }, + "linkedCalls": { + "type": "array", + "description": "A recursive structure that nests additional call frames. Each call frame can, in turn, make sub-calls, and the calls field within each frame captures those sub-calls.", + "items": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "calls": null, + "description": "Next call object." + } + ] + } + } + } + }, + "LineaFlatCallTracerConfig": { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The type of tracer; restricted to work with associated config options.", + "type": "string", + "enum": ["flatCallTracer"] + } + } + }, + "LineaFlatCallTracerResponse": { + "description": "Returns all the call frames executed during a transaction in a flat structure. Each call frame includes details about the action taken, gas used, and other transaction information. Unlike `callTracer`, this result is not nested.\n", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "TracerObject" + }, + { + "title": "TraceDetails", + "type": "object", + "properties": { + "blockHash": { + "description": "32-byte block hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "subtraces": { + "type": "integer", + "description": "The number of subtraces that occurred within the call." + }, + "traceAddress": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "The trace address showing the nested level of the call." + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionPosition": { + "type": "integer", + "description": "The position of the transaction within the block." + } + } + } + ] + }, + "LineaPrestateTracerConfig": { + "type": "object", + "required": ["tracerType"], + "properties": { + "tracerType": { + "description": "The prestate tracer has two modes, `prestate` and `diff`. The prestate mode returns the accounts necessary to execute a given transaction. `diff` mode returns the differences between the transaction's pre- and post-state (what changed *because* the transaction happened). The prestateTracer defaults to `prestate` mode. It reexecutes the given transaction and tracks every part of state that's touched.", + "type": "string", + "enum": ["prestateTracer"] + }, + "diffMode": { + "type": "boolean", + "default": false, + "description": "Setting this to `true` enables `diff` mode. In `diff` mode, the result contains a pre and a post object." + } + } + }, + "LineaPrestateTracerResponse": { + "type": "array", + "description": "Participant account, balance, and transaction count.", + "items": { + "type": "object", + "properties": { + "address": { + "description": "Participant account.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "balance": { + "description": "Balance.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + } + } + } + }, + "LineaTracerObject": { + "type": "object", + "properties": { + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "The input data sent to the contract (ABI-encoded).", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "output": { + "description": "The output data returned by the contract.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "to": { + "description": "The contract or address being called.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "error": { + "description": "Error, if any.", + "type": "string" + }, + "revertReason": { + "description": "Solidity revert reason, if any." + }, + "type": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "value": { + "description": "The amount of ETH in wei transferred in the call.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "LineaCallType": { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ] + }, + "LineaFilter": { + "type": "object", + "additionalProperties": false, + "properties": { + "fromBlock": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "toBlock": { + "description": "Block number or string tag.", + "oneOf": [ + { + "description": "Block number in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "title": "Block number" + }, + { + "type": "string", + "enum": ["earliest", "finalized", "latest", "pending"], + "description": "See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). Note that Linea doesn't support `safe`; use `finalized` instead. Learn more about [Linea's layer 2 finalization](https://docs.linea.build/developers/guides/finalized-block).\n- `earliest`: The lowest numbered block the client has available.\n- `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination. \n- `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions. \n- `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool. \n", + "title": "Block tag" + } + ] + }, + "address": { + "oneOf": [ + { + "title": "Any address", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + }, + { + "description": "Hex-encoded address.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "title": "Addresses" + } + ] + }, + "topics": { + "description": "Filter topics.", + "oneOf": [ + { + "title": "Any topic match", + "type": "null" + }, + { + "title": "Specified filter topics", + "type": "array", + "items": { + "description": "Filter topic list entry.", + "oneOf": [ + { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$", + "title": "Single topic match" + }, + { + "title": "Multiple topic match", + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + ] + } + } + ] + } + } + }, + "LineaAccountProof": { + "description": "Account proof.", + "type": "object", + "required": [ + "address", + "accountProof", + "balanceeth_getBalance", + "codeHash", + "nonce", + "storageHash", + "storageProof" + ], + "additionalProperties": false, + "properties": { + "address": { + "description": "The account address for which the Merkle proof is retrieved. This is an echo of the address passed in the request.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "accountProof": { + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `stateRoot`-Node, following the path of the address as key.", + "type": "array", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + }, + "balance": { + "description": "Hexadecimal of the balance in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "codeHash": { + "description": "The 32-byte hash of the account's code. For EOAs, this will be the hash of an empty string. For contract accounts, it represents the hash of the deployed contract code.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,15})|0$" + }, + "storageHash": { + "description": "32-byte SHA3 hash of the storage root. All storage will deliver a Merkle proof starting with this root hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "storageProof": { + "description": "An array of requested storage-entries.", + "type": "array", + "items": { + "type": "object", + "required": ["key", "value", "proof"], + "additionalProperties": false, + "properties": { + "key": { + "description": "The requested storage key.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "value": { + "description": "The storage value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "proof": { + "type": "array", + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `storageHash` node and following the path of the key.", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + } + } + } + } + }, + "LineaStorageProof": { + "type": "object", + "required": ["key", "value", "proof"], + "additionalProperties": false, + "properties": { + "key": { + "description": "The requested storage key.", + "type": "string", + "pattern": "^0x[0-9a-f]{0,64}$" + }, + "value": { + "description": "The storage value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]{0,31})|0$" + }, + "proof": { + "type": "array", + "description": "An array of RLP-serialized MerkleTree-Nodes, starting with the `storageHash` node and following the path of the key.", + "items": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + } + } + } + }, + "LineaSyncingStatus": { + "description": "Syncing status.", + "oneOf": [ + { + "title": "Syncing progress", + "type": "object", + "properties": { + "startingBlock": { + "description": "Block number at which the import started, in hexadecimal. This will only be reset after the sync reaches the head.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x8A9D0" + }, + "currentBlock": { + "description": "Block number of the current syncing block, in hexadecimal. This is the same as `eth_blockNumber`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x8FA20" + }, + "highestBlock": { + "description": "Block number of the highest syncing block, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x90B70" + } + } + }, + { + "title": "Not syncing", + "description": "Should always return `false` if not syncing.", + "properties": { + "result": { + "type": "boolean", + "value": false + } + } + } + ] + }, + "LineaSubscribe": { + "anyOf": [ + { + "title": "newHeads", + "description": "This subscription returns a notification each time a new header is appended to the chain, including chain reorganizations. In a chain reorganization, the subscription emits all new headers for the new chain. Therefore, the subscription can emit multiple headers at the same height.", + "type": "string", + "enum": ["newHeads"] + }, + { + "title": "logs", + "description": "This subscription returns logs from newly imported blocks that match the specified filter criteria. If a chain reorganization occurs, logs from the old chain are resent with the removed property set to `true`. Logs from transactions that are included in the new chain are emitted. As a result, the same transaction might emit logs multiple times during a reorganization.", + "type": "object", + "properties": { + "logs": { + "type": "string", + "enum": ["logs"] + }, + "address": { + "description": "Optional filter to only return logs that are created from an array of (one or more) provided addresses.", + "type": "array", + "items": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + } + }, + "topics": { + "type": "array", + "description": "Optionally filter by [topics](https://info.etherscan.com/what-is-event-logs). Topics are made available when contracts are deployed with an indexed keyword added to the parameter declarationFilter.\n - Topic 0: Is the first topic in the event log. It often represents an event or a primary identifier of an event, for example, the Keccak256 hash of the event signature.\n - Topic 1: The first indexed parameter (for example, sender address).\n - Topic 2: The second indexed parameter (for example, recipient address).\n - Topic 3: The third indexed parameter (for example, additional event-specific data).\n", + "items": { + "type": "string", + "example": "0xEventSignatureHash", + "default": null, + "maxItems": 4 + } + } + } + }, + { + "title": "newPendingTransactions", + "description": "This subscription returns the hash for all transactions that are added to the pending state and are signed with a key that's available in the node. When a transaction that was previously part of the canonical chain isn't part of the new canonical chain after a reorganization, it's emitted again.", + "type": "string", + "enum": ["newPendingTransactions"] + } + ] + }, + "LineTraceTransaction": { + "description": "An array of [calls to other contracts](https://docs.infura.io/api/networks/ethereum/json-rpc-methods/trace-methods#trace) containing one object per call, in transaction execution order.", + "type": "array", + "items": { + "allOf": [ + { + "type": "string", + "description": "The type of call used in the transaction.", + "enum": [ + "staticcall", + "call", + "delegatecall", + "callcode", + "create", + "create2", + "selfdestruct" + ], + "title": "Call type" + }, + { + "type": "object", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "title": "Transaction context" + } + ] + } + }, + "LineaTransactionContext": { + "type": "object", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ] + }, + "LineaTransactionExclusion": { + "oneOf": [ + { + "title": "Null response", + "type": "null" + }, + { + "title": "Exclusion details", + "type": "object", + "description": "Only returned for transactions rejected by the sequencer.", + "properties": { + "txHash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "txRejectionStage": { + "description": "The point at which the transaction was rejected:\n - SEQUENCER: Rejected by the sequencer\n - RPC: Rejected by an RPC node\n - P2P: Rejected by a P2P-connected node\n", + "type": "string", + "enum": ["SEQUENCER", "RPC", "P2P"] + }, + "reasonMessage": { + "description": "The reason the transaction was rejected.", + "type": "string" + }, + "blockNumber": { + "description": "Block number of the block that the transaction was rejected from, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "timestamp": { + "description": "Time of rejection, in ISO 8601 format.", + "type": "string" + } + } + } + ] + }, + "LineaTransactionInfo": { + "type": "object", + "allOf": [ + { + "type": "object", + "allOf": [ + { + "title": "Contextual information", + "required": ["blockHash", "blockNumber", "from", "hash", "transactionIndex"], + "unevaluatedProperties": false, + "properties": { + "blockHash": { + "description": "Block hash, 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Sender's address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "hash": { + "description": "32 byte hex identifier for the transaction hash.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "Transaction position.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "title": "Linea transaction context" + }, + { + "oneOf": [ + { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ], + "title": "Signed 1559 transaction" + }, + { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ], + "title": "Signed 2930 transaction" + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "title": "Signed legacy transaction" + } + ], + "title": "Signed transaction" + } + ] + }, + "LineaTxType": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "LineaTransactionSigned": { + "oneOf": [ + { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ], + "title": "Signed 1559 transaction" + }, + { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ], + "title": "Signed 2930 transaction" + }, + { + "description": "Signed Legacy Transaction.", + "type": "object", + "allOf": [ + { + "type": "object", + "description": "Legacy transaction.", + "required": ["type", "nonce", "gas", "value", "input", "gasPrice"], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned Legacy transaction" + }, + { + "title": "Legacy transaction signature properties", + "required": ["v", "r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + ], + "title": "Signed legacy transaction" + } + ] + }, + "LineaTransaction2930Signed": { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-2930 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to be paid in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 2930 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ] + }, + "LineaTransactionSignatureProperties": { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "LineaTransaction1559Signed": { + "type": "object", + "allOf": [ + { + "type": "object", + "description": "EIP-1559 transaction.", + "required": [ + "type", + "nonce", + "gas", + "value", + "input", + "maxFeePerGas", + "maxPriorityFeePerGas", + "gasPrice", + "chainId", + "accessList" + ], + "properties": { + "type": { + "description": "Hex-encoded byte for transaction type as introduced in EIP-2718. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType\n- 0x02 for DynamicFeeTxType\n- 0x03 for BlobTxType\n", + "type": "string", + "enum": [0, 1, 2, 3] + }, + "nonce": { + "description": "A counter for the number of transactions sent from the account; used for replay protection..", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "The recipient's address. `null` when it's a contract creation transaction.", + "oneOf": [ + { + "title": "Contract creation", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "gas": { + "description": "Gas limit.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Alternative term for `data`. The hash of the method signature and encoded parameters. For more information, see the Contract ABI description in the Solidity documentation.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee per gas the sender is willing to pay to miners in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "The maximum total fee per gas the sender is willing to pay (includes the network / base fee and miner / priority fee) in wei.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasPrice": { + "description": "The effective gas price paid by the sender in wei. For transactions not yet included in a block, this value should be set equal to the max fee per gas. This field is DEPRECATED, please transition to using `effectiveGasPrice` in the receipt object going forward.\n", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Unsigned 1559 transaction" + }, + { + "type": "object", + "required": ["r", "s"], + "properties": { + "v": { + "description": "ECDSA Recovery ID. An alternative to `yParity`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "r": { + "description": "ECDSA signature r.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "s": { + "description": "ECDSA signature s.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + }, + "title": "Signature properties" + } + ] + }, + "LineaReceiptInfo": { + "type": "object", + "description": "Receipt information", + "required": [ + "blockHash", + "blockNumber", + "from", + "cumulativeGasUsed", + "gasUsed", + "logs", + "logsBloom", + "transactionHash", + "transactionIndex", + "effectiveGasPrice" + ], + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "transactionIndex": { + "description": "The position in the block, in hexadecimal.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "to": { + "description": "Address of the receiver or null in a contract creation transaction.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Recipient Address" + } + ] + }, + "cumulativeGasUsed": { + "description": "The sum of gas used by this transaction and all preceding transactions in the same block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "gasUsed": { + "description": "The amount of gas used for this specific transaction alone.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "contractAddress": { + "description": "The contract address created, if the transaction was a contract creation, otherwise null.", + "oneOf": [ + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Contract address" + }, + { + "title": "Null", + "type": "null" + } + ] + }, + "logs": { + "type": "array", + "items": { + "type": "object", + "required": ["transactionHash"], + "additionalProperties": false, + "properties": { + "removed": { + "type": "boolean" + }, + "logIndex": { + "description": "Hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionIndex": { + "description": "A hexadecimal of the integer representing the position in the block.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "transactionHash": { + "description": "The transaction hash in which the call was made.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockHash": { + "description": "Block hash; 32 byte hex identifier for the block derived from the block header.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "blockNumber": { + "description": "Block number as hex-encoded unsigned integer.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "data": { + "description": "Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "topics": { + "type": "array", + "items": { + "description": "32 Hex-encoded bytes.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "logsBloom": { + "description": "Bloom filter for the block logs; `null` when block is pending.", + "type": "string", + "pattern": "^0x[0-9a-f]{512}$" + }, + "root": { + "description": "The post-transaction state root. Only specified for transactions included before the Byzantium upgrade.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + }, + "status": { + "description": "Either 0x1 (success) or 0x0 (failure). Only specified for transactions included after the Byzantium upgrade.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "enum": ["0x0", "0x1"] + }, + "effectiveGasPrice": { + "description": "The actual value per gas deducted from the sender's account. Before EIP-1559, this is equal to the transaction's gas price. After, it is equal to baseFeePerGas + min(maxFeePerGas - baseFeePerGas, maxPriorityFeePerGas).", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + }, + "LineaGenericTransaction": { + "type": "object", + "description": "Transaction object generic to all Linea-supported transactions. All transaction call object parameters are optional.", + "additionalProperties": false, + "properties": { + "type": { + "description": "The transaction type as introduced in EIP-2718, in hexadecimal. Use:\n- 0x00 for LegacyTxType\n- 0x01 for AccessListTxType (EIP-2930)\n- 0x02 for DynamicFeeTxType (EIP-1559)\n", + "type": "string", + "enum": ["0x00", "0x01", "0x02"] + }, + "nonce": { + "description": "Account nonce; counter for the number of transactions sent from the account; for replay protection.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "to": { + "description": "Address of the action receiver.", + "oneOf": [ + { + "title": "Contract Creation (null)", + "type": "null" + }, + { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$", + "title": "Address" + } + ] + }, + "from": { + "description": "Address of the sender.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "gas": { + "description": "Gas provided by the sender. `eth_call` consumes zero gas, but this schema supports other executions that might need this parameter. `eth_estimateGas` ignores this value.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "value": { + "description": "Value to transfer in wei.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "input": { + "description": "Input data; alternative term for `data`.", + "type": "string", + "pattern": "^0x[0-9a-f]*$" + }, + "gasPrice": { + "description": "The gas price the sender is willing to pay in wei. Used only in non-[EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) transactions.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1", + "default": "0x0" + }, + "maxPriorityFeePerGas": { + "description": "Maximum fee, in wei, the sender is willing to pay per gas above the base fee. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "maxFeePerGas": { + "description": "Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. Can be used only in [EIP-1559 transactions](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). If used, must specify `maxPriorityFeePerGas`.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + }, + "accessList": { + "description": "EIP-2930 access list; a list of addresses and storage keys that the transaction plans to access.", + "type": "array", + "items": { + "description": "Access list entry.", + "type": "object", + "additionalProperties": false, + "properties": { + "address": { + "description": "Hex-encoded address.", + "type": "string", + "pattern": "^0x[0-9a-fA-F]{40}$" + }, + "storageKeys": { + "type": "array", + "items": { + "description": "32 byte hex value.", + "type": "string", + "pattern": "^0x[0-9a-f]{64}$" + } + } + } + } + }, + "chainId": { + "description": "Chain ID that this transaction is valid on.", + "type": "string", + "pattern": "^0x([1-9a-f]+[0-9a-f]*|0)$", + "example": "0x1" + } + } + } + }, + "tags": { + "Archive": { + "name": "Archive", + "description": "Served by an archive node." + }, + "Bespoke": { + "name": "Bespoke", + "description": "Custom APIs built for specific clients or highly specialized use cases or clients; not available as standard EVM or MetaMask methods.\n" + }, + "Besu": { + "name": "Besu", + "description": "Served by a Besu node." + }, + "OpenBeta": { + "name": "Beta", + "description": "Available as a beta version; use at your own risk." + }, + "CustomPlan": { + "name": "Custom plan", + "description": "Infura's advanced API methods offered through custom arrangements." + }, + "Deprecated": { + "name": "Deprecated", + "description": "Deprecated methods." + }, + "DINParther": { + "name": "DIN", + "description": "Infura's DIN partners support the network." + }, + "Ethereum": { + "name": "EVM", + "description": "Ethereum execution API methods. These methods cover basic transaction calls, block information, and account management available in Ethereum's [`execution-apis`](https://github.com/ethereum/execution-apis/) repository.\nThese are standard Ethereum JSON-RPC API methods. See the [Ethereum wiki](https://eth.wiki/json-rpc/API#json-rpc-methods) for more information about these methods.\"\n" + }, + "Experimental": { + "name": "Experimental", + "description": "Publicly available but may not be stable or fully supported; experimental. Methods may have limited support and could change or be deprecated. Users are advised to use these at their own risk." + }, + "Geth": { + "name": "Geth", + "description": "Served by a Geth node." + }, + "Internal": { + "name": "Internal", + "description": "Not available to public." + }, + "MetaMask": { + "name": "MetaMask", + "description": "MetaMask-specific methods." + }, + "PaidPlan": { + "name": "Paid plan", + "description": "Infura's paid plans giving access to advanced API methods that offer extended functionality such as access to archive data, IPFS gateway, and specialized performance optimizations." + }, + "WSS": { + "name": "WebSocket", + "description": "WebSocket requests are supported in Linea via a virtualization service. An alternative, dedicated URL must be applied." + } + } + } +} diff --git a/src/theme/Admonition/Layout/index.js b/src/theme/Admonition/Layout/index.js new file mode 100644 index 00000000000..c6d959b3899 --- /dev/null +++ b/src/theme/Admonition/Layout/index.js @@ -0,0 +1,15 @@ +import React from 'react' +import Layout from '@theme-original/Admonition/Layout' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' + +export default function LayoutWrapper(props) { + return ( + <> +
    + + + +
    + + ) +} diff --git a/src/theme/Admonition/index.css b/src/theme/Admonition/index.css index 0983ca4f0b1..65bbc8cd882 100644 --- a/src/theme/Admonition/index.css +++ b/src/theme/Admonition/index.css @@ -1,6 +1,20 @@ .alert.theme-admonition-flaskOnly { - --ifm-alert-background-color: var(--mm-flask-background-color); + --ifm-alert-background-color: var(--ifm-color-primary-light); --ifm-alert-background-color-highlight: var(--mm-flask-color); --ifm-alert-foreground-color: var(--mm-flask-color); --ifm-alert-border-color: var(--mm-flask-border-color); } + +[data-theme='dark'] .alert.theme-admonition-flaskOnly { + --ifm-alert-background-color: var(--developer-purple-dark); +} + +.alert-wrapper { + margin-top: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); + margin-bottom: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); +} + +.tabItem_node_modules-\@docusaurus-theme-classic-lib-theme-TabItem-styles-module + > *:last-child.alert-wrapper { + margin-bottom: calc(var(--ifm-h2-vertical-rhythm-top) * var(--ifm-leading) * 0.5); +} diff --git a/src/theme/Admonition/index.tsx b/src/theme/Admonition/index.tsx index fc0413567eb..4e392977074 100644 --- a/src/theme/Admonition/index.tsx +++ b/src/theme/Admonition/index.tsx @@ -1,38 +1,38 @@ -import React from "react"; -import Admonition from "@theme-original/Admonition"; -import { Props as AdmonitionPropsRaw } from "@theme/Admonition"; -import Link from "@docusaurus/Link"; -import type { WrapperProps } from "@docusaurus/types"; +import React from 'react' +import Admonition from '@theme-original/Admonition' +import { Props as AdmonitionPropsRaw } from '@theme/Admonition' +import Link from '@docusaurus/Link' +import type { WrapperProps } from '@docusaurus/types' -import FlaskIcon from "./flask-icon.svg"; -import "./index.css"; +import FlaskIcon from './flask-icon.svg' +import './index.css' -type AdmonitionProps = Omit & { - type: AdmonitionPropsRaw["type"] | "flaskOnly"; -}; +type AdmonitionProps = Omit & { + type: AdmonitionPropsRaw['type'] | 'flaskOnly' +} -declare function AdmonitionComponent(props: AdmonitionProps): JSX.Element; +declare function AdmonitionComponent(props: AdmonitionProps): JSX.Element -type Props = WrapperProps; +type Props = WrapperProps export default function AdmonitionWrapper(props: Props): JSX.Element { - if (props.type === "flaskOnly") { + if (props.type === 'flaskOnly') { return ( <> {/* @ts-ignore */} } title="Flask Only"> - This feature is experimental and only available in{" "} + This feature is experimental and only available in{' '} MetaMask Flask , the canary distribution of MetaMask. - ); + ) } return ( <> - ); + ) } diff --git a/src/theme/AnnouncementBar/index.tsx b/src/theme/AnnouncementBar/index.tsx new file mode 100644 index 00000000000..73e5a25f69e --- /dev/null +++ b/src/theme/AnnouncementBar/index.tsx @@ -0,0 +1,17 @@ +import React from 'react' +import { useLocation } from '@docusaurus/router' + +export default function AnnouncementBar(): JSX.Element | null { + const location = useLocation() + + return ( +
    + ) +} diff --git a/src/theme/DocCard/index.tsx b/src/theme/DocCard/index.tsx deleted file mode 100644 index 7daeaaf56eb..00000000000 --- a/src/theme/DocCard/index.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import React, { type ReactNode } from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import { - useDocById, - findFirstSidebarItemLink, -} from "@docusaurus/plugin-content-docs/client"; -import isInternalUrl from "@docusaurus/isInternalUrl"; -import { translate } from "@docusaurus/Translate"; -import Heading from "@theme/Heading"; -import type { Props } from "@theme/DocCard"; - -import cardListItemStyles from "@site/src/components/CardList/CardListItem/styles.module.css"; - -import styles from "./styles.module.css"; - -import type { - PropSidebarItemCategory, - PropSidebarItemLink, -} from "@docusaurus/plugin-content-docs"; - -function CardContainer({ - href, - children, - flaskOnly, -}: { - href: string; - children: ReactNode; - flaskOnly?: boolean; -}): JSX.Element { - return ( - - {/* @ts-ignore */} - {children} - - ); -} - -function CardLayout({ - href, - icon, - title, - description, - flaskOnly, -}: { - href: string; - icon: ReactNode; - title: string; - description?: string; - flaskOnly?: boolean; -}): JSX.Element { - return ( - - - {icon} {title} - - {description && ( -

    - {description} -

    - )} -
    - ); -} - -function CardCategory({ - item, -}: { - item: PropSidebarItemCategory; -}): JSX.Element | null { - const href = findFirstSidebarItemLink(item); - - // Unexpected: categories that don't have a link have been filtered upfront - if (!href) { - return null; - } - - return ( - - ); -} - -function CardLink({ item }: { item: PropSidebarItemLink }): JSX.Element { - const icon = isInternalUrl(item.href) ? "📄️" : "🔗"; - const doc = useDocById(item.docId ?? undefined); - return ( - - ); -} - -export default function DocCard({ item }: Props): JSX.Element { - switch (item.type) { - case "link": - return ; - case "category": - return ; - default: - throw new Error(`unknown item type ${JSON.stringify(item)}`); - } -} diff --git a/src/theme/DocCard/styles.module.css b/src/theme/DocCard/styles.module.css deleted file mode 100644 index f1d2a403c55..00000000000 --- a/src/theme/DocCard/styles.module.css +++ /dev/null @@ -1,28 +0,0 @@ -.cardContainer { - --ifm-link-color: var(--ifm-color-emphasis-800); - --ifm-link-hover-color: var(--ifm-color-emphasis-700); - --ifm-link-hover-decoration: none; - - box-shadow: 0 1.5px 3px 0 rgb(0 0 0 / 15%); - border: 1px solid var(--ifm-color-emphasis-200); - transition: all var(--ifm-transition-fast) ease; - transition-property: border, box-shadow; - position: relative; -} - -.cardContainer:hover { - border-color: var(--ifm-color-primary); - box-shadow: 0 3px 6px 0 rgb(0 0 0 / 20%); -} - -.cardContainer *:last-child { - margin-bottom: 0; -} - -.cardTitle { - font-size: 1.2rem; -} - -.cardDescription { - font-size: 0.8rem; -} diff --git a/src/theme/DocCardList/index.js b/src/theme/DocCardList/index.js new file mode 100644 index 00000000000..5a08af3b2e3 --- /dev/null +++ b/src/theme/DocCardList/index.js @@ -0,0 +1,71 @@ +import { useState, useEffect } from 'react' +import clsx from 'clsx' +import { useCurrentSidebarCategory, filterDocCardListItems } from '@docusaurus/theme-common' +import { useColorMode } from '@docusaurus/theme-common' +import DocCard from '@theme/DocCard' +import CutOffCorners from '@site/src/components/elements/cut-off-corners' +import isInternalUrl from '@docusaurus/isInternalUrl' +import Button from '@site/src/components/elements/buttons/button' + +import styles from './styles.module.scss' + +function DocCardListForCurrentSidebarCategory({ className }) { + const category = useCurrentSidebarCategory() + return +} + +export default function DocCardList(props) { + const { colorMode } = useColorMode() + const [theme, setTheme] = useState('') + const { items, className } = props + const [activeIndex, setActiveIndex] = useState(null) + + useEffect(() => { + setTheme(colorMode) + }, [colorMode]) + + if (!items) { + return + } + const filteredItems = filterDocCardListItems(items) + return ( +
    + {filteredItems.map((item, index) => ( +
    + +
    setActiveIndex(index)} + onMouseLeave={() => setActiveIndex(null)}> + + + {item.href && ( +
    +
    +
    + ))} +
    + ) +} diff --git a/src/theme/DocCardList/styles.module.scss b/src/theme/DocCardList/styles.module.scss new file mode 100644 index 00000000000..9d3b30c6805 --- /dev/null +++ b/src/theme/DocCardList/styles.module.scss @@ -0,0 +1,124 @@ +.row { + .item { + --color-palette: var(--developer-purple); + margin-bottom: 1.6rem; + transition: filter calc(var(--motion) * var(--motion-speed)) $gentle-ease; + width: 100%; + margin-top: 0; + position: relative; + + &:nth-last-child(-n + 2) { + margin-bottom: 1.6rem !important; + } + + @include bp('tablet') { + width: 50%; + padding: 0 0.8rem; + } + } +} +.item { + &.active { + filter: drop-shadow(0 0.8rem 2rem rgba(0, 0, 0, 0.1)); + + > div { + background-color: var(--general-white); + } + } + + > div { + background-color: var(--general-gray-light); + position: relative; + transition: background-color calc(var(--motion) * var(--motion-speed) * 0.5) $gentle-ease; + + a:not(.button) { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.6rem; + padding: 2.4rem 2.4rem 9.6rem 2.4rem !important; + position: relative; + height: 100%; + width: 100%; + text-decoration: none; + color: var(--general-black); + background-color: transparent; + border: none; + border-radius: 0; + + &::before { + position: absolute; + content: ''; + top: 0; + left: 0; + width: 1rem; + height: 100%; + opacity: 0; + transition: opacity calc(var(--motion) * var(--motion-speed)) $gentle-ease; + background-color: var(--color-palette); + } + } + + h2 { + font-size: 2rem; + line-height: 166.667%; + white-space: wrap; + overflow: visible; + + @include bp('desktop') { + line-height: 140%; + } + } + + p { + font-size: 1.5rem; + line-height: 166.667%; + white-space: wrap; + margin: 0; + + @include bp('desktop') { + line-height: 150%; + } + } + } +} + +.holder { + height: 100%; + + &:hover { + a:not(.button) { + color: currentColor; + text-decoration: none !important; + + &::before { + opacity: 1; + } + } + } +} + +.button { + position: absolute; + bottom: 3.2rem; + left: 3.2rem; +} + +html[data-theme='dark'] { + .item { + --color-palette: var(--developer-green); + > div { + background-color: var(--general-black-light); + } + + &.active { + > div { + background-color: var(--general-black); + } + } + + a:not(.button) { + color: var(--general-white); + } + } +} diff --git a/src/theme/DocItem/Footer/index.jsx b/src/theme/DocItem/Footer/index.jsx index 5aaa8c83fac..3dd1622a57e 100644 --- a/src/theme/DocItem/Footer/index.jsx +++ b/src/theme/DocItem/Footer/index.jsx @@ -1,22 +1,17 @@ -import React from "react"; -import clsx from "clsx"; -import { ThemeClassNames } from "@docusaurus/theme-common"; -import { useDoc } from '@docusaurus/plugin-content-docs/client'; -import LastUpdated from "@theme/LastUpdated"; -import EditThisPage from "@theme/EditThisPage"; -import styles from "./styles.module.css"; +import React from 'react' +import clsx from 'clsx' +import { ThemeClassNames } from '@docusaurus/theme-common' +import { useDoc } from '@docusaurus/plugin-content-docs/client' +import LastUpdated from '@theme/LastUpdated' +import EditThisPage from '@theme/EditThisPage' +import styles from './styles.module.css' -function EditMetaRow({ - editUrl, - lastUpdatedAt, - lastUpdatedBy, - formattedLastUpdatedAt, -}) { +function EditMetaRow({ editUrl, lastUpdatedAt, lastUpdatedBy, formattedLastUpdatedAt }) { return ( -
    +
    {editUrl && }
    -
    +
    {(lastUpdatedAt || lastUpdatedBy) && (
    - ); + ) } export default function DocItemFooter() { - const { metadata } = useDoc(); - const { editUrl, lastUpdatedAt, formattedLastUpdatedAt, lastUpdatedBy } = - metadata; - const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy); + const { metadata } = useDoc() + const { editUrl, lastUpdatedAt, formattedLastUpdatedAt, lastUpdatedBy } = metadata + const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy) if (!canDisplayEditMetaRow) { - return null; + return null } return ( -
    +
    {canDisplayEditMetaRow && ( )}
    - ); + ) } diff --git a/src/theme/DocItem/Footer/styles.module.css b/src/theme/DocItem/Footer/styles.module.css index d67d0664de0..27d3295d0de 100644 --- a/src/theme/DocItem/Footer/styles.module.css +++ b/src/theme/DocItem/Footer/styles.module.css @@ -1,7 +1,11 @@ .lastUpdated { margin-top: 0.2rem; - font-style: italic; - font-size: smaller; + margin-bottom: 2rem; + color: var(--general-gray-dark); + + [data-theme='dark'] & { + color: var(--general-gray); + } } @media (width >= 997px) { diff --git a/src/theme/DocItem/Layout/GetFeedback.jsx b/src/theme/DocItem/Layout/GetFeedback.jsx deleted file mode 100644 index c3ed10a5460..00000000000 --- a/src/theme/DocItem/Layout/GetFeedback.jsx +++ /dev/null @@ -1,38 +0,0 @@ -// cSpell:words usabilla, getfeedback -/* eslint-disable react/no-unknown-property */ -import React, { useState, useEffect, useRef } from "react"; -import { useColorMode } from "@docusaurus/theme-common"; - -const GetFeedback = (props) => { - const feedbackContRef = useRef(); - const { colorMode } = useColorMode(); - const [theme, setTheme] = useState(); - - useEffect(() => { - setTheme(colorMode); - }, [colorMode]); - - useEffect(() => { - setTheme(window?.localStorage?.getItem("theme") || colorMode); - window.usabilla.load("w.usabilla.com", "8485bdb0fb3c"); - }, []); - - return ( -
    - {/*Light*/} -
    - {/*Dark*/} -
    -
    - ); -}; - -export default GetFeedback; diff --git a/src/theme/DocItem/Layout/index.jsx b/src/theme/DocItem/Layout/index.jsx index 1e4f1cd97d0..b9f086e6fd5 100644 --- a/src/theme/DocItem/Layout/index.jsx +++ b/src/theme/DocItem/Layout/index.jsx @@ -1,55 +1,131 @@ -import React from "react"; -import clsx from "clsx"; -import { useWindowSize } from "@docusaurus/theme-common"; -import { useDoc } from '@docusaurus/plugin-content-docs/client'; -import DocItemPaginator from "@theme/DocItem/Paginator"; -import DocVersionBanner from "@theme/DocVersionBanner"; -import DocItemFooter from "@theme/DocItem/Footer"; -import DocItemTags from "@theme/DocItem/Tags"; -import DocItemTOCMobile from "@theme/DocItem/TOC/Mobile"; -import DocItemTOCDesktop from "@theme/DocItem/TOC/Desktop"; -import DocItemContent from "@theme/DocItem/Content"; -import DocBreadcrumbs from "@theme/DocBreadcrumbs"; -import styles from "./styles.module.css"; -import GetFeedback from "./GetFeedback.jsx"; +import React from 'react' +import clsx from 'clsx' +import Head from '@docusaurus/Head' +import { useWindowSize } from '@docusaurus/theme-common' +import { useDoc } from '@docusaurus/plugin-content-docs/client' +import DocItemPaginator from '@theme/DocItem/Paginator' +import DocVersionBanner from '@theme/DocVersionBanner' +import DocItemFooter from '@theme/DocItem/Footer' +import DocItemTags from '@theme/DocItem/Tags' +import DocItemTOCMobile from '@theme/DocItem/TOC/Mobile' +import DocItemTOCDesktop from '@theme/DocItem/TOC/Desktop' +import DocItemContent from '@theme/DocItem/Content' +import DocBreadcrumbs from '@theme/DocBreadcrumbs' +import CopyPageButton from '@site/src/components/CopyPageButton' +import DocH1CopyPageWrapper from '@site/src/components/DocH1CopyPageWrapper' +import styles from './styles.module.css' + +const SITE_URL = 'https://docs.metamask.io' + +function useStructuredData() { + const { metadata, frontMatter } = useDoc() + const { permalink, title, description, lastUpdatedAt } = metadata + + if (!permalink?.startsWith('/metamask-connect')) return null + + let proficiencyLevel = 'Beginner' + if (permalink.includes('/reference/')) proficiencyLevel = 'Expert' + else if (permalink.includes('/guides/')) proficiencyLevel = 'Intermediate' + + const schema = { + '@context': 'https://schema.org', + '@type': 'TechArticle', + headline: frontMatter.title || title, + description: frontMatter.description || description, + url: `${SITE_URL}${permalink}`, + proficiencyLevel, + publisher: { '@id': `${SITE_URL}/#organization` }, + isPartOf: { '@id': `${SITE_URL}/#website` }, + } + + if (frontMatter.keywords) { + schema.keywords = Array.isArray(frontMatter.keywords) + ? frontMatter.keywords.join(', ') + : frontMatter.keywords + } + + if (lastUpdatedAt) { + schema.dateModified = new Date(lastUpdatedAt * 1000).toISOString() + } + + return schema +} /** * Decide if the toc should be rendered, on mobile or desktop viewports */ function useDocTOC() { - const { frontMatter, toc } = useDoc(); - const windowSize = useWindowSize(); - const hidden = frontMatter.hide_table_of_contents; - const canRender = !hidden && toc.length > 0; - const mobile = canRender ? : undefined; + const { frontMatter, toc } = useDoc() + const windowSize = useWindowSize() + const hidden = frontMatter.hide_table_of_contents + const canRender = !hidden && toc.length > 0 + const mobile = canRender ? : undefined const desktop = - canRender && (windowSize === "desktop" || windowSize === "ssr") ? ( + canRender && (windowSize === 'desktop' || windowSize === 'ssr') ? ( - ) : undefined; + ) : undefined return { hidden, mobile, desktop, - }; + } +} +function useNoIndex() { + const { frontMatter, metadata } = useDoc() + return Boolean(frontMatter.unlisted ?? metadata.unlisted) } export default function DocItemLayout({ children }) { - const docTOC = useDocTOC(); + const docTOC = useDocTOC() + const structuredData = useStructuredData() + const noIndex = useNoIndex() return (
    -
    + {noIndex && ( + + + + )} + {structuredData && ( + + + + )} +
    - - - {docTOC.mobile} + {/* data-markdown-ignore wraps UI chrome that exists only in the + rendered HTML (breadcrumbs, tags, mobile TOC, copy button, + "Edit this page"/last-updated footer). AFDocs strips elements + with this attribute before comparing HTML to the .md sibling, + so the chrome no longer counts as "missing from markdown" in + the markdown-content-parity check. The same attribute is + respected by the build-time HTML→.md regenerator in + src/plugins/llms-html-injector. */} +
    + + + {docTOC.mobile} +
    + +
    + +
    {children} - - + +
    + +
    - +
    + +
    - {docTOC.desktop &&
    {docTOC.desktop}
    } + {docTOC.desktop && ( +
    + {docTOC.desktop} +
    + )}
    - ); + ) } diff --git a/src/theme/DocItem/Layout/styles.module.css b/src/theme/DocItem/Layout/styles.module.css index b7ab538c61b..713f8cc938f 100644 --- a/src/theme/DocItem/Layout/styles.module.css +++ b/src/theme/DocItem/Layout/styles.module.css @@ -6,5 +6,6 @@ @media (width >= 997px) { .docItemCol { max-width: 75% !important; + padding-right: 5.3rem; } } diff --git a/src/theme/DocItem/Paginator/index.js b/src/theme/DocItem/Paginator/index.js index 5cfdecb56a5..52c75c30809 100644 --- a/src/theme/DocItem/Paginator/index.js +++ b/src/theme/DocItem/Paginator/index.js @@ -1,3 +1,3 @@ export default function PaginatorWrapper() { - return null; + return null } diff --git a/src/theme/DocItem/Tags/index.jsx b/src/theme/DocItem/Tags/index.jsx index 93b7a45451b..ec0466fc8b4 100644 --- a/src/theme/DocItem/Tags/index.jsx +++ b/src/theme/DocItem/Tags/index.jsx @@ -1,37 +1,26 @@ -import React from "react"; -import clsx from "clsx"; -import { ThemeClassNames } from "@docusaurus/theme-common"; -import { useDoc } from '@docusaurus/plugin-content-docs/client'; -import TagsListInline from "@theme/TagsListInline"; +import React from 'react' +import clsx from 'clsx' +import { ThemeClassNames } from '@docusaurus/theme-common' +import { useDoc } from '@docusaurus/plugin-content-docs/client' +import TagsListInline from '@theme/TagsListInline' function TagsRow(props) { return ( -
    +
    - ); + ) } export default function DocItemTags() { - const { metadata } = useDoc(); - const { tags } = metadata; - const canDisplayTagsRow = tags.length > 0; + const { metadata } = useDoc() + const { tags } = metadata + const canDisplayTagsRow = tags.length > 0 return ( -
    +
    {canDisplayTagsRow && }
    - ); + ) } diff --git a/src/theme/DocPaginator/index.js b/src/theme/DocPaginator/index.js index 1b272cf6808..aa20492e515 100644 --- a/src/theme/DocPaginator/index.js +++ b/src/theme/DocPaginator/index.js @@ -1,5 +1,5 @@ function DocPaginator() { - return null; + return null } -export default DocPaginator; +export default DocPaginator diff --git a/src/theme/DocSidebar/Desktop/index.tsx b/src/theme/DocSidebar/Desktop/index.tsx new file mode 100644 index 00000000000..6de40837ca1 --- /dev/null +++ b/src/theme/DocSidebar/Desktop/index.tsx @@ -0,0 +1,107 @@ +import React from 'react' +import clsx from 'clsx' +import { useThemeConfig } from '@docusaurus/theme-common' +import { useLocation } from '@docusaurus/router' +import Logo from '@theme/Logo' +import CollapseButton from '@theme-original/DocSidebar/Desktop/CollapseButton' +import Content from '@theme-original/DocSidebar/Desktop/Content' +import SidebarVersionDropdown from '@site/src/components/SidebarVersionDropdown/SidebarVersionDropdown' +import SidebarSectionDropdown, { + SidebarStaticTitle, +} from '@site/src/components/SidebarSectionDropdown/SidebarSectionDropdown' +import { + SERVICES_DASHBOARD_CONFIG, + SNAPS_CONFIG, + SMART_ACCOUNTS_KIT_CONFIG, + isPathInSections, +} from '@site/src/components/SidebarSectionDropdown/configs' +import type { PropSidebar } from '@docusaurus/plugin-content-docs' +import styles from './styles.module.css' + +type Props = { + path: string + sidebar: PropSidebar + onCollapse: () => void + isHidden: boolean +} + +function DocSidebarDesktop({ path, sidebar, onCollapse, isHidden }: Props) { + const { + navbar: { hideOnScroll }, + docs: { + sidebar: { hideable }, + }, + } = useThemeConfig() + + const location = useLocation() + const isSmartAccountsKitDocs = location.pathname.startsWith('/smart-accounts-kit') + const isServicesOrDashboard = isPathInSections( + location.pathname, + SERVICES_DASHBOARD_CONFIG.sections + ) + const isSnaps = location.pathname.startsWith('/snaps') + + let smartAccountsKitTitle = null + let versionDropdown = null + try { + if (isSmartAccountsKitDocs) { + smartAccountsKitTitle = ( +
    + +
    + ) + versionDropdown = ( +
    + +
    + ) + } + } catch (e) { + console.error('Failed to render smart accounts kit components:', e) + } + + let servicesDropdown = null + try { + if (isServicesOrDashboard) { + servicesDropdown = ( +
    + +
    + ) + } + } catch (e) { + console.error('Failed to render services dropdown:', e) + } + + let snapsTitle = null + try { + if (isSnaps) { + snapsTitle = ( +
    + +
    + ) + } + } catch (e) { + console.error('Failed to render Snaps title:', e) + } + + return ( +
    + {hideOnScroll && } + {smartAccountsKitTitle} + {versionDropdown} + {servicesDropdown} + {snapsTitle} + + {hideable && } +
    + ) +} + +export default DocSidebarDesktop diff --git a/src/theme/DocSidebar/Desktop/styles.module.css b/src/theme/DocSidebar/Desktop/styles.module.css new file mode 100644 index 00000000000..5bfec7f123d --- /dev/null +++ b/src/theme/DocSidebar/Desktop/styles.module.css @@ -0,0 +1,37 @@ +@media (width >= 997px) { + .sidebar { + display: flex; + flex-direction: column; + height: 100%; + padding-top: var(--ifm-navbar-height); + width: var(--doc-sidebar-width); + } + + .sidebarWithHideableNavbar { + padding-top: 0; + } + + .sidebarHidden { + opacity: 0; + visibility: hidden; + } + + .sidebarLogo { + display: flex !important; + align-items: center; + margin: 0 var(--ifm-navbar-padding-horizontal); + min-height: var(--ifm-navbar-height); + max-height: var(--ifm-navbar-height); + color: inherit !important; + text-decoration: none !important; + } + + .sidebarLogo img { + margin-right: 0.5rem; + height: 2rem; + } +} + +.sidebarLogo { + display: none; +} diff --git a/src/theme/DocSidebar/Mobile/index.tsx b/src/theme/DocSidebar/Mobile/index.tsx new file mode 100644 index 00000000000..d822629097d --- /dev/null +++ b/src/theme/DocSidebar/Mobile/index.tsx @@ -0,0 +1,75 @@ +import React from 'react' +import clsx from 'clsx' +import { + NavbarSecondaryMenuFiller, + type NavbarSecondaryMenuComponent, + ThemeClassNames, +} from '@docusaurus/theme-common' +import { useNavbarMobileSidebar } from '@docusaurus/theme-common/internal' +import { useLocation } from '@docusaurus/router' +import DocSidebarItems from '@theme/DocSidebarItems' +import SidebarVersionDropdown from '@site/src/components/SidebarVersionDropdown/SidebarVersionDropdown' +import SidebarSectionDropdown, { + SidebarStaticTitle, +} from '@site/src/components/SidebarSectionDropdown/SidebarSectionDropdown' +import { + SERVICES_DASHBOARD_CONFIG, + SNAPS_CONFIG, + SMART_ACCOUNTS_KIT_CONFIG, + isPathInSections, +} from '@site/src/components/SidebarSectionDropdown/configs' +import type { Props } from '@theme/DocSidebar/Mobile' +import styles from './styles.module.css' + +// eslint-disable-next-line react/function-component-definition +const DocSidebarMobileSecondaryMenu: NavbarSecondaryMenuComponent = ({ sidebar, path }) => { + const mobileSidebar = useNavbarMobileSidebar() + const location = useLocation() + const isSmartAccountsKitDocs = location.pathname.startsWith('/smart-accounts-kit') + const isServicesOrDashboard = isPathInSections( + location.pathname, + SERVICES_DASHBOARD_CONFIG.sections + ) + const isSnaps = location.pathname.startsWith('/snaps') + + return ( +
      + {isSmartAccountsKitDocs && ( + <> +
    • + +
    • +
    • + +
    • + + )} + {isServicesOrDashboard && ( +
    • + +
    • + )} + {isSnaps && ( +
    • + +
    • + )} + { + if ((item.type === 'category' && item.href) || item.type === 'link') { + mobileSidebar.toggle() + } + }} + level={1} + /> +
    + ) +} + +function DocSidebarMobile(props: Props) { + return +} + +export default React.memo(DocSidebarMobile) diff --git a/src/theme/DocSidebar/Mobile/styles.module.css b/src/theme/DocSidebar/Mobile/styles.module.css new file mode 100644 index 00000000000..154b4755a3d --- /dev/null +++ b/src/theme/DocSidebar/Mobile/styles.module.css @@ -0,0 +1,4 @@ +.versionDropdownContainer { + padding: 1rem; + border-bottom: 1px solid var(--ifm-toc-border-color); +} diff --git a/src/theme/DocSidebarItem/Category/index.tsx b/src/theme/DocSidebarItem/Category/index.tsx new file mode 100644 index 00000000000..34e94f46324 --- /dev/null +++ b/src/theme/DocSidebarItem/Category/index.tsx @@ -0,0 +1,214 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import React, { useEffect, useMemo } from 'react' +import clsx from 'clsx' +import { + ThemeClassNames, + useThemeConfig, + usePrevious, + Collapsible, + useCollapsible, +} from '@docusaurus/theme-common' +import { isSamePath } from '@docusaurus/theme-common/internal' +import { + isActiveSidebarItem, + findFirstSidebarItemLink, + useDocSidebarItemsExpandedState, +} from '@docusaurus/plugin-content-docs/client' +import Link from '@docusaurus/Link' +import { translate } from '@docusaurus/Translate' +import useIsBrowser from '@docusaurus/useIsBrowser' +import DocSidebarItems from '@theme/DocSidebarItems' + +function CollapseButton({ collapsed, categoryLabel, onClick }) { + return ( + + + + + + +
    + + {() => ( + + + + + + )} + +
    + +
    + {MDXPageContent.toc && ( +
    + +
    + )} +
    +
    +
    + + + ) +} diff --git a/src/theme/MDXPage/styles.module.css b/src/theme/MDXPage/styles.module.css new file mode 100644 index 00000000000..04132af16c9 --- /dev/null +++ b/src/theme/MDXPage/styles.module.css @@ -0,0 +1,229 @@ +.titleContainer { + display: flex; + flex-flow: column wrap; + align-items: center; + justify-content: center; + overflow: visible; + width: 95%; + margin-bottom: 4px; + gap: 10px; +} + +.tagsContainer { + display: flex; + flex-flow: row wrap; + align-items: center; + justify-content: center; + width: 100%; + gap: 5px; +} + +.tag { + font-weight: 500; + font-size: 12px; + line-height: 150%; + padding: 2px 10px; + height: 22px; + background-color: var(--ifm-color-emphasis-200); + color: var(--ifm-color-emphasis-600); + border-radius: 30px; + display: flex; + align-items: center; + justify-content: center; + overflow: visible; + white-space: nowrap; + cursor: pointer; +} + +.title { + font-family: var(--ifm-heading-font-family); + font-size: 30px; + font-weight: 500; + text-align: center; +} + +.date { + color: #676767; + font-size: 14px; +} + +.cover { + width: 100%; + text-align: center; + border-radius: 20px; +} + +.pillContainer { + display: flex; + flex-flow: row wrap; + justify-content: center; + align-items: center; + + /* white */ + background: var(--w3a-color-indigo-background); + border-radius: 8px; + text-decoration: none; + padding: 0; + margin: 0; + margin-bottom: 7px; + width: max-content; + overflow: hidden; +} + +.pill { + display: flex; + flex-flow: column wrap; + justify-content: center; + text-align: center; + align-items: center; + width: max-content; + padding: 2px 15px; + margin: 0; + font-weight: 500 !important; + font-size: 15px; + text-transform: uppercase; + line-height: 150%; + color: var(--w3a-color-indigo); +} + +.socialButtonContainer { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + gap: 8px; +} + +.socialButton { + display: flex; + justify-content: center; + align-items: center; + padding: 8px 24px; + font-style: normal; + font-weight: 500; + font-size: 12px; + line-height: 150%; + border: 1px solid var(--w3a-border-light-color); + background-color: var(--ifm-background-surface-color); + border-radius: 8px; + cursor: pointer; + gap: 8px; +} + +.socialButton:hover { + background-color: var(--w3a-border-light-color); +} + +.socialButton:active { + border: 1px solid var(--w3a-menu-heading-color); + background-color: var(--w3a-menu-heading-color); +} + +.bookmarkButton { + display: flex; + justify-content: center; + align-items: center; + padding: 8px 24px; + font-style: normal; + font-weight: 500; + font-size: 12px; + line-height: 150%; + border: none; + background-color: var(--ifm-background-color); + border-radius: 8px; + gap: 8px; +} + +@media only screen and (width < 768px) { + .bookmarkButton { + display: none; + } +} + +.bottomMenu { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 20px; + padding-left: 0; + padding-right: 0; + border-top: 1px solid var(--w3a-border-light-color); + border-bottom: 1px solid var(--w3a-border-light-color); + margin-top: 20px; + margin-bottom: 20px; + gap: 10px; +} + +.topMenu { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 20px; + padding-left: 0; + padding-right: 0; + border-top: 1px solid var(--w3a-border-light-color); + border-bottom: 1px solid var(--w3a-border-light-color); + gap: 10px; +} + +.copyButtonWrapper { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + position: relative; + z-index: 100; + overflow: visible; +} + +.authorName { + gap: 10px; + text-align: left; + align-self: center; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 150%; +} + +@media only screen and (width >= 481px) { + .title { + font-size: 40px; + } + + .cover { + width: 90%; + } +} + +@media only screen and (width >= 768px) { + .title { + font-size: 48px; + } + + .cover { + width: 80%; + } + + .topMenu { + flex-direction: column; + } + + .bottomMenu { + flex-direction: column; + } +} + +@media only screen and (width >= 1216px) { + .title { + font-size: 52px; + } + + .cover { + width: 80%; + } +} diff --git a/src/theme/Navbar/Content/index.tsx b/src/theme/Navbar/Content/index.tsx new file mode 100644 index 00000000000..ed5ca46e9ae --- /dev/null +++ b/src/theme/Navbar/Content/index.tsx @@ -0,0 +1,81 @@ +import React, { type ReactNode } from 'react' +import { useThemeConfig, ErrorCauseBoundary } from '@docusaurus/theme-common' +import { splitNavbarItems, useNavbarMobileSidebar } from '@docusaurus/theme-common/internal' +import NavbarItem, { type Props as NavbarItemConfig } from '@theme/NavbarItem' +import NavbarColorModeToggle from '@theme/Navbar/ColorModeToggle' +import SearchBar from '@theme/SearchBar' +import NavbarMobileSidebarToggle from '@theme/Navbar/MobileSidebar/Toggle' +import NavbarLogo from '@theme/Navbar/Logo' +import NavbarSearch from '@theme/Navbar/Search' + +import styles from './styles.module.css' + +function useNavbarItems() { + // TODO temporary casting until ThemeConfig type is improved + return useThemeConfig().navbar.items as NavbarItemConfig[] +} + +function NavbarItems({ items }: { items: NavbarItemConfig[] }): ReactNode { + return ( + <> + {items.map((item, i) => ( + + new Error( + `A theme navbar item failed to render. +Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config: +${JSON.stringify(item, null, 2)}`, + { cause: error } + ) + }> + + + ))} + + ) +} + +function NavbarContentLayout({ left, right }: { left: ReactNode; right: ReactNode }) { + return ( +
    +
    {left}
    +
    {right}
    +
    + ) +} + +export default function NavbarContent(): ReactNode { + const mobileSidebar = useNavbarMobileSidebar() + + const items = useNavbarItems() + const [leftItems, rightItems] = splitNavbarItems(items) + + const searchBarItem = items.find(item => item.type === 'search') + + return ( + + {!mobileSidebar.disabled && } + + + + } + right={ + // TODO stop hardcoding items? + // Ask the user to add the respective navbar items => more flexible + <> + + + {!searchBarItem && ( + + + + )} + + } + /> + ) +} diff --git a/src/theme/Navbar/Content/styles.module.css b/src/theme/Navbar/Content/styles.module.css new file mode 100644 index 00000000000..80e09deefe8 --- /dev/null +++ b/src/theme/Navbar/Content/styles.module.css @@ -0,0 +1,8 @@ +/* +Hide color mode toggle in small viewports + */ +@media (width <= 1196px) { + .colorModeToggle { + display: none; + } +} diff --git a/src/theme/Navbar/Layout/index.tsx b/src/theme/Navbar/Layout/index.tsx new file mode 100644 index 00000000000..c395e7504af --- /dev/null +++ b/src/theme/Navbar/Layout/index.tsx @@ -0,0 +1,54 @@ +import React, { type ComponentProps, type ReactNode } from 'react' +import clsx from 'clsx' +import { useThemeConfig } from '@docusaurus/theme-common' +import { useNavbarMobileSidebar } from '@docusaurus/theme-common/internal' +import { translate } from '@docusaurus/Translate' +import NavbarMobileSidebar from '@theme/Navbar/MobileSidebar' +import useCustomHideableNavbar from '@site/src/hooks/useCustomHideableNavbar' +import type { Props } from '@theme/Navbar/Layout' + +import styles from './styles.module.css' + +function NavbarBackdrop(props: ComponentProps<'div'>) { + return ( +
    + ) +} + +export default function NavbarLayout({ children }: Props): ReactNode { + const { + navbar: { hideOnScroll, style }, + } = useThemeConfig() + const mobileSidebar = useNavbarMobileSidebar() + const { navbarRef, isNavbarVisible } = useCustomHideableNavbar(hideOnScroll) + + return ( +
    + +
    + ) +} diff --git a/src/theme/Navbar/Layout/styles.module.css b/src/theme/Navbar/Layout/styles.module.css new file mode 100644 index 00000000000..4231a4b90c2 --- /dev/null +++ b/src/theme/Navbar/Layout/styles.module.css @@ -0,0 +1,16 @@ +.navbarContainer { + min-height: var(--ifm-navbar-height); + position: sticky; + top: 0; + z-index: var(--ifm-z-index-fixed); +} + +.navbar { + position: relative; + width: 100%; +} + +.navbarHidden { + visibility: hidden; + pointer-events: none; +} diff --git a/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx b/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx new file mode 100644 index 00000000000..3807c30ccb2 --- /dev/null +++ b/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx @@ -0,0 +1,43 @@ +/** + * Custom PrimaryMenu for Mobile Sidebar + * + * This component handles the Products dropdown specially by rendering + * a custom mobile-friendly menu structure instead of the HTML dropdown. + */ + +import React, { type ReactNode } from 'react' +import { useThemeConfig } from '@docusaurus/theme-common' +import { useNavbarMobileSidebar } from '@docusaurus/theme-common/internal' +import NavbarItem, { type Props as NavbarItemConfig } from '@theme/NavbarItem' +import ProductsMenuMobile from '../ProductsMenu' + +function useNavbarItems() { + // TODO temporary casting until ThemeConfig type is improved + return useThemeConfig().navbar.items as NavbarItemConfig[] +} + +// The primary menu displays the navbar items +export default function NavbarMobilePrimaryMenu(): ReactNode { + const mobileSidebar = useNavbarMobileSidebar() + const items = useNavbarItems() + + return ( +
      + {items.map((item, i) => { + // Check if this is the Products dropdown + const isProductsDropdown = + item.type === 'dropdown' && + item.label === 'Products' && + item.items?.some(subItem => subItem.type === 'html') + + // If it's the Products dropdown, render custom component + if (isProductsDropdown) { + return mobileSidebar.toggle()} /> + } + + // Otherwise, render normally + return mobileSidebar.toggle()} key={i} /> + })} +
    + ) +} diff --git a/src/theme/Navbar/MobileSidebar/ProductsMenu/index.tsx b/src/theme/Navbar/MobileSidebar/ProductsMenu/index.tsx new file mode 100644 index 00000000000..3d0bde27abb --- /dev/null +++ b/src/theme/Navbar/MobileSidebar/ProductsMenu/index.tsx @@ -0,0 +1,144 @@ +/** + * Custom Products Menu Component for Mobile + * + * This component renders a simple flat list of product items + * in the mobile sidebar under an expandable "Products" menu. + */ + +import React, { useEffect } from 'react' +import clsx from 'clsx' +import { useCollapsible, Collapsible } from '@docusaurus/theme-common' +import { useLocalPathname } from '@docusaurus/theme-common/internal' +import { translate } from '@docusaurus/Translate' +import Link from '@docusaurus/Link' +import { mobileProductsMenu } from '@site/src/config/mobileProductsMenu' +import styles from './styles.module.css' + +function CollapseButton({ + collapsed, + onClick, +}: { + collapsed: boolean + onClick: React.MouseEventHandler +}) { + return ( +
  • + ) +} diff --git a/src/theme/Navbar/MobileSidebar/ProductsMenu/styles.module.css b/src/theme/Navbar/MobileSidebar/ProductsMenu/styles.module.css new file mode 100644 index 00000000000..be16b12ea19 --- /dev/null +++ b/src/theme/Navbar/MobileSidebar/ProductsMenu/styles.module.css @@ -0,0 +1,3 @@ +.dropdownNavbarItemMobile { + flex: 1; +} diff --git a/src/theme/NavbarItem/ComponentTypes.ts b/src/theme/NavbarItem/ComponentTypes.ts index 32577bdaa5c..a86e1b8a382 100644 --- a/src/theme/NavbarItem/ComponentTypes.ts +++ b/src/theme/NavbarItem/ComponentTypes.ts @@ -1,7 +1,7 @@ -import ComponentTypes from '@theme-original/NavbarItem/ComponentTypes'; -import NavbarWallet from '@site/src/components/NavbarWallet'; +import ComponentTypes from '@theme-original/NavbarItem/ComponentTypes' +import NavbarWallet from '@site/src/components/NavbarWallet' export default { - ...ComponentTypes, - 'custom-navbarWallet': NavbarWallet, -}; \ No newline at end of file + ...ComponentTypes, + 'custom-navbarWallet': NavbarWallet, +} diff --git a/src/theme/NotFound/Content/index.js b/src/theme/NotFound/Content/index.js new file mode 100644 index 00000000000..a38617876c9 --- /dev/null +++ b/src/theme/NotFound/Content/index.js @@ -0,0 +1,32 @@ +import React from 'react' +import clsx from 'clsx' +import Translate from '@docusaurus/Translate' +import Heading from '@theme/Heading' +import styles from './styles.module.scss' + +export default function NotFoundContent({ className }) { + return ( +
    +
    +
    + + + Page Not Found + + +

    + + We could not find what you were looking for. + +

    +

    + + Please contact the owner of the site that linked you to the original URL and let them + know their link is broken. + +

    +
    +
    +
    + ) +} diff --git a/src/theme/NotFound/Content/styles.module.scss b/src/theme/NotFound/Content/styles.module.scss new file mode 100644 index 00000000000..0c2c8ffa7d5 --- /dev/null +++ b/src/theme/NotFound/Content/styles.module.scss @@ -0,0 +1,17 @@ +.notFound { + --ifm-h1-vertical-rhythm-bottom: 2.35; + padding: 6rem 0 8rem; +} + +.title { + margin-bottom: calc(var(--ifm-h1-vertical-rhythm-bottom) * var(--ifm-leading)); +} + +.description { + color: var(--general-gray-dark); + margin-bottom: var(--ifm-leading); + + [data-theme='dark'] & { + color: var(--general-gray); + } +} diff --git a/src/theme/NotFound/index.js b/src/theme/NotFound/index.js new file mode 100644 index 00000000000..18b38b38131 --- /dev/null +++ b/src/theme/NotFound/index.js @@ -0,0 +1,19 @@ +import React from 'react' +import { translate } from '@docusaurus/Translate' +import { PageMetadata } from '@docusaurus/theme-common' +import Layout from '@theme/Layout' +import NotFoundContent from '@theme/NotFound/Content' +export default function Index() { + const title = translate({ + id: 'theme.NotFound.title', + message: 'Page Not Found', + }) + return ( + <> + + + + + + ) +} diff --git a/src/theme/Root.tsx b/src/theme/Root.tsx index 5a1ba5affbd..1956f03fa2f 100644 --- a/src/theme/Root.tsx +++ b/src/theme/Root.tsx @@ -1,67 +1,76 @@ -import React, { - ReactElement, - createContext, - useEffect, - useState, - useCallback, -} from "react"; -import { Provider as AlertProvider } from "react-alert"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import BrowserOnly from "@docusaurus/BrowserOnly"; -import siteConfig from "@generated/docusaurus.config"; -import { AlertTemplate, options } from "@site/src/components/Alert"; -import { MetaMaskSDK, SDKProvider } from "@metamask/sdk"; -import { - DASHBOARD_URL, - REF_ALLOW_LOGIN_PATH, - REQUEST_PARAMS, - AUTH_WALLET_PROJECTS, -} from "@site/src/lib/constants"; +import React, { ReactElement, createContext, useEffect, useState, useCallback } from 'react' +import { Provider as AlertProvider } from 'react-alert' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import useIsBrowser from '@docusaurus/useIsBrowser' +import { AlertTemplate, options } from '@site/src/components/Alert' +import { MetaMaskSDK, SDKProvider } from '@metamask/sdk' +import { REF_ALLOW_LOGIN_PATH, REQUEST_PARAMS } from '@site/src/lib/constants' import { clearStorage, getUserIdFromJwtToken, saveTokenString, getTokenString, getUksTier, -} from "@site/src/lib/siwsrp/auth"; + AUTH_WALLET_PROJECTS, + AUTH_WALLET_ENS, + getWalletEns, +} from '@site/src/lib/siwsrp/auth' import AuthModal, { AUTH_LOGIN_STEP, WALLET_LINK_TYPE, -} from "@site/src/components/AuthLogin/AuthModal"; +} from '@site/src/components/AuthLogin/AuthModal' +import { DocSearchSidepanel } from '@docsearch/react/sidepanel' +import '@docsearch/css/dist/sidepanel.css' interface Project { - id: string; - userId: string; - name: string; - created: number; - updated: number; - deleted: boolean; - settings: any; + id: string + userId: string + name: string + created: number + updated: number + deleted: boolean + settings: any networks: { - [key: string]: { subnets: number[] }; - }; - role: string; + [key: string]: { subnets: number[] } + } + role: string } interface IMetamaskProviderContext { - token: string; - projects: { [key: string]: Project }; - setProjects: (arg: { [key: string]: Project }) => void; - metaMaskDisconnect: () => Promise; - metaMaskWalletIdConnectHandler: () => Promise; - userId: string | undefined; - metaMaskAccount: string; - setMetaMaskAccount: (arg: string[] | string) => void; - metaMaskProvider: SDKProvider; - setMetaMaskProvider: (arg: SDKProvider) => void; - uksTier: string; - sdk: MetaMaskSDK; - setWalletLinked: (arg: WALLET_LINK_TYPE) => void; - walletLinked: WALLET_LINK_TYPE | undefined; - setWalletLinkUrl: (arg: string) => void; - walletLinkUrl: string; - userAPIKey?: string; - setUserAPIKey?: (key: string) => void; + token: string + projects: { [key: string]: Project } + setProjects: (arg: { [key: string]: Project }) => void + metaMaskDisconnect: () => Promise + metaMaskWalletIdConnectHandler: () => Promise + userId: string | undefined + metaMaskAccount: string + metaMaskAccountEns: string + setMetaMaskAccount: (arg: string[] | string) => void + metaMaskProvider: SDKProvider + setMetaMaskProvider: (arg: SDKProvider) => void + uksTier: string + sdk: MetaMaskSDK + setNeedsMfa: (arg: boolean) => void + needsMfa: boolean + setWalletLinked: (arg: WALLET_LINK_TYPE) => void + walletLinked: WALLET_LINK_TYPE | undefined + setWalletAuthUrl: (arg: string) => void + walletAuthUrl: string + userAPIKey?: string + setUserAPIKey?: (key: string) => void + fetchLineaEns?: (walletId: string) => Promise + userEncPublicKey?: string + setUserEncPublicKey?: (key: string) => void +} + +interface AlgoliaThemeConfig { + appId: string + apiKey: string + indexName: string + assistantId?: string + askAi?: { + assistantId: string + } } export const MetamaskProviderContext = createContext({ @@ -72,23 +81,29 @@ export const MetamaskProviderContext = createContext({ metaMaskWalletIdConnectHandler: () => new Promise(() => {}), userId: undefined, metaMaskAccount: undefined, + metaMaskAccountEns: undefined, setMetaMaskAccount: () => {}, uksTier: undefined, metaMaskProvider: undefined, setMetaMaskProvider: () => {}, sdk: undefined, + setNeedsMfa: () => {}, + needsMfa: false, setWalletLinked: () => {}, walletLinked: undefined, - setWalletLinkUrl: () => {}, - walletLinkUrl: "", - userAPIKey: "", + setWalletAuthUrl: () => {}, + walletAuthUrl: '', + userAPIKey: '', setUserAPIKey: () => {}, -}); + fetchLineaEns: () => new Promise(() => {}), + userEncPublicKey: undefined, + setUserEncPublicKey: () => {}, +}) const sdk = new MetaMaskSDK({ dappMetadata: { - name: "Reference pages", - url: "https://docs.metamask.io/", + name: 'Reference pages', + url: 'https://docs.metamask.io/', }, preferDesktop: true, extensionOnly: true, @@ -96,190 +111,218 @@ const sdk = new MetaMaskSDK({ logging: { sdk: false, }, -}); +}) export const LoginProvider = ({ children }) => { - const [projects, setProjects] = useState({}); - const [userId, setUserId] = useState(""); - const [token, setToken] = useState(undefined); - const [openAuthModal, setOpenAuthModal] = useState(false); - const [metaMaskProvider, setMetaMaskProvider] = useState(undefined); - const [metaMaskAccount, setMetaMaskAccount] = useState(undefined); - const [uksTier, setUksTier] = useState(undefined); - const [isInitialized, setIsInitialized] = useState(false); - const [step, setStep] = useState(AUTH_LOGIN_STEP.CONNECTING); - const [walletLinked, setWalletLinked] = useState< - WALLET_LINK_TYPE | undefined - >(undefined); - const [walletLinkUrl, setWalletLinkUrl] = useState(""); - const [userAPIKey, setUserAPIKey] = useState(""); - const { siteConfig } = useDocusaurusContext(); - const { DASHBOARD_PREVIEW_URL, VERCEL_ENV } = siteConfig?.customFields || {}; + const [projects, setProjects] = useState({}) + const [userId, setUserId] = useState('') + const [token, setToken] = useState(undefined) + const [openAuthModal, setOpenAuthModal] = useState(false) + const [metaMaskProvider, setMetaMaskProvider] = useState(undefined) + const [metaMaskAccount, setMetaMaskAccount] = useState(undefined) + const [metaMaskAccountEns, setMetaMaskAccountEns] = useState(undefined) + const [uksTier, setUksTier] = useState(undefined) + const [isInitialized, setIsInitialized] = useState(false) + const [step, setStep] = useState(AUTH_LOGIN_STEP.CONNECTING) + const [walletLinked, setWalletLinked] = useState(undefined) + const [needsMfa, setNeedsMfa] = useState(false) + const [walletAuthUrl, setWalletAuthUrl] = useState('') + const [userAPIKey, setUserAPIKey] = useState('') + const [userEncPublicKey, setUserEncPublicKey] = useState(undefined) + const { siteConfig } = useDocusaurusContext() + const { DASHBOARD_URL, LINEA_ENS_URL } = siteConfig?.customFields || {} if (sdk.isInitialized() && !isInitialized) { - setIsInitialized(true); + setIsInitialized(true) + } + + const fetchLineaEns = async (rawAddress: string) => { + if (getWalletEns()) { + setMetaMaskAccountEns(getWalletEns()) + } else if (rawAddress) { + const address = String(rawAddress).toLowerCase() + try { + const res = await ( + await fetch(LINEA_ENS_URL as string, { + ...REQUEST_PARAMS('POST'), + body: JSON.stringify({ + query: `query getNamesForAddress {domains(first: 1, where: {and: [{or: [{owner: \"${address}\"}, {registrant: \"${address}\"}, {wrappedOwner: \"${address}\"}]}, {parent_not: \"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"}, {or: [{expiryDate_gt: \"1721033912\"}, {expiryDate: null}]}, {or: [{owner_not: \"0x0000000000000000000000000000000000000000\"}, {resolver_not: null}, {and: [{registrant_not: \"0x0000000000000000000000000000000000000000\"}, {registrant_not: null}]}]}]}) {...DomainDetailsWithoutParent}} fragment DomainDetailsWithoutParent on Domain {name}`, + }), + }) + ).json() + const walletEns = res.data.domains[0].name + setMetaMaskAccountEns(walletEns) + sessionStorage.setItem(AUTH_WALLET_ENS, walletEns) + } catch (e) { + setMetaMaskAccountEns(undefined) + } + } } const getStaleDate = async () => { try { - setProjects( - JSON.parse(sessionStorage.getItem(AUTH_WALLET_PROJECTS) || "{}"), - ); - setUserId(getUserIdFromJwtToken()); - setToken(getTokenString()); - setUksTier(getUksTier()); - const accounts = await sdk.connect(); - setMetaMaskAccount(accounts); + setProjects(JSON.parse(sessionStorage.getItem(AUTH_WALLET_PROJECTS) || '{}')) + setUserId(getUserIdFromJwtToken()) + setToken(getTokenString()) + setUksTier(getUksTier()) + setMetaMaskAccountEns(getWalletEns()) + const accounts = await sdk.connect() + setMetaMaskAccount(accounts) if (accounts && accounts.length > 0) { - setMetaMaskAccount(accounts[0]); - const provider = sdk.getProvider(); - setMetaMaskProvider(provider); + setMetaMaskAccount(accounts[0]) + const provider = sdk.getProvider() + setMetaMaskProvider(provider) } } catch (e) {} - }; + } - const { GF_SURVEY_KEY } = siteConfig.customFields; + const metaMaskWalletIdConnectHandler = useCallback(async () => { + try { + setOpenAuthModal(true) + } catch (err) { + console.warn('failed to connect..', err) + } + }, [setOpenAuthModal]) - useEffect(() => { - const provider = sdk?.getProvider(); - setMetaMaskProvider(provider); - if ((window as any)?.usabilla && window?.innerWidth > 1720) { - (window as any)?.usabilla?.load("w.usabilla.com", GF_SURVEY_KEY); + const metaMaskDisconnect = useCallback(async () => { + try { + await sdk?.terminate() + setOpenAuthModal(false) + setUserId(undefined) + setToken(undefined) + setMetaMaskAccount(undefined) + setMetaMaskAccountEns(undefined) + setUksTier(undefined) + setProjects({}) + setWalletLinked(undefined) + setNeedsMfa(false) + setUserAPIKey('') + clearStorage() + } catch (err) { + console.warn('failed to disconnect..', err) } - }, []); + }, [sdk, setOpenAuthModal, setUserId, setToken, setMetaMaskAccount, setUksTier, setProjects]) + + useEffect(() => { + const provider = sdk?.getProvider() + setMetaMaskProvider(provider) + }, []) useEffect(() => { if (isInitialized && sdk.isExtensionActive()) { - const provider = sdk.getProvider(); - sdk.resume(); - setMetaMaskProvider(provider); + const provider = sdk.getProvider() + sdk.resume() + setMetaMaskProvider(provider) } - }, [isInitialized]); + }, [isInitialized]) useEffect(() => { - const url = new URL(window.location.href); - getStaleDate(); - if (REF_ALLOW_LOGIN_PATH.some((item) => url.pathname.includes(item))) { - const token = url.searchParams.get("token"); + const url = new URL(window.location.href) + getStaleDate() + if (REF_ALLOW_LOGIN_PATH.some(item => url.pathname.includes(item))) { + const token = url.searchParams.get('token') if (token) { - saveTokenString(token); - setToken(token); - const userIdFromjwtToken = getUserIdFromJwtToken(); - setUserId(userIdFromjwtToken); - - (async () => { + saveTokenString(token) + setToken(token) + const userIdFromjwtToken = getUserIdFromJwtToken() + setUserId(userIdFromjwtToken) + ;(async () => { try { const projectsResponse = await fetch( - `${DASHBOARD_URL(DASHBOARD_PREVIEW_URL, VERCEL_ENV)}/api/v1/users/${userIdFromjwtToken}/projects`, + `${DASHBOARD_URL}/api/v1/users/${userIdFromjwtToken}/projects`, { - ...REQUEST_PARAMS("GET", { Authorization: `Bearer ${token}` }), - }, - ); - const res = await projectsResponse.json(); - if (res.error) throw new Error(res.error.message); + ...REQUEST_PARAMS('GET', { Authorization: `Bearer ${token}` }), + } + ) + const res = await projectsResponse.json() + if (res.error) throw new Error(res.error.message) const { result: { projects }, - } = res; - sessionStorage.setItem( - AUTH_WALLET_PROJECTS, - JSON.stringify(projects), - ); - setProjects(projects); - window.location.replace(`${url.origin}${url.pathname}`); + } = res + sessionStorage.setItem(AUTH_WALLET_PROJECTS, JSON.stringify(projects)) + setProjects(projects) + window.location.replace(`${url.origin}${url.pathname}`) } catch (e: any) { - setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR); - setOpenAuthModal(true); + setStep(AUTH_LOGIN_STEP.CONNECTION_ERROR) + setOpenAuthModal(true) } - })(); + })() } } - }, []); - - const metaMaskWalletIdConnectHandler = useCallback(async () => { - try { - setOpenAuthModal(true); - } catch (err) { - console.warn("failed to connect..", err); - } - }, [setOpenAuthModal]); - - const metaMaskDisconnect = useCallback(async () => { - try { - await sdk?.terminate(); - setOpenAuthModal(false); - setUserId(undefined); - setToken(undefined); - setMetaMaskAccount(undefined); - setUksTier(undefined); - setProjects({}); - setWalletLinked(undefined); - setUserAPIKey(""); - clearStorage(); - } catch (err) { - console.warn("failed to disconnect..", err); - } - }, [ - sdk, - setOpenAuthModal, - setUserId, - setToken, - setMetaMaskAccount, - setUksTier, - setProjects, - ]); + }, []) return ( - - {() => ( - - {children} - - - - )} - - ); -}; + + {children} + + + ) +} export default function Root({ children }: { children: ReactElement }) { + const { siteConfig } = useDocusaurusContext() + const isBrowser = useIsBrowser() + const algolia = siteConfig?.themeConfig?.algolia as AlgoliaThemeConfig | undefined + return ( {children} + {isBrowser && (algolia?.assistantId || algolia?.askAi?.assistantId) ? ( + + ) : null} - ); + ) } diff --git a/src/theme/SearchTranslations/index.ts b/src/theme/SearchTranslations/index.ts new file mode 100644 index 00000000000..3c1571747c8 --- /dev/null +++ b/src/theme/SearchTranslations/index.ts @@ -0,0 +1,26 @@ +import type { DocSearchTranslations } from '@docsearch/react' +import baseTranslations from '@theme-original/SearchTranslations' + +type SearchTranslations = DocSearchTranslations & { + placeholder?: string + modal?: { + searchBox?: { + placeholderText?: string + placeholderTextAskAi?: string + } + } +} + +const t = baseTranslations as SearchTranslations + +export default { + ...t, + modal: { + ...t.modal, + searchBox: { + ...t.modal?.searchBox, + placeholderText: 'Search or ask AI a question', + placeholderTextAskAi: 'Ask AI a question…', + }, + }, +} satisfies SearchTranslations diff --git a/src/theme/TOCItems/Tree.js b/src/theme/TOCItems/Tree.js new file mode 100644 index 00000000000..5090573a56b --- /dev/null +++ b/src/theme/TOCItems/Tree.js @@ -0,0 +1,14 @@ +import clsx from 'clsx' +import React from 'react' +import Tree from '@theme-original/TOCItems/Tree' + +import styles from './styles.module.scss' + +export default function TreeWrapper(props) { + return ( + <> + On this page + + + ) +} diff --git a/src/theme/TOCItems/styles.module.scss b/src/theme/TOCItems/styles.module.scss new file mode 100644 index 00000000000..4fd07dcd1c8 --- /dev/null +++ b/src/theme/TOCItems/styles.module.scss @@ -0,0 +1,12 @@ +.subtitle { + display: none; + + @include bp('desktop') { + display: block; + margin-bottom: 1.3rem; + } + + [data-theme='dark'] & { + color: var(--general-gray); + } +} diff --git a/src/theme/Tabs/index.tsx b/src/theme/Tabs/index.tsx index 8cb27a2b2ba..1483d01c9f4 100644 --- a/src/theme/Tabs/index.tsx +++ b/src/theme/Tabs/index.tsx @@ -1,176 +1,146 @@ -import React, {cloneElement, type ReactElement} from 'react'; -import clsx from 'clsx'; +import React, { isValidElement, type ReactElement, type ReactNode } from 'react' +import clsx from 'clsx' +import { ThemeClassNames } from '@docusaurus/theme-common' import { useScrollPositionBlocker, useTabs, + useTabsContextValue, sanitizeTabsChildren, - type TabItemProps, -} from '@docusaurus/theme-common/internal'; -import useIsBrowser from '@docusaurus/useIsBrowser'; -import type {Props} from '@theme/Tabs'; -import styles from './styles.module.css'; + TabsProvider, +} from '@docusaurus/theme-common/internal' +import useIsBrowser from '@docusaurus/useIsBrowser' +import type { Props } from '@theme/Tabs' +import styles from './styles.module.scss' -function TabList({ - className, - block, - selectedValue, - selectValue, - tabValues, -}: Props & ReturnType) { - const tabRefs: (HTMLLIElement | null)[] = []; - const {blockElementScrollPositionUntilNextRender} = - useScrollPositionBlocker(); +function TabList({ className }: { className?: string }) { + const { selectedValue, selectValue, tabValues, block } = useTabs() + const tabRefs: (HTMLLIElement | null)[] = [] + const { blockElementScrollPositionUntilNextRender } = useScrollPositionBlocker() const handleTabChange = ( event: | React.FocusEvent | React.MouseEvent - | React.KeyboardEvent, + | React.KeyboardEvent ) => { - const newTab = event.currentTarget; - const newTabIndex = tabRefs.indexOf(newTab); - const newTabValue = tabValues[newTabIndex]!.value; + const newTab = event.currentTarget + const newTabIndex = tabRefs.indexOf(newTab) + const newTabValue = tabValues[newTabIndex]!.value if (newTabValue !== selectedValue) { - blockElementScrollPositionUntilNextRender(newTab); - selectValue(newTabValue); + blockElementScrollPositionUntilNextRender(newTab) + selectValue(newTabValue) } - }; + } const handleKeydown = (event: React.KeyboardEvent) => { - let focusElement: HTMLLIElement | null = null; + let focusElement: HTMLLIElement | null = null switch (event.key) { case 'Enter': { - handleTabChange(event); - break; + handleTabChange(event) + break } case 'ArrowRight': { - const nextTab = tabRefs.indexOf(event.currentTarget) + 1; - focusElement = tabRefs[nextTab] ?? tabRefs[0]!; - break; + const nextTab = tabRefs.indexOf(event.currentTarget) + 1 + focusElement = tabRefs[nextTab] ?? tabRefs[0]! + break } case 'ArrowLeft': { - const prevTab = tabRefs.indexOf(event.currentTarget) - 1; - focusElement = tabRefs[prevTab] ?? tabRefs[tabRefs.length - 1]!; - break; + const prevTab = tabRefs.indexOf(event.currentTarget) - 1 + focusElement = tabRefs[prevTab] ?? tabRefs[tabRefs.length - 1]! + break } default: - break; + break } - focusElement?.focus(); - }; + focusElement?.focus() + } return (
      - {tabValues.map(({value, label, attributes}) => ( + {tabValues.map(({ value, label, attributes }) => (
    • tabRefs.push(tabControl)} + ref={ref => { + tabRefs.push(ref) + }} onKeyDown={handleKeydown} onClick={handleTabChange} {...attributes} - className={clsx( - 'tabs__item', - styles.tabItem, - attributes?.className as string, - { - 'tabs__item--active': selectedValue === value, - }, - )}> + className={clsx('tabs__item', styles.tabItem, attributes?.className as string, { + 'tabs__item--active': selectedValue === value, + })}> {label ?? value}
    • ))}
    - ); + ) } -function TabContent({ - lazy, +function TabContent({ children }: { children: ReactNode }) { + return
    {children}
    +} + +function TabsContainer({ + className, children, - selectedValue, -}: Props & ReturnType) { - const childTabs = (Array.isArray(children) ? children : [children]).filter( - Boolean, - ) as ReactElement[]; - if (lazy) { - const selectedTabItem = childTabs.find( - (tabItem) => tabItem.props.value === selectedValue, - ); - if (!selectedTabItem) { - // fail-safe or fail-fast? not sure what's best here - return null; - } - return cloneElement(selectedTabItem, {className: 'margin-top--md'}); - } +}: { + className?: string + children: ReactNode +}): ReactNode { return ( -
    - {childTabs.map((tabItem, i) => - cloneElement(tabItem, { - key: i, - hidden: tabItem.props.value !== selectedValue, - }), - )} +
    + + {children}
    - ); + ) } -function TabsComponent(props: Props): JSX.Element { - const tabs = useTabs(props); - /** - * Tabs and TabItems aren't rendered in a straightforward manner. - * Swizzling the TabItem component has no effect: the TabItem is used only for its data. - * The actual tab items are rendered by the TabList component above. - * Here we are adding custom styling to a tab by combining the tab values from the hook - * with the props of the TabItem. - */ - const finalTabs = { - ...tabs, - tabValues: tabs.tabValues.map((tabValue, idx) => ({ - ...tabValue, - attributes: { - ...tabValue.attributes, - className: clsx( - tabValue.attributes?.className, - { - [styles.flaskOnly]: props.children[idx]?.props.flaskOnly, - [styles.deprecated]: props.children[idx]?.props.deprecated - } - ) +export default function Tabs(props: Props): ReactNode { + const isBrowser = useIsBrowser() + const contextValue = useTabsContextValue(props) + const childItems = sanitizeTabsChildren(props.children) + const el = (idx: number) => + isValidElement(childItems[idx]) ? (childItems[idx] as ReactElement) : null + const value = { + ...contextValue, + tabValues: contextValue.tabValues.map((tabValue, idx) => { + const child = el(idx) + return { + ...tabValue, + attributes: { + ...tabValue.attributes, + className: clsx(tabValue.attributes?.className, { + [styles.flaskOnly]: child?.props?.flaskOnly, + [styles.deprecated]: child?.props?.deprecated, + }), + }, } - })) + }), } - return ( -
    - - -
    - ); -} -export default function Tabs(props: Props): JSX.Element { - const isBrowser = useIsBrowser(); return ( - - {sanitizeTabsChildren(props.children)} - - ); + key={String(isBrowser)}> + {childItems} + + ) } diff --git a/src/theme/Tabs/styles.module.css b/src/theme/Tabs/styles.module.css deleted file mode 100644 index 0638d111d6b..00000000000 --- a/src/theme/Tabs/styles.module.css +++ /dev/null @@ -1,27 +0,0 @@ -.tabList { - margin-bottom: var(--ifm-leading); -} - -.tabItem { - margin-top: 0 !important; -} - -.flaskOnly::after { - content: "Flask"; - margin-left: 0.5em; - background-color: var(--mm-flask-background-color); - color: var(--mm-flask-color); - border-radius: 4px; - padding: 2px 4px; - font-size: 0.8em; -} - -.deprecated::after { - content: "deprecated"; - margin-left: 0.5em; - background-color: var(--ifm-color-warning-contrast-background); - color: var(--ifm-color-warning-contrast-foreground); - border-radius: 4px; - padding: 2px 4px; - font-size: 0.8em; -} \ No newline at end of file diff --git a/src/theme/Tabs/styles.module.scss b/src/theme/Tabs/styles.module.scss new file mode 100644 index 00000000000..70d2e6ae21c --- /dev/null +++ b/src/theme/Tabs/styles.module.scss @@ -0,0 +1,104 @@ +.tabList { + margin-bottom: var(--ifm-leading); + padding: 0; + border-radius: var(--ifm-code-border-radius); + box-shadow: var(--ifm-global-shadow-lw); + overflow: hidden; + + // Prevent the code block inside a tab panel from adding its own card styling, + // since the outer .tabList container already provides the card appearance. + [role='tabpanel'] { + [class*='codeBlockContainer'] { + border-radius: 0; + box-shadow: none; + margin-bottom: 0; + } + } +} + +.tabs { + display: flex; + gap: 0.8rem; + padding: 1.2rem 2rem; + border-bottom: 1px solid var(--ifm-color-emphasis-500); + background-color: var(--prism-background-color); + overflow-x: auto; + margin: 0 !important; +} + +.tabItem { + margin-top: 0 !important; + border: none; + border-radius: 0.4rem; + color: var(--general-white); + font-size: 1.6rem; + font-weight: 500; + line-height: 1; + + &[aria-selected='true'] { + background: var(--general-gray-dark); + pointer-events: none; + } + + &:hover { + background-color: var(--general-gray-dark); + } +} + +[role='tabpanel'] { + > p { + padding: 1.6rem; + } + + // Required for tabs that include bullet lists (e.g., bundler method parameters) + // Without this, L1 bullets are not visible and spacing is inconsistent + ul, + ol { + margin: 1.6rem 0 1.6rem 2rem; + + li { + margin-bottom: 1rem; + + // Handle list items that contain paragraphs (L1 bullets from markdown parsing) + p { + padding: 0; // Remove padding for paragraphs inside list items + margin: 0; // Remove margin to prevent double spacing + } + } + } + + ul { + list-style-type: disc; + list-style-position: outside; + } + + ul ul { + list-style-type: circle; + margin-left: 1.6rem; + margin-top: 1rem; + } + + ul ul ul { + list-style-type: square; + } +} + +.flaskOnly::after { + content: 'Flask'; + margin-left: 0.5em; + background-color: var(--ifm-color-primary-light); + color: var(--mm-flask-color); + border-radius: 4px; + padding: 2px 4px; + font-size: 0.8em; +} + +.deprecated::after { + content: 'deprecated'; + margin-left: 0.5em; + background-color: var(--general-gray); + color: var(--general-gray-dark); + padding: 2px 4px; + font-size: 0.8em; + border-radius: 0.2rem; +} diff --git a/src/theme/TagsListInline/index.js b/src/theme/TagsListInline/index.js index e32d32fedee..4167213016e 100644 --- a/src/theme/TagsListInline/index.js +++ b/src/theme/TagsListInline/index.js @@ -1,12 +1,11 @@ -import React from "react"; -import TagsListInline from "@theme-original/TagsListInline"; +import React from 'react' +import TagsListInline from '@theme-original/TagsListInline' +import styles from './styles.module.scss' export default function TagsListInlineWrapper(props) { - const wrapperStyle = { fontSize: "0.85rem" }; - return ( -
    +
    - ); + ) } diff --git a/src/theme/TagsListInline/styles.module.scss b/src/theme/TagsListInline/styles.module.scss new file mode 100644 index 00000000000..dd8c4aa6e0a --- /dev/null +++ b/src/theme/TagsListInline/styles.module.scss @@ -0,0 +1,51 @@ +.tags { + display: flex; + align-items: baseline; + padding-top: 0.35rem; + margin-bottom: 1.2rem; + + @include bp('desktop') { + margin-top: -5rem; + align-items: center; + } + + b { + font-size: 1.2rem; + font-weight: 500; + padding: 0; + margin-top: 0.5rem; + margin-right: 0.4rem; + } + + ul { + display: flex; + flex-wrap: wrap; + gap: 0.2rem 0.4rem; + } + + li { + margin: 0; + + a { + font-size: 1.2rem; + line-height: 0; + font-weight: 500; + color: var(--tag-text-color); + padding: 0.5rem 0.9rem; + margin: 0; + border: 1px solid var(--tag-border-color); + background-color: var(--tag-background-color); + transition: + border var(--ifm-transition-fast), + color var(--ifm-transition-fast), + background var(--ifm-transition-fast); + + &:hover { + text-decoration: none; + color: var(--tag-text-color-hover); + background-color: var(--tag-background-color-hover); + border: 1px solid var(--tag-background-color-hover); + } + } + } +} diff --git a/src/theme/Tiles/index.tsx b/src/theme/Tiles/index.tsx new file mode 100644 index 00000000000..df7e1aeb283 --- /dev/null +++ b/src/theme/Tiles/index.tsx @@ -0,0 +1,48 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import Link from '@docusaurus/Link' +import useBaseUrl from '@docusaurus/useBaseUrl' + +import styles from './styles.module.css' + +export interface Tile { + key: string + title: string + icon: string + path: string +} + +export interface TileGroup { + name: string + description: string + tiles: Tile[] +} + +export default function Tiles(props: { tileGroups: TileGroup[] }) { + const { tileGroups } = props + return ( + <> + {tileGroups.map((group: TileGroup) => ( +
    +

    {group.name}

    +

    {group.description}

    +
    + {group.tiles.map((tile: Tile) => ( + + {tile.icon ? ( + {tile.icon} + ) : ( +
    + )} +
    {tile.title}
    + + ))} +
    +
    + ))} + + ) +} diff --git a/src/theme/Tiles/styles.module.css b/src/theme/Tiles/styles.module.css new file mode 100644 index 00000000000..689fae35c80 --- /dev/null +++ b/src/theme/Tiles/styles.module.css @@ -0,0 +1,73 @@ +.tileGroup { + margin: 30px 0; +} + +.tileGroupContent { + display: flex; + justify-content: flex-start; + align-items: stretch; + flex-flow: row wrap; + gap: 2%; +} + +.tile { + display: flex; + align-items: center; + background: var(--ifm-background-surface-color); + border-radius: 8px; + box-sizing: border-box; + padding: 15px; + margin-bottom: 2%; + flex-basis: 32%; + min-height: 60px; + border-width: 1px; + border-style: solid; + border-color: var(--ifm-color-emphasis-200); + transition: + border-color 0.2s ease, + box-shadow 0.2s ease, + transform 0.1s ease; + text-decoration: none; +} + +.tile:hover { + text-decoration: none !important; + border-color: var(--ifm-color-primary); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgb(0 0 0 / 10%); +} + +.tile:focus { + outline: 2px solid var(--ifm-color-primary); + outline-offset: 2px; +} + +.tileIcon { + height: 25px; + width: 25px; + margin-right: 15px; + flex-shrink: 0; + object-fit: contain; +} + +.tileText { + color: var(--ifm-color-content); + font-weight: 500; + flex: 1; + word-wrap: break-word; + overflow-wrap: break-word; + hyphens: auto; + line-height: 1.4; +} + +@media (width <=996px) { + .tile { + flex-basis: 49%; + } +} + +@media (width <=600px) { + .tile { + flex-basis: 100%; + } +} diff --git a/src/theme/URLParams/index.tsx b/src/theme/URLParams/index.tsx new file mode 100644 index 00000000000..03f6b6cf426 --- /dev/null +++ b/src/theme/URLParams/index.tsx @@ -0,0 +1,22 @@ +export const getWindowLocation = () => { + if (typeof window !== 'undefined') return window.location.href + return 'http://localhost' +} + +export const getURLOptions = () => { + const url = new URL(getWindowLocation()) + + const urlOpts = new Map() + url.searchParams.forEach((value, key) => { + urlOpts.set(key, value) + }) + + return Object.fromEntries(urlOpts) +} + +export const getURLFromFilterOptions = (opts: Record): string => { + const url = new URL(getWindowLocation()) + url.search = '' + for (const [key, value] of Object.entries(opts)) url.searchParams.append(key, value) + return url.toString() +} diff --git a/src/utils/component-map.tsx b/src/utils/component-map.tsx new file mode 100644 index 00000000000..5cf66d042af --- /dev/null +++ b/src/utils/component-map.tsx @@ -0,0 +1,85 @@ +import Link from '@docusaurus/Link' +import { forwardRef, ReactNode, MouseEvent } from 'react' + +interface CommonProps { + children: ReactNode + className?: string + ref?: React.Ref +} + +interface ButtonProps extends CommonProps { + onClick?: (event: MouseEvent) => void + ariaLabel?: string + [key: string]: any +} + +interface LinkProps extends CommonProps { + href?: string + target?: string + to?: string + [key: string]: any +} + +interface DivProps extends CommonProps { + onClick?: (event: MouseEvent) => void + [key: string]: any +} + +interface SectionProps extends CommonProps { + [key: string]: any +} + +interface AsideProps extends CommonProps { + [key: string]: any +} + +export const linkComponentMap = { + // eslint-disable-next-line react/display-name + ['button']: forwardRef( + ({ children, onClick, ariaLabel, ...props }, ref) => ( + + ) + ), + // eslint-disable-next-line react/display-name + ['link']: forwardRef( + ({ children, href, target, className, ...props }, ref) => ( + + {children} + + ) + ), + // eslint-disable-next-line react/display-name + ['a']: forwardRef( + ({ children, href, target, className, ...props }, ref) => ( + + {children} + + ) + ), + // eslint-disable-next-line react/display-name + ['div']: forwardRef( + ({ children, onClick, className, ...props }, ref) => ( +
    + {children} +
    + ) + ), + // eslint-disable-next-line react/display-name + ['section']: forwardRef( + ({ children, onClick, className, ...props }, ref) => ( +
    + {children} +
    + ) + ), + // eslint-disable-next-line react/display-name + ['aside']: forwardRef( + ({ children, onClick, className, ...props }, ref) => ( + + ) + ), +} diff --git a/src/utils/example-maps.tsx b/src/utils/example-maps.tsx new file mode 100644 index 00000000000..9746bd13d35 --- /dev/null +++ b/src/utils/example-maps.tsx @@ -0,0 +1,1304 @@ +export const quickStartHostedLinks = { + // PNP Modal SDK + ANGULAR: 'https://web3auth-angular-quick-start.vercel.app/', + NEXTJS: 'https://web3auth-nextjs-quick-start.vercel.app/', + REACT: 'https://web3auth-react-quick-start-tau.vercel.app/', + REACT_SOLANA: 'https://web3auth-react-solana-quick-start.vercel.app/', + VUE: 'https://web3auth-vue-quick-start.vercel.app/', + VUE_SOLANA: 'https://web3auth-vue-solana-quick-start.vercel.app/', + ANDROID: 'https://w3a.link/pnp-android-quick-start', + IOS: 'https://w3a.link/pnp-ios-quick-start', // https://w3a.link/pnp-ios-quick-start", + REACT_NATIVE: 'https://w3a.link/pnp-react-native-android-quick-start', + FLUTTER: 'https://w3a.link/pnp-flutter-android-quick-start', + UNITY: 'https://w3a.link/pnp-unity-android-quick-start', +} + +export const quickStartSourceCode = { + REACT: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-quick-start', + REACT_SOLANA: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-solana-quick-start', + ANGULAR: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/angular-quick-start', + VUE: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-quick-start', + VUE_SOLANA: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-solana-quick-start', + NEXTJS: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/nextjs-quick-start', + ANDROID: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-quick-start', + IOS: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-quick-start', + REACT_NATIVE: + 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-quick-start', + FLUTTER: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-quick-start', + UNITY: 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-quick-start', + UNREAL: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/master', +} + +export interface TutorialsInterface { + content: Record< + string, + { + title: string + image: string + description: string + type: string + tags: string[] + date: string + author: string + communityPortalTopicId: string + pinned: string + } + > +} + +export interface ExamplesInterface { + id: string + title: string + description: string + image: string + type: string + tags: string[] + link: string + githubLink: string + qsLink?: string + guideLink?: string +} + +export const tags = { + pnp: 'plug and play', + mpcCoreKit: 'mpc core kit', + sfa: 'single factor auth', + sfaJS: '@web3auth/single-factor-auth', + mpcCoreKitJS: '@web3auth/mpc-core-kit', + web: 'web', + android: 'android', + ios: 'ios', + wagmi: 'wagmi', + reactNative: 'react native', + flutter: 'flutter', + node: 'node', + unity: 'unity', + unreal: 'unreal engine', + evm: 'evm', + solana: 'solana', + multiChain: 'multi chain', + xrpl: 'xrpl', + algorand: 'algorand', + aptos: 'aptos', + bitcoin: 'bitcoin', + cosmos: 'cosmos', + immutablex: 'immutablex', + near: 'near', + polkadot: 'polkadot', + polymesh: 'polymesh', + starkex: 'starkex', + starknet: 'starknet', + sui: 'sui', + tezos: 'tezos', + tron: 'tron', + ton: 'ton', + customAuthentication: 'custom authentication', + accountAbstraction: 'account abstraction', + onRamp: 'on ramp', + mfa: 'mfa', +} + +export const productMap = [ + { + label: 'Plug and Play', + value: tags.pnp, + }, + { + label: 'Single Factor Auth', + value: tags.sfa, + }, + { + label: 'MPC Core Kit', + value: tags.mpcCoreKit, + }, +] + +export const platformMap = [ + { + label: 'Web', + value: tags.web, + }, + { + label: 'Android', + value: tags.android, + }, + { + label: 'iOS/ Swift', + value: tags.ios, + }, + { + label: 'React Native', + value: tags.reactNative, + }, + { + label: 'Flutter', + value: tags.flutter, + }, + { + label: 'Unity', + value: tags.unity, + }, + { + label: 'Unreal Engine', + value: tags.unreal, + }, + { + label: 'Node.js', + value: tags.node, + }, +] + +export const pnpPlatformMap = [ + { + label: 'Web', + value: tags.web, + }, + { + label: 'Android', + value: tags.android, + }, + { + label: 'iOS/ Swift', + value: tags.ios, + }, + { + label: 'React Native', + value: tags.reactNative, + }, + { + label: 'Flutter', + value: tags.flutter, + }, + { + label: 'Unity', + value: tags.unity, + }, + { + label: 'Unreal Engine', + value: tags.unreal, + }, +] + +export const sfaPlatformMap = [ + { + label: 'Android', + value: tags.android, + }, + { + label: 'iOS/ Swift', + value: tags.ios, + }, + { + label: 'React Native', + value: tags.reactNative, + }, + { + label: 'Flutter', + value: tags.flutter, + }, +] + +export const mpcPlatformMap = [ + { + label: 'Web', + value: tags.web, + }, + { + label: 'React Native', + value: tags.reactNative, + }, + { + label: 'Node.js', + value: tags.node, + }, +] + +export const blockchainMap = [ + { + label: 'Ethereum/ EVM', + value: tags.evm, + }, + { + label: 'Solana', + value: tags.solana, + }, + { + label: 'Multiple Chains', + value: tags.multiChain, + }, + { + label: 'XRPL', + value: tags.xrpl, + }, + { + label: 'Algorand', + value: tags.algorand, + }, + { + label: 'Aptos', + value: tags.aptos, + }, + { + label: 'Bitcoin', + value: tags.bitcoin, + }, + { + label: 'Cosmos', + value: tags.cosmos, + }, + { + label: 'ImmutableX', + value: tags.immutablex, + }, + { + label: 'Near', + value: tags.near, + }, + { + label: 'Polkadot', + value: tags.polkadot, + }, + { + label: 'Polymesh', + value: tags.polymesh, + }, + { + label: 'StarkEx', + value: tags.starkex, + }, + { + label: 'StarkNet', + value: tags.starknet, + }, + { + label: 'Sui', + value: tags.sui, + }, + { + label: 'Tezos', + value: tags.tezos, + }, + { + label: 'TRON', + value: tags.tron, + }, + { + label: 'TON', + value: tags.ton, + }, +] + +export const pnpFeatureMap = [ + { + label: 'Custom Authentication', + value: tags.customAuthentication, + }, + { + label: 'Account Abstraction', + value: tags.accountAbstraction, + }, + { + label: 'On Ramp', + value: tags.onRamp, + }, + { + label: 'Multi Factor Auth', + value: tags.mfa, + }, +] + +export const sfaFeatureMap = [ + { + label: 'Account Abstraction', + value: tags.accountAbstraction, + }, + { + label: 'On Ramp', + value: tags.onRamp, + }, +] + +export const PLAYGROUND = 'PLAYGROUND' +export const QUICK_START = 'QUICK START' +export const SAMPLE_APP = 'SAMPLE APP' + +export const typeMap = [ + { + id: 1, + type: PLAYGROUND, + }, + { + id: 2, + type: SAMPLE_APP, + }, + { + id: 3, + type: QUICK_START, + }, +] + +export const webExamples: ExamplesInterface[] = [ + // Quick Starts + { + title: 'React Quick Start', + description: 'A quick integration of Web3Auth SDK in React', + image: 'img/embedded-wallets/banners/react.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-quick-start', + id: 'react-quick-start', + qsLink: '/quick-start?framework=REACT&stepIndex=0', + }, + { + title: 'React Solana Quick Start', + description: 'A quick integration of Web3Auth SDK in React with Solana blockchain', + image: 'img/embedded-wallets/banners/solana.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.solana, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-solana-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-solana-quick-start', + id: 'react-solana-quick-start', + qsLink: '/quick-start?framework=REACT_SOLANA&stepIndex=0', + }, + { + title: 'Angular Quick Start', + description: 'A quick integration of Web3Auth SDK in Angular', + image: 'img/embedded-wallets/banners/angular.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.evm, 'angular'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/angular-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/angular-quick-start', + id: 'angular-quick-start', + qsLink: '/quick-start?framework=ANGULAR&stepIndex=0', + }, + { + title: 'Vue Quick Start', + description: 'A quick integration of Web3Auth SDK in Vue', + image: 'img/embedded-wallets/banners/vue.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'vue'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-quick-start', + id: 'vue-quick-start', + qsLink: '/quick-start?framework=VUE&stepIndex=0', + }, + { + title: 'Vue Solana Quick Start', + description: 'A quick integration of Web3Auth SDK in Vue with Solana blockchain', + image: 'img/embedded-wallets/banners/solana.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.solana, 'vue'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-solana-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-solana-quick-start', + id: 'vue-solana-quick-start', + qsLink: '/quick-start?framework=VUE_SOLANA&stepIndex=0', + }, + { + title: 'NextJS Quick Start', + description: 'A quick integration of Web3Auth SDK in NextJS', + image: 'img/embedded-wallets/banners/next.js.png', + type: QUICK_START, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'nextjs'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/nextjs-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/nextjs-quick-start', + id: 'nextjs-quick-start', + qsLink: '/quick-start?framework=NEXTJS&stepIndex=0', + }, + + // React Playground + { + title: 'React Playground', + description: 'A playground to test all the features of Web3Auth SDKs in React', + image: 'img/embedded-wallets/banners/react.png', + type: PLAYGROUND, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'hooks'], + link: 'https://web3auth-playground.vercel.app/', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/react-playground', + id: 'react-playground', + }, + + // Custom Authentication Examples - Single Connection + { + title: 'Auth0 Implicit Example', + description: 'Implementing Auth0 implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/auth0.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'auth0', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/auth0-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/auth0-implicit-example', + id: 'auth0-implicit-example', + }, + { + title: 'Auth0 JWT Example', + description: 'Implementing Auth0 JWT authentication with Web3Auth', + image: 'img/embedded-wallets/banners/auth0.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'auth0', 'jwt'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/auth0-jwt-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/auth0-jwt-example', + id: 'auth0-jwt-example', + }, + { + title: 'Cognito Implicit Example', + description: 'Implementing AWS Cognito implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/cognito.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'cognito', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/cognito-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/cognito-implicit-example', + id: 'cognito-implicit-example', + }, + { + title: 'Custom JWT Example', + description: 'Implementing custom JWT authentication with Web3Auth', + image: 'img/embedded-wallets/banners/jwt.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'jwt', 'custom'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/custom-jwt-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/custom-jwt-example', + id: 'custom-jwt-example', + }, + { + title: 'Discord Implicit Example', + description: 'Implementing Discord implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/discord.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'discord', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/discord-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/discord-implicit-example', + id: 'discord-implicit-example', + }, + { + title: 'Facebook Implicit Example', + description: 'Implementing Facebook implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/facebook.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'facebook', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/facebook-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/facebook-implicit-example', + id: 'facebook-implicit-example', + }, + { + title: 'Firebase JWT Example', + description: 'Implementing Firebase JWT authentication with Web3Auth', + image: 'img/embedded-wallets/banners/firebase.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'firebase', 'jwt'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/firebase-jwt-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/firebase-jwt-example', + id: 'firebase-jwt-example', + }, + { + title: 'Google Implicit Example', + description: 'Implementing Google implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/google.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'google', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/google-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/google-implicit-example', + id: 'google-implicit-example', + }, + { + title: 'Google One Tap Example', + description: 'Implementing Google One Tap authentication with Web3Auth', + image: 'img/embedded-wallets/banners/google.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'google', 'one-tap'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/google-one-tap-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/google-one-tap-example', + id: 'google-one-tap-example', + }, + { + title: 'Modal Example', + description: 'Implementing Web3Auth Modal for authentication', + image: 'img/embedded-wallets/banners/react.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'modal'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/modal-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/modal-example', + id: 'modal-example', + }, + { + title: 'Twitch Implicit Example', + description: 'Implementing Twitch implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/twitch.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'twitch', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/twitch-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/twitch-implicit-example', + id: 'twitch-implicit-example', + }, + { + title: 'Worldcoin Implicit Example', + description: 'Implementing Worldcoin implicit flow authentication with Web3Auth', + image: 'img/embedded-wallets/banners/worldcoin.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'worldcoin', 'implicit'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/worldcoin-implicit-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/single-connection/worldcoin-implicit-example', + id: 'worldcoin-implicit-example', + }, + + // Custom Authentication Examples - Grouped Connection + { + title: 'Auth0 Google Implicit Grouped Example', + description: 'Implementing Auth0 and Google grouped authentication with implicit flow', + image: 'img/embedded-wallets/banners/auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.web, + tags.evm, + tags.wagmi, + 'react', + 'auth0', + 'google', + 'implicit', + 'grouped', + ], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/auth0-google-implicit-grouped-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/auth0-google-implicit-grouped-example', + id: 'auth0-google-implicit-grouped-example', + }, + { + title: 'Auth0 Google JWT Grouped Example', + description: 'Implementing Auth0 and Google grouped authentication with JWT', + image: 'img/embedded-wallets/banners/auth0.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'auth0', 'google', 'jwt', 'grouped'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/auth0-google-jwt-grouped-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/auth0-google-jwt-grouped-example', + id: 'auth0-google-jwt-grouped-example', + }, + { + title: 'Firebase Google JWT Grouped Example', + description: 'Implementing Firebase and Google grouped authentication with JWT', + image: 'img/embedded-wallets/banners/firebase.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.web, + tags.evm, + tags.wagmi, + 'react', + 'firebase', + 'google', + 'jwt', + 'grouped', + ], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/firebase-google-jwt-grouped-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/firebase-google-jwt-grouped-example', + id: 'firebase-google-jwt-grouped-example', + }, + { + title: 'Modal Google Email Passwordless Grouped Example', + description: 'Implementing Web3Auth Modal with Google and Email Passwordless authentication', + image: 'img/embedded-wallets/banners/google.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.web, + tags.evm, + tags.wagmi, + 'react', + 'modal', + 'google', + 'email', + 'passwordless', + 'grouped', + ], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/modal-google-email-passwordless-grouped-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/custom-authentication/grouped-connection/modal-google-email-passwordless-grouped-example', + id: 'modal-google-email-passwordless-grouped-example', + }, + + // Other Blockchain Examples + { + title: 'Algorand Example', + description: 'Implementing Web3Auth with Algorand blockchain', + image: 'img/embedded-wallets/banners/algorand.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.algorand, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/algorand-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/algorand-example', + id: 'algorand-example', + }, + { + title: 'Aptos Example', + description: 'Implementing Web3Auth with Aptos blockchain', + image: 'img/embedded-wallets/banners/aptos.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.aptos, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/aptos-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/aptos-example', + id: 'aptos-example', + }, + { + title: 'Bitcoin Example', + description: 'Implementing Web3Auth with Bitcoin blockchain', + image: 'img/embedded-wallets/banners/react.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.bitcoin, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/bitcoin-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/bitcoin-example', + id: 'bitcoin-example', + }, + { + title: 'Cosmos Example', + description: 'Implementing Web3Auth with Cosmos blockchain', + image: 'img/embedded-wallets/banners/cosmos.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.cosmos, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/cosmos-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/cosmos-example', + id: 'cosmos-example', + }, + { + title: 'Multi Chain Example', + description: 'Implementing Web3Auth with multiple blockchain networks', + image: 'img/embedded-wallets/banners/multichain.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.multiChain, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/multi-chain-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/multi-chain-example', + id: 'multi-chain-example', + }, + { + title: 'Polkadot Example', + description: 'Implementing Web3Auth with Polkadot blockchain', + image: 'img/embedded-wallets/banners/polkadot.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.polkadot, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/polkadot-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/polkadot-example', + id: 'polkadot-example', + }, + { + title: 'Polymesh Example', + description: 'Implementing Web3Auth with Polymesh blockchain', + image: 'img/embedded-wallets/banners/polymesh.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.polymesh, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/polymesh-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/polymesh-example', + id: 'polymesh-example', + }, + { + title: 'Server Side Verification Example', + description: 'Implementing server-side verification with Web3Auth', + image: 'img/embedded-wallets/banners/react.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'nextjs', 'server-side'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/server-side-verification-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/server-side-verification-example', + id: 'server-side-verification-example', + }, + { + title: 'Sign Protocol Example', + description: 'Implementing signing protocols with Web3Auth', + image: 'img/embedded-wallets/banners/sign-protocol.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'signing'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/sign-protocol-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/sign-protocol-example', + id: 'sign-protocol-example', + }, + { + title: 'Smart Account Example', + description: 'Implementing smart accounts with Web3Auth for account abstraction', + image: 'img/embedded-wallets/banners/react.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', tags.accountAbstraction], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/smart-account-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/smart-account-example', + id: 'smart-account-example', + }, + { + title: 'Sui Example', + description: 'Implementing Web3Auth with Sui blockchain', + image: 'img/embedded-wallets/banners/sui.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.sui, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/sui-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/sui-example', + id: 'sui-example', + }, + { + title: 'Tezos Example', + description: 'Implementing Web3Auth with Tezos blockchain', + image: 'img/embedded-wallets/banners/tezos.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.tezos, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/tezos-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/tezos-example', + id: 'tezos-example', + }, + { + title: 'TON Example', + description: 'Implementing Web3Auth with TON blockchain', + image: 'img/embedded-wallets/banners/ton.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.ton, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/ton-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/ton-example', + id: 'ton-example', + }, + { + title: 'TRON Example', + description: 'Implementing Web3Auth with TRON blockchain', + image: 'img/embedded-wallets/banners/tron.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.tron, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/tron-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/tron-example', + id: 'tron-example', + }, + { + title: 'XMTP Example', + description: 'Implementing Web3Auth with XMTP messaging protocol', + image: 'img/embedded-wallets/banners/xmtp.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.evm, tags.wagmi, 'react', 'xmtp', 'messaging'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/xmtp-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/xmtp-example', + id: 'xmtp-example', + }, + { + title: 'XRPL Example', + description: 'Implementing Web3Auth with XRP Ledger', + image: 'img/embedded-wallets/banners/xrpl.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.web, tags.xrpl, 'react'], + link: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/xrpl-example', + githubLink: 'https://github.com/Web3Auth/web3auth-examples/tree/main/other/xrpl-example', + id: 'xrpl-example', + }, +] +export const pnpiOSExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP iOS SDK Quick Start', + description: 'A quick integration of MetaMask Embedded Wallets iOS SDK', + image: 'img/embedded-wallets/banners/ios-swift.png', + type: QUICK_START, + tags: [tags.pnp, tags.ios, tags.evm, 'swift'], + link: quickStartHostedLinks.IOS, + id: 'ios-quick-start', + githubLink: quickStartSourceCode.IOS, + qsLink: '/quick-start?framework=IOS&stepIndex=0', + }, + { + title: 'Integrate Web3Auth PnP iOS SDK with Solana Blockchain', + description: 'Use Solana Blockchain with Plug and Play iOS SDK', + image: 'img/embedded-wallets/banners/ios-solana.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.ios, 'swift', tags.solana, 'ed25519'], + link: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-solana-example', + id: 'ios-solana-example', + githubLink: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-solana-example', + }, + { + title: 'PnP iOS SDK Playground', + description: 'A playground to test all the features of Plug and Play iOS SDK', + image: 'img/embedded-wallets/banners/ios-swift.png', + type: PLAYGROUND, + tags: [tags.pnp, tags.ios, 'swift', tags.solana, tags.evm, 'secp256k1'], + link: 'https://w3a.link/pnp-ios-playground', + githubLink: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-playground', + id: 'pnp-ios-playground', + }, + { + title: 'Integrate Firebase based Login in PnP iOS SDK', + description: 'Use your own Firebase ID Token based Login with Plug and Play iOS SDK', + image: 'img/embedded-wallets/banners/ios-firebase.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.ios, 'swift', 'firebase', tags.evm, 'id token login'], + link: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-firebase-example', + id: 'ios-firebase-example', + githubLink: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-firebase-example', + }, + // { + // title: "Integrate Auth0 SPA in PnP iOS SDK", + // description: "Use Auth0 Single Page App (Implicit Mode) with Plug and Play iOS SDK", + // image: "img/embedded-wallets/banners/ios-auth0.png", + // type: SAMPLE_APP, + // tags: [tags.pnp, tags.ios, "swift", "auth0", "email passwordless", tags.evm, "implicit mode"], + // link: "https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-auth0-example", + // id: "ios-auth0-example", + // githubLink: "https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-auth0-example", + // + // }, + { + title: 'Using Aggregate Verifiers in Web3Auth PnP iOS SDK', + description: + 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets iOS SDK', + image: 'img/embedded-wallets/banners/ios-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.ios, + 'swift', + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + tags.evm, + ], + link: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-aggregate-verifier-example', + id: 'ios-aggregate-verifier-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-aggregate-verifier-example', + }, +] +export const pnpAndroidExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP Android SDK Quick Start', + description: 'A quick integration of MetaMask Embedded Wallets Android SDK', + image: 'img/embedded-wallets/banners/android.png', + type: QUICK_START, + tags: [tags.pnp, tags.android, tags.evm, 'kotlin'], + link: quickStartHostedLinks.ANDROID, + githubLink: quickStartSourceCode.ANDROID, + id: 'android-quick-start', + qsLink: '/quick-start?framework=ANDROID&stepIndex=0', + }, + { + title: 'Integrate Web3Auth PnP Android SDK with Solana Blockchain', + description: 'Use Solana Blockchain with Plug and Play Android SDK', + image: 'img/embedded-wallets/banners/android-solana.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.android, 'kotlin', tags.solana, 'ed25519'], + link: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-solana-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-solana-example', + id: 'android-solana-example', + }, + { + title: 'PnP Android SDK Playground', + description: 'A playground to test all the features of Plug and Play Android SDK', + image: 'img/embedded-wallets/banners/android.png', + type: PLAYGROUND, + tags: [tags.pnp, tags.android, 'kotlin', tags.solana, tags.evm, 'secp256k1'], + link: 'https://w3a.link/pnp-android-playground', + githubLink: + 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-playground', + id: 'android-playground', + }, + { + title: 'Integrate Firebase based Login in PnP Android SDK', + description: 'Use your own Firebase ID Token based Login with Plug and Play Android SDK', + image: 'img/embedded-wallets/banners/android-firebase.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.android, 'kotlin', 'firebase', tags.evm, 'id token login'], + link: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-firebase-example', + id: 'android-firebase-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-firebase-example', + }, + { + title: 'Integrate Auth0 SPA in PnP Android SDK', + description: 'Use Auth0 Single Page App (Implicit Mode) with Plug and Play Android SDK', + image: 'img/embedded-wallets/banners/android-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.android, + tags.evm, + 'kotlin', + 'auth0', + 'email passwordless', + 'implicit mode', + ], + link: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-auth0-example', + id: 'android-auth0-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-auth0-example', + }, + { + title: 'Using Aggregate Verifiers in Web3Auth PnP Android SDK', + description: + 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets Android SDK', + image: 'img/embedded-wallets/banners/android-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.android, + tags.evm, + 'kotlin', + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + ], + link: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-aggregate-verifier-example', + id: 'android-aggregate-verifier-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-aggregate-verifier-example', + }, +] +export const pnpReactNativeExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP React Native SDK Quick Start', + description: + 'A quick integration of MetaMask Embedded Wallets React Native SDK in Android and iOS', + image: 'img/embedded-wallets/banners/react-native.png', + type: QUICK_START, + tags: [tags.pnp, tags.android, tags.ios, tags.evm, tags.reactNative], + link: quickStartHostedLinks.REACT_NATIVE, + githubLink: quickStartSourceCode.REACT_NATIVE, + id: 'rn-bare-quick-start', + qsLink: '/quick-start?framework=REACT_NATIVE&stepIndex=0', + }, + { + title: 'Using Auth0 with Web3Auth PnP React Native SDK', + description: + 'Using Auth0 Single Page App (Implicit Mode) in MetaMask Embedded Wallets React Native SDK in Android and iOS', + image: 'img/embedded-wallets/banners/react-native.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.android, tags.ios, tags.reactNative, tags.evm, 'auth0', 'implicit mode'], + link: 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-auth0-example', + id: 'rn-bare-auth0-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-auth0-example', + }, + { + title: 'Using Aggregate Verifiers in Web3Auth PnP React Native SDK', + description: + 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets React Native SDK for Android and iOS', + image: 'img/embedded-wallets/banners/react-native.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + + tags.android, + tags.ios, + tags.evm, + tags.reactNative, + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + ], + link: 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-aggregate-verifier-example', + id: 'rn-bare-aggregate-verifier-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-aggregate-verifier-example', + }, + { + title: 'Using Web3Auth PnP React Native SDK in Expo', + description: 'Using MetaMask Embedded Wallets React Native SDK in an Expo App', + image: 'img/embedded-wallets/banners/expo.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.android, tags.ios, tags.evm, tags.reactNative, 'expo'], + link: 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-expo-example', + id: 'rn-expo-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-expo-example', + }, +] +export const pnpFlutterExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP Flutter SDK Quick Start', + description: 'A quick integration of MetaMask Embedded Wallets Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter.png', + type: QUICK_START, + tags: [tags.pnp, tags.flutter, tags.ios, tags.android, tags.evm, 'dart'], + link: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-quick-start', + id: 'flutter-quick-start', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-quick-start', + }, + { + title: 'Integrate Web3Auth PnP Flutter SDK with Solana Blockchain', + description: 'Use Solana Blockchain with Plug and Play Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter-solana.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.flutter, tags.ios, tags.android, 'dart', tags.solana, 'ed25519'], + link: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-solana-example', + id: 'flutter-solana-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-solana-example', + }, + { + title: 'PnP Flutter SDK Playground', + description: + 'A playground to test all the features of Plug and Play Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter.png', + type: PLAYGROUND, + tags: [ + tags.pnp, + tags.flutter, + tags.ios, + tags.android, + 'dart', + tags.solana, + tags.evm, + 'secp256k1', + ], + link: 'https://w3a.link/pnp-flutter-ios-playground', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-playground', + id: 'flutter-playground', + }, + { + title: 'Integrate Firebase based Login in PnP Flutter SDK', + description: + 'Use your own Firebase ID Token based Login with Plug and Play Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter-firebase.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.flutter, + tags.ios, + tags.android, + tags.evm, + 'dart', + 'firebase', + 'id token login', + ], + link: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-firebase-example', + id: 'flutter-firebase-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-firebase-example', + }, + { + title: 'Integrate Auth0 SPA in PnP Flutter SDK', + description: + 'Use Auth0 Single Page App (Implicit Mode) with Plug and Play Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.flutter, + tags.ios, + tags.android, + 'dart', + 'auth0', + 'email passwordless', + 'implicit mode', + tags.evm, + ], + link: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-auth0-example', + id: 'flutter-auth0-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-auth0-example', + }, + { + title: 'Using Aggregate Verifiers in Web3Auth PnP Flutter SDK', + description: + 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets Flutter SDK for Android and iOS', + image: 'img/embedded-wallets/banners/flutter-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.flutter, + tags.ios, + tags.android, + 'dart', + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + tags.evm, + ], + link: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-aggregate-verifier-example', + id: 'flutter-aggregate-verifier-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-aggregate-verifier-example', + }, +] +export const pnpUnityExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP Unity SDK Quick Start', + description: + 'A quick integration of MetaMask Embedded Wallets Unity SDK in Android, iOS and WebGL', + image: 'img/embedded-wallets/banners/unity.png', + type: QUICK_START, + tags: [tags.pnp, tags.unity, 'csharp', tags.android, tags.ios, tags.evm, 'webgl'], + link: quickStartSourceCode.UNITY, + id: 'unity-quick-start', + githubLink: quickStartSourceCode.UNITY, + }, + { + title: 'Using Auth0 with Web3Auth PnP Unity SDK', + description: + 'Using Auth0 Single Page App (Implicit Mode) in MetaMask Embedded Wallets Unity SDK in Android, iOS and WebGL', + image: 'img/embedded-wallets/banners/unity-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.unity, + 'csharp', + tags.android, + tags.ios, + 'webgl', + 'auth0', + 'implicit mode', + tags.evm, + ], + link: 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-auth0-example', + id: 'unity-auth0-example', + githubLink: 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-auth0-example', + }, + { + title: 'Using Aggregate Verifiers in Web3Auth PnP Unity SDK', + description: + 'Combine multiple logins (Google, Facebook and GitHub) using Aggregate Verifiers in MetaMask Embedded Wallets Unity SDK for Android, iOS and WebGL', + image: 'img/embedded-wallets/banners/unity-auth0.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.unity, + 'csharp', + tags.android, + tags.ios, + 'webgl', + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + tags.evm, + ], + link: 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-aggregate-verifier-example', + id: 'unity-aggregate-verifier-example', + githubLink: + 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-aggregate-verifier-example', + }, +] +export const pnpUnrealExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP Unreal Engine SDK Quick Start', + description: + 'A quick integration of MetaMask Embedded Wallets Unreal Engine SDK in Android & iOS', + image: 'img/embedded-wallets/banners/unreal.png', + type: QUICK_START, + tags: [tags.pnp, tags.unreal, 'csharp', tags.android, tags.evm, tags.ios], + link: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/master', + id: 'unreal-quick-start', + githubLink: quickStartSourceCode.UNREAL, + }, + { + id: 'unreal-auth0-example', + title: 'Using Auth0 with Web3Auth PnP Unreal Engine SDK', + description: + 'Using Auth0 Single Page App (Implicit Mode) in MetaMask Embedded Wallets Unreal Engine SDK in Android & iOS', + image: 'img/embedded-wallets/banners/unreal-auth0.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.unreal, tags.android, tags.ios, 'auth0', tags.evm, 'implicit mode'], + link: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/auth0-example', + githubLink: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/auth0-example', + }, + { + id: 'unreal-google-example', + title: 'Using Google in Web3Auth PnP Unreal Engine SDK', + description: + 'Using Google Custom Authentication in MetaMask Embedded Wallets Unreal Engine SDK for Android & iOS', + image: 'img/embedded-wallets/banners/unreal-google.png', + type: SAMPLE_APP, + tags: [ + tags.pnp, + tags.unreal, + tags.android, + tags.ios, + tags.evm, + 'aggregate verifier', + 'implicit mode', + 'auth0', + 'google', + 'github', + 'facebook', + ], + link: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/custom-google', + githubLink: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/custom-google', + }, +] + +export const pnpNodeExamples: ExamplesInterface[] = [ + { + title: 'Web3Auth PnP Node SDK Quick Start', + description: 'A quick integration of MetaMask Embedded Wallets Node SDK', + image: 'img/embedded-wallets/banners/node.png', + type: QUICK_START, + tags: [tags.pnp, tags.node, 'nodejs', tags.evm], + link: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/evm-quick-start', + id: 'node-quick-start', + githubLink: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/evm-quick-start', + }, + { + title: 'Using Firebase with Web3Auth PnP Node SDK', + description: 'Using Firebase Backend Login in MetaMask Embedded Wallets Node SDK', + image: 'img/embedded-wallets/banners/node-firebase.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.node, 'firebase', tags.evm], + link: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/firebase-quick-start', + id: 'node-firebase-example', + githubLink: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/firebase-quick-start', + }, + { + title: 'Using Solana with Web3Auth PnP Node SDK', + description: 'Using Solana with MetaMask Embedded Wallets Node SDK', + image: 'img/embedded-wallets/banners/node-solana.png', + type: SAMPLE_APP, + tags: [tags.pnp, tags.node, 'nodejs', tags.solana, 'ed25519'], + link: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/solana-quick-start', + id: 'node-solana-example', + githubLink: 'https://github.com/Web3Auth/web3auth-node-examples/tree/main/solana-quick-start', + }, +] + +export const exampleMap: ExamplesInterface[] = [ + ...webExamples, + ...pnpiOSExamples, + ...pnpAndroidExamples, + ...pnpReactNativeExamples, + ...pnpFlutterExamples, + ...pnpUnityExamples, + ...pnpUnrealExamples, +] + +function arrayToObjectById(array) { + return array.reduce((acc, obj) => { + acc[obj.id] = obj + return acc + }, {}) +} + +export const examples = arrayToObjectById(exampleMap) diff --git a/src/utils/icon-map.js b/src/utils/icon-map.js new file mode 100644 index 00000000000..4a0e01c8f46 --- /dev/null +++ b/src/utils/icon-map.js @@ -0,0 +1,129 @@ +import AccessibleIcon from '@site/static/img/icons/accessible.svg' +import ArrowDownIcon from '@site/static/img/icons/arrow-down.svg' +import ArrowLeftIcon from '@site/static/img/icons/arrow-left.svg' +import ArrowRightIcon from '@site/static/img/icons/arrow-right.svg' +import BankIcon from '@site/static/img/icons/bank.svg' +import IconBrave from '@site/static/img/icons/brave.svg' +import CalendarIcon from '@site/static/img/icons/calendar.svg' +import CardIcon from '@site/static/img/icons/card.svg' +import ChatIcon from '@site/static/img/icons/chat.svg' +import CheckIcon from '@site/static/img/icons/check.svg' +import CheckCircleIcon from '@site/static/img/icons/check-circle.svg' +import ChevronIcon from '@site/static/img/icons/chevron.svg' +import IconChrome from '@site/static/img/icons/chrome.svg' +import ClockIcon from '@site/static/img/icons/clock.svg' +import CloseIcon from '@site/static/img/icons/close.svg' +import CommunityIcon from '@site/static/img/icons/community.svg' +import CompassIcon from '@site/static/img/icons/compass.svg' +import ControlsIcon from '@site/static/img/icons/controls.svg' +import CopyIcon from '@site/static/img/icons/copy.svg' +import CrossIcon from '@site/static/img/icons/cross.svg' +import DarkModeIcon from '@site/static/img/icons/dark-mode.svg' +import IconDiscord from '@site/static/img/icons/discord.svg' +import DocumentIcon from '@site/static/img/icons/document.svg' +import DownloadIcon from '@site/static/img/icons/download.svg' +import DropdownIcon from '@site/static/img/icons/dropdown.svg' +import IconEdge from '@site/static/img/icons/edge.svg' +import ExternalArrowIcon from '@site/static/img/icons/external-arrow.svg' +import IconFirefox from '@site/static/img/icons/firefox.svg' +import GasIcon from '@site/static/img/icons/gas.svg' +import IconGitHub from '@site/static/img/icons/github.svg' +import GlobeIcon from '@site/static/img/icons/globe.svg' +import HomeIcon from '@site/static/img/icons/home.svg' +import InfoIcon from '@site/static/img/icons/info.svg' +import IconInstagram from '@site/static/img/icons/instagram.svg' +import LightModeIcon from '@site/static/img/icons/light-mode.svg' +import IconLinkedIn from '@site/static/img/icons/linkedin.svg' +import LocationIcon from '@site/static/img/icons/location.svg' +import LockIcon from '@site/static/img/icons/lock.svg' +import LowCostIcon from '@site/static/img/icons/low-cost.svg' +import MaskIcon from '@site/static/img/icons/mask.svg' +import MessageIcon from '@site/static/img/icons/message.svg' +import MinusIcon from '@site/static/img/icons/minus.svg' +import IconOpera from '@site/static/img/icons/opera.svg' +import PlayIcon from '@site/static/img/icons/play.svg' +import PlusIcon from '@site/static/img/icons/plus.svg' +import IconReddit from '@site/static/img/icons/reddit.svg' +import RefreshIcon from '@site/static/img/icons/refresh.svg' +import SearchIcon from '@site/static/img/icons/search.svg' +import ShareIcon from '@site/static/img/icons/share.svg' +import ShieldIcon from '@site/static/img/icons/shield.svg' +import StarIcon from '@site/static/img/icons/star.svg' +import IconTelegram from '@site/static/img/icons/telegram.svg' +import IconTiktok from '@site/static/img/icons/tiktok.svg' +import TranscriptIcon from '@site/static/img/icons/transcript.svg' +import UserIcon from '@site/static/img/icons/user.svg' +import WalletIcon from '@site/static/img/icons/wallet.svg' +import IconWarpcast from '@site/static/img/icons/warpcast.svg' +import IconX from '@site/static/img/icons/x.svg' +import IconYouTube from '@site/static/img/icons/youtube.svg' + +export const buttonIconMap = { + ['accessible']: { component: AccessibleIcon }, + ['arrow-down']: { component: ArrowDownIcon, direction: 'down' }, + ['arrow-left']: { component: ArrowLeftIcon, direction: 'left' }, + ['arrow-right']: { component: ArrowRightIcon, direction: 'right' }, + ['bank']: { component: BankIcon }, + ['calendar']: { component: CalendarIcon }, + ['card']: { component: CardIcon }, + ['chat']: { component: ChatIcon }, + ['check']: { component: CheckIcon }, + ['check-circle']: { component: CheckCircleIcon }, + ['chevron']: { component: ChevronIcon, direction: 'right' }, + ['clock']: { component: ClockIcon }, + ['close']: { component: CloseIcon }, + ['community']: { component: CommunityIcon }, + ['compass']: { component: CompassIcon }, + ['controls']: { component: ControlsIcon }, + ['copy']: { component: CopyIcon }, + ['cross']: { component: CrossIcon }, + ['dark-mode']: { component: DarkModeIcon }, + ['document']: { component: DocumentIcon }, + ['download']: { component: DownloadIcon, direction: 'down' }, + ['dropdown']: { component: DropdownIcon, direction: 'down' }, + ['external-arrow']: { component: ExternalArrowIcon, direction: 'oblique' }, + ['gas']: { component: GasIcon }, + ['github']: { component: IconGitHub }, + ['globe']: { component: GlobeIcon }, + ['home']: { component: HomeIcon }, + ['info']: { component: InfoIcon }, + ['light-mode']: { component: LightModeIcon }, + ['location']: { component: LocationIcon, direction: 'down' }, + ['lock']: { component: LockIcon }, + ['low-cost']: { component: LowCostIcon }, + ['mask']: { component: MaskIcon }, + ['message']: { component: MessageIcon }, + ['minus']: { component: MinusIcon }, + ['play']: { component: PlayIcon, direction: 'right' }, + ['plus']: { component: PlusIcon }, + ['refresh']: { component: RefreshIcon }, + ['search']: { component: SearchIcon }, + ['share']: { component: ShareIcon }, + ['shield']: { component: ShieldIcon }, + ['star']: { component: StarIcon }, + ['transcript']: { component: TranscriptIcon }, + ['user']: { component: UserIcon }, + ['wallet']: { component: WalletIcon }, +} + +export const socialIconMap = { + ['x']: IconX, + ['twitter']: IconX, + ['github']: IconGitHub, + ['warpcast']: IconWarpcast, + ['youtube']: IconYouTube, + ['instagram']: IconInstagram, + ['discord']: IconDiscord, + ['reddit']: IconReddit, + ['telegram']: IconTelegram, + ['tiktok']: IconTiktok, + ['linkedin']: IconLinkedIn, +} + +export const browserIconMap = { + ['chrome']: IconChrome, + ['firefox']: IconFirefox, + ['brave']: IconBrave, + ['edge']: IconEdge, + ['opera']: IconOpera, +} diff --git a/src/utils/logo-map.js b/src/utils/logo-map.js new file mode 100644 index 00000000000..8ecc64e07fe --- /dev/null +++ b/src/utils/logo-map.js @@ -0,0 +1,121 @@ +import IconAppStore from '@site/static/img/icons/app-store.svg' +import IconAppStore2 from '@site/static/img/icons/app-store-2.svg' +import IconPlayStore from '@site/static/img/icons/play-store.svg' +import ZeroX from '@site/static/img/logos/third-party/0x.svg' +import OneInch from '@site/static/img/logos/third-party/1inch.svg' +import AchNetwork from '@site/static/img/logos/third-party/ach-network.svg' +import AchTransfer from '@site/static/img/logos/third-party/ach-transfer.svg' +import Agoric from '@site/static/img/logos/third-party/agoric.svg' +import AirSwap from '@site/static/img/logos/third-party/airswap.svg' +import Android from '@site/static/img/logos/third-party/android.svg' +import ApplePay from '@site/static/img/logos/third-party/apple-pay.svg' +import Arbitrum from '@site/static/img/logos/third-party/arbitrum.svg' +import Avalanche from '@site/static/img/logos/third-party/avalanche.svg' +import BankTransfer from '@site/static/img/logos/third-party/bank-transfer.svg' +import Banxa from '@site/static/img/logos/third-party/banxa.svg' +import Base from '@site/static/img/logos/third-party/base.svg' +import BnbChain from '@site/static/img/logos/third-party/bnb-chain.svg' +import CactusCustody from '@site/static/img/logos/third-party/cactus-custody.svg' +import Card from '@site/static/img/logos/third-party/card.svg' +import Cashapp from '@site/static/img/logos/third-party/cashapp.svg' +import CashappAlt from '@site/static/img/logos/third-party/cashapp-alt.svg' +import Coinbase from '@site/static/img/logos/third-party/coinbase.svg' +import Connect from '@site/static/img/logos/third-party/connect.svg' +import Curve from '@site/static/img/logos/third-party/curve.svg' +import Ethereum from '@site/static/img/logos/third-party/ethereum.svg' +import Fireblocks from '@site/static/img/logos/third-party/fireblocks.svg' +import GoogleChrome from '@site/static/img/logos/third-party/google-chrome.svg' +import GooglePay from '@site/static/img/logos/third-party/google-pay.svg' +import Ios from '@site/static/img/logos/third-party/ios.svg' +import Javascript from '@site/static/img/logos/third-party/javascript.svg' +import Liminal from '@site/static/img/logos/third-party/liminal.svg' +import Linea from '@site/static/img/logos/third-party/linea.svg' +import Mercuryo from '@site/static/img/logos/third-party/mercuryo.svg' +import MetaMaskMark from '@site/static/img/logos/third-party/metamask-mark.svg' +import Moonpay from '@site/static/img/logos/third-party/moonpay.svg' +import MoonpayMark from '@site/static/img/logos/third-party/moonpay-mark.svg' +import Nodejs from '@site/static/img/logos/third-party/nodejs.svg' +import Onramp from '@site/static/img/logos/third-party/onramp.svg' +import OpenOcean from '@site/static/img/logos/third-party/open-ocean.svg' +import Optimism from '@site/static/img/logos/third-party/optimism.svg' +import Paypal from '@site/static/img/logos/third-party/paypal.svg' +import Polygon from '@site/static/img/logos/third-party/polygon.svg' +import Ramp from '@site/static/img/logos/third-party/ramp.svg' +import React from '@site/static/img/logos/third-party/react.svg' +import Revolut from '@site/static/img/logos/third-party/revolut.svg' +import Safe from '@site/static/img/logos/third-party/safe.svg' +import Safeheron from '@site/static/img/logos/third-party/safeheron.svg' +import Sardine from '@site/static/img/logos/third-party/sardine.svg' +import Stripe from '@site/static/img/logos/third-party/stripe.svg' +import Transak from '@site/static/img/logos/third-party/transak.svg' +import TransakMark from '@site/static/img/logos/third-party/transak-mark.svg' +import Un from '@site/static/img/logos/third-party/un.svg' +import Uniswap from '@site/static/img/logos/third-party/uniswap.svg' +import Unity from '@site/static/img/logos/third-party/unity.svg' +import Wagmi from '@site/static/img/logos/third-party/wagmi.svg' +import WalletGuard from '@site/static/img/logos/third-party/wallet-guard.svg' +import Web3Modal from '@site/static/img/logos/third-party/web3-modal.svg' +import WireTransfer from '@site/static/img/logos/third-party/wire-transfer.svg' +import ZkSync from '@site/static/img/logos/third-party/zksync.svg' + +export const logoMap = { + ['0x']: ZeroX, + ['1inch']: OneInch, + ['ach-network']: AchNetwork, + ['ach-transfer']: AchTransfer, + ['agoric']: Agoric, + ['airswap']: AirSwap, + ['android']: Android, + ['apple-pay']: ApplePay, + ['arbitrum']: Arbitrum, + ['avalanche']: Avalanche, + ['bank-transfer']: BankTransfer, + ['banxa']: Banxa, + ['base']: Base, + ['bnb-chain']: BnbChain, + ['cactus-custody']: CactusCustody, + ['card']: Card, + ['cashapp-alt']: CashappAlt, + ['cashapp']: Cashapp, + ['coinbase']: Coinbase, + ['connect']: Connect, + ['curve']: Curve, + ['ethereum']: Ethereum, + ['fireblocks']: Fireblocks, + ['google-pay']: GooglePay, + ['ios']: Ios, + ['javascript']: Javascript, + ['liminal']: Liminal, + ['linea']: Linea, + ['mercuryo']: Mercuryo, + ['metamask-mark']: MetaMaskMark, + ['moonpay-mark']: MoonpayMark, + ['moonpay']: Moonpay, + ['nodejs']: Nodejs, + ['onramp']: Onramp, + ['open-ocean']: OpenOcean, + ['optimism']: Optimism, + ['paypal']: Paypal, + ['polygon']: Polygon, + ['ramp']: Ramp, + ['react']: React, + ['revolut']: Revolut, + ['safe']: Safe, + ['safeheron']: Safeheron, + ['sardine']: Sardine, + ['stripe']: Stripe, + ['transak-mark']: TransakMark, + ['transak']: Transak, + ['un']: Un, + ['uniswap']: Uniswap, + ['unity']: Unity, + ['wagmi']: Wagmi, + ['web3-modal']: Web3Modal, + ['wallet-guard']: WalletGuard, + ['wire-transfer']: WireTransfer, + ['zksync']: ZkSync, + ['google-chrome']: GoogleChrome, + ['app-store']: IconAppStore, + ['app-store-2']: IconAppStore2, + ['play-store']: IconPlayStore, +} diff --git a/src/utils/qs-file-links.json b/src/utils/qs-file-links.json new file mode 100644 index 00000000000..bfbbe7545b0 --- /dev/null +++ b/src/utils/qs-file-links.json @@ -0,0 +1,78 @@ +{ + "EW_REACT_APP_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/App.tsx", + "EW_REACT_MAIN_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/main.tsx", + "EW_REACT_WEB3AUTHCONTEXT_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/web3authContext.tsx", + "EW_REACT_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/package.json", + "EW_REACT_INDEX_HTML": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/index.html", + "EW_REACT_GET_BALANCE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/getBalance.tsx", + "EW_REACT_SEND_TRANSACTION_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/sendTransaction.tsx", + "EW_REACT_SWITCH_NETWORK_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/switchNetwork.tsx", + "EW_NEXTJS_LAYOUT_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/app/layout.tsx", + "EW_NEXTJS_PAGE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/app/page.tsx", + "EW_NEXTJS_COMPONENTS_APP_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/App.tsx", + "EW_NEXTJS_COMPONENTS_PROVIDER_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/provider.tsx", + "EW_NEXTJS_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/package.json", + "EW_NEXTJS_GET_BALANCE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/getBalance.tsx", + "EW_NEXTJS_SEND_TRANSACTION_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/sendTransaction.tsx", + "EW_NEXTJS_SWITCH_NETWORK_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/switchNetwork.tsx", + "MMCONNECT_REACT_APP_TSX": "MetaMask/metamask-connect-examples/refs/heads/main/quickstarts/evm/react/src/App.tsx", + "MMCONNECT_REACT_UTILS_TS": "MetaMask/metamask-connect-examples/refs/heads/main/quickstarts/evm/react/src/utils.ts", + "MMCONNECT_REACT_PACKAGE_JSON": "MetaMask/metamask-connect-examples/refs/heads/main/quickstarts/evm/react/package.json", + "DTK_REACT_APP_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/App.tsx", + "DTK_REACT_MAIN_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/main.tsx", + "DTK_REACT_WEB3AUTHCONTEXT_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/web3authContext.tsx", + "DTK_REACT_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/package.json", + "DTK_REACT_INDEX_HTML": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/index.html", + "DTK_REACT_GET_BALANCE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/getBalance.tsx", + "DTK_REACT_SEND_TRANSACTION_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/sendTransaction.tsx", + "DTK_REACT_SWITCH_NETWORK_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/react-quick-start/src/components/switchNetwork.tsx", + "DTK_NEXTJS_LAYOUT_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/app/layout.tsx", + "DTK_NEXTJS_PAGE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/app/page.tsx", + "DTK_NEXTJS_COMPONENTS_APP_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/App.tsx", + "DTK_NEXTJS_COMPONENTS_PROVIDER_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/provider.tsx", + "DTK_NEXTJS_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/package.json", + "DTK_NEXTJS_GET_BALANCE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/getBalance.tsx", + "DTK_NEXTJS_SEND_TRANSACTION_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/sendTransaction.tsx", + "DTK_NEXTJS_SWITCH_NETWORK_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/nextjs-quick-start/components/wagmi/switchNetwork.tsx", + "EW_ANGULAR_APP_COMPONENT_TS": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/src/app/app.component.ts", + "EW_ANGULAR_APP_COMPONENT_HTML": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/src/app/app.component.html", + "EW_ANGULAR_POLYFILL_TS": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/src/polyfills.ts", + "EW_ANGULAR_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/package.json", + "EW_ANGULAR_TSCONFIG_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/tsconfig.json", + "EW_ANGULAR_ETHERSRPC_TS": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/src/app/ethersRPC.ts", + "EW_ANGULAR_VIEMRPC_TS": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/angular-quick-start/src/app/viemRPC.ts", + "EW_VUE_INDEX_HTML": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/index.html", + "EW_VUE_PACKAGE_JSON": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/package.json", + "EW_VUE_HOME_VUE": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/Home.vue", + "EW_VUE_APP_VUE": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/App.vue", + "EW_VUE_WEB3AUTHCONTEXT_TS": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/web3authContext.ts", + "EW_VUE_GET_BALANCE_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/components/Balance.vue", + "EW_VUE_SEND_TRANSACTION_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/components/SendTransaction.vue", + "EW_VUE_SWITCH_NETWORK_TSX": "Web3Auth/web3auth-examples/refs/heads/main/quick-starts/vue-quick-start/src/components/SwitchNetwork.vue", + "EW_PNP_UNITY_WEB3AUTHSCRIPT_CS": "Web3Auth/web3auth-unity-examples/refs/heads/main/unity-quick-start/Assets/Web3AuthScript.cs", + "EW_PNP_UNITY_ANDROID_MANIFEST": "Web3Auth/web3auth-unity-examples/refs/heads/main/unity-quick-start/Assets/Plugins/Android/AndroidManifest.xml", + "EW_PNP_UNITY_MANIFEST_JSON": "Web3Auth/web3auth-unity-examples/refs/heads/main/unity-quick-start/Packages/manifest.json", + "EW_PNP_REACT_NATIVE_APP_TSX": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/App.tsx", + "EW_PNP_REACT_NATIVE_PACKAGE_JSON": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/package.json", + "EW_PNP_REACT_NATIVE_METRO_CONFIG_JS": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/metro.config.js", + "EW_PNP_REACT_NATIVE_GLOBALS_JS": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/globals.js", + "EW_PNP_REACT_NATIVE_INDEX_JS": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/index.js", + "EW_PNP_REACT_NATIVE_PODFILE": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/ios/Podfile", + "EW_PNP_REACT_NATIVE_BUILD_GRADLE": "Web3Auth/web3auth-react-native-examples/main/rn-bare-quick-start/android/build.gradle", + "EW_PNP_IOS_CONTENTVIEW_SWIFT": "Web3Auth/web3auth-ios-examples/main/ios-quick-start/ios-example/ContentView.swift", + "EW_PNP_IOS_LOGINVIEW_SWIFT": "Web3Auth/web3auth-ios-examples/main/ios-quick-start/ios-example/LoginView.swift", + "EW_PNP_IOS_USERDETAILVIEW_SWIFT": "Web3Auth/web3auth-ios-examples/main/ios-quick-start/ios-example/UserDetailView.swift", + "EW_PNP_IOS_VIEWMODEL_SWIFT": "Web3Auth/web3auth-ios-examples/main/ios-quick-start/ios-example/ViewModel.swift", + "EW_PNP_IOS_WEB3RPC_SWIFT": "Web3Auth/web3auth-ios-examples/main/ios-quick-start/ios-example/web3RPC.swift", + "EW_PNP_FLUTTER_MAIN_DART": "Web3Auth/web3auth-flutter-examples/main/flutter-quick-start/lib/main.dart", + "EW_PNP_FLUTTER_BUILD_GRADLE": "Web3Auth/web3auth-flutter-examples/main/flutter-quick-start/android/app/build.gradle", + "EW_PNP_FLUTTER_PODFILE": "Web3Auth/web3auth-flutter-examples/main/flutter-quick-start/ios/Podfile", + "EW_PNP_FLUTTER_PUBSPEC_YAML": "Web3Auth/web3auth-flutter-examples/main/flutter-quick-start/pubspec.yaml", + "EW_PNP_ANDROID_MAINACTIVITY_KT": "Web3Auth/web3auth-android-examples/main/android-quick-start/app/src/main/java/com/sbz/web3authdemoapp/MainActivity.kt", + "EW_PNP_ANDROID_ANDROIDMANIFEST_XML": "Web3Auth/web3auth-android-examples/main/android-quick-start/app/src/main/AndroidManifest.xml", + "EW_PNP_ANDROID_BUILD_GRADLE": "Web3Auth/web3auth-android-examples/main/android-quick-start/app/build.gradle", + "EW_PNP_ANDROID_SETTINGS_GRADLE": "Web3Auth/web3auth-android-examples/main/android-quick-start/settings.gradle", + "EW_PNP_ANDROID_STRINGS_XML": "Web3Auth/web3auth-android-examples/main/android-quick-start/app/src/main/res/values/strings.xml", + "EW_PNP_ANDROID_ACTIVITY_MAIN_XML": "Web3Auth/web3auth-android-examples/main/android-quick-start/app/src/main/res/layout/activity_main.xml", + "EW_AI_SKILL_MD": "Web3Auth/skill/refs/heads/main/SKILL.md" +} diff --git a/src/utils/qs-map.tsx b/src/utils/qs-map.tsx new file mode 100644 index 00000000000..4558b6b5825 --- /dev/null +++ b/src/utils/qs-map.tsx @@ -0,0 +1,53 @@ +export const EWQuickStartHostedLinks = { + // PNP Modal SDK + ANGULAR: 'https://web3auth-angular-quick-start.vercel.app/', + HTML: 'https://web3auth-vanillajs-quick-start.vercel.app/', + NEXTJS: 'https://web3auth-nextjs-quick-start.vercel.app/', + REACT: 'https://web3auth-react-quick-start-tau.vercel.app/', + REACT_SOLANA: 'https://web3auth-react-solana-quick-start.vercel.app/', + VUE: 'https://web3auth-vue-quick-start.vercel.app/', + VUE_SOLANA: 'https://web3auth-vue-solana-quick-start.vercel.app/', + ANDROID: 'https://w3a.link/pnp-android-quick-start', + IOS: 'https://w3a.link/pnp-ios-quick-start', // https://w3a.link/pnp-ios-quick-start", + REACT_NATIVE: 'https://w3a.link/pnp-react-native-android-quick-start', + FLUTTER: 'https://w3a.link/pnp-flutter-android-quick-start', + UNITY: 'https://w3a.link/pnp-unity-android-quick-start', +} + +export const DTKQuickStartHostedLinks = { + REACT: 'https://web3auth-react-quick-start-tau.vercel.app/', + NEXTJS: 'https://web3auth-nextjs-quick-start.vercel.app/', +} + +export const MMSDKQuickStartHostedLinks = { + REACT: 'https://demo-mmc-evm-react.vercel.app/', +} + +export const EWQuickStartSourceCode = { + REACT: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-quick-start', + REACT_SOLANA: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-solana-quick-start', + ANGULAR: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/angular-quick-start', + VUE: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-quick-start', + VUE_SOLANA: + 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vue-solana-quick-start', + NEXTJS: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/nextjs-quick-start', + HTML: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/vanillajs-quick-start', + ANDROID: 'https://github.com/Web3Auth/web3auth-android-examples/tree/main/android-quick-start', + IOS: 'https://github.com/Web3Auth/web3auth-ios-examples/tree/main/ios-quick-start', + REACT_NATIVE: + 'https://github.com/Web3Auth/web3auth-react-native-examples/tree/main/rn-bare-quick-start', + FLUTTER: 'https://github.com/Web3Auth/web3auth-flutter-examples/tree/main/flutter-quick-start', + UNITY: 'https://github.com/Web3Auth/web3auth-unity-examples/tree/main/unity-quick-start', + UNREAL: 'https://github.com/Web3Auth/web3auth-unreal-example/tree/master', +} + +export const DTKQuickStartSourceCode = { + REACT: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/react-quick-start', + NEXTJS: 'https://github.com/Web3Auth/web3auth-examples/tree/main/quick-starts/nextjs-quick-start', +} + +export const MMSDKQuickStartSourceCode = { + REACT: 'https://github.com/MetaMask/metamask-connect-examples/tree/main/quickstarts/evm/react', +} diff --git a/src/utils/tutorials-map.tsx b/src/utils/tutorials-map.tsx new file mode 100644 index 00000000000..2be1a120a2c --- /dev/null +++ b/src/utils/tutorials-map.tsx @@ -0,0 +1,104 @@ +export const tags = { + web3Auth: 'web3auth', + embeddedWallet: 'embedded wallets', + metamaskSdk: 'MetaMask Connect', + smartAccountsKit: 'smart accounts kit', + infura: 'infura', + snaps: 'snaps', + web: 'web', + android: 'android', + ios: 'ios', + wagmi: 'wagmi', + reactNative: 'react native', + flutter: 'flutter', + node: 'node', + unity: 'unity', + unreal: 'unreal engine', + evm: 'evm', + solana: 'solana', + multiChain: 'multi chain', + xrpl: 'xrpl', + algorand: 'algorand', + aptos: 'aptos', + bitcoin: 'bitcoin', + cosmos: 'cosmos', + immutablex: 'immutablex', + near: 'near', + polkadot: 'polkadot', + polymesh: 'polymesh', + starkex: 'starkex', + starknet: 'starknet', + sui: 'sui', + tezos: 'tezos', + tron: 'tron', + ton: 'ton', + accountAbstraction: 'account abstraction', + onRamp: 'on ramp', +} + +export interface TutorialsInterface { + content: Record< + string, + { + title: string + image: string + description: string + type: string + tags: string[] + date: string + author: string + communityPortalTopicId: string + pinned: string + } + > +} + +export const platformMap = [ + { + label: 'Web', + value: tags.web, + }, + { + label: 'Android', + value: tags.android, + }, + { + label: 'iOS/ Swift', + value: tags.ios, + }, + { + label: 'React Native', + value: tags.reactNative, + }, + { + label: 'Flutter', + value: tags.flutter, + }, + { + label: 'Unity', + value: tags.unity, + }, + { + label: 'Unreal Engine', + value: tags.unreal, + }, + { + label: 'Node.js', + value: tags.node, + }, +] + +export const productMap = [ + { + label: 'MetaMask Connect', + value: tags.metamaskSdk, + }, + { + label: 'Embedded Wallets', + value: tags.embeddedWallet, + }, + { + label: 'Smart Accounts Kit', + value: tags.smartAccountsKit, + }, +] diff --git a/src/utils/w3a-lottie.json b/src/utils/w3a-lottie.json new file mode 100644 index 00000000000..f4f2731bc95 --- /dev/null +++ b/src/utils/w3a-lottie.json @@ -0,0 +1,17141 @@ +{ + "v": "5.9.6", + "fr": 30, + "ip": 0, + "op": 515, + "w": 800, + "h": 700, + "nm": "Hero-main", + "ddd": 0, + "assets": [ + { + "id": "image_0", + "w": 172, + "h": 60, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA8CAMAAADMiaGpAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAB1UExURUdwTJNDz4g9zf///5lF0rmI5P///////////6dj2P///////6BI1aRK1pRD0Yk+zoo+zaBI1Z9I1P///////////4Q7zKBI1P///////4Q7zP///5FBz////5RC0P///6FJ1ZJC0JhF0qtO2H04yYo+zoU8zFmAC+wAAAAfdFJOUwBAnt8gECC/oBtbQL5kgNxj3JZwkO/v74DPu7AwMFBA+hIEAAAF60lEQVRo3tWai7aiOBBFQQlh8X6qKBpA8f8/carygKCo0NOOTFavexHxsq2cOlUJbRiTwwqj3W13jI31DxLecNxv9+iydtZ4x1GBFcbGWjOqeeRB3R2PEcLed+F6FbDhCtiFBF5UiNt1UbxmBdyOau7jqMOxRi1wBdxukTmcqnactuORXqMCdHwR2a5ZmRZCoYCNFkLr2CnWpmmi1WjBjIRYTd1t75w0raq04WMd0rWEWHfxKNc4qsg1a4Ow7Qq0QCYUYB55WIcKFkdI2yY/Dq41oYANN9jdyAPCfYsj/D3rgwI46/EhitaG0wY/hOWGpYfQlHXLnEjDBGD3v1OChWGt9FzDhqB71RGkQJv+NLCxnmucVc81UpnDKwKx3T9XM5vS01kcZpRmSwDgozSfeS0oNhor4N7puVb5aFp+H/ugresJgVDGSnFUMkaXwLqMsWLmtegDfZRFT6jlGpHloOlNoKrreiLFMrilxwMFB+4S2Bw+wOzZsJsRq66AYCdIm8EErGlYUjCWK2p7CSxl87/eABsjqq4A88hRozTkJkDeweI9C6mC06KkQVbmLIVFvYZ6YRACSIk0geAtrCd0sFgFHofdLoStUAJ6YZBq5a5KoHr5b2ENoYNs9o01scMgy2AvAGtqfWyjwxrJR9gD10EpppRkFOALh+fcmZ4OIpeoA/5GwOaIt2Uln4ETyKboZyOn1PMoK6T7gQ26Xl4UNCdj2FiDDTnqLg4huQSs/xEWBeDhD/Rbh8mRy5m2pa4dceG2zyo4cqlMTqF8NqjY6V+WnBYWsj1sJ2HjBrttEGsINqBg6w+weKM8E3brsn54k7DqLeOM3y7vrZkOH3T178zYQUT2rmA7BRsBq4/Hi2BRfXJC0Tsd14MpZtk0LD14tioJ+KMYInvKXEeGFiNLDy7+OfoQWQVrggREoQjbHrb+CEvEjNninlt5xpmEPWslgWpnqAxhKf6AI/WhfPHeR7ZTsKDUpnoDew3e1CJHCvE0lN4J2N7dREIWfAb6K8T8i19UrzS3+xMsGqyxPLLCMj1p9Ad5z/ItLBFCUYz9wWEM68q/cH8HCx7QGo+w11ewGNDCeIDdvoWVpSRX7qxgJZ0Oe/4QWQtYE2O2DBB2uwwWI+g4Dh1f8QQrv9O7yAb7oX/RI/sXYR+s6o9h+RJGBVaDvf5N2GKAzRfCNgOs5fPFYb/y/g7seWAVvfufwYpld9r3F8lXYF116Mhe5hNs18lGBipsLGFb3m77Q2+LhpXOh90+wZ4nYR31jlpozIUlau/N4mJt9zoSqOB6WQ574idsZb9PsKWwU0GTffbZTsHy2Y/CON03YwXgohECK1NtLqwj6ahGd3qAJUqq/OgkmyFVDAXsSa9gA6yl2u2xAmDRCGFVgZ0HK0u7LRCI7EPII6zH+jWQrCeqN5DNAMA6RJP0AGtUkURNdJpgX+NQCx5zDiwG5nBWXReeZ9BKFewBNmOqJ+A4tvDdrXNWbRaeLZzzQS18oq6LtM0sgN2P9pJQAfU16SMdAKz5CdYbHMlWHU7fUw+wJyVmwe2+62e5OjZ9LeBTbl4qY6wAGDp+ArDk9apaLsBOo3vYWx2W9LDlsPjyxHvDSmE7XilsufeZYK+vNuClAnzt7RRYX+51ZbRUmzEZ56My6+0Mm0UvExtFsNBy1fVl31/yz6Ib2Gh4ByJhKb4scrkVcQR/ndzRNhOOmug7CT6wXmfuItrjvY5ZOx/CuvqZE9ZFhpkUJvAUXMuXCtBFgajXb+4m0/F+h/O0byZMYPx0g4RCAbrbBvuvs36GFU83Wv3phlSA/6SAa2Iav4XlTze0HkspIHhSwP7bDxrnwIpFNxZZs7qkzwoIhQLSr2/Qz4NVTzfatm5r+OdXui38FwpQjqfDuuWrjelLwklbtKtAtwWOev3lQ5rJIoC4YwUQpYCVPRXHKKY1j2z4oADfNNY4LFm2Ak0B+8BY6wgkbppKsYbEWO9ALWC3XQsFrPp/Hykt/Gd29e+1wCXgB8T4fwzLWh3pPwaHCY6L2yqyAAAAAElFTkSuQmCC", + "e": 1 + }, + { + "id": "image_1", + "w": 66, + "h": 66, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCCAMAAADUivDaAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAzUExURUdwTAICAgEBAaenpwQEBAMDAwICAhkZGQoKCgcHB/Ly8k9PT8nJyeTk5LCwsJKSkvr6+uwWQioAAAAQdFJOUwAzQAETHCYDBgzsXK3Rk3xWRxyEAAACnElEQVRYw8WY63KEIAyFlewuiqi8/9NWbrkIiG5n2rQz7Y/m25PDLekw/EkADPBlIo9nkJylMfyvGXWLMLD06fhioFsQnx4B0zkipkPJ8qeYP/NAir5kRIJIfx3BIZP/i6a3XmQkUDYFYi4cAbQg579ZZEr2pI2IAMr/fMJ3pkSIbgiRhJAdYkw/CZKLaRiJAE8YKQiCxZwZpCEQPhmgfIwqUS4ZHkEaIkCJyJDECLtMrmcqQwCWza7GGbPafckQzoCyjEwIgGVbHQsbIZlRVOLNzD4kwm7cKTxEMviqMBGecEhYXRlmKxjCCiwjEIyrhj0xSAWKiEY0CcSoI6iMNiEzDhl+VZihQCJ8GdZdxH4wsgxmBggR2xXBmQVl8EqkCHOJCKWgDIm4J0LKwEp4HUqtHYTbEuIVKhGIWMfSI7gVK2EIYFZsXYSv5IQIByTtzBt1OMfNwELQzVuIrYMwfYTlS1JBuN8jnqqArxClF/DUzr1mJ9ta9qtFHfgp2/tbq7Y7+RlZzC038aiWJ1X1K9nFhXFC3KpkrV5bwF6A7posWAe/tdCMd+/2xUsrbSxSQcvqZWzdO6t6/XIZF46ahTmBJ4QqmUNvc8lYFN56fkXZiwjMjQuGEQTZHpx7g9rDLp72uXiWsckhhrInyLrLBsM3NY0+CRmK9SjGZkCrRSkYCaL23Vq7hTZJNFvVdk1rxoitzljr1hJhKpvG9LwzRqKMqWVEwKvZ/0JiTKL5HT/UuTLC1OjCAf2QHXTZP2vdROisI84R73dzFGiMaQAF5MXS2RgQrITWXKcJMpcTTVTQmkZoukyz2VwEzWa9CZONh5jMhju5rRuzNY6p5wlT3x52i2EZB+YB4OnMHSfbNN/eHrcr/zKAR5/+X/ED5vZsdcVjAFYAAAAASUVORK5CYII=", + "e": 1 + }, + { + "id": "image_2", + "w": 296, + "h": 213, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASgAAADVCAMAAADTop1YAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADnUExURUdwTA0hVQoeThAjVEZRfRwoWgwhUUZIgEFKekRIfQ8kWBEfVhUlViEaWxQbUxgaVRgnWg8dUhUeWBscWRMmWR0ZVyUdXykgYywkZxgtYC8mbDQqcDkudiIqZT80fiAkYCo2YtHU3lBbgP+JTf9qTfvpTT5Kd/lN6//KTf+qTWz/UalQ57T3TY/7Tf9NqNnyTcJP6d1O7E348/9Nf03Z+HZd9PpQVf9Nz02/+pJU6l//db3Bz02Y/E10/1H/1lhl/WdwkYmRqlv/kk2r+02G/lj/p1T/vf9obaWrvk1tUn5DVCdjiWcvhV5pCsgAAAAKdFJOUwD///+r//9/P9Pxgf6aAAAgAElEQVR42uSby3LjOBJFuwATttlYoDroBRcKUVzwJ7SRdvr/LxrkA8hMkNSjyl0zEQPZkiXTqtCpmxcXCfKvv1bj4/3tc/7/HZ9vb+8ffz0c72/52GVapv+1MfIdfm3eRvzOo8s3vMMHesRvHhPd0Rvxl4xlWYDWA0wAqfvlcVT39lX9bY+mkeieR6SBj758Re/rUx4ebvwF3wF+F+gpj+DNwL/Ch74f+iGPfuyHcexHM6bM6u3jLqbuz49Et8yny7eYHxNA6uLO8OXOF1axoAlMJtSfQ31ixuB9H4c6+jHfpZbVnqre/iuYEBQhQkop8rMY91ixvISP0VCGUumEQM/akf+yj35gUQ0jfI1jwntBNX9uierjc57+MKFIdzHhfUdqilx4AikpIXHx+VJ5nmoRP3wQRJ4Q8U+BXxdiPWhqGJSmiNdoVbXM72tORU5x72N9fT+kep+o6FhMVHbdhpKUYUX2HF1WkSsucP0FhiS6CurIPkvKK0j5brSaGtflVzjFlz/rL2OiP09ACVAhoq7y6XZKz4stsS/DLUTwceQTpOhCYFqeRWWqcEBRZVi9wGo45TF/butJM/j6dhm1gBlSRBWliHZeDarFpPhUPRVXioEBFQEVeypf6ifB1COqXiSFmCyqyWrqc1mVWNwsuq/v9afUdVJtBky3N9VJIogehUT3IdbKKvUWpPYqtnbu6wdvPGpcaWrSPvU2f59KnnemCJSKhgqrLqr6U2Kqrl3KDfBguUXiUEEEMafCyYnEavUNQInKDyH14zCsMaFPfUjh7Qkm/gokTUO5UTSHYNUlnOrYvbv95KQnu2JKpeRYURKgNCTzg+Y00De6OeVOSlPjKnsqm/r4XP54KKAY3pXYxLXWPU5OHJ6KfYM5xeLURTXRNcUnT0pOCFh3UHgmS2E+WImqFN/7fFCppmt8PH5/UohUeCkymxTb6c4mgvUc5z27k0z5dbbTMrKDcXklq95rk6KIsNLUMrOTT/er7etJPvFutUYqOElOpKfKqNua50ROkUOTCuCR7CmKTGTSU5WHDlXnQO3oPUapYaiaAqNK43rpR5L6mC2U+Ku58WlrIxFJbNqOA3rdy17uWU+cxJFULEkycNTcEZOoigWF6RxJ+aEXTW3YOUvqbfkjE171dXxQkanbZ6SXvnpNRx+3SilIwAQWaFEyXANMqjUrKvaG0lY+wIgAEx8v8b7uL1u+XgAX9zhGaRcU467m1G02CaqRe0kJ4k1l8WvMWmNxW6Liqa/nJOX7aui1ALdq72P+LkL7MosFX+q45lKJBHeqjhOBb90pqPVdyVD44V1hAZpyRlSGUqm+vidMXlMaNjxqXHJCeF++aU57pgRTJEWVouOV8F7ZebUExpDpuU1Q2k2l4WQF42rNubb26iJH+blEBGxLbSQpNKlNi4rfnpvImXDBkmgJ/KAzV9cr0Xabioi8aqM0TqWU5ISXURTfo6T6gUnVbN6vWGWT+nyhC/X1m/XH7oQ6YhOXBlS0YYBzuKzsgkQC5eghyEpuS0fIiu8bVsql+ro2HvotRQGo2q776v6V2S/KMgaSU1cbvarZ21lKNWBG08VU4bLIIshk5yQwMS7n1qUntk66BJuSXgvkKP5eh/MHfc2v7zEo7M1lRrWfst1IkZLzaqZrGklB+k26R+C0niodp7QlpNQ7NqlzYEr9q6B+U1MSximKR942SNvLOio4XqnE2t8uvcugoqXhZWOTc6Xo+CfnGkPnBU/vudGpKQ0bFjUuDah/o09HjSesuRRNF5M0ldp1XVnVmdZcSQVqtRKEkxfRKEEhKFV9rl3z+R9oVICKd6+QUZs4D2tQltfX98gspY4XdqnsQ3XrWa+oKMp+QZTcpDNTned82IrgrCPHPuWCU+IyoZNg9dhGYFHBJl+/1RF+vxvMf78Uad8AeipkTnu98Nrj9d63eop1oy6UNsH2mk5NeCwmJlR9fbWY6cmlBornI7ak1knqsKeo70GkNzeRjXTFt/cNOGXarbogfQKvNgrqisX5lW2zfogQ+pOSlBNHD2hTyAn0VGe+tHbz+V8CpbbJY+q4O5fSnU3NumCJZjtTpXAVqpUjZVCuwRQcl5wTXbkaqCQfmH5L2V/nzNk/MPPdMc2vA00FEZ1PwE4+Te12OVn4tCxR6q6uenXdya4KfTvl4EZMVUtSeM7ZiC59Kao8L7sxKbWFd7ijqDjf1Jjm0+nyYuVFIsURk3LCcj2fTqfbdVoL6no6t72UaAKPKroCyG+s5lx1cE2rPGnsvKAye1Zjs1/8QFGXkxovgqrdlBIw2Ziu9Q0v7T6UJ1C1+srGgVrTeZXF8cGF7aoLTiCJqNqFDLzPj7LeM7tWyUx6B/jOoPZO85nmZZ4zrcucf+heAMUb5OjgHWUCtvDM6XyZlwV4zW3tZVDVn4p320xeP5/TycC1sancFK6irrC35Bv6ui4e173gwzg98qgMin69vKKoVE9QSZFTAXzlN7tNWIb53c5jtGc6AajmzCa9/G36ck735FxQoUDpyaiq8fOiJwxSvd0xbtPmYzOPFRQpalLymybdnynP6JFWvykfntT5KGeiQ/IpksrHUy4gUHnk/75OK2nqhJANT0hLZv3qTS7o6gt6+jOlh8mco7k6U2OD1eEJRS1VUfMNjJjBwc+nKzyZz7fucoaq6iZ8vGJrLsHP+cXaKJiVM03zJc9xccRjbgt7FGJBu79OQOqW3zIfMflgTySovuSUfTtVbiIlrShXzYqY/wilca765rANo/f2DtWj7oH6RyvqRjZ8ntjpz2d6cqm/uvDjFSoPjAgxjBSeQEWTnPIUANe5WHsBFZby0pw/w/l0hXecbIMAlGS6A7VBt0PJ1p9udUo80KQMJqWowzMeNeP/fDddqQTxSdbS6UbQsrTmMx+SP9uS0gVeTFC7FzX/2xie/+IyRmCzMKiM7jx3Pr/XeQoZVP4HrpcuNKXnKxiuvGaGs7Oe/E4XX7XAXqWDYVyZ1IFo3Zn1jEdB3ZzxJWRz4yf51RlAXRlqFlhKM0gqf+Ir2vgVjAnN/KZBZU5w4MWTsG4eQYUrSin6XOlXUNTpEtRmuW0QmDAQ9oVkIOrISRaFMwibVMK6s/nggLenZ70aD67AKD+Z8AxrYHQBWh3KDGsuAaP8SWc8GRlYJqsor+Y5/s1pJEXdABmMTDWEM1ajiU6rdkqVCrv2fVSmh1DiZl7jlXMU02Bz+aGQemLWW4qiBNSkoqgBdcFTVACUjquXWHHoJmaW2I3CZX7zhUChkPJw+eAug7rZMM4VV1nVCe6xnlw77XmxqL6PPWMas6j0Oa8Hqr3DrykKLOrK41JnRgAFERxAYWYqhywECnCIPxVQIHwBdSZQwStQW92UYBYp4RlIW80WJhWrRyU6hzopKydUr3iUAXUxx8wCKpGiiIrZswMrKk0C+BsqPY81WEoP3QoUxKV3K9sAWw06RSg0j3dwmS6LaR0MIKVEsNJ4FIN6RVGL8ahq5tc83RlQ0EoBRYGZUxy/1vAkMyDkggloXTA6VTMHIS3wKcDvQqsotf43afupoUu2bMMUQdWzqBM7VNIzXgG1vJDMC6iZgifM4uRjoKQJbBvcHBTVMZWLTpkZz3UZKWZmRB1kAe+XG051Eg+Ch8QwiaLWvd5gnDs8icqUnt7YiXU5nIBV0rX3Ox61CpygqESK6sijIsSpMxxyq+Xna8AEz84lBzzgEBQWJfP5VF4KYe1R4k7VpfZS00MvLzEKL4uJg4oHWHdHUdNLirKl1+GahWRFM2NKpfRIURnOlZYwo+4SzIQqL1pw9TthlAdZ+bqEudEB0CQQUE5n8Borw7NikuUfjp8ql+O1HjUdJKq+NkUdHoHaau2WsZSeJ54DzedjknoSX9KyLLnQmtYvXOXVSXuuW5apuRAqHzGtuuAWUghNDndPznvlrX7Wf432WSuoMZGPJ5LUQQXOX77sDHYx6zmrpptZJrtu+3wne1mYV1dD7bUJTBNTFna63/S46myDUxtUFD2RQQ1lztOKeqYXfrzfxUx0Cp1cfLB/XpiXvfJyUpjuYZqTeze3o6TqKqvwfPWFWnvqv4odCiANY9XU8WmP4usQj+aV46oWE+8h8Bk9ZQ/B7iCUky/86iQeVXY7ePQOgguqhamYPVl6BZNWFLi5EtSQpGNe5PTQo453RJXsZgtttNTLEu0FZOZqTUsrWH/aY+VET+GFRNA0DuD2k1HJPkbk2ktcdzTnHUvfgEjtgTq+cN0mIeITngjTxll09prWDT15s8W5O2zP8oUIJVPeT3RzuOXx99+ZU6TlMJw6fRyOJCkqPBhw/4yZcwkeWj3FIqVYzitIdeO8PGyg2iAVvN6RWnk5pyfZKZf0+IKoeBoATv7nT32NcQ3lWHygqSOZVIGlS+/4ip5SrbwkVwOnchZGjCs9/Yeza+1tG1eisAXpgy3LlK3EVnpVBUiKNE1v2jSp2xR9AE1b4Pr2//+e5TxIDh+SnR3KdpJdLLqnZ86cGVFMlpXhPuhIn5wRTGZdUTzLhocw1dO6EMv83czLOSCFlFIu9zj1GKSIUf1z0o/ZlDNEytQ9t0ssepQlmXD2dp1jVLIHnkYu6jlRI6cILQRKU2pOQAFSq7LRf27CqtcaZcveoJj3IUJd/JS+crdZcoMVPTatUmyynMqycqDguSnmAJvE9oFUf1ccAqk29/QApqywiTefA06rkhlFNqr3KUVCJYCS8JwPcKrP/YzzohRppyJnkFJw+ajvgIRPzVz8uZ1daKBqHYhTTTo+JyGn3FvR37OmU6u40eudhzq+henCwxwMoaQvQAlXaUqZbfWxNLntKcMeSu6bez5KlWEVBSo51zvLqGbFedf0ivLOS7zzw0D1gd8UzskdeyHoNJB2ccqJniXL5CbDocalCB350SBplGCBQmlOEZ+g7BFKiJNOPavlrE+YeybxJFCdQyI4GqSPt/M4pErpCAaeQkh4giLL5CPRgXua+gAV07EbdkNNX40wWahqVPJsSoSqAaVsTslXrhAjzaoeGBWkXidTbwiWjtUcUWxNrSNO5ZJNxmeOPUiWLHlyn2E25Avc/sI0XOFuA5ZvwypMuSm/QKMqzSdQKVPzVLNCRvVyHNV3naBUMvW6RFvnNXeekpuzVNRwvUvbcfcI8KgVt21euOciQSiJUW1IZQjFDkrjpAlVo4XimqdL3soqlIYIL5InzjwJVJeobvqzjT050cmdVVCOKlSZHehaBoByXd2B3EsAWFtGVbgg60wUVVFlWaVBqhCplf7DNyU5KHpB/8JIpYDy8o6waZP7DR2RciHnKT8uhgZZSqcKcURBEqqp3FBQDGwmkIapIIxqA5FhF3AKkhBRqsu6nmuoKjIHK1ioUUCpts+RUhormXtRC9MFlsBHTLlZQW4USiUmBbEzGEi60elKhE3SShWhAyekap9RgBOgVIBC1RlKeVnNV+g2S4QJlFz1us6bktdaQp0boLo8CVakT0rZTWI4LVCy4JXUNR3sXIQ0ZdmYNKUhKUb8eM2UqixI1h2g3dRI1VWGC/hk3KYiiVKIlGKkOpDz2B50Xr/SCbjaZObR9kwVKFQTaXj4aHkmjypKjQrc7aji4KC3kJueiE7mVZkvTamr64o5hThVgNJ8hZRSzChAie1B7wlUoFGdFKmWftBKNy7PdLBDlRCjJngSOD1VKUa8+NS/DVwM3R6fJqwTLWRSPWU/QNUPvgHRKphRmYYK0w77F82oNem5KXtd70GVrHqST70cZBqgrNksS+XPCsyBevlzjvnLadloS3ly3zMC/hfj2OgLYgsrGVrLVwSSzjt9odv0ofI0yiHUDZW7XFQ5pZQ4QKzMz/e7S4qLywsb1xfXFK85Xpl4R/GW478Ubzi+QPz8+fP3799//vz5ruMDxwPEZ4inp6evOn79+vVNxw+IjxCPGDcY72/eU9xRXHF8wrjFuL/f/yU+5SDmALf2B52MhOFsDWat+VopfzRuks90weDYynODEsCkgbo0MBFQr2EBTLAQJlgaJlgIEyL1Bhbi9IZwioB68HF6QpwsUA6nmxsPqLs7ROoKlsWJYdJA6dgzUmwOwB4kNKr1RLv10q4V/Z2AirnEmrS/vNwxTIxUQKnXTKlXr31GvWVKEVAGp5BRDqkHhOqzhupJMIqR+ghIPRqoHhOMurrzGPVJQLVHQqmeE7hLMco0LMaG962FSIX3EZzfhJlgQ1jtdpeSURIkTj0GyuLEjILUe+dwskDFjDKJ92GAUT9CRj16jHpvKYUwXUWMur/fbXOScmcO4tRrXQvcce61wbRABZmHjEJC5XsEykmUACtIPQmVxyhLqQOMYonyGfXN5B5TyiXfe0uplEbdfnJI7e53u03LjAJbLjPvTIq5MOGddxshNc5U0jXtQ5gMTteeSCUZxUAFGoWESmnUw4dIo76GGvUxxaikRsnMA6T2eW8YRWoe24Mul/0vSFZPnyo180WgDE55vgsIlap6hlAho5xIxalnGfVdI/VBIPX5IdaoHwapx7GqZzQKcy8CaveCcq/rcg1OHzGqF95A94RywML3D/JIn6jWwSr3RqF2IVLXHk7XCUYJLX8biXmy6nka9eRpOWUeIXXjazlrVKDlUqQAp92u6ZlQXVqjpHsysq5f1o9HeQcqbmi1w/BhuhyqegcYZXF6M6pRgNRT4KO+JX0UQ3VnNEoyylLq3lJqY0yrr+Zn/ijYc5pDroDzDgNv258TSLbqydy7vhipej5MgY/6Ml71HpJV76MlVMgoU/SuYo26J0oRo/Zc84BQjNSZ58w9U26SL8w5kXq0Kxuzb490EowKDMJF0nAmoPJSb4BREqfYRx3PKEmoW0coBApqXu8plGSU3xNLC+UH3ihsSJ7IRO0x8S59Z26MeSTmBqd3vj0INerLkEbFVe/XVz/zRhllcbqSdlOIlOqN3exjjerSg+CITbCFqAQmEZUQqHJhGEVQXVwGLmoAqBCpgxr1wfMHCWf+4xhGScN562sUAUUNjGv1zugCoGxH7Pq71k3qEtGAlJNAcdELGZXUcpN6rtkb06g3/6rqQdkzjEJKBYxy9uBTyCjCaTfrOfn83LMtTBdnX6jjdksaAcUwlWufUUGzdz3Y68W5N9LrfT9Q9X7FuTfKKF+kRNXb0+SAQdpaUvljFtEdt2pAylnFS/MyNippOEc0KtDyY3s9IeZH9XoDGvUp6mBE1ZNqvsWiR4zq7K1Orna9ygezDnnVkJzzRDP3bFSQewKn6wMadVyv53qYhI/ypwc3QVcc5d5t7Dhf8CzKM1E+o7rw1l2KTtZDlaWFqtx5Rkrag2vPHwRTljGN+vLvnHk8jxLOfKTqOUpxzSOoNpB7Z1KjROL12OAxWqEpoLZF3mppyll5PsKo4V4vXfXSvZ6oesnpge31xPTg5jHFKNnD3Ma5ZzNPsElUvb61eddao5lwB7jF2KcTN3tOpC4Gjfl1am435KOOZNTIhJOHB0HmeR1MnHmCTppPAirWqF4MNlVqAMU4md97weYAUSqbLPcZ5c8Phnu9V/486qhe72GQUd/c9EAyys+9K1/OQ0ZtvcwDKd/6GsX3hXuqecpzBqX1BqThpsvDW1LwVTab5btdYnYgGXVIy5/b68Ua9cNND2Tm+RqVwskChUpucm+DjIKiB8s5c2aUErsw/GJnnk1mUtm3rJlpxPIhRoW93iF/kO71vqcmnJ8TE06vh/EmnBapeB5lxPyFhanfOD5R+r1ke6Btu9igqRI9nmqCIMMJJ+3i71fZpxiFZe+46UEo5oc16skw6qtw5pJRj0ktvxtw5vtNv+iFLd8YG3Wmr3MWc9EHq7QrQGPQWJkilBp63g2PN6m823qXg/f1DiJ11Mw8vK+XdJwy9UJGhdOD/X963J9Bvhxh2pI5wCnLlsUcbYHdhhHt+W1s7jVWwjFmJRzXYQ8nzs/3XvyPL7H4Oib+T+tQvIQFVyL+mjUW+79/t+v+dOHuLANMG9PBkEgJH9UKmJRSQ5lXuhlLY89On5ntGLTpYpLZg9Fge0ld200Gpaaefq/whL9Kf117R9LRe02PGoj9hfhfxYNqZ/PZZD6vKx3Laqmjgt2Yk3ldV3Wt3/U3K4jlyVJf82W1qvQ3K/1v4D9Zw1qsFxBrHSf5ycn65CTv132+6E+tRhm3acT8jDWK7uNpmWpT9kk1gUBRyWvo98/M5P6LyQRe5q2YTApY0Q6Mwp6pUqRPs8fNFf7pdZnZLW6jwst8qcGreUHQux9LwFbDti5x5Xqt80UOrwVn3ikwamNr3pbnLGw4W2yCzZ6VgdGKZ6L4t89kaA4kVhOCa5JpgOADYTJQTZKP37kToGjfPey2pO3zABb8pIKfTH2MqoqRImjqqmKMaoGS+VzyO5FwtVwv1xSA1FqL+MISqrNukwmFpEKNas1mzdbcc0nknRJDcnrIpkGI8MAOQSeEamKiiBgVnC06Fdt/62JqGVO4TZewS66qp5XAiL5hQnk8SsLk+FRpkMrlWiO1WmtKIVKaTeu1KXin/Wm3QU5pgDYi9XxGJZ/cYJRKZRmFMOHBcASSTL5JBNWkSEAVpFxtoOKHoIg/TCPY3GQ2QbtEqyWjDKlqi840mXbEqPUSKXWCqQeMgrWQGsUNzHbLlNqiRpEd7xVSijbvJ90mj8ixw2MmzczJZ/jFzOSdTjzMvAJhGtgOPahNRS338OKzKzLl7CdSi2DyYlql5Mkmnk49k3WoUAuAyTFq02+BUb1tX2ixmCsc1B2h41zzgE7abM4yq08z5hPDRPKEuZcl9rAmeIXP8xRTkXpGlyyb+LOyKs5UsqmXhAjZtLRVclkCm/ANsVoQVhqsU8Mo9lCI1BZxIkbZ2y3tqDw5N85aDgJFhwpZajFWGYk4ClSUedNpKg2nhlCGVO6jKkiUMpKkgrZjOk2qqwOxJKwAqJJSb32yzunSdDKMWpCJ2nTAp44yjy3ndvuSnXnLs98YpX8Yu5YlV3ElGLKiWUg2tDDgVzvcq/v/n3hVT5WE6DPYxpyeWWVkZmWVBG45FYBKlKICuzmB5IhPak/DfzxOYlLJSi4VyQFOiE6+UkLZLJAsXKcOTKQ6ItQV/WmiEJUJhThdLgITEupzv1GMIkbdn080c2Pijz/5JKyin1qjcsePuZaKx2iBOTn/JzSGTaS6YWhwEphYbgOexiP3/oNQnEwFKKh76E/rBWJmFt6lKI9C1PsGON3JzE3gfBwF8mVPp5DVR7/JGrwgVaIm8eo4FRzjZqDBO1YG5pLn+3wEMG8IlA5r3E53iFIW3gofxGmlcHClGIWM2sjGYW+seBRb1Js8qjdXodvbdbaiXg4PhAu0eTxYW6IsTlVvEOU1AjwdQJUKTr6ilZeopFFABedLAk9/+pNojkveyuLLBgW9TA4FWXsAlTLqQ7q73SkegPhIeu/vgwBlRis0+yV/CtAKE0aaNUV0nsPT8QbyLlqJ0zjfd5j0w4QCPqkGuV85bFRaPjFCk1gUePkX2HluXsDLL+jlGzMKu5fb/X4jSj1pzoJmzrOVx39wp4Wfmrew6DQbOJMyPXctXPcOScQWLkbeHH608ZKo5LFvga8R/5UOsZHoZHMm4bSC8lB90BujQdHLeNSH+ASMYi8HRv0+LJceNmbuRgb8i1hIJByv5IwZND0RVIyRgcg1ACX6SypPtkhpsLHANr0jWJUXIxf/Tn9aEp85OllGrWjkCBM2xAATFr2PWhR1xIjTU1sYZBTGp0dV8zp0AjZhNA/YvgSJmQia0AkNyldWLhcnx6pzJ8WIQKuyQOVPaOF+TCYVVJXOH0A1FTaZQI44rezl6zXXvAvqDumU3xtCBQWPsbpzOJB48CCEBKqlH8rP8shvfmasD8ahvKETe/meUCf8ryf9QxLATLeC8IiJj2aQMtbdb5dTBRsLExv5SBOqDBO+MpngAyhdL7aBQUpxNGCoOJn/vvuZoFpyWXCmsvDDh3W0gl/OVc3wQPmgHarAP0/EppMTRjlKAXiPfa06jw7uK4DEnvwhnyZRHI0KZLbHfEI6TQjTyiZ1FfFlh9poFkVmjoy647z8CZRSoB7tjpWO7nS0shgnz9AE6fJ8k8kLXAARiA9plapU0MQBKHwME1PKjxWZ/EG1U70xgdifVHcr8ulMSIHowMxxaHAhnDKjbtuNGXW7Y83Lbo7KE4/qLwgvZU53Djg04N9YC9TfcZcXvE41PdU8Fp7O605OGKV2TpKT9+DbGQpwydPYEqFiNhFA52MTn2x0sj6+ElYw+b0im648Es5WvmE+2Fh5N9UeTVmQVVj1evtVyqowJXJcmVqQSwoRMSmoRxFMNpfrVWZU5pRD8z4BTJEDQsfB8XZ7yUoSmeTcUuls49LY2lJ9rOJRMCWHaICTA4Bqw3SQgdpgypI7PY5RaOQgvicz6vGPBMVo4c/Q4bsMDRwzymPK9IPbDzLRmgbj45idnNS6QTDyXOH4TXhp+PbtANNm75EGKSq9cYcQvr5gJeGKylsvTKiNhbeR8rDs6Y19nKL2jFpKfjq3OAX62SKZ/4bSw8ggSlOUG6qwydHAAUKOG2DAyeEZFk+8bYIxGKSxGfKqfc+FS1Nx8B6FGt2h9K6kPTSpDQzqupFHUc17g0nhHZDv0r/8KqNq3fUyFP5MptCJrUlqn1PV+U4YJ4dCX8o4Jodkci6lju5Ic2PiW6QzRFFa4LgvdZPySWYEY+tMDafWleIBsYktShh1I06RlaNHoZc/368doxbdemi7FsXpzD8CqYMoF5yQaZC5pjDKIUQn/KIIlcCdsOg5xsgxpzzRig5YnMt4ZYQYm1jZEXNq1rxk11cEpTqQr0Z84OZq5GRUG7zIy5FO5Z5aMPJfkh7Fg0eBqbfLAFHyhUy8ppCBKlMoTpmmxXMmZQ7S/SVMDzzpdS2lZBkTVjhj+kfT+x8UZ8udoESRPAsOAhSghEsvpCqpL8QAABaZSURBVLuNSh5ZObJJLOrF0lse1TpCz8zhgfs0OwjVIErBogTltNQRpRx/J7hOxKfkCkiu+BPBhNQ6hGg6AzqzgjTamdw0NbitUukm0R2uC2ewLpf1g5T6IKOQUAAT3qZ953DwJocCnH41cPJDz/sWhdicQygzzSD1zvEPPJS+Rb5OJRc4yk+QyAWnqFbeZnIdocQitL36dNQ0WpmNNY/GtVYeHpfVWBTmAspQ2Z+g6FHJu5FFPTEc/L6QUa1HdQcsgdUnysNIQNJzgtMgK55MIvrgGcFCbxqc64zFhVDApngousm2KaNgtM+WghGCtVYocdWjCcv2xRa1sUVtcts/JU3MUBmk4lEcpJbv72XvUCGYaidRHHw8SHfHc3LbCsPVibo7R1UO1OYAJXbw2LcoASgeDiyl0O2sqaZTSZiIkoD1lRnF9e5yISNnqBAmDpvKJ1be8/U/jQeLpKgOUougVOCSxkWN3OjOlbUqItXA9Y7+7MSc8ieSJ0UjPcQoHnr4bBo6i1EF26hymxpCwfGVsfoimC4XzZqbJRQiJRkKkBLpwcNfv7sebshU2hav0jMr5/WKApkTUcpRLBBCeYxRJLNYoIp8igBTOTV0OtNi7zge1ri15Esx8WktUAGj8PhCKtGbGSXLCsinN7MJ1UdAPQyfvjvK00Y4lFl50MUEWaGSFKAvWlIncyJ3csaiIsYA0VyKghLAA2DFys4BGvxu1+kO4GK5dWACpFR62BEDTsAngonY9C7KA5xe4lFLJ2wyn86hIlTITAJoqOyVqOm13En7AgZOdo5IoVEBWCk6Dkt45k+iE+4LM8GSTjNlzNEw6RAprXSrWLlGAyFUPiGdPkon0Z2GTWLUrzDKVr1uyVPdmYkBN8O6y8AiZFjFtDq5gZsWUB59iEWqu8jsiggSWRRfKFZAopkDwTTDdcfEd00wolP5E+FkvFyOj4RyptT9gFFLd2vdUmycHFw3Q9FY05n9PV6ZVPpidKahJAPBSbRGYEVGKCVBiQxqjLNS6zzJ0NLiMx4iZIpd5eVZdexSm+JEfOKidxeLEpB+X3AUM5edBq30llZ2NNx0duNKpbim7JkD+JRl54hEPtKWS1FeMr4UMVoSm2a1ceRTptJZdlv0RMeXe81ZjypAfQir22ejTH67d7IBS+/9bU1q2WFVdmPg4cDIfYVAIRDTiC+c5NBEmFEmcAgMVbkiuSRiYzqJLRX5tRbex2otHFKkphamL8lQm6FUptOtwYlAegqjFh2vfPfSgcQnVJ6QKLgeVIMu6hnnQrXRiY4oICWlUkrRDAsi8YgzATiS7CE4E1LnhkBV71v6umlnUOulxAMV3rZxj/e5y3iFkPp9MVQKlM4MGqxCrT7kFMNUhygzq+NU6XayS0lqHpe86hip2pW0OZd5ylhVOdleqOe1zuE2YU592VUWRS2ezOt2unsZj1r2K1RNKufxEyaCsENhcDaaV/bEAlQ+eSdCK7pLxKdS8VB5I1EJPxNvVN0L7lqBxN9NtZu6NW8rOAlWCBTT6bdSngBV3Rb0XcHkTdkD4QXmUxAgmgkLXxQm8ZSAgCrRqRCKuDUSpWLxpFkYZXZfmr0WvJOgmcsJVHs+7RglwYCNHJu8G4VN41BPw6iCzZFHlcGB0VwBy65PFaC8UR1dxFz0XIEolTPBhHGAfDy/IF3OOH2Cy2nuEKkQSiGzJr52DWptcOLVvIxSbeUvozwbD3qzuiVoMid/go9HiGzlK6udUuYKQmLjiFJkoLjeiQS5aRlZcnSa4oyePukyCxv5yku+63Xaz5smNacGJ+nyNEOp7G63qhluepfGo8SmvtsUhYw6l3zgnCWLRigniZz+oPaUPHp4RscxLFjzLJkiu5PqjkQ3oTnNKrd5Kv9Ym7U6O8U8PqzyNnYoHBrwIOq+J5QcP8KonuaK7phPkDZRewF119yfwIyyBS/yFwDiRHMVRCnGMiyYy1IUc2nsdClX0tsVlsZNYqosfOrjJHwyCYqFV3CiMflv41CvHzFzw6dvEw1C1RA7Z4peafP2mnPO/D8qOVPuTDoY1cYlFXD/i740T5zGx8ma1Dq1Nv5HKthFqM0gdWOc3rcyhto51I+tegxV6HZ5BJVjWu1i1KAarHCKyiq6CyzFBqym2mUzJ4sCbOa2j5t1RwoSCx3KmlH56sJEQwMteBeh01atUEnUrIz8pzCq6+OLndnJHunAO3xqnzK5s+JT4oAQ7SQlVtmA/GkWHzf9CtoUVLxpqksecOm6c6VpPRKdKG+9VMK7Gd3dCqHu+2zww0DhCszS2XlvhcfbWGCTj+PRgatDpWvFhzApHqkxKIYoAkKRvsia5nFuJuKzTQVAJXgrd6bpL2syEHUMiqV3L9FAUSq6+xEzZ4weYuJLs5ywcDOM/bDnfs9XbJI81R4RZedjbHsWHT7NUvUIIATL6K6UPcpMa71Cvv6LUZd2ANzi1GaD+3NX8yyj6mAQStZcmE6wqzVUzXCVyF3ds1RlL9aTubq9A9HNpeQhp+ju1rkQKV9cr7MkctgpDuuYK7Hqn8elOuqKJzDtpwYv6l1+KkYJnapsYBddMGkKUOH/nF3tchs5DrQqqY3DOVo6cj5kSZek7nn2/Z/nNMQ3CI68pzheZ392NRqNBmZ88kIeUAkVHL5sn9OfAmwqyCP8W4quuYJkqmANGjz7Wcr5CzDlPjLQllygir3mA/n0eDBQo9klwSEiAZROnlHS9jp/ME3Y7igd94QqZSqMUUPrXD5Au516l0pxQbsSX76GEXnMxSgUMsrySUOlHfnjAV8I1Ge4VkBGnb4xrWwSJe7pL/VvhRLCNPigkO9gYcG1kjtD3Z0L/1GZCgzDy9c+eenIZDIDazWjhvdAc/BQGtXqL5FAUcebKTWA/VQ3wAQ8EqReobQTiiD6ILTOKORawqs8QAacgmOLr5SdoZOZ8Tal5NzyrjaFAoFSjJrTJ+d0c+LWp/OVE5VfCkAhVv1b69OQT4W+f0ykS5iOC5eo/mrlsQWDFbwFw0OCIzYtxhes2pFv3X6qk3IFlGjUBXmU3BWi4JROX/8AQuPKQ4e5Q4USToTaUWsoVRnsQMhrVRlUxWOL415nYpWu44nPZK/Jw/BNKg8JpTUqDlnIQXHlpVclB6bAg0MmsyhePeXpA957gXXHEgWvcbDpU6XlAQBUa/VeyXQ6V3Qm+rWm/Hp1U57lkzDqolOVPjgY8+mvVzidRkX3hAR+EoUCVuHoghKF73HAh8faP85d0WWFVZYf1Gyn7lbU8AKW3DS8q5lcHqDjDNR/PvtdnpEoMgb/qPrGDa/Zy2/c7YRRykI1VlW2TlR5bVoRJtXOLsnI0oG0cgYlk0u0Gb4biUKYrI9KvE2whEK7+XWopsOeVxqjqOTK9EEAFTQDhccWflCayHUg3FnNdVh2izHksj0/kPL7zc14nlGfJOS4diF3cAKA0j/h03Rioxl3vP2Xa5EbJ06d8a/8o9IHQpXavjsFhwrTwsTuySxckFG642Hh+RjqRmsXkae+9FIYQ6lQ86uMOnSaJfg0HScqNR3neqNn7/EzSAeYVnZg8TEdZr+bz8klh7obDyWVR0Cl6NxAuyizfXnJp7F72quuYUXOQJHprOoPuEQgnduTiPh8hu112ZhwPwLjWd2qIk1lDbpbA6m8h8HJMCrxnznQKOU4T33ii0HeNDLlReRpIvP0wegQPPjT/ioeYhQSamGglIRnXW7ZxL1Qk9LrtDxpX7CxIb+yNbh5r7nD1ICy9iBFxfdSySEd//btoOZAxP3nXNCQF4qeiryQ56wq7kDKs+p1ru7EZkazi/qdXy6FMnT6pUrP5it20AuM1LdRtztqdhN7cRzxuN2pmsPsoCplOqN56r04uSUkUYDSqqtOyTjBtPl9gs7JXelhZJ7EH3TWwCcs/8cQjDNwwCiuvWLDFbKY+FR51b6papEiSrlWx25cDJRLV7pYkzqeF6gnoTyj0pxSJ+YnPjcgbqUYp2OwCjNK113Z39BHdIKGV9GDk46TREWRXOZOl0MdX7VC7fjo9HfTMN1tDqVhsqWX5qFGMTRBBaYxn0r/T6g6hdL+GkMU8tq+zvw2HoBoUbZA4KJZJasgxXnMVRGKj1bUNfl27RyUiuvEGEQaRU/lzYGWK6zSgE4vFApGPEozNaWQUKJLZ+OdegclfsmMK4EVl286MpCed7vKE1T3PjTAlteA+ry4LXpgo/ogWBvQL1Rd6euuMKN2O9Bep9YSg85jVmIWq1TO2h9kn6VYNmklN2mdcZpeyh/688uXHiV3vZSTP7AOHc/vEKWw/oogVUI1R2I1uAIeCVALOynyTDnrld3Sabi/FVtNpinHBhSUGynXdAIxl643qDvxUckSCv/HIFJBF441N4AICUVZig4LuNvBV5CpcJtbegW38iT2yQ/DN7N5iZ0Bld6nv9ec++RAY+QnmlHZFVKmAUjQ7lrZFbDh0ucO9YlFKh80O193u4Hq9523q0Kp9+TEJ9GoZMaYYNSzK5ikURsKVEnIpWkEU8NoLzlsf1UJ1KJMOfiD6iI6c2roYRqrk3KaCqr77R6EBsQnwyimVBggBFp+kBUU7Q5MTPDRFV4pmkfnXp6IUtmkKdllvaHDlH6nTDlZAyvkwUaBGIWGM1zmWWcwMgfTs/BiPsGkclB2jU1gniRO6frdUu2qJZtcJR/OdZm8E+oTy9NmnoXtYNIW6oF8EjEnEe9mmBOlB6k35QnZlACcJDD9qzCTxlC1qkN7wO7p3LMKtTy7CY9UfPHSZCOozYdQMriI11RxnVLyX7+6rpfUpc88HvWS91HhUqqQPM1jlECdoOoGrmDR1iBXiVEG1gnm37yaqcXNwlfd8ChfMTF51PGQUVx0cwrdwWm81ms0Sqd+z1KO2x1pVFX5XBmY8oxYZTvaRXFK9hht/lostJo3s3mxjnyH6aGAsq8VcYTySo5WfXeYaRQTTNMRm8iOF7ZRxc3B2hk8seK0dxA4Sal5sIhOsnVxi2Ev5ErJH+IOoPRiV6C8Zjo5Kcdi3Pk0wbdgcxdL1FlaHrHoxWd/rLyKFegeTxRp6j2mTaDsic81ukHkjeeDyaRKL5mrqM4XmG6Hws4TSxo4gzGdyGtWY82jT64YGeSsI19tCla/tVuj5NfdrZhjKI3T3aYrKOem9PwD+8H8IoWYTlB3KQFUCfAqOLWUQ32qCqIvfBomNdsAKpAnu20J5ekq5+RqxrM7dCFUx6jLTDLe1V802uE1JzS7NJxeXsj4V1CCl/UBo1Tu63dR1oavZgze1FaYFWq76bhO4pV+HH4IVMQoBdJsrxElamkKnnAT3OiE6pReLxH8iEcGKgZsMfnKIsrk1lG4iuorb+vPo8mQb/G+s/PkquNZwxlPefZuM8EFRmMUK1Tyae8rOhU1ubzi1ILF59cILk5xVadgUpGmkihZeIZTHjY8VXmNUUlGvNnct5Irb2ilXZhS4xQcRZ8EoaSAGkV0jNFZe6gBPnUBA4XOQBvMJfdr4LwGHtPIOEcrG6F0IFBGxX3ppaP9C8pVAyjR8IJsSn5/UA7TJ5ZzrLoS1l2myIDYFOxYKMvsO94mFysep51N2y18GvZ+t6u8h8GqAZXYmncLGDlxZTopXTpBy0uyCg5DlXrB7InAOtbyrNWcwzkTGcjjroGSb8KoVSeanTO4q80wFd5dCZRnVBrxicbhhKya2JE3kHasUoHvFNQ9h7znf+eGyewiuq+3vAzyRB5K4aMm4G6/GZ3TGT5JXHflS4NQyj2dGlB/BvmKGCi0CVPjFaxbkpYmWAInfYJBKF1cr+MM6hiqpfI7IEnB7QMt3cmT1iaqu3WzGbmW8eD81xkDq+XtNDGc8CgDZrCg8E4nGvGcTKWmTgmnFibTZa+7Wi5VzCZ9xmBBs1vIQolORVNwHg12ZtUpzkA7KGMO9IzXl97723c5Y4lHPJSp3RTQtoXBIeeUcBAu8LP/XCr5cSXmx1YTfiWCAOTteNTtWJx6S87+6Ro+MmzCFSTTwwPln3vRzoDlvE3A2hSQqsPfp1Thn8GiRdXdi2k4yy/ZaO95WqIVQhepbAansTzpdEUR6uGXeR2j3t7eg80nx5qcqezylNgW7MLOtNpDOhX9Nkol1Kdn2c3Y9Mgb6FzlaHSBt2HVHH/W3EOFE4uNfq/KGtzit2R0owugZKD6+fbWHKcnFA0tzCxAS0cq+0/ztH+VpKmket1FdlIFZOqlL8gkUPDzAvNwD1HurZP4JzcIQ9ltt80w6u5anr028Iz68QTq5+DCTt6YkSgh52SFSy3BknMmZk0ug6qkUAqmr4DVXio6ZtOa11DFiUprV3cwCd/sMdRNCZQd8notf3v7Ee6o1D0wzX1oLhOYp+Yzn9jMuzMQeJJzBhcZfl3XizGC92SKaTo65snmToXYtIbBShdCeQvlcnKL1F55z9q72AcVaBBWeE1No2S2Kw2kVnI7biDjQcPjdnfpWVSsF88sUK3aqsZo6c8KchyOr72Qu5D82sUGUHV3v8mTz39b5T0pdfHTy4ktOfvOHR5I6tA1weSS0I0Ph7sm5Jdqx7ug+DLnT+1V4zmcgI3VzF32hH9XyycVk5vhRc0unlH+8/P9DSg1Wy0/0fkKnfy0X3u7w0PDXUmiUzMNLRP82A16FSuuhO2ORCkzr6DZLbE8rR4mGeuckl95eS6hZvgcR7958aUHhAJKRdOLugdOPLXsCM0TibkcGJh+R4S61NIPwdFeAX5r8G6i0BMsA0+Qc7RpWaPpzl7+mshAadTDX9h5Rv2NCvXWGp+ruoQRFI3ECVkF0iR63gg1T9obzGZ+Kb+LaHkEEfy2H1YnNFA1qDyJft2diswtq1Py66YHF/WeDG8M+usVazbp8/5nji591FicZImAYLXSm6fCMd3squ5CFqpetCyFvpzqDvRpydH6LnKZZr5bOwPlQs3b4KzVOqggYVFIfQaXPgq2icz4jhKCRC0vgSlIUUpXUaPEPxXb8siFM1bIpmUoUOvqnlBcZQhe48HFjS7alT8e/vje4vT3r1/f3/Tnx9yFK3JClphSnD/Nrd+lghpVyEPprA5JRQCpPLPEjNprbnmhT2uYrbjUlw0Uu3I9vpjnONxBeU+pn2/2894mGZ+SC8dw6VJkwtthShOL0xwPw0/9IZ/5m78ppHaBUtaA5ClKVfrjgk3C8bWfg52Oyy2UwuoR3Gse4qR0SkjEFJsAKfblKiuYJDRIesQru4wX1PIdmt/RpJediTosvG5wkRce+pYn2co+umiFcvuEPteMjYFB6nv3jJCMyKhRIk+Y+6ZCuQF0PP7sMNXfcUheAh3P8F2gCk8x/Fsh4TQzSJ+uvOzcbvrxKf+mMbtQ6JQ8wmkXqj/aH6jYnOS84dRSA2TUNBOT5sOr399hv8u8k5LfuXU0CIdbKQAnGvDClnfrcdI7KgPV9/e3wed9h0oxiaFClGCMKcwnk63M+J3ohN93VSoq0qT//laEgnAlY/kteWTK/XFBeF+g7dMm3U47qFt340P3K//r44pWAARh4EsgC4SogUGB/f9Xlm26pVsi+H7M2207Pce6xVkBZp31hKbUDI8VFGHDygD1navHG0S1YbDmshVGWj7FT0Q51kw1mkr6g7pePbVkV0BKYkI8jOrF46fwDxOTFVx9UUNJDwkr7Od32Bqai2DF/J3tmmWripy5qTG56VWJ3rXr3QX0M4aYMXbdMBhgGl9yPBtgslC6ATSwbs5Tt8ovAAAAAElFTkSuQmCC", + "e": 1 + }, + { + "id": "image_3", + "w": 307, + "h": 248, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATMAAAD4CAMAAAC33vGvAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADVUExURUdwTHOC/2OJ/128+q9r/1KR/4Z7/12d/ppz/5pz/7ln/1es/VGe/2PM+GTR92PQ97hm/7hn/2TQ+GTQ92TQ+GLQ9woLMzDMpP///0lKaLhm/2A5mqNv/4SFmefn62XT9zFMmU9AmUFbsywrUBQcQHeB/0BGmTdulY14/2VLs1KS/2OJ/8LCzJycrV/C9z13ryg9gDNilg8TK1Oj/Vmz+y5XmCqwkzc1gEQwgChMfRpZX2VmgHV2jB9ybBc5USaZhidveNHR2bOzv4tPyiKFeU2extDR2frxEswAAAAWdFJOUwDf39/g398fH9+O39/fiWBWxcXvoD03A0W7AAAKZElEQVR42u2dC3ubOBaGPbvZTSa7ubcGOQE6gzJtOuBMk5bt2MZ+7Dj5/z9pdeEisCQgduPU+V5wik3kjF4fSQcMml4vZ//98fnFMBiu8pUvq9zLZZXPfGniT7mYueYrW/hq41O+8NXGVb7w1cpALnwV7J0dnvY0HF8Ew8fbjxlf+GLkG1++iUf+s+ADW76Jh9xmS2v+yBeO/Cn+yTZr/MbX3yrP5IZY2nPJV7aYuXlg3g4PasZOLoLHaR8YCW8Ge9VYO4axZmsPg0NF2bvgI5w0c6lIO4ayrtJOoKy9NNmn7R8NIaMtD4MD2TIpXLQeCGTrPLqFio6BdhIgy+gUaKxHO0Zv1gneOM8f4aFT4zzr9S7QnXVMN3o9JGdwBmdwBmdV6GiZOIxkNqJw1obRzFFIRnDWxDRxauyutc04o6mjIaVwZlaWOFoSCmcdle2qtA04MyvbUWkbcJY6FlI40+UYjpUpnK2S2J0llqLE84jc8vItyrZC+drYK8he6efPSWjoJryFH8XE9OfiuWXvCzprCDPHsaRpsetGsjausuVneyO3IK9n+Yqne7/Qlztj7c78/WK6bWezJmczS5zlgiZuvsU0LkpnfobijD/lNZ/olfmRb97JdvMf8y07o04j5o+VsiqERUiRbGtcOhvXCrDfEvWfl9FYDds5Ff/od/oe7YeeKUhfzpm+aSZpu8YZZSFRNjc3s2h1Jtry6rvNZVmqvIca0tm7cXl0q860TXN2d6dIW5pLT2TfwyqUdW1Kd2ZzFmqdRZHsE32Ns7LN8+Aeb9WZbtRM7xitRs5MEasQ8cWnP1E6cIuzST5kaDt7ndB5+WaxYZB4MWeVFlkqqxwbWIqzz5yZemLmYtGhLcoxkjtbZKmF4ow/56NDaHxPT+dEaa/jdUeBDTpL7qai+2LKqmeGLMWFo5C3GyJqKh3Wcw2vX8815tQaZqHNGdGOEdtxxl1lyqpttd/QoRHebihvbqHa5spcY6LUnHVaT74lznhOoWl61Th7ei3ORJucsh/1sdRSXEiKRX2YIkrU+lr6M8/YvLiyub4TCMvPKXo1Y4Do+ytDZlNSy+vis8dceiCx0p3ZnLEe0CUmZdoQjMpEd7HtMWC5MmCmThdnzNK4TDgitaexOVtoc32h7Ck0DAx+2d+RrTob1bOMZZcDTjmIZXXw+ZHNopUznmNp6s0SFjeqjA40F0jzw1AarTsEbPrYKU26HDtldcnGSjFOjivOPCKhpTP+dDzXjo38qDWSBcLiE4nLQHPjrOh4u86aj9ETe/mn4pQGr7JqwnpeQ3fMuLo3csvcJbafE/lZzgXlVZkUHY3fb+dsruuRVp1N1Hf05C5/8lOfcxSmyqZXtqliT61t5s/1yVn5+8UvkLHSM1DieROy/jcU6zubrhVmb/PcNr5Dec7Qie/qNikN3wl3loZrD2zScI3Lc9K01WupdvZGjR91zd4M1+y1a6Gjmbw2dIlrQwGcwRmc/SzOcMtrd2e4F7Eb/F5E3PPaDX7P63vcW90FcW/1/gUaZwdu9uRcEQi09kc7cq4IBFqXEWDvAHPfdE00TjHHUldlh5jL6/nKeKQNMWlQU5ZRnTOO9WlHwS2GT7uxQX0ezP3jI2UOTPsUmHIezPrklzU+5NNfdpgD88Mf6jyY+pkvzdNhZnNfdpn+Up0C0zYRJhM2WJkDU8Qan2vVwFcD91paTLXKZ1ttRdNUq9ftJlotJlttTTHTKuPs8FRnDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC3y/7Ju/OjnH8a+Y+W/67yr2b+YeOXJv7dil9bsPfrnoUz0/8e/eQ8CIaPt535na+/F/+yha8/jBu+5kv12Q1ffwQPD/x/K39aN/b+PHj8Qvv9/l0faKDfrwZ71Vg7CYZ/Q4wdZu1QUXYcPFJIaYy1B0XacfARRtpwWUh7H9xCRztuBtlIcDREw2zbPK/kQHASoPtvTShb59EjVLTnYSB6M4RZp0A75YMmRHTp0XjjPEfT7NY4z3q9CyQa3dKNvV4P+WzXvBbO4AzOdt0ZnY6WsySZzdIpnLVimjoKSwpnjTE2c2rsrrUNORs5GlI4swTZ0nHekLRNOKOJYyChcKZn6RhZwpmW1LEwgjNdy3SsTOFslcTubGaxTQipb4WEhNluUpC/EuYvmN/Riz3z3jHfG27f2dRxnhto1HVdWcG42IpcN84EuQVRVsDLX/Bj7eBCfLlXr2Ui97re1p3NmpxZAo0JmogNXptiizQ7K19SKUr4OqNl4XjLzqjTiDnf8LL//rCwwLdoYcAPM5TfZ89IGZb1j2BORLBpQmnM/wSRZSfbdTbS52Vpq6GTMC15fYqtqIwaf9WxV2vBtaYeyvdYrO708yKxIQ5fztlSn8reLdvkaLwivJYLZkpGTlzGiM2Zp3XmeZPsk4h0YZZ1c/yPTrbqTNedJXeMcjhNrB3aWHRi87HUMS8bXUOcjY0fhHbnorTs6eLwJZ3pcn+uTHVpLj0RNWF2YiqCgyqeuLNaasHDiz9n0Tg3tPY49rUDxFP5YZDVD2NrzhIqerGUGasegZpLMy9PwhxhscZ6GaKEgDJurg59nqFHGpvGVL8SwO4rccY6sbtUp8zijFeF8pZGeU9GuJRxK2e+IXElvq/PNV6nM2fEbKX8Rz3NtRQXpkRkEN5MIzkm2NomTz3GvjbXyMrNdZHml5/G1ttmUpPGqKcfljGAN8sJEeOY6NB8pTa2MWCib4DlaEwtY4C18IuPmyOdMuv5ICZmEcvg4tmGmkLYnIW6UGH9vwyluSYKJ2UJf90jgc3mtCPRpXU5HcQiK5K18YokrdkZ0XVJRfz4SgtXE94iRt1wq85qfdco7Xg2KC4OAIno3GkbZ0SbT5DsqMgrC4aR7yl/yAtZ4rv+Aefax+hJ0+FmYi0ukoNxcaAeaY64tcfoulDhWvy575bdfVz+Ip2Xg264ZWdpkzP7mVpa1n9RPU9jdabNNWjs1s72eIrcYm+07hm09c85rhVmrHvJjhJZ2/I8L6wcPuYUWUL2fGJKNEgcRYtYeRMvJtW9UUxewXna0Tph9kbPbdvPOs76cKbrRizDwE5+wbmR74Sfc472jTszRlqym9dUbeYaF7202Y5eGbSpa6nSt/EV+kad9emyGmvp7l60t8lrQ6e5tiSd7vJ9epu+Bpky+jsOrtuGMzh7vc5wj1h3Z7gXsRv8XsR3Q3jowtUhv4V/ChHtEfdW76ND68LNgE8WcYzpNTpk7XKuiP0LjAIdw4z3aF8go22ikU8YdI5hoO0AcFZMSniESGvDd3XauP3z4BYDQVP3fzk4q8y0dxwMP8Ka3Vhlmj0Rau+C4PH2y9/d+atc+LoR/icfYs0Wvnbmu3x8lwtfn8flw6AWZPlUq+cXwTAY6viq5f7rvYHP959b8GcD12y9vuaPJj5df2rDlXhcNTO4GlQ5OzwwTlH7Ojjgq/ixusvEvixz8EOoWvo/aS69LkeOBHwAAAAASUVORK5CYII=", + "e": 1 + }, + { + "id": "image_4", + "w": 212, + "h": 28, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANQAAAAcCAMAAAAuu2HzAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFQUExURUdwTP///////////1Uj7lQm5////yI0Rv///////wBS/y1C6v///////1Qx2CM1RyI0R////////wBR/wBS/yI0RiIzRyA4SABR/////////1Mz1gBS/1M6zABS/1NFulMw2lUj7VNDvlQi7wBR/yM0Rv///wBS/wBR/////1NBv1JCvv///1Qy1VM7yy1C7////////////////wBS/yM0R/b2/u3p+zuZ/PWEH3c+GlUf81NDveTd/FNHt+nj+/Lv/FQ01FQ5zPv6/uV4I1Q/xNzq/9JvKFQt3oFn4qyc6qpgJr5lJuby/4O//lI/NjI4QpvL/mU+5j17/5Z87rvX/1Om/d1zI3ei/9PK9hhi/6vQ/2Gt/ZNVKUeg/NrX+V6S/8nA8mQ8I5C0/5eX9ZWJ2npTN8G18X52c6+dkOjn95++/09WX3FwcterjRYWFg+XEcYAAAAzdFJOUwDvPFz+/RvpnvjbIN9AXWDKMJU/7kCQIFqQ0JB1bsTvRd/fzI1Qv/WdbtBAdu+/xyzcOFGbOY4AAAUxSURBVFjDvZj5U+JIFMfDSFAOlRXGAyzx1tEZa3YDwXAZIJIAERA5RURmymOd6///bV8nnXCkE5iS2S+UaULb5FPv9bf7NUVper/qnY9E5r2r76kptLgRsDGM7XBjcZrep8GTUCoVOgueUjOXb3/LHw77t/Z9hq+WAUjT/PKkgeY8jC7P3KTeS7spXbtLs0Va3wrrcq2PfLXmjYxofs1qIEeAGZHHYdXbfZIa0a57dkjuISQFy00OE6Y6sAiTjRmTzSJYS6FEAlASqYTKlEiFtmeWef7wmI70YB1ECDJNwTmGIFOq7QRBFino+LiwQFGfFzR9sMgCX5ggTLU2T4Iyy0CHjQRlM/ltd0iheGy/vvb6j9C6RB9DphnogMnqpKh3g5H/NqVy+0lQR+rYiKlSHgYqV+CPlzyUhyEqQO69ewkq8AyTzcL79fHyMoHunJg96EdmHIr5YNbXFSbKpUwoBSNWfKqoRJWnYqxsmoBDycdesZMScAkRtLMDFS5VmSXgghFqxcz3NIrbVj3L5L7daJ83caAiX2KxolBEkpvFWOyLkoBWgWKvG+fn543SlW6BZoHqZ9ksemtUGbiX2TWDcjqdtumgtEA98LjjV3zDD2uuEp4YksiBxC5qKjcJq/AiHqBzf451rf04YRU+zWQyjyybZXVl2XxGkfUqPAWU5hI3g54alY9ajeBIqVSi0lAiFVk1DrWh/vs10Nx16p0SuuIk3DD2DsLTJ9lR9VWo4Fuh9nHu5RgmB5l304OuOAOPKe8QVJHjikpDtQ2CVRxqUI2c0ri6Oy+ZW8VZJpPn2ef8M5vMF3iW51mWZ6uIKW1iFY5F0FRQeNl9gJlwq9HVNatQ/bysMAkcJxQHkSJMKs3PO9pcYju6qxt7f0qnCzyfT+f5QjrNYz2mkT691Siwn9cZ5hvOw1arhV2dwpbXlZuCgKAEoSl3sREah0K/UmqoRLl7PJ9KagYae8PD98ehogUFKv1WKDx/ID4PBlfXoJBFiE2Oa4owsQQrqDqY3pXChF0CJlbJFOo5GgUoRBIF8fBK9nr9Pw2lpt8TQAmyzHGyDOHinqzSr6RQ5e6x95UwJDH9pEI02qu1o8laITqkvDTD9Puqp5+Gh42iiNycE5Q3qGhmFAEcmkYdmEooVvDhTknHQ2PvPUmqRaOv8BpTVTojP+pf4BPv0HUgh6VRtBiGv9Vi1lHvbWFLF9FcUng4NLdEa0u/VlaoDo4W9nSSpUuSlLwwqiBJwbfu0DVLZ1VLv60PW7q6+HaBSRREWRabIlB1Jyy+iAqNkmsM1inC4rsNUDUjU7sqSW8uP7TF90HdsQ0vvut4m1QWmoL48+XXr5efIjTLk7ZJ1woTrFMNjYm4TdqhJbp/cZGE14USMtRqV2l6Z8I2CS7Of2AKw2VhwjapNb6hcGkb2orcLVde/gW9VMpdOTJxQ5vDV31TS97Q0jRdbScBBQsaz8BET7OhhbnlhIsZ1Ka+of2WQ+vlyIaWGpTy33/8+D4oqMhjBcilh4fce4+m7dVCcqBeDZBMAzVSemAo09Jjy6L0+LNFIm0H5fsqULJdQx/t9FRFogrl+c0iMYzHXiZBHcymnF9CEPF4NV+r1fJVu6qJ5bwDVfKfKWplxaqcXycxbeqHFMaDl+WZHbzQ8ThQabLH7fTMTsnWj8yZjBnotT4iGyvpA9ZHZDvxEe3N8ohsrKR3+f6/w8whrJ0ZH2ZuDmH5Nw1f/+6x8yE6dg5Md+y8HdxDKbgX3KZmLt+xYoOuY5+eAv8BxhFF+FfytiQAAAAASUVORK5CYII=", + "e": 1 + }, + { + "id": "image_5", + "w": 525, + "h": 121, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAg0AAAB5BAMAAABIGg9ZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAPUExURW6O4VuS5ESX6EdwTMLW9Q2YIQAAAAAFdFJOUzozKwBmW62ctQAADJNJREFUeNrtXVmS5LoNFJ4vAHIuIFIXKOtdwB++/5ksMhMgtXR3TYRjSpStXmp6/ioDSyKx1PR3/6w5TQ9+ZPtSmcKkIS+7N/6a+r9m0cdioCIbCFp+pqBBVJYvcFgfDcGk1R4KGEHKoxovcVif6w9af7Q+fNmwCCFe4PDPxxpD+bU5hFRzAATFHMrLXyccnmkNUk1BaBNa4XAQQmgW4TjMDw6QE9/8hoUoYdAQymtY9ji8HhsZangsCEwlRBYzgHNs3wWKsMNhfaxTKGODOQSj5GYRROKvHoeneoVqDQ6VP2lzCakwbCCUCLE0HNZHWgNjJPiTTuoBssSFagwFi/Cr4TA/NTZINYkJrCHAK4ozKJCoKaOGSuDw2HKiAEE+LYBCQKIC0uYeh9cjIVDQBvOIAAKlCAv4rn4RxHB4JpGmX8AWgkyk00yZQhBoEAWHxyZNZMvCG7ZKm4mi8qfQnKI8/wAOrwdCUNiT4F/BY2RBAnGSAcLgAA6PzBZIFYIgicoKWAQ9WEN1jILD42JDlRuQMKVUFB4awKQ1HJH4VXB4XHjQyUtLsEhEBJQWTBXaw5BiweH1OBDIpaFEqoA2VCB0D0Ch1SFtQBQc5sdFBnLpqXpEsMqqhgakiyMUcdlw0CcWFRUDYcZU+oQCiN4mYnGLLVBuODwKBZOdWnAMproEg6GPDPhJv17T+iAY8GVcUhwLGANZ9M4YSngoL6/pUfostFiB7jJZbIDaQPXl9GxQpPyaHpMuKMGJGUPxCAgOxOD0pA2BlCoST8FB8aVTq7HVckWNkufgEBEeQtzyhb6m+VFeIabBAYzqCRK8yJbeGBAeUgEizc/AAbUlEkaLDtIe6nDNJBIdY/uVYozzpA+BYXItksTB2hSBWeIYIFJEhNis4Sk4QHiCBmXJkvmSRnFIFDGSOlQUtu/5GXEBwlMDgW6hnUWcs0WMBkPK8yNgIJGezCmsgSlQXvQqVRS3qGAUONL8CBjUs0R5zxORgDB/toeSKPFKi0iPwIH0oQpQlUqiPwF7+IpEuldsPlEAGT5KqiUJsUZmFWDUWtqeLnYVZkJdgdeH2AOUF2ndbKEwLXosrCA2AILyLwbKOHy+0MacJpUWFC1TUpjdcYbQbCHaM7Y9uPym8AtPmtUiaA96ri+RMJgp8AxuD+L8wR9THPQkx6KkQD0BDAhEHjpOSiNOLWmKNXE1BLlKFMnVFwAxvF9oI1GC+pJsuuZJMR4pR/JUrcDMwdwi67gwgC94v8aauBBgAlo2e4tIHR7VCmgPeeg4qd67a5ILIgP+OleXyA+MCx4kt+gwbn2hzBUqVKhNddloNb3h1KaIFOktT2RAEMeNkxUE9CrUdRaX4Cbj0np2iZooYA2eKzYghrYHaYKDjTcwJFyUFK3IhjvUsFBjRN4sYsT4wDEXYZwsUIRA6hSCtzBlL0yzW+EGUeND3l5yAWRUe4A8ry5EThx2odRwpdG3NFGLzBoVNhQAw3D2QH3eQmQb8nCDCMcWZqIGBwDwy5IFAuWo9gAE6BU2GhlYX6lepArIT4yNNAjPFeWPeTh3EE6Oe7PGM0Wnvumhzg6sshN5U3QUtjBZnjHtAbMudebHJn5EaAeip24NqEN0GtXMIRcYRqsvpB8PNe4ktmKDAKlXfdxo3MkcooJQjKH+NZ49cHbeJoXZ0W/zHXoBQbR2xfYrh05yqG5RnWI0Xi2cGJ8cBWHGtMHIkxIJb6hQJMuYSBEkUMRiIByURJoUSru5cXZz5aQ1MD7QAlxtSDmU2FBjZKzf80i2UEcjbaFEfO2OksuhV4H37/LTTm5IiA25GkMaLj5UuUF2Ez+uOlw08JIFydSV2bADugaRGAcH9bkn27bqdJeqQ6LS1v0EWIIw3ZRIeIcRByMPw9SbahC0vRLq0YDgspebCIULssyYzR5ye4bxCzUKFSZ1ddoXjA5gUHBJhAKyg9GGWljV6BiTUalRcBDbRUV4MOZkgy56ZQwpspUbUv84fxrNHtQqCtJJsf5lVech0R9Hn7yiIJWOLsgWIBAWkDCHwUGdQVkfl4PjtqNtc9Mn/QnSk8uxhTXUZJlqSdFbwyB+4RNg1SdEu1GfptJ3hVXskkT0rFl4dU5AIR+fm+OApqVPgNn7t7VcudClY19wNwZp9TZjJLNmHMovlAqctS+tjRvCUZY22pDgEF18yHCOqxh5fxzERuhdfDLi4JtWehBkI4dkqUZiCqyEx8qgGSIz2fQYOFCW5nhsXbyzyy5oYX4z8mMFdhGl4REJjQp4Rsp5bxJ39wvxn70IF1yGlL3egCGw5GIs/CGSNKSupBjEHsig7UdVdmcL5GKGniIc2xQ1SlpHt0XGCO4wkl9M3sGz4a9WXl5xSHBpCpHBgOi1uGoKF+ZwXxx0ajtWXEfl+QrIDSLXOyVgT8E0hhS9mQtjuPSKe/uF2mkTFpjWyFVpw/OHfg3YUxEijVSTONX60hAYKj6gfyvt2NFhEG5vDpEdzGRkcqsrM3IFayvQp5Svn/v6han00rZrvHl3PTzuXVyvsVlbVUuwsiqdycNdcRCxS2ji87KWL+2Uh5wRQG2F19SGXaroYCwyjmMPYoqLn/jpJEi4xQmJ6FMedTy2qNHBa+0c41dv/9b2QGmai/seHdRRuBBkI8QnUMhqFxk9K0pOMboaOU58wCYB5lx6CJTdS9klCtu7c102NsZA7SWTRKWBcFDxxhXsgK0K263RwxAYFs5Ma8hQ5LbMCd6UKwYpj+cXcryFxjSxHw/dD0unLmHWfg0CY0aV5X2rcXDA/DwvWTA2TNpk2eOKduKWNjFwZ4A5eIsitcbVADiISw6mTPuqmXCs4cQdIse/QtPeyBzcEmL82S1uZg+IDSI+FqnBt0quVghsZz/6OGTfwKRC/5NL3DM+qLZJuLZ6xqRxNgYbHqfiEPrZBpRUJjl8YxTLrXDgPgm3Cezekc/8hItRYW/uQ3hKTqWpu8AnfnCL9Yb2IC08KrpWtp98sZGabDzWFglipzfsCsxx/EK8miAS1q3ZK9JXkx6+XdNNw5lXvBUjb2YPYiMvuLGs0p2MPC8SRLtZYGuY1SjaRGDjDOlbx1jwa75NxsSosPgKARt3gkRx3DiL3s6N0dZsMhp3FCNT6iYcvo0Nt/ILm4/l1p2YW+Du0eXKXWSJbaHBpsCSxYY3faKgcQsclPOxk57vCoNAXi2qR68rmtYAAKJN/+R3yMOt8kV3uKD86q/p6um0S/IGXvDeHRsVyWaFU/6eM3hsuEt8EBtw6I5Mh3Z6vY2N66mLWUl0yMHHnqBHo8p671nuFx+MO7SxcfEFm4MiW1NFaGcsjDjAGdC1+rHKXMwtlhvgIG09e2rz0nZ6PZxXzpLPOBwa+41A5Tci5LLPF+t8gyBJSdYKbLUiUwNnf05DP7FdL4BLcDKSSlxi4+o3nGP+rDEYcaj/Cp4mfO7nijWk/mYB6opsfhHTO8WlmcF6n3zRPrRGqkAtfhVPrhfvfLrBfKJLmkgS0GffjZDL5+OkmkRvkYHfXlPJ1Y46s2M7a9J1bbKP+nwDxdL/c62/l8/7hUrrWOGQrPDW9sXp0NhfyPMbN8iXTqTSO3Xm4m6xfNgeVLpuLjcpJjuw/MWkcLC33teXbODl3dz4bz0fjpP4hBI2KuwDnbCkbd3tQ5/CdhD76QYrs5M1LuMbhrD2LrJ+MG+yYTV1zUsJ/cdTXNz5MQz8XgGHx12OpBiZ3iyuKiSfjpNqgz/On/yebpDTHJx1rPxugW/lgjdwzuNHt1i+AmT+WGhQHLFoFzMDJxyuj8JRd7Gjsuhn+maNUaj8LnlY7fvDfNK2SsTX74KNeui1JIuVu8ahM1uXkWMeuRHq9JMxLB0oH6svdOKQLCY96kcydNevMPWyl+iTqQ2gTyHtbnmwafMej7aEuezK7g/5hdqHe3FR3VfvwuXofKfBQXaJrZ9NtoC0md6ssnfm8KF8YZ/s1ZOo4FT6esAB6yTcRo1On/w7xjdow3qyiqX992f8Qu0eHE7C+dUj4f35wyZB8hWbhOjYL+UaAvEtBrXUr0OwWP64PTh9nLoeJsQW8S3My4npyPWaMuJQdSjUE5Y6f5Qi1/MfK+uLj9iDtDPTqm3bzK/Jng7JRj8d2rZy6Qyp61vG/H69vZcm10Km5j+cLNUnhYFHu311/Ykt/V1di5PdRm6tqyjB/aYkue5gmf94YMBHWpExlGtPtmOjeqYNybaKWvOy7WhjDjD9XkW17PW4hcDcru//X7A5L9dTmkOYQ+cyIaedF3m/a57+/f9ne/61+9zq/93n9R8IWADrpY5DmAAAAABJRU5ErkJggg==", + "e": 1 + }, + { + "id": "image_6", + "w": 793, + "h": 629, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxkAAAJ1BAMAAABHjCBZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAqUExURUdwTAQEHwECIAABIAECIAECIAECIAsVPAECIBghSw8cQxkPPgkKLCcUSUzXulAAAAAHdFJOUwAXSd/CoYCo7AcqAAAgAElEQVR42uxbTW7jOhL2Ed7MEeYKnUUvskv6Bsk7wCzeFQiIOoAXdQ8D9gEICN5lIQLmoaZ+viIpu9PtTqdtY2BGlvhTrFJ99UNKdlare7mXe7mXe7mXe7mXe/nt8q97uZHy1193a9xSWa3+cy83Uv59t8ZNldXqn3u5lcLWeL1CeXl9/YbKizXkr1b18vLami/Wsi7tA4tvtfelNkDQs3xpfY2fVz5d/sty8Fuv8I/K3/9drZ6eH+TgTzs9obPVdOS5HR3tguho9vMxiR7Pz0/PNlsq+uHOh1Z9wgnNZxt50pOOPYDGJ9mhDeUvBI3lAxg9YMrTcyP/A/Kt2gYfoPAJJsvG8+s/q9WXe7mR8vz3alW+yt+bHHx6fKNHbWknSSfJ3+ObnL96v5DZFCPXQaNrc6wTY6AqPI3Lo1zftFL0+qa1gsG3smiiai2Z9/gGKp9vx6OPKzsTYP2PLqLyfqyjny5fJbdByH10/Qn1rzgqeA9sjfV1C9VaXl5pOWqt/CscqWOYT0joiPmnyT+P6Dvl4dvVrZEVlrxADRhk8t4Fcg5TRif5IV0nqOeGfmXWS8+0/jPyad1IzvPLL9e3xrGO0Cd3HmqoyAB14Kjmjmbnk11/NbcN+rgwb8x6C3yGfDNt1312+fJ6PWuoIjnD7zpoMlUMaOGneeGSJ9khV8RzlbDwdQjJnetW+j8hv82nm44NOk6v5A6Z++TrursrW6u5uuImNq3jGb6ZKz4V2myAConO80Ug02/Kh32yo2/BZyJqD51hkSvFRm6uyXfpkFJbRUgr2dsOBxQnqk7uGtePAZQBrINyFCOVPMMUef1h+Z2tOku14X7lzzcYG3RsFoKLVlcGRAR7KRmR546MzJ/NkNaVARH1q3VvDDLLCxuLEnd86qT9unwzO5GbyCX47VVWt7lueE7IUD/3mqiz4qJIkMHla6qibioCC3CCWxtXA8PDbmEO94Cc4fPkJvqg/H69aB7hwzVaz7HI1WLDF1IglYGE95BpZsoVw61wK7sH5wzI4XvwSALObZ2oIuDaFkTm9wat8rHxD8hfr8EEJl0X5EkimDVTtxfodmg3ERuevyt+mQwZgvqqJXkSJ8sVpqPGEIiRO4Q0ZwQCGGZBzqqFWhGAcwcTVU9HBHxEvhsUQVncMB73XQD6wnQrsdFC1lya1tVNgVZvF4VyrQgWVbjoEFSneib3YzrBBxVsEhxKL7CZkZWPySfK1Ey/ppotxYLmalxbt+fE9Q82vFfaU1FdFavq2ZQvVV8gpoeMiZLN1QGnoUQVQbL5hRrszh0xswgW5UvNOL8sv5Mq/Aq6WrAgg/nyRjezbrSHK2wtc6ebqFT1qzoJVqxhgb5AZt3QLjqvVECEQtuW5m1AGBiwENBDpsa03l+S30p3M9DIDVy6YOue1G9j3WhPwnXrU+9a/LywYoDWvVLfnkpbhtR3uak9hp1SwPkNM2OmU6kg5pSomN1goVLQb13y9yH5LtoErEu1QvUV8qTmi89t7al8iSC4UjZIMs6kOJh67qprbSk6BpN5vvRmQ8N7C3l0wJVtTJnJ4aTq1JUKsfMB+WbY7J5gliGXR75pqG8C2uPiDawb5A9LtvUxrCw3wFmpwmVpuwAf6EmeOZB9rEYtMBpsilJBJmr+6hyLN1SUR8m58lv2qysVcqIZw24NhvUUaBsreu+x/NKxYa/U6v48AytVVAGEhQg5yMAonjEA2iI2iicpndJB7bZAUJBxMpOZFxh7I1Eu58tvDLr7p8YdPJEdqdTH8/yjr0EuGBu29fZdpqPmSrv6paoO9KwDSb71gUaxxHyA1/PAglF8FuU6sSNeyD1TPoKpNwdCtmD5MXMgyiy48Fz4Xqa6eGwQ3okQeURXpXpAjgFatGgx5d1C77bIbVSh9vHz5R+NOYucux5qFUK287c4N/K8UZ/AOkB+hOLnFfpkuvfnd3YiQjZDqe8i6aqxQXUFx8bQ1ts/iP6tFOrymiSto+8LrxQbvoJblso/zTT/R/bArsqCA7mKrr1ukH/52h6sFmXW8/hz9ebfQ2d+h8mflm9b8pqsrrtu4LW15amujHMZRzmVWU58jNann7nosDesOs9SlcO6jdo7R5DNldEMUkgCeRmdpZH+gnzvgmQ7dLrWTi3WHjLr+6qTndXFYsNfYdaH384YepgiqqbCYXqhC3SzO+7sRtT6DIceR+2c0aXUI/A1nrPxM8Y+Ubu8fa78FkZzgVSbaazE/EXttNh3+Wvh937pcKHYyOvuS5pSHwDUxeC7Za6Oq8q4m7qnK0hCOcND1ZfddfUzu9fXcPFYAVrw39EiwSaNZRxbxJwpH11WNynVlKOZysjmeV6kPqrb3Gs/i/ui0eUpuPRY04WrWaBrB6e1kBSKj3oWquiPbpy5dMmsca15JvQpzXicIb+KMXuZfDCcESC4HbNO8Qt2VYiO7z4AXvR5o74khCk6pZvLj4uGl3kGCEHG7HxMgeLEcrYSlmKagLmbdMzoHfkLQWO3lJjhx24dMWuNXYYr2N0TXf0dbnZj5FLzcKc+IxysFkLwrhE+x33ckn45dEYwk8Aygo0wCKi2mQJs6OhkprHEHG+18R/JN956Fzo0Nr41SuejHqw5vt3FK9N8+qbqQrHRvvj3pz3Lwyd4jqJxQZ0NZZew9McAmByMRmR9QQ0QgLd3KZm0YJxiti0+DIKfyQ/Ke6wCQ50nhpphK9yoR1gzB77J+u46ftF1A78HaBtbdUS97xD57zCP6TDuwz6EOCeu81ic93GOPDDvgzVS2HOL+w5BRuK4l+FDEAqhFSquKCs+C92e60l70mGOSiysRj0HoeMpJqbJn0XMsXzuVw6zyLEogd1Gv869d2jAFV+amj3W339ddZnYwC+dSg2NLpQZk8AqHhTdEA7s+Pu9qhkOUdKR4BQEjiTqB6YLgiOTsq5yTUom+AmMMk/oNLHwOYrLJg2SoMwsESFOmEMQ6mDmaPK5lx0iLeXHWZt8z6MYh09sGZUThIOOixw7dYbqosO/Q8cvsa4TG3m9XoaGLsmjQqqpWu4/ChiJQZ3TxA4czFRMsTcCcWdGRo2h0An4jPQ+pJTELsxtLxTi+GhI3PFY0lCIMoEdPMqEKCHC2Eos7VVMJz8eJPss5Scxntqf/0ZxDo0PiTWNqSgxFZH5QsAKVdNcNQe+mD39guNi6wYeNTIWDUQye3FkXdJeUGZPlIQVBCnRWEDTpBHF/zEu2vMog7Ib9SqUQZAReyRJM8oj4CpTuD9pS848Syxk6zKzjiZzryHWyRcjLuX7AAsT84stR7EfYiNYrJmcGLDy+wo04pnEvu/CL+qu+A7Xf2DhmapoRkl6+w6VXkVjhVigimGjYGA8pP1kNohhsu6kM+SzEZ+VKdEKAiClarZ9UlzVAtYP2akZxkxhIkIvXwf2Js9uT284atwdNChTstA5iAdE2Mn2E8FfHpTiP1Q8eXV4kdhoP2Ar/pTKzsIudjioA8aQgisZTe/k7hwMvBABcxiikQyaMByzIRj8cGHz1YSPIq/sB3PcISTGeAjVaIFNqwi7fOMSYyffYmOAXc1kg91+jcYQsJIEDcl9QIiMeN8g5sh1m3u9PdXyMdyX72DulTYTozwMYZhY3V0IouVm4oYAM6TNkJR4txnEDmyQsBMYJ568G4QuRh5igoEDhMnjbscDfBHC3Ubm8VAcmGmSg/+mIU0Tk4QNnxPLT3FX5TP3nYgSbpCfNNBMPt8Xy9aW+YmmMgsT7gzR86ScRpjJ3uBYaBRs+K+2buALP93aWmTo+speJhAzeptdHCYBb9hx2U5RQB22A4O52224vduFKU0bQXPDUA8MsuAsQDOGPMTo8mcj+G8UwY0QcIXPO2HGLBlK5jBMPIHNsxNLsVyx22azrfIHpom7LfdW+SoPI9vElCxIGE1BbnSoiTYioDz7Jn+WnO3dg9mDcm7/CXXh2Mj4iXf3An3UHY3c7UZwDKxu2k6qtiC0HTZbBnIrASLIs89vuSndbI/tJMYQmwQ13LCdJqYWGwjUjBt3pq0EyFZtlJgbY6146iCjyBfhoZJElMSKyucJTCHyxAaQH3XmVkZ2OsBhwxEtoTRM7EaJ5wkd21hiJ4gvBF8BdUNoG13/ppy+997wYu9w12v/0d//qLu65MR1JrpsqgwLmAc2IKl4piTXPKfke9+h6mMDntV8fU53SwaSTDIh5g5JANuSbHfr9L8cun1byFTwgqQnzSa5T8LiqJtyg5zp4NHyJQzyPYW9toXNfId+YrtM5IB80f3Sk8QEzsid9tLzjzx/OdolvOBMk51fzyHbWwLiHwwuHJM9A2ADvoFlAjmIPpF2wOTGbQ/z3ncWYz/31SurY8OT4RYvRCjtX7H7REjh3kAcuT/cM24QPyBlIZNGbkyTHxn1Dc2FEHK4kNTD2BqhSynaCezEcXJVjw6TDlkUB3omHQQ9il0H0DPaaDq0dimjnlYvRUCxBbBGIpjQgSrqrKFYNOt3ozEXmlVaBfY8m+qHJmCNGTRzMGcMFDaRnSH27htjaVPd2UHqOzb0txhF0VFpNlpfUFnxwl02ZCMvYWIs4I6pfTdoOJNsdijy9A1nGRQkA9mhygRfZL+IM7G7VZ97yF3Z4UWH+6fYVDeuH9xvMXdGXLdSpRS7bd6jErcTVHdishajpJJT93k/6zp5/9Hb6L6x/Tka7Ptit0JLT9A+DJnOygUzeMmcFS/FhR8+oGaOI+y4QnPBdEdXHYaNZ8RwdQGYhqh2qjVgL6rCUFEyliofqcRaUhxTls0xKT3yWKL8pFIpxFLJVXZN0r6SGnWMclyIEKV1QodJdlX5kN2gVpW2ueJwko885TGmKG95krHGKD940/PLmSO645h0o8aosgtniGM2Di/47J8+j47lpajCGmhz0K6ggbtTRX7yPMf+LjiyHjZYn9ADhuJSABtKzjoJDeKUeMsgay5TrFlIUzPICIIJoyI2s1BZWsirCv2i0BWsq5N8ET4KebOQvqCvDJVAd7YtGELGLeQrCS8NyKMoffDB88tPBaOwI+h5ZAhhROQVTRwu4UQyZsVUksvJk4GmtC/AG7T+oObX0XSHVUNYSvZOja+BDV1hqTV4zL4oNAzoP4VEKQndOF1BTSElSACqYl5Wo09SgGT8ADegPviYiQ22KeBJFBInjKGMEajJuwwqh0fwTtCHjwwSy84qrJR+2CHjCVuln0wGuSLpKuevo14Tz5EVLXkEYHGxeZoy+puiMgE3Gl7ESqYxvh3UWdd8iuZkFwtsVvc3dOmJFybs6DZTXUCiJNwXJY7QiczIioxaFQ/4wwc+gSMhXSZFAZhJQQMYcAgABkOAmIIKORZTyGSBHtXR7B1UjqGCjxgNfBEuYQf6hCxXgENCczkRJkbOHCVjRog0y8TbhCbGE+OEaZkjTerjwuXwtNOP8/kpMVwWUpmvAYsKoTwYtSNEQZ1C5nx3ClXM3ugvCiAhETlEfoBhEDEpkAEKFqVtBGMC6K9cjEAcjlJTgJWBo3D8ZJ058VXOsX9W8cbTjNyhE4LvlIwyvm6S8RXMoXTEsFNT+80MEGklvy/KEC3rsTWLN8GRNbBhKy7d9YOzITbGQJMRM5sCJfPOlYh6n5z7lC/KFuymnoBAJ+3RRmawUgUtRn7HBvfKhA0ksfIJfQPAE1uXBUiyIoOsCTnauUKJPjr722ilADzQTcDaSGxUbBRCjygx7Q5fH/YubF3mwDwFeD4/CRswqZQZiIrQOaXDB1MG1IghgAKgof8FoVHIy1ckhGSntAxsG0jjoH+yn1/tmHUoGC5qQ92tW4Eb/qbb8o5BOEqCcIvXF2CDBrBLWQsIivRSBkVKL5oJQEmzjokOUR5dVO1cc/hjL1bVG/seMRRnFElX0eJARoYl9CtQGSSlrwgiUD0pvVKogfSXraoEF4JIDzZAF7QG6+S3YLd8Vm0KfsYZWzgoVAw/M47UCEpLM2WAYjHp+cE+NJEuOBW+2vlxKcrTDI6hqTTJAJHKvmjwpuYHgLOhQz1BBNHc57CVPE/DhkbTzb5lXoDIKCaL5Z7lhmv4JTSrIR6EciHJD6enkAdMkUYJNAkKDjRkm4SPgB06ChrKT8KeX0GPVLSTUSLbsiP2Ru+Ihjw/21YexDb4p+fnuImXYPyIXX6aOZAoVmlqASCFok/VB5kxtMqgS8PG+jHcvWXEPWIo0NgcqTU4q8gBzkElHGQBBY4TjfTyjwAtDT4REMFakVXaNXEqg+iETgyxjQ0GmDBShgqLZhkmca/RW8fMztvsJ846CTgfKBdNsrYXlE0xqxpgh8sCfpgGGQYLWJ2s1m3vi2tWt6k8s6GOH/Jto3puIJbRQjkSjAezzWqqFJU8Wefo8pWjkcxeKdy/DvYZtZm3nY1Bdoxnsq+H2Piu00MZVilLKSCJGONHMwGifTFDmZ4kEKK21VH1uNUsXi6vBdVXiuHue7XIbotaDA3TQeTqfFxQBnPxkEnZfE/btGjV8ML+0bdj6AxWJmRrS8xgenPnQeUPj1QOnRuLlTf57gqUIToENJKZHWBFMWzQQo/U6oRGbop864H1Xh994wCuFcM971vEUJAxvMDBjV1EhJhCJ0hesKdR3BpSVsRXeZR96jsNc3qNoVfguiP23SEbtUaVUtYo+pFMePMth+z2leqU4lqEPsdRzSotILHq6OtnK6zkizs2UFMJL0gs8DqNEOxdK8R3KPbaseg96+vo+R0j+qBvnllVkUpLHzzHdk2m3oiPQnvauLDwk/LCzF0ojmZVrW5T6TMEvCx9hxoYuKo0Dt8jxQNf6cHjmVnnQKH6ys0/MWBE9dAVHMjewufoDsfFnrXyHGxYpmmzk2sSpZFKTeG3kuTxr/oFFtwLMSqg7K5SV+iRAQGqc1ccEFZLo4rLY2/Sf2vojV7UdtECaGRksjpQf92LHk4wGzkGNZeDsaO7/MqWom/KjLIZzKhybFxuno60AjbOqsU11YRM0wmFHshqMCJxaCbof/Y1v6N7VJsbL1STNIMXb12PQ1h5XZW5f3fLxlfRG3xcnWHj5SQm1cTIdHoQSVYbYWEAxLAwqoJFDbILrKbKo7l/4EXRWJUu6ljkONbWG+cfFhfRLCwKpyiqQvh55aB9y+s18D3ihBbrNNe8KxB30anAy8KyMht3o6GRtph//Xoqe6iWrttjBpZiKs+fmtaHmx3zOxywg/PbHHmNKX/AJcoqjeaEkJuF20CyNHFbHPfU9cb6MVxdSmOSCpkmkaZj8kjImww4fFUize/Q+vA7Rn5MXsWmO3qghCwpS68jetJJ/T/mxs+Xp/jiZ5YZukV12mxZ0Ncs9vA5OTI/Wo79ESii+0lZoeHq2xIniopsISsL4wIbR3XGW258bX9jv3DFETbc/m9zHBihuobG/HX6z2trd3X91Jq68gEZIIlNeRhHLMVhFq4tcboCxzo2VeMFwulblirn/JqHPIe/5hWXURVPWfa3FrBqYcMjHQ5i49RjuEsbdx2bar/MNW2HYShFExt/6yu6lLIUrllVzfsrzcJlZCSb/zd0bGhN1e0TWdfQG8TGWR8kAr0haiOleB+jOHxV+j9cnbwbJskWuY8NHARGKD0xWDRG0iMjR8tw2FOrbkqqvh0b+6tl4iKpsJAO1ZnM3M1fFvTzN7Pl7YhVbqEqK68I7o0v47jMb+SWjnVseL7p5img34+Nc2eG2lRYtBJj/FjE8L+sSOi/5iawTG/3IFUPqmfygg4Hl/x7nfr+Kev+ut74d/OCZQIFNW2fC+B++7T/uJth6Q1LLDavb6m7WT/KvwYNx4bXKVzObd34qnpjUWgocwOrgT4dpvoG/hy+oMFj0+JWrkBDN8Tc1bgW8VBtuBLnco7Txtbxq7+xui9+toU0fD4Q9cYY69vMmL+Pqo+Rez1nHi1eaFaV1kmrSVW8erFHRrreOPlTqPdPqRnxoCEePMC1RsyDH75VMn2LaOtehpclKjaWLrhVi1pdVcy3JVWNHfubB/Gskt9oJdH0/qA3UIz/TmjkI5P4aeo9LwpTWgg3X2f+mIIt7oV7guPYkn+n9uiw/br5DXuaoZV9noiNLYvzFkSdv2kmL0KA80NYG1tNUDdmu2Wrhb/UFZoXv0rE4uEElhg3vWGu33nlOlzPxO52eBgH1z/GP0pRz19uND9ChuUGjHCVe+1pPxVXS62BuOHmeFU1Yv+8Zk29gXyjPuwdVXYbroOtOX6qQGH+YrP5MarGlbYXjXjd+pId6mV4xYh9db1xdAOXSzguN/8AYrV1f63wU/TGtEVicv1qkUe6fbZqwa1cd7+V+EQGmRGX2PCakaY39vsbtbFODLc/RAE2FVYla935/Ww8rOz7HT6pv9X7bjGqfLvGw/0M8/tMVFm14TBc6Y1Le1TxitjYL01cPkJBXPFYeVvzw2h4WMtzt2x4bKGQuAiKlO7zuRJvuVis4dj4UuVWibturaE9fKctFd9ytQBAnD6qCeZvQ8X8SWS4QUuMxEWAqtUYthL1hTFlcqopDsOG/3eU/co21QIbWPInzEhJY7jP9+Y+62pEJsJbwNYllYcHTW14TVteGFV8kJCV8JyehA0rUKdNBWsCjxQcpsJ7SeuK/S+Jp9wKCy39Ghaiqpe0WehW2XBl3noFz2nT4lR3kZG1sHHpRdF8tsiUPsCLrzsXDwZGNgNXl3pqYKRbU6WbVJbX6OZtOTZs+FozPqTqZv3+Gr64/WMBlFNhqbiwo8Qc76vTD0+0lz4QDHGOaOVt7ottFRgtp2GMcUh09TFs+jrM3eWy+KfY6+bFPdtEWTVwNWyK1ySbr6l4+D9117KsNrZDP5uUYd5n4B/wpjx2aVM9pqAyx5XwA/TXXOstA+bwMJtzSXcqmSUo2pKW1lp6QzK0z29drZWSzjZSp0BxQvDEoDCMyjjC6VjETU7DhaNwbvBxg6Oghmg5vO02JD55sWycnonECzsN6qlYWu7YlJRwFjUpAxriExVxkcqsX2TX9AFNrCsGKDe21X6fd4+3VM8EqW1m3GnI4pXEGknV/jL0kWaGA3LW2XpHFRTj1lSdiZQL1I1aXyoMxpZaqh2JTVL7poQ4zVu9nRkSaDrujKG1W5WXWcAR3oen8FSJYty1TWcXxwtx1B3DXS0X6GmBBjvr5lOf9vGIyLQHCpBAA97ghmBAHueGt1TmpiAdLvdUfWGcqjctDdpaLBZLnMXXumo6zfg6tW+IBahOGRpjhgCk5gy31YhwLNJF0WAWbqX8nUO0fSm4F+91L87QCN5rGHIDnc/S/wNJR9+q1AQcJDDRCZxiri3P39rcQj7fbrBggIGqKQPvontxFAwgTpX3pIeFj74+94ZCduCy8gPZhUMawbay18gRuT3LDPHTk624zBvle6pec4Pcq5fLZd5nZn6273iIZg9F0mAoMyQF0xdzthJc6gyciriIdLiLIMM8tzYs0FN9+Q2U4aXaoqsFzqs//oEaYbcgLxYFJDfjVR8P4iAP1tVIWIO7ipLYM7voIvuNXtQ0yIreEoNnk0Tz8Opb0xYIhvwAkJ0fyHDhjELZ9SkSooZIebz464T4uZDjD7z7K81Rjx0umejlTMBIeqWHen9m8ePUGJ1QqZ1OFkky9yUw6hRMzH650yIeWiqW/ZXNDeZT1YKoD8HAkwJE/JxaJc38TbcvBkUeKnCIMKcgQTY+Qp7+dJ3tmlj3d5B7Wme3zYro/uQ0rGxiOyK33dlTfWrFpEkB7riolELTZ/gblQSekpCcjYAdK2kkFgs5HUuM6LosR73+CoZIQ47i9ZM9mmN+w+A5vSkjTo9W8CQkdM0NFckgkS3SQ2Tsg2vPVMwNVu8fLTfqwro/yw0+t7hFMc26+Z6l0N5RPt6XGSyQsf/MdzT6iPi6z/0rrjxZFf5ggroSeHj6k01sX7Ru1KpQPuJhvgXeTGBNbIHP6fleqvEdnwUi2uNmods6EjJVOvheioSDxr9/RGn2VXwWt8PJfIoVcwN9zX/uhJGMVchZ0Zx568h6SdkIAqPDRAHnstHJ5s+tFIhp2PeF60bgU9GJvyW5RKdrMswfU9HB4oEIVWaPHQuH2OUJeUqKhozh194pPjillBFV72Of+Ql/KrO1OPJ53o5M+6+9KLN83+3Ui9U+8EY1hhSOraYxFOwCZqRn+/7TRAknLpXkBh6SHZ6I+njNhKeQH64c+luh7m9Jx6soOeQbat+VHqdX67ij6JoYTu2UaS/JdmnimQpKGq4bB86NlY/iH8CpVE3z5zdeH9NYvB6DduY3TSzdlakTrBGC3tXohMlHi3S1emc5qRV6KmmpZPYrfZum7+XK+1A20CaaXLvJ73c9c+/UzpIiydRLNmeYS17jOGECiHOGBCVdxkMAdRXE0tGHcGe8fN0wlgKqadAQaZfzz1QM8B9KGlptpyhHciB4jmfwqca2M/qt0AxNnxxII3VxTazmBtHbFtsK7Vf/fdNe/PRiMARaTkZkk6TITRDlR70MgEUkXdZv7KWobGS93eRXBkTYVFQTK8eTmWuI59sRUd+vb8BU7et8tJd3TO6JJwxbCQeSJIULMrEAH9fviuPB3lRmh3sgs7DjhZimUG74KhbJbfu8NhVmEaDjkfHbjgk06uHSaE4YVqjUqalWynYaWd4pjIhuxRWn6tWeqi48i39Jg4uTD1m35by5rVC+IzgzBy810crT8BDdugp6C04Nsa1rurZc0lgILoJVw/UCBIywXry0V/RoFkdJLIr318291sRFIXVhFOoT1fhaKQU9AKMiUwtwyYoqQOk+/AWbkbr+gI967zgV7cXZmxg26b+5CnQ7RxRAg8FTn6oCRmwdsHBkZyRcwW07A6g6Sg4G0xlPx+nv6IZI411sIY76l+3F0Uev2uPpFnjB0vwN71Vq1N9IBQHcQwXzLx3CM3e7BhROLl8ZL6TxzxgjolD+p+77y8tNhbiGglQt/g4tLp6Khut6ca4AACAASURBVN08wZi9jEtaiPB4+E1u3BPdLFU9Clew26oLiEjuJCBK32HZX+0HOEr7Gjqf6oh0KuRT5VQkGKcHyzgfsAO7P0eZ4ed/INsrJTqNdA0Noayo6GO/qCwcfp1Upr+COFX9FflU2FMh13C326TnhvH2LSkhE7fNf+aKzg+V23+p2zDkm+ulwPZU0zZx7V6oi7pW8cIYbu3n/rCnQk3shl5eCsfPOTCQ7MZTstHPpowgzzhjn1+swqtO1chUw7tO0sNIuIvDPyNkpDBOVRspGluKBar31+qlcOe//NMbkwjMWlhNn3X7HalTPH+PdK/Ts1813jNRSyW7JroUq672H7i/QfOm+hqu6AomXlWHz5aJCzBEVX0sG2uEyznyizTilE97cImIVLLp4x1TVynNsAub2JXcNCvvFf2lpvbY2/1ZDX+y/Z7kc+vpb/FUtJGy6du9VHnICH6ROYsvXiBNTeQExYPzglU0WDeyrsVVu0/hKOyHK5QR4YwcDr+3SwZG1vDf869PO1d+MBICyRynPDeSqisFRA+G6EbXSZf7DPzuGQyR3LCyYS4jKz3A8QGvaBIaElA1/Dm2f5CHu5drxDM+Pu0LadEorxDUu1METITd6jJDeCE3oMIqUKDpyZJybupkHsVjbvSRTlVoL24tLtYNBEYQU381EKf5PGFEpqH3AnTwzkHTp84IKfAR0jUYveLKrT9IC5ud2saL2KGOy3qjLn6bxo9orXDbtMXc8MOL72KJ3E2bIjKCVAzzNwpnye00Mq+UYIrKJjhhRVNG1WnJkF5XHypdNjHTsDCfKpjaD40E5QbRFHabC8VA+4nWKsXcgOQIlV7tA/vfzabSxHpJ1300i1NmZH2oKiPwHPSI1pXkKMIZEXdiNJlckI36/XXjfYEBdacHMTmysw1+qLqRkgEZfKMBU4lhEDpDI5gnC3F7GWJR2fBHsr/6Q7q/gKhzbgzT334N/9rp6k/O36DsTmNNOTXEZj0NRoIpqwQmhjh22+VK934Ul04uaEXmZ338gLapNrIhzeJ0W3x3RWhWHK5lQ/TkjPRYKeiXRmODMVZ7RfdaKRm9Y8jQsRHODYXTaTP+iyjqfXmciidxFTcdV8shZcVL4QdwdfiRavQWchMOvgbsFtz4eULvatsMmfh47OOfKq7jC2VF0zGUg1wKqsvfbYqk6NUSp789einsSjZQt5bgttLQIBj/PKkHW3I1PtxGbBlFlzjYx2Y/pOEeKTfkonVpDPcr3t9Ae+K8T2QyCbO3SKcHQ+Kn2l0oI/XbIHSIYZhqqbqQGxYP+nCPW3Xno/hH9htaxWUTu9j+XW4quviQimfElWkDRu5fKSxdDSxk9lQS+to1sLCzcFAgtHQwRqIPVafrDZo3fpFt97lgoIiXAhkUUx3/i7lR0cWHOUwmn2/JoPETWOBHXl0x42ChWCVEDjRMcdElJajL1TiEXZOY4TqFhxk8fdHdH4053FOttthSDT3VMP09kQXtXGnROE4I0crFrh/zekmPIMMNuq0gUpQNAt+GBawM4zhxmF5AGlzSbpfVxLI3mdeN5YFyY494OowAp8uvvX3rG5aS7cHx1QJVlNlPZlGop8nybWohv1Q6ZVh7K+9UYOFaPC689Eppm1S9P8wb3TBvINfwPXSc9r6HCnTma4yTkKKCSSH0lFxMlq6Rnw0U4ZpRVcJo6+xngQ31nVpIf6vLpsIc9dp5uOgWVqGV3hr/3rv31YXviTqyeA0eqsH5C8y+EzQpUhj94IKIINitCPxsx2TTn38YwQ0ePCVzQ9T7nhvbJfGpZPgrTlJQexNeZiQ1dIHQUwVrnZyipeo3ImQKSqduVPJSdSwyqww1tFso9aXpSzkPHqkbKIrlGwO7GYfx02P5BGZzpN5Tbr6tzGf5lcZAzs1MqMm0cks6xHBo5TAI9yh7cWJFn9EUCuvF8YQygoa7d5AU7ohIGtUNqRkBD6FSDn66wWgKN2QaTg1x9g63VFLLHVAf2eEeP5Mb5KMuri+LJTJ4AAvHrGzD9oH2Vodw6afSaPSzK9SR43nHhwPhzgm5isNGZ0xDH8ZlE1u6bigNF8vGb8yNDf2bK73r89wQmCrFmhHrOCOFjNQmxarSRYtL8KCSCVUXzqIyB6mkjHfnucGAel1c2+QWrEj93G6rak+3MNNz78/LXZZpAdQOzEhsht3aNcsxEJKuigM601pyf9sZbstVwzm46qKu18UvBsACuj+ybuO6MZSNw2JLp2k+cusd4majGXvqZPdySW4cYo7oaYrN1jlzR2ht47LBbp9y7YFSg4CR/viRukFl/EtvmmGHu99s1ngME52727Pn5/TmWOi8ISqNpJbP8cSMe+PdrhuqDKg62WsEQpsOfvJi6Uu18uvievChLIbLNwYQqDqQH+4WD1ojZLieo0i0j42KXL1TE1QaTUBuVfdqvCkIxlMwBRVmUTHxesOLhfZULhbntbjcQuEOtyjXsBatmXINV3RhLm2SXdFqX+tZHyzgxrn1zAgcT1NZgiiYsm/E8wSFqjLXIwmJoyG6avKBIyw4ZPorvBeXnoq5hsuhiu/pNs1ujvHhYTa6HaIWM1W796NxMQI0wDc4oZA8sz1I/BsDb02bzA+VOIWRQPnXUXV/VMP7sro/G8XRSwG5hhuY5dz7wxmkDa6fzhhVjCEIjeldsxpQ5QmhRnyvqizAbZg1srLTzbYt5kZvqGFftKfqzWdkCMbf5bKqNvee+5t72ycGntLWXl7cBZGQWW7cSo9KlxucF1Q18mjFFD4LNYp2Hi7nRundn/mMrFhOQ17RO6a33TA0uqPHepBUmHQbbvZ4zcg1Mpq6gCw20qQbt9I8zblQIiEYlQmcwkOl7sQj2V/RuiHmxMJu+7tYLpDAgxju7sV26jn6s+gsG7u7NAoHeBeVvlf1dQaDMBNakHQJieVGrBvMbpN5gxvcD3DU9dzfipRmuw1MlvHTW8cNUGmfeYLB1ePgopxJ0xRoQW6F65mNkRAeK0uOapwbcpmm/4iPuhOq0J14SyLMTdO8RjY8PdHfJneoDwccXKmfg9xSKkbKt+WvJtFnOptnho/hneCGgYZ7cLOwr7J68Tqw234jiNtlVG9AYbJhasJSoxlDIu6MrqVixLlNE5it8Ak71eibt6evNSgmXZRvrM7Pixf14KnHvobo+TnkxjBx8DB++h9x17KbyM6EH7sj0/thwQvgiLVlo38dgc4epOEF8jY/5frq4qbpkAk4OaOZnC1FuW7f5bvf95/UEl4cR48sjN7YpJh4pIRhHl6YPI/JoakoHVwoOCk4MVo8ldDFe2NG3A73VMWiVyJr2HNvmB3yVnTR0d96kfqsuug6fufFNZUxwpPLCj+Eyy+DV1IYTWby/Bu6hhg3yPFhn2pTFR99/HfPyBXVSfCeAU5vWNRURSLvvuWPE7mVQ3hIxeiWwR2agE83HK5Z01xuLQa6cGLXvsMln9hqhXn4X2c8dNTEiKI6bIIV8pt5Btzxw5qoieAEXvze1hPMpM0VYQsoIqmo/URMrwt/Y8MHDvparFb1qSoHWxs+oaf9fLitwixuNWOLpWExwqtoed4tGhYQa6mSX1Bh4OBHinhNhuEZgcO9cULpNYufVRGJ9lR038iH+COYwvfb22h6Lv4YLjB056GoM8b96Q9A9CQQT5Ghcs2tDeF8mzVpYuH9VT7NpjfWsOZG5f1RS3X6G8jSrFzjMT9v7F7V36JsQCBvmxuHOIze0tFGWxFOhOr5wgdp1YBdlUeJ+DeK77CDAT9PfG4CZuTSv25sGiU94jaRCI86DHx2bKswgzvh52LMcOHQ5Oyb28XlSJBsMPhOsF1IFc+r4B03bvDtr1LNLtin9tYZWYsbyngiblOhu/iycPfnS5KDlS1zRuEofgyHv8ytS/vcoMFLECh60r9G1LfaoZsqzo3gTJv42HR9Lza/xIndCJ7q+nMEDTPuuqUFeH1b19W6WUOM4gBm0/1UnkF3ehFJBIWNLpunapBYtGfxem4C7a+yac69/Tc20lIR5PH0t97FI2mw/sJaRJa3W4RiC5Jl49uQFzvbpOTXawC8aJ48VNJKoXYMof5H8ajqXGYxwHyBc9fbHx/G12ipPhimUG9/sV8o4CqqChaxgYkwFt2LHsUFFHRKygmv4mxYopcEQo0M4AMvRbyivZjEqhVmb6whP1W4xI7VfjER8pOqeHz50GewW778CYZqG7N7plT/uT1r3IziIlIv5CWj9w2+hNvUh41IUnDbyZaGtb9d98ca0pqSUQpUNzg33vNxO+Pb+/kvIfnqFJ5ROJgVvm1XhTUPFCaSrZGK8/ai5lEms3gS2Xo9vxorWf5/sOlP542aGue+9w0GN8pZ/NpT0bFpBoe7e7ih2n07OaKRwzMJPtszxfoVFgvQyuYWVEkP4SE0W9vpD2DQdZM+8B+EY+S7OMxQakvVuqF04sQ6jPpAuXGgDveQdz0qhj5UAhHZyswtKHQ+veqDVZahIQXUPiPpN2OG9LU8aSAcOm2Y58P58ita0Wu1iaWy8d8HXZuowz088m3f3X2Udg/0tVvVdYHmsHnubrMb9zyB6a7/Ln/uupoy4QrdEuoaPbirRlLhNgvFnz8bQHiqkVJfreiNUM04N1bU4r6aTeP72ggsNPYhzllU9fEAKjSZvHxHJi8Vvfa1mATZEPph3AMUGouBusO9hRr20FE/qzgxgdT/rgqp2r9v+7S4uL5mpYQ3YDazs7RPP9/dE+L03XD7eOozeW7NC0waAzaHulBnwsDb20WMgjrXDapUqvm5Gsh/40ji/f8+/+0eTY2oqFuI7cgDtYUjGZZUIox+DyIi9QJ/eOIG3Lat37a9raV7mht13Bj+oMP9jbpxXl94M8J8cWLv530XVfus/VR7Amdh1WzytnHZviFgQ8VNbDGN1fqxF/9K1Um8ZoRubpPW8RFn8fG0YeLfurtWdL3ESm5cO9zwUa6z+HXeePGtLyvkVo0UBZxQFCoijVT0416ct2DCwlDdf5qDhtgIVLWdapgsb1QNho5/XDfexvpQrScKrF0wIxWksMHtbyB54kxWQYfZreHnE9NCWX4QPdKnKoqXZRRvsoXdedLtLYDothwsHpFgsIRBHirUDh8M2qe/mUts/1l8o3uqU3XRCqxq36GnUoqM6hUWlUsAaYZXhlAEu9PfSnMLcGfR5ZQ7hgftZjkMSYPh/AWYg1n3VIrgOXfU4KmJWPmfQjSr6sRlCcCze8aTJSI7AsCNNmsoMsEoAXFBPNLhnuV9CqC+GtjToREkHGlASCw5HNHMXHs7z+K8GxHi3/BBZeOQX2oVlOW1UhXPbW7AU9ncAr7CP/OuXLvbkIqH6SR3yRgU0MafP4ekYf0xfwPs/fVESa/P7Q9yuNxSEQ53X15kTOpfKScmEtsf8zbJyu+79exzVnGKoeLOqvi1lFE0uF7U7bnWD4aMDA1B+e1NGcrd6wYs5ngW/2/k29/7DwRYd4+2tuZwouIuoqnK0MJ4szqff6+UNZaEqBHcEyULqQDsc0LtGAb1XJzUjfE8khnKBYJI577zBjpcOrOs6l2c/P5mCscXi9zPb44ZTrOwwaMXyLF5gGe57xIXgk5+9Im3MB1/0ahLdKsdkhTJIoIGV9g0/Xuquhhz0M8TAaoORwK3PcKK3X07IGhrBRuyjcYKF40EMZpxY8a8VJ4A2aCJYH4a7fyN9hbrQX6bGNPmNLtNKhqw6HN/nRE9/l2UL54oNw75VfVC9oRiUYYq7kFsghHRETzep5IxeA26qp4kg05Kxw3kQI1H0nuf/xsmsaTur5r2zYGjC39D8VRjbXGvT9U+5sPLloYaEDd/T9TZvHPf/YYqWNVIBrUFhEqhCAnFuxaKAJgnhj8uHklluxsthQs0WPvnhgjikhfmnnVG3l+Bm9L79xaAHchPZfOj1sWtUwO7o5SAvZRtQmRvC16fQtAVOsX9bLB8aLfplBteY7LVteiFw5XcqD6xA3Gb6NiUX9fb8jU8T2WHydwSSmAqy3bHwqHI2hZjRTFGgE3fspOSxaBykVnlBTmRgsE+IfoynnX669tT0evIA8d4GUhm8ljpG3lyh909Z1mYLRxQV41CRxZqRoRuhZL05y99SQ58mACDyeuYWKEC0bmO49NHaLiY++wYxZVUr03d91Sg71NukCLStYrv3/fXh+oFhSMLsFDQIUDsFI/xzKyQ50tGvi+Q0EgkmH7IIBAENE5pkNxISV+o5Et4LeLoqUaDqPeexc8bAVSxssXx+hJfg/GtWDxO0MiWG2owKqqFvI+KU2BnXriCi9jtzJDheymrG/L5y/yX5FfJjVN1UHaan1Y7uszidW1Yg3Gt4h+0Ub/2VFQ4XgBQFwlPaW69qiqKuZk4LHkwISIuCI7UpwdwjHy6G8SmsBnBncSIYA3VKQjh6JsbazOnodw4lj2OQM8u4AiGOe8iGAIpVDShI8zEmUEjKRgd0s/ldgYPWAhy4UZqyLRxuxYZGWtIz9Sb6XZPXHv7+ItLcgx/T7Q1PDymbPH57Y0IgpEhyj1JCxQMzH3LwGdFTQkJvAUi6GlJqwd3tw5VGNyrpQPHSTAjKjLZ19MM5ouC/FwNRG7ax5eU8KhU5FawIoulRvZo57wgr8MzuPW1DqWTPBdc0sByoy5xrb8a3D6dcbjXbyUBqja3wt297uJC3/g4UYcLZ9L8TC1DtXEQH6aWnm9e1KKuGpdEbaEf0jr+FMMSyo2vfvDKBw8+LZLPk0lu2CV23R8zgvtGDQfpU5FW9AsWVXFrNicxRr8Q0X1t/EIP3bDoIXgo4SQtLCAyd6N3CjaD27NldZzrxnhxCqxd91QblacipyDy3wBK4S6eaveP6ZJNol5ghe7YF0ULPWajIN9hu7KqjndAdtTKQXZTsqEFOd+xkB2EKjj4Dk5/p8ptUuXuc+95A5qfJE58Wq2uz8CxHMrWr0aehhTJ4Pc5S0t1ivOs1/mjknk4lGSPVAPttMWt3vokNxqAyA3kE2fxwQ8cv7GnUn/xa45+VN+mPe8rntzdqhR3doEQGji7aSiJaUZCMpnsVMXqIDUsOUB0DZBFBxjBnEeX3igHboN2260zTR8cri5G6Nmk419Vtd89mRseXS3Xm4YBC/N0KxVn9ucBrGNd4FYCWW1zgwPYOqlC+RsBSHNR8Lmhi6ra4f6CN402VYQkWg3koXx8zz/Ttb+NRXSE16imM+7cV0zx6G7RUKXChKwYkj/zGTiEC0JAmiRHJnPrKQlNcKe/k1KUMYqfe3NizwaK5tzYl2drhUUcNbZuDm+0wPI8JmSqjCcPUz0uCSk8uMM3Pv6UXHlABNIgt7872cGIEZY1pPnrpsPtlRu8qeK6Qf7i8XhtqQ5P3E1pFLL3/XHakaL8fE92CjrDov41Ed5ObnErN28Z+Dx7aW4l4jYj4i8Oh7mKNOurwVMX6gjG9ctBwoalxIeRnw96zUUHR8+NRgJ8AuLEuGFGcUqMf/QE7q7gClxTPEgTCUF7upTwKxFH3Wfe39tFyU0OF90LT4XcqF6Y6bh/L087ixssgQEiRtJQJpnKJBSZ/2bRIepCVoCx9RpsRchjADonoHX86P3ADyMNx9HmjXPfnqq+VGra+/GXPM2oy3mazkhUOZfpdkqVEpbW56pML7xXD18zCdXgw6HkjORIfW1IwlwkBicVPWPa28FjoH4DqGqdmL1Pfn/X7LiW8fzzFldYr4xNwHbK3/nU9ieXe4U8iPdxgmWfrc6L3xQCWStGTM0eSiXBwmJqgIUpAqzTNVUvHO5ZQNGr4SMc6dmYv/19fjs/smqIbBXEFtW6T3xN8nJDBSOTIKuRYJspq9uDyqFzsUjyYA2N9ahO5rfJAf7GWMGGm1shvT4YdZTxU9U1JPr+8diqvux+VjVgMorrEtrboiqFMRvr9daNGso6QdWeSxmgGWJCkaArga2UvDae/+CXMmMUMg0Vjo0yBjrfxTceT3WNBV2bcgW3PW3k4FiYtUn0mJ0Ian6Za21tAC/CW+LcaO/fg9DAMWQAE9Icwue3IdPSYbN4pZpt1ut1d774Bnq4dIolx4eWvf/TA1MWn7KaFnpciuoss2RsEjRF5tDOug4JshYUBRG7hAep51/8iCASZvELdEY6z+IbLRxj5TaRVnSsRfxZ2hVchqLWjfo4Ud3mpciCAbIpbosBVvFSU04YQY4aN6nw5RPVUPcbP+vf8jTbyAr3WsdJR31PzjSxqdS7f0sNLIMFPhV9BY83ILY4mxrBrhoTYSN36JMNCMMIhfQ63DBmFusGpj++i19+wWOgrsYUM0Ls/Q8axR9S7t59HY5tbPTxGuwzTEbzHUcT9rIEyjlNTRN1K+K2t9JUCZVsKQZptqcavfkix+Lc+S4uKpNcxgmHe7xBfv5gCs+Ae2Yn/6XTt4lWxJkKrr67sBa1fUjxqKnQrGibEIRHx3DTw2Vdw5obvXuqMwytWSt6YKlo6qkW6sbDkJ0oS5E8Q+wrSI6S7/ECAkSG68AxOM9Ej80ZXGbIg6VqhUAVhociUvWARWRyM2Oj1Y33x8nx9zJWGua+KunlJ3VVCrf1imyATZWFYFiPK3TXdm8r68IWvant1e1DlRaeKTi9O/rGRTDq/yfuSnIcx5n1sQVQPoAXvoCZ6DVBGm9N2NDexm9foG7zFIyRsmRLSoCZhezOrh5Q1ZHBmL6hNWZEXLT6DmXUf37bU7FtAwLZqs2tkPNxzPBLFTxQ4XBOWExzOmydQp9dddsLztw3VrVVpMHDzqQk3tYaT1Xo+0Q16zvAqOPl77/fZwbtCoVimQz6mUc+H+f06YViKYZL1YoqyGEvMMjZjt/VqW9t4ZCt4f3FOiPtZ3FcG8IvoYM91a0khzfXpn/7ijjbvQqBKSYWr2AMldKPY3p3og4sqOpq9RZFd9L2nKfwYGgyzibGioDc2UFZRO1fU5BCG81PRvDcXwO8noUv/vM7ikCkYMjch4gEgerQRsqCO/2UYcnXPgSjB3GjDur0gy2TSCNU7DHHDVZY1+DiKbYTqCGt1Jtym07q9wf0jeHSXwJIW8Tf79HFCpnBIWLxmqjPJceAKdDTJZk0lJxRK+JJR4X72VDho/jZ+pgQMwcOyY27dbRufRc/KYTnjkax/nK++l/EgtnHAu9UGyZLW4pLJu0ybjjHT5VOf7IQcYo+0Ood3mDoa4uGAKpeNG78AZ5K2Bt433iCyCSq2v/8IjlQrOIsUUjlsZLONgq9cl47xDENQGwb5rch2OAGA5Xi2Gyb+qzdAy1xed54NPZQZpnJO83ioIe7GxXtVTqSbanPQgg4p6iChUtc18oxgCTA0LkkCO+YpBE6nfDCzNzttgaDVyN3hrf9AV/cGD7kMRg30Iq+vvtZb+isvFciUxT3pTOTj/GpivP9VBAtndJGuWQ1vzpDzRAMtBn3JpSAzR8mN17vhn8tZvETCxsCm2YoXpjx5v1uvrjnZaHBeOrEZwSOFkmWLqklmYGGEDjHsZ5wsP1T4NQIW3Oi4icfZG140nfq1Dg32JvmXnJjDMelTBv7iAEE1jEEDe6nyLgvJrGJm9H+Yu8rmfVSVTcYg8AYKmHmu7n3KWx+q2hn+ED3xdY9FUrwilb0PaOu4c4i7s0iXXHpqWpwmUiWvvi0h1RzlwyfTwa+0NktlXvjgH/5CBNwG0nwmLXhsbVv04mxhgewpumhqSrGTUsHjX9fEiOeRR9voiGiBEuSjJzLD6diFbVJgAwY/Eg5Z8PxLQJu5VPFPdWLR792d3Hc4D9ER/0w/hZvl2hYmP823v2icTcRJpMXU7IUP8jaslkGi1cIy9KGRApHMN2s237LqFDT9tp0QB31mfGvVU/1EMgImAyAzOQOurivwmF6KT686n4wLqxtNTdCqlzZjepXMI/UzoK9iOCRW9NrBt3Wom6Y2x8M430ACM8NFlX/9jVUrB1J0zgWbp01CJjg46K7qzMc/TeNYWLF8FKEodBWEG+2eq+6N1l9qscfeSi/WNfwecg96IxcdukoeAWzlc1tMk6vJDI8pTD5OWpfgTinMBGqEAtqLheu2908zcbpoOi2slFXQFXjHa4uqjpU7r5dfnYGhBiWtMWNqnGLuZEERrWgkhACY59V1DbUdJnAba3uR1bBnr9t1CtZwxfdN47HtjtcJWGOHcWQx2/Lm98jpeBNGWeUiI+KeeZQpHlSuBOWRiCpBBFJUBcT9uab9lAIEtmbH/34g63emTEAfSZiBhrjcM1qBHIDNiPXa9qjpM7pQLkRCVrIRu3C8JsBsrGwMKMSKkd2q/JsAJ5C6AurcJ0fP/IBBarelbsbzhulpRaI+hMO4yjB81/cA58ifh/hO8+IRydrMlHX8R9luJMcl6ZiLsRaCkYALChLaU8YHGYGxaMWUzihM+nf3DdYvO1+y6ClUNj7e0q4vWxQbqh5ojc2ln4OyWaMM8Ta1arpdJaGX3GO99TuMGlw2XxR7MUff6Cl8Dgyef/eldwAVPT1Z2d7Sxr10c58lg+Oi0M/M2c4PfoVocIkXnCdqIbQ8EfgA7e7o5J/IZfk6FmAVYJRUNETwngb7baXke4G4OeNfSn3SYkw0tPbokF2Gj5+uGa4ZA3ZUyewKfnSIp5DhUVw2wfBYOMx/vEwMGXgbo5NrfFU4oVZhPQgN4rd+/9tqhnkgMw3JgO9TURh4n2hX9CsCMkywqWp4mqBdUKVK+xNw83A0r/EAfMrS8Uo6VHnxpt2WxuMOs3i8E3RPUHZAsykrzs26eyjwc59QidjhYQ4p4/n2KYv8fU7kVgFEwICv1Hm4Gpgt+7L//T5nw8lCj09VGM7NbZVQyfnJljdNff7I/oGXpvuhb1/S6Bqv/2l8nJ3PbMam7gosqjL7OCnvpVJVyGVcCe9UYyWCkFv4L+ZwmXU6MfIYAnnRRWi2yr8TivtNrYXP4y/onxDqpnfNvhF0n+2Qkckrb2viAAAIABJREFUUhgZkfAJHCKG4HT/1sWtIyX60Fk0Aul3yj1j/SNFzxwcnfGNkh73Wc8bf8LfKCKTiG4rdQNEX3ZcmyIT/Fh7SinhrJcg/a2fyKGXNopBhWKAxXw+8QF3xr6y23VwDZoTXC8wKuDlBn3VswgbHqiKH+sy3sR/A7CfVDe6Q98D1tBLh/vflt6WzU2i9rZkp6EAkThL0xAaWajYroaD7Fw9WzjhMm0OS6CcAEnNLGGBh2roCvnxJSj1Y2vMyKPQDQlP9b8CbrtsAvD4Wt3Fik+J8RKJo89dNEiwM71ZmRgtF1EFCYY2tnHwc/WbRvVijAf2t+NnT4pIdN44Ttk0TeYNmf4O5anK6VKoZn5j+Y6METmr7y4Z7lJuLND6uIyzts6kaNjXSoWFw44lCG7iS+HO9MmB6IZcjHmK0AiLKbyONZumleanaCkg8PPnssHSOmrVMMKqRA9IVC28PlRv/nBBnBt4LZIq6JTQKrF6WI7Gb0pHyTGoGVkqCLiIic4IDxwNeX+Po/pvwJM5oP9GBE7sKsYAX189UQNYYicJwY8sLOPMwtCp8VJJDQaylQ1VKeGJD3s1W2mtQIKJgfnH8jj1hdLVZnmkYNwYq0bPOiOvGceHNpxYXhoWsTDAU8XrdQNIHWUjRX0KwVRno6XqP6F1hA5e7I5VyEWEI2kEDzX+P2xHhrgyfOc+0IABJbyQuXIJR3cfh78XPlMHvv0191B+nI58Fh9ASc+Bx8D664a3zHCCJSTVVRVXcB9nDkxyATdCR443U0zpc67mxjiLMvzKzXD1irDehfRdKMEpxaQv6DaKRxGZnIziLTixZRQn5GdfQNEpXX7OcXU86OZ6rrW4vXpR+yXXPnNfMk5kpe1JneDRS264Cr+2bS31Nn1nWYgE+DLnHs/iw/hQdbyneqeaNbv9URUfJw6QfQHe37Y9FWaF+CKbouH9vMOMM/QlNXd17N3XCclSisZk4AgrMSGM9nHl/z8Xnh6rRXmiymfuS4M7sHbbjGtvG8wI8cVLLHqYxeP6eYOWUyRYb7US5NqXvJ/ztAx0Y0q2k2KFI4wFPVOWoF9fxMO6FirIlS/kHgaMskUPVMAhSiU56s3I48U66o9muXGit4qghsDfv8TbWMR//Mr2VtzamcJUCdV/8G0giEjg/ZR16MO1uRPN1PD9ZQqf/84YAkgI+o+M5bHLDrpbjMVhfKXGL6By0iWW7Rf/IjeojI/pCrkBNTeu3U2pmcM5plq+gtXx/BvYUwiv5sbkallVMpYJndNn6rsqQpi+Uq4uGvAkuV4WVFAnO8yN/IRT7GHghfp7OBrxN0o8DpgbXQbIyJoVrmfELc8a4th+JuMlw0BetG6Q3S38YJEKS+2rFrcKSAjbJnEaublM5IB/kR0UcRoAx/iMdeNQkWKbY9Qf6hM75kYPd3HvV5Zxsihjt3bhvsrGUHrbqogTjE1eKF5MJaW8smmGW+poV+nrYAnnas3jHjxT2EmVSRxzY+jwnZJwTDHRTXa4ovpCNlo5XWFtuFaQ20JERBpdFTz9gpJnMLhbJiCrfIhSj4NcMnhruH7qnoSxp1EjX3jsCOWFwtwYuiH39/7+fPG5CeXC2mJGBL4DeCrQbisuWuO8seYW643LiZ/q7OCucF4qQbtbXk5xksieUPwBuhkpvDB/R5qlAmAOYAfVc1wgM7ICRjKkDXsvmqfq1N5jwNAwu3vOCeRw1/S4uA7BYKjQLUtHRpaciktGWNRT1Y+VeC5JUOQaPlcxvoLRIQiO3iNIsnwpCQGlZEyNUjUgNOPge89Dfh4G81A92s8bD7X7Az1cIJrFtHIQJ8Fhc4BlVIKXcMQFUbbEFz+rbqvkY2fO3mFCdA1LFSRUUwavfXtFI5TYSELwZ8mVJ5kMPF9VONrexXUUL4uq8dvlUhZVKx4qMmw3Zw1dUFk9kZmQ0GKKQyHu7Iy25a5Wa4b7er9wBidin61MX/YlKn0p6ZdO8yLTXD6M40Zm1ZfHY4ZP0yA3ToiowocKfiMoox5XLEPOdHw9+wqYwAuqBchtEJG8MAmFGlHL6FfZl6zdTgWt2+N0gb0UDOI9Hl67G75aPW0L4aWCPw2kwCrChsca+tmgpzqJHi4cvYacb/Dx82UU96ogeRbtKfXT8BwJH99iQjY/KB7pgj5VaJjh1LDBWUjh1+NS7TSDsJC+0/MeDBfQ3Pa4DenLJ1Zz+KmxYnTD0D/vr+FgdO3/IjdeD739BRw3PuGpvKjc+rNuRCqZvAUdz6RuP9Xh1Vlen8mNqTnctvNeqTxjLC4ATAhYIHrdrGdOjI5zo0wcmBsnnMTt5rCRh7JgDYcD5Ea6Xa/Rf7/4eTKckVmDaoZmRFz0akcvLBfE18QogfHhO5h7X1ixJjSwc0cjHs19PX0Js0a5Lt1KvaBlOq4RBziOw2rk8Je58WA4Fd/FARX9MTeYLMN1gxODp3C69vkZKjJPGjxuTIj5nfGXqcxkvi5DnD2VTwa+cufjJkom8r4Mf5IbzzEW3X2APZXoGj6a76lwNUK5UdaGt4LgSd+XIvRWeYxJEpl620XN9LfykaR6MCwksW6kVmy3lcjnOALU1OrYB0vc0kZ1lBfZPFTjT0JLBU/VIJqfzfdUxdMM14ZAbuq6NPa3H2s4GTCdWen2bH2YlKZvmDMLqVGZyxSvOHaW4eFvKk+4FJMpDzNjxeave17TMrowQJCwirtSxcdvwydgcYf78/XiJW773HigAiu+lAOc/vINLObSJ08z5ryiUk8ykx8P4LgSWZBLsBpHTjbnshTpjEPcBuFON0Gw9ZYTUE5KYzHPUi4oI+AtoL8eIDfy+B3Jrr1TdeIWmBELp4K6kRCkEFcJu4hWwv8Td23JbetIdNmoArQAf2gDoheAArkAlEn+y1Xkoob9blCUQ+fWMJ6ZOM79matOo1/n4Y4aXaMDVl5HDT+J58YPPAbn6HNgBRdP3TWqByLUOlByVQsQvlDwOHEgoNtd8Og0wzOlsziKRf0bTizowD5nWKn3w89Iw2KGWFa/G+aMejCVV/gUG5rsSa8iVCjNbY52zsjnWlpDIybbeNAjBbgd/HGsEAMKBn2juGxBAX424NsW3uGu98v5Gx8fL7mB4LYfeX/F3LE6k9kRNbAfdoW8taWho+EE8HGp5RvHvxkykmwKA5/2mBYQBUqlcahQO+rEP0NRX8wMRe4bl++pjL+Pe6q+jF/jG+02/WMzCWdxtuKGjf7YMo4BhQz3DK1SgrDJzN1E/rqfuPTFIypTgvUH3V7hSbJbRqLKLnUDHqqtij/nGaZxaHEF+Akk5X+Aw13l1gTcpgScpB9OsYU5mqaOLrc+Fco7uDCJYkXf81GjlRERu0rvtZTDeSa4JlQlQCGVCR78Ms3gKQWXGwN8o5yA0v6EfQmoSTxXjcdO1f4abpO4oawLuL2nfsQd7ufPgredu7wSYYNxbEYNKK+I9CguMzvlyOzk0EUbPZ87fjfr3RrlpUJYCC5weYNeAUwFLSPvQWhBpSUkhel5q1tucHIcWQX9/7GG37pSJ/zOVjfK1/tjUycytw+TupVNuh5eyxtJl958yQhUKKvboN9DbCxc4/mikZsfa9DDBa8HORUSrnWpk6L1iHx71gq5MSvRjEEK3xfnxioyk2GLB3Biy3g8bQgincs3rdJLp1W8U2TCG4qfmgV42I40VA65ppem+JsCDomQmLLE5DGeN/gPglRsjomLR9qehWWBHS4N4+Iy8I9uf2QwV8ELEyHqB0CFzjhMhaa+IpCd0jvLuGMvjayOWMazlIufUMb8jJF/QQrIjrHEG9pMjVRKmZYh9NkTT6COrmJQIVm2Sh5wL6I4XIzF9/e1dePDVO0TiPBAbnxBLMobuYRXuXouHKZU/wLYkQ1VL3xLoiIHO4N7Dl/rFZfPPldRSWMy3uFuMGgwEvVXfNmoQ7JKDi/Xss1bT67ibPd3bW7g5Hf3PrHAF+/fT38iyV34sCHA52Loqe6YpxH9wS+yC3U2E6agnj85hLNHDS00Qv2mQx8vb0c6LGmtzhwS2RrS18RP1RLm7bFaZxGL3h9iL9rh0rWJ7hthqxvd17Hsi6QFY9Ef3i+O1NG7N6YBsVfMrdcqNFVC2UXl1lbmdGpkx3HFLoAO4DJvBG2iqm6pqKWivcj2SG1hgdPf05S7149dV3WRzoiJhW25gQeOg/NGEY5f6cxuphDJzIxNugMqE00Y1FVF8QzovWZhUHOToBYnp/upbBM4P0rw+WcOALW0Phjw3yG5rzBBfmxN1dbjQm7MAlG/Ojdoh7symwa4ZuO4fZ6fW2Z8vgNRCdRThI6I2sc97jE2gUgzjLeNrTFZ1JzIYkZ9HmbLlaUyfq0K2hkfLup020jg0lYHDv7CdHlu43hd4DAuuYEAjmt5f3jfoAYXG44Ibu9vlA15h955ZOGDJ3HKivJGiVtcFHMfd2B06qle0FO/q+AOVRiDNLOIJqzVvVIcgNFqBhWOKUE4MBYSDOI2XT5v3EUqGqRHn9uDO/Sl/HCJLexQ3TBnDCUiZaNrRnAi6Mvutlf4sxCW2I86GzAt/2L4q0RWgq+BAJ05ETgkMDgkEIsmJZkykt+K4O8AhltvMHBgQMhh7h/MG3dVC4O/SmMcyEareyEx8cD3ePTOTFHAbOKpUQ4R0Dp0uAreM/Y5xvAfRJ+jMiqrKFbUIRi8NlMjG7mEUH4kPmtwTCbaHLa5gSujS/dUTG2i3CCMehj67vNdbnQPjxPpWwGq7p2ZRjY1VS925CSH1Twx21H8bBFncAjJh8D9KGNvS30un7xhBEwhWEKkJOkxhYmjspUNbHHpME6n2PvVufFtJgPw/3CgA0f/eBn/OoN5an8rWyrtpcrenyzLPcM26NpO5WzmcH4zlePJmhGbDXpMdneFxCBGgFaNyVbpu3Fj+9q+1eUGwVisbtxJFfVizMguN9BjoBk4Oscoe4g+W2/X1529SdcuC9vjkglXCJGJSfrxb7SeK+M6U5L3ilkyhEpwDZVM4H72m4IEBADqOG8sN4qHGnBc2lO53AD/jXHceqotHG+kh9VoFEl+gp16aGPbHcJuiR3QtFOGm7IJ4xdItva1kimcZ/BtmuDjhrVSEgD+RmGgtJi0gsy3OaxcOHBreK3OiC5x2WHgBv8qPFUfVgxRK4RC3tsZ/C2HKaqEpFicuFsfLQpVUvUkOGS3LITUyIDuHIkakHH0k5KB+xDop7S/5U8+BVyITAkTA7/meZ7Syit1goxcjDW8u2MTiL5sNbAHclNP6l9eZ0dWuEWsyh7iONOJ8vCuaIi8Dj1YZKyh3HxQr5BykY32+rvEqIpk48UIPlaDfva6CYmK3OGvacJaoTWjguBNXee64qqKMSP367GGd5nF14B1vB9Znqp72RbqM8UtrT8yHZmUZQa06aThdFVFEj3nHZPsN2psVTQqmIbBf6D/yMY+G76ts8Vw0PclQYObnsti0m1YNu4X91SaGwEX6miG8upMykAR58D7EPddxiW8oZT1skjHmhH8OxWyI+f/pDmVD7ZTTdFnhAgAdbL7uBWLsP+qmhd14pjgrWnLjXVepKW6X89tkvvGDXe4MUEV/+pJ9nm3L/TQKdoUsizYm1mDKfo090WLg8gl5CjIznxGTDUeBCtSP5Ury34hUgS3VpnlI2MS9LMNfFNKUi0mfquW7bFCzAjXDZa2uHzeMBMtPIsN8Bf9q3Ru4GBtVRH0pPsr3sQV4akXpm6fFmTgx4eNXkVugyJ2JCfyH5fo0W+v6IQkjS2CRWh9K0SZJGmR6+tFQ7op+GHScXwLxm1xamHXewyobS80VQvC24BQ8xC2WVGWPitBi3tAz+y+rjcDoANBTxk1DHPLYmCC2Il67DsDSGfnJkOzeVczbafclKG1fNLEqD4uWjxg4oAvmf8oHFfWDRJhYm7Tgr167MvXAQuze5i5pe0LRbWwHItIRnXSyH1jxCSiIb6R+tWuKhEyJwTh7UmVsI/fariliRYNDQc2uXVatmAwQ3lRSiy1VN+X9lSMUgDM47L9S46opdc/vtiWGuPQdSp6K/AQ1BJhedVDcdWow187g6sad7uR+rM4XnzRDaHjtyKpKol6NrEYD6s4tbWTvFXbb5eEayqF8Ly2VNdoKaAnKt/+nojg+ez1+NftrBwY8GlGo6W8ccViWMLuqKGuP9FkROIJRKEq4Wbv+sCdrBD62twYdp9/kFxw8YCfudGF3Jhn2FPNNv1dP298cBUHaQu8xA6FqZV+2ugcrcw0ucUo3P3iVfKop4oq8WL9reodHdHF3r9a+qwJoy9X3jpCA1JljWvI56Z2b/M3xAuQ6pAWUjXwrcK2almetzY3Lp/FV+twt2ZkgHAIY1wckenFMsplUfUKLhzlUHeYfDT8TUN1Xfw+Kv/W80f5MjWIZEiVo2ttLn0Sj4nO35ALGImBHyqqILC/pbJRn+4wvhM2vNZ/AxgDC9SNoYDMpGfwC14Hu1pja3SSGwccgcjyz2rh4IGFYkn9V+rbmdezkiIsx0YdrtUKINLYzlafqjSkLDcNeq64gMwTjH/pSS/Ven+hxF7C+/N88efWMMb+C6oBNFWdTuFUNUTNk38lMejyVu6WViEGEOECHtvnnwfA+Oe2NobWbgnrRdSd1K588xmDKwmdv7VaQFZQO0UdFj1bWzjWuTF8uHqHezdvmicoIuURq7iyAh5FCbDeWLFXzaMj6kwUSe7oLQNEdIqkRPYinqezozrd7SxgKaILpMxcgAy1QbopFhSZgs1+/Kt7rqCEy5eJt12bG9/mL46CSICK3obxT/7whbDx6B7uFK7XV1mKvOFcOuSzAUTMuC8cqHj+satKHm0rj1WGh2h4AU351nZKNuphVvicwAo+T1A5lvXmPJQv76mIhnmnKg51I47k3FRs2pCYOB6yFI3+iCHAox5d/UQLTA9MivLMJx3BG3EL5fXVoHfvRLspg7HVZisliw8+NNE/mxJXjO3JgmcrTSAzsjwX3qjf+fTnisc1eCqRUb/hzm0ErOGnLqYerCXStbYaakxdXtwUs0E9+72KJ8l/MWUj7EeHfEZSFWV1cCGCqDaSEpFNlO7P6cWqboVu89724Y/S1XJTBS9VnfC1WkUPd/0He6pvcdFCzkDA3ACB4lKUiMziR6WI+nOngmCHG5HMoeCliLpiOSEwq935HLSQHrQUvdgR3V5rzbXaElHWgw6NkGqzmBrlnRomODrBL9BRTVtizPNtgeQ4Xhte4qEsqUFa0RXFouWpYrG8zlcNdNYovQtGOfJ7FQBV77kaZoyVvVbOacIMNrSsNFyDFO+QkupTDELp44N3sN2gjnz4u4HGcJxAIEOgyZ01N+4CxL22p/pWWUPscOGTK2NfBG/IIXFlozT6qoe4BDOc8TwNFqy342v+Wf3cUM/ZuDKRNUMia9Lzkdtm72QXvhbgiVEYYe6bKCx1GuDRgroBVWPLja3DXaRurEiJvRpPpVQzeKjSsyJmBKh/TPF7FMWJiEEWYdmMPfPq3sfMvqwPlWzTndzOGWmdvTo9i3aOoklfGd+myka6Emm7KVvXyv9GfKL0ugFLwwl3uHNraH0tJ9ZSA1a4T5LS2+o4s49Jrv7B3li9vVWdc7Y8WozkRg0s6BMlxOOd6vCZs5+QNIIKpwaZtaPidBLQyIKUinZrO3DZhpeKs4PLBv5ua6nmaXWP1Z5Pc8W88XG/62okkJIe1Q1xG2VamfKYOhv9unLg+qrlOzd6CbylCqSYx5/vmexwBtYMPSdgIfFlskDaICg1knBk9ceMCq+T/QfHjUE73ImjsmBuUAnXJe7V3CbajMksPlNujAOSAgSaQHnSO22X9wrpjBLJ9F69SIkIhew0xVJXuhwGle/EQTzKRAGrKepu/0fc1eQ4jvTKYwvIrAPUwhdo9wESkg6QD5JnXcZn36Av85RkBEnJcpV6ozZmqn+AWYwTmSSD8dM5KWTOYauEHrcdz6QnoochF0WesaVy3Gr31LtxYRzKudomhi9SMD4Jva0Vjl6t8jCI979WYaO6bNpNCseKKXizmUgj2dKvwFXkqAAZxzdh3lDDBF0vVXI6XfvN88hauQM1RAY9/HactYTr4TxyAw6f4Z06/27cPbVXEg+6Dlejp8UqDoOq8N6Eltc9t3qM3qYNH4wckuj/VX4KXtqPNDFbvIIQrM5gKGjDeRAJfy83Y5KTwMbVgBA9BRIU2p8fradqRcN7qi2Ke5Z+g+7EInJoIO5vRQcZ3W67Pjf2vLqr53VbwDFnaEz7oAcx0JiN41465iGCnrhiCldXndJNchPI0vHtEu+DjhsjJu6MIWNUkFAaq6mihM98uJa6UR+PWMLvn2fn/cnuD0RcncUbiGsCS27+aEHs4/cbvUbhQ2UbjcHFlsacKgerBjZ9xfTH2fynSrfSV0Yfl0zizoTZDxcAyEiepxmfatX81upGAHEvz/MzBpQagd1fG8aXsjHCLhoLP4WohoCJXPsAp2+ICSzibpjHKYNOCek1EPGISKNhaBR/b4ApQaUgyM9GXGtXQTFbg6QUQK8yh+PPs96Pm/S41fQbAqirP+3ZPFybxSHgGKZ+4CJDdxvtTH4p53a9XtqcCXjoIT2gcwi9ELVNe6GWB+zxjGPLnBl7n6ItQp1qOBH50kd5qia/GxjA8SPr/IfCYaP4fSNSPsXz00DDr8f/lv+nIanWDDQFZFuGJF4uNt4o/FIJsMhgkx+Is6Z/PSb202T2UpOp+pQNktoCaeoCqVB3f6jj0keNfKhG/brtUcocwFnM24u1jBvttWqskXYcFxH+Xc7tqZS+9YTS7KP7WgpluxuDqcmoLQvCsr7fd8pLpIqkENrO7aumYBlz8+cVU9nILC2YLBm0njtYsel5jAGVmlgvRn2mlnlPz2HCEKi3wtht8gFIZXfjfjLXUI1GzNmwOVuMy1fKwIDg0LZaaziprd+sNdQsL2YpuuMRVBrlGzP6nSk8dxy4CRfi64adjl6NdoEMQp8UOJ8MvMVXji5Kh47l2x/9akgFn+Mi9rJOUD5FE2tcQ4Fwvzr17uYwHpw9+z5CIv2umsncwNY0Ty7DHQnhS3XQ2sUohQXvVbG7oeEZ42rdN1IoUzFrs59iEWdTqwVEq4hU8QbkPt1M4d9w1J2k/uim9tTgZvS/+l/XF6X+m9C4ZBLYtM59NaJIOSoNWLvrsGCMavZs2j0jPTe3ihrF3y1eVbZKIzd+7TCWm5AVFKm6ZuIKtr1Rc7scs7xU8lTdjVB17iweOOqC4QoRVw8kVI7e7Suu/b7vkTm74K0agsuO8XbMku2o/ph2IRXQVKVsiUENVsN5TLNrAbLeh2kmnxB4LZ8n//WmdSP2VACpztyLf7qa5usp++ZlFhfOiPHZVD3ex3zqYSc9YFgHW7px/Z4z22HqTjV8KtOcXvaujoYEbohXcJYKVGmp3hn7jNjnZmtz2+zHnoq29uvCcRafijxcuRxJxr/fV6r8BFAfDDCEjcWr1Q6yd+VtGlY+O4lNVOqOE0WcwaDTHoPApw75ruAjjOqpU6NJhXzz+BnohJgyvK0lWMXPTWHD2y3ejdO5hmZs2MlevOn3rVJcwX4OMWWvgkthsplSP1aMrrg+4KVqp2PhS27ArXVDkjPU7HlnqTQ5iF4xZtRJJ2/dbhBADMfQ/uqBnsq4hltHpFPmjfsnUns/VIeZss7ifdAi96SJUBx+3TP0HIYUy/fKgCol398dBUVIfq50qyipCfPbFShKK8xdULtmE7g2CoJ+9Vj34YuXKSPcjSnM4143bjf3wz29pzIUtyEjZXkJ2rwxxLsRcuM0RODVwCJ4tNnFsJ2fJbYjB5nK+/RjzaiM6EsdpTMl540DmGvGdNizPfhYbfy2yzLHTirU8kdrqOaw+2vLv3Xg+zl+uDyM51I2lvFvbJnWQoymraePfterByO/mKTTL89ddoBNpUQs/S8U4SXolvEuYQ+uTkcc9ALZdhaDvIIzmMn3nFalIvOfad5+4vgnXf89Cs3O0f1dIjIiHSWsO2PAJXd+/atuxpPKEnsqqspIhO7SKo06/cWWqdJSp0NQIjvaLnhG+meUI2mXInH0Ft8EckUIGPrl4Nhxk5nj8XDvNnHRPplraLDhh4qblsMQIi7MRtaDXz/sXAuzq8cFCatwgrdBL/PXJUMPYoRKoFb41W+klR20AJOTnbV8t1dpnPfbqFUh53P11CZXy/jZdUOhqjuyMBv3Xg5jWAedDIZSvaY5FG9wm0g/YFQIVAwutzSTPHAqGVlkiDZJasBW7G6AHZKDDmCEUGk2zi1ICJvLgW1TPIqHzuI+cIgFz/3UWVwv4yoPZZn+WlH+PfRrMXIg3m5vB4y5U6B6ejiWxgaknyHC7VnEP6Tqo18FR6Ts8NFHl8u0ERyknfr6NO1/0FI9MG48z/fgEbcwz6bJDTUciVSt0sKBUe1I/EpkUq0obe4d6TPgcUu21r4mrd/MJctyNA0mFHCqrKidrWRLzZ4IhyhaXrV4OBaycyjL5Zj1ocK88dzEb5w2iyO36UO8FKZlGBfzbj8OhiMzo7rfM62XuY/EW88adQCXKdXlyCUpOSkcknksCJfB2J3XdnhyE9xTRztd3etldFgzOqkq/+5eDdYNzOJ4rM6dxRH4AEC9lgZUDf36pVII3aJf+83Up72tByqm+FC9+IClH8dwRsTJrRD+4Kg8kc6G8FU/NaOhqjpLTMSmamWtxsXYPwbBDB+zMqMfrlC+nO8zcl/LMFtTNQq79ooIID0I6GZ2KYYJHlRDwQq2GCiiOo0ATh1sb3OgFbK/7YLs2PqpLs5/YzUF2VyJnvuI8V3NmIka3h4PzBun6zfuLuCQs2jyiFHKtAln3PPo+jYWWYEqr97ud9S5Qj8dTlEs7kPf0RsSf8HK7dXbzmLMlIODbquzRrVBT89CNDQvPe/DjmM5C7OZPDlfnJpYvxvzs8XVAAAgAElEQVR1TGnqm9wMTe5g12N4dT0CKQEa/TUrHWghZEzpr4KQjR2S+R9lzWswaKrGPBNjrumoZx4JitiSD+2j3/y+cqxwqnN7qgv04k/YvnTdl0rN9G4ohUdhdJVrbPkJybZ+yVkibj/cdSVK9A+KmDJF+pN6qgpJChNIZR8Vxj5vbp1rO+pP8Nfe1Ys1LCJF/AacSjLmPi+nZ5rpwCFZmB8yZ7VpfBj4VA1vuGzBMqGQQeXnUEw2Q+5t+gtMpNrVyDwkVIoUvSOzEc/1ELRijPzd7BD6rJvY8fsDaQNHux56GM+z74Y0cFg2CU71UTvdVSiijv6WRJGXpXiKWSdBrcHj8LTXQ4lYUUxgZSOBfU7JUrdjcRRIz+NM8nk4jkOfm/RU7SxuVsbPx3A/A6IuL/Wo5E/2UqYPH/aJt4nrPriChWhLivSP24HB4TbTharCigrbjOqIrc8bs9JElLkTtkyV2z6s/r4bxYXchvFP78b9eXbGQDv8C8zbvkTctPTyrVUFXYeBJ0Nsqfp1XjhsC1flG9s+Z+m8b6bKhiOSXYCs6JTZCnta4kSAhHTarFQc8dZxKiFB3HAO39YPWXA8b7bf0DzrU3m4F8/tXV6qm/Cp2jRu0e0DPYiHN8Sd4vFYMpN7/g88JI8sXKPkDFaFzSGhtqi+DNSWSKGWbs18DXxblIsq0/YuOeTHRyv0VPdXAcdJ+eJSOb7oai9N1W9O4wP1fa/drW01urVrQgnSVxbv8ra/TVs9eLYON3tGWbbk6XYkM2oHd3q6+gYI0kQbk8DonM2lxfrxJNqGQ0HDh3IN/0Gm2f2T0aRaOLIYhAwmzb8apW1PcTkUJLivBX4pxdSGsve1v8UKKw+jwt2lwYRVOlvE9HWzxjesXDsbUmjbJT5TsxT145+HQ+oXDUO5nFo3GkylRFydN6qsmyZs/65cMlEa3u8R2rjRYPir+9V3a1lZ+s5B0k2rNH9Jx/ClRpSQKTqR1dbVYPdcQTlH+a7zppUaj7VUD1lxmAGrVo5TvdvE9sfuxodMfyAdXPu4gH2FqCw+YBhMPDPoxGdr8BKjHN4RptZktkzr4U6pOtlGb/FkC+wc66dmc6mf5YqMWK/aED7PRwZAagaej11p0ym7P4/RkrJR5ama6JFnSv1r/4azg/oNgQCgqq6EtPB0lI9gHrf0O8Iva5dCKC9ddswRfKSSaY4t7U+f/0KL24a/h9kabgD1k+9Gy3wQ4d8I/0ixT3gTHFfij0Szna64rMyDTr4RwaZuS19A9Jgql5KmzlQTCti2D2bobdIYKUEGKiVXRehSE/ur/PYo/qxb3DkIOE7PprnL3WiDZ7saqhjQYfzKROQr9367kksECCRPRqZcw2fA7x1Vg7dqNQVT1j63aDmvXY6ZSw7cVvq3UPo61sq74SfwZrGxXIo/L2CVo4bi3fb5L3Aquxvdo41/ZdSrwYCswe3rd9T6QT2zH0yWur+CDYVcm2DTGY23mWtSpcf1Eq4QLhHbyb/++kOx+PMCHM6B3oYcrXNxqotnmkG70s4C8x8lNHsXgzDIELiFzmmznKz3bmApFvjC4SLB6RZZr2PMNMlbxyl9nVQFPmG8qHWuB4a9//BS2WP1sOnv/+Sdupyd92fz39PN25avcURPNZgP1X6QH8H0l9XGPtU2vftTCuI+scBDTBnbqYRY8LqxnIo+YNQt5S25sx4r5DfyqbhtUpvJs/UbcFKH5yfqxjTYtehJFtnINUylMXhUOBhUGgKUTB1+1MVCfbhxR8YOQqawDF97f2mbK63UBPx2dk0AhsD83UP1Z/tchW3TRdPez+yp7qCMQKPcNYJb4sRB6u0bhGpF2nFUBGkargjfjUUOhPVozdbpHdBW17fe0cVFHURYMuZgoypLjLqmnf9QNOSZ+hP3G7ML+O/Pf8E1/OTd+PqQWXwiMsIKfu23CRsgtOEwMPwZOpUYHpDeq109lUZvQ6nJyQnaPZWOZlS1W3W2LrGsZosuIj+uNSqeqOm7t+k/jhqbu/FsdQPmbfdTMdwLJMroqcRoBIWjD6Hhr4z0gkI+pFXCJXrbWDfSEQuqAl6IGHHnxFisqvD5/xN3NTly8zj02AKkPkAWPkEuIHzlAwiwW+s2pvsGQt1l2iIfSalctldKkOTLYmbThEzy8f0E4+VJ0YnGbJgZnfMqBJFbcEiRqsjr+FyhGZCFw1LUx72NjXfx/+2uaL79HL3SPb3JyIqWXsjyVzatP3XZwRrSmKNDOuOST4voyUJnxxZWPcGyNSF82NAtZhbLnK7fmVeObEhVghqacJqhnJH9SQLD3ft43CGPhZfxv6+hiuIlqX4JmorcwOddB/dvNWaUuBsgEpD6JCKK0KdqDsrdAfvZqCmTEhLS9SSlq182mweTDS2IOxTD3YhPNTGGuxdjAaR+KPHrUEP1H5Z0DYjDL2kJvsep6gcpOjV5bszQrSn9zoqS7AyxSAiilrkuhH6jcktUZ1Y07ImHvo2piXv/oJ1sjiIm+4uoalMPz0XAV4pMwZwJdPDt7u1PayEXDWY/B30xi4rClT1lakJ3JSqN3jSuRlt+F1lKQk/jkxX84qVQs0n/BYb7I7G9CX3j73//HckDRBke2RFM87E8cjR4pvLvTdF92+ATCDuMoYfZWuQtrYfnsoonW6qHvtmiIOlFI/OmZwhqWHJ7cDIg7ugsTJqqVKLszDL+UPrt642pc5JsX4aXKdbfIe2whQhbeUpumbHIs4aqsvwlOKiyMmAxMHq4RKZ+e3juagTvNk2n2Ybq/tjZAo/DVSs93zmB9Y5gZqry/SmcX8edDCDfHWBTPfiZ9ErX5JmgCAshhDsqNeMY3mplrp5GkVZRYarfv8pqoCrjhzvcS4EkyvhSfdVd3EUpAp7Gf82uwbkB/YDLvqpo3/HUoc03ScikKkv8/wq2ayhgOAcYFRIuwm9jxU5+i49AXaNkwIbZPppPkD/lvrGNnKm4iXMXdzTh7pkPrOE4jAGKD8kQIHoCBWvI0U8Xuni+88G3gl09I37sznrszA23EJboc9DbhphWGFn+DQQ959xs5J/cyCu/bdvrMf6+IZyRD6K37Z+q2RoXHuJU8WGCNchqNcIZPUZ3L1RD/LgT5ltvA6r3KWvpcNtVeZ70PGYcl+ZbKDq/hEx/+ImUgmV8/RY9zb/ww92MeZur258Hh+dw7Yt6XYqWmyCRvFEpt9dXcYENU9Awy2C9dVwjDKCJCslwki2jJ9izFbxoqwBQVTq06pOVf59yGB//NriL175R7TwoUfRxbAwWIbxUdQAXgRFcDQE6nag6/GrHCFMSfzBpGKmJdt1dwAI88YT8bLaMsyU8rw1OWAvCTVxOThBibnRwGpwxME2Thpp90TJugaq/mhxuSmG4hbaJk5Qpvmd7vkhqGPog/FzehlBuUwimKjOVZJaIV/Hk7m6u6d2eUbD31YtfzhivBBhR5d/GX6rBHPVq+mpmqt8f2UKKmscxpU2auL1rqMxPQap4y+nWCP2CQFVIC4gES63OyJBXjelruFLLGVB4QBPh4ap2jaLgSJUMfP68IiNjMga2iZVmNFPtRiP+KIgXZDY5MD2Mj2S0vaJ5GfENVgguQ4Cf5+/w5J0FqHbAigwk+UM1L6tomBY2rsDN6Rygwj2Df+qFP09rwf0PbbyxRBr9NqoKkzPmMFNFzrF8HJITov521MZh78J4+vtmEY988oJTsQaC+6gYi5H1gVy4cM+YtXP3RUjnBJHCI1X7NtamHN8cozW1Av5B+RvTJuKmr/qJsQ5Uf1+NPT0ENM3eZy+sDSv6TWyAprSLI1h0Bp8K3WnDGKu2/rYrvlzvKpHxOFZMtvR52n9nLB7axb9VMD64b0x8iCXJAGgKMR5aSbJyBhQF91BvbnoV/oWWcGaXkPhxxGCc0hO39mgcXWo5ZkyzHLeUAKGHqwZe+pNGUQx3/2TRtlGUNLLXYxvPNSSq4Z8fKsb+ofqgmSq+E4b3AbBCLVSrHe8uu7gJnKlFmGuWBoid+jiE7slCssQeYAEMkbCsx+ZGh8Atr321HDnTeCvD1cvbIGBkG6ptqnyqCRguQFw8jP+ONLDGJv3hQS2M0ZvogOivuIUeQTM82waDWQVLSmhUGvAthMXtKjzPN3ufLHfF7OGMotc1gxq6tnG5N03T8H1j4uUPbgr1RzjHh39D1/GGJtKomaj7N2GJd0ARsZ+q8nCD3HYRyKpBXit+u6qvqsLo81nnxicqG5CqEIJby0NfqkrF/fmGDPMf+OFyF//a+VTCi8ZQ9WKVHtVJ0hjeyvLnhC8ST17H/j+SYNEYRPxKF8AE+FYNC/e+sVRUKgGgsrNUeEsRwc3V7OG/Hylu21SJvNp9Y98ALYY7NGNgU9cXXJtol3jnB63laN0L29PSaZBfbPDCPWG+7nqVix6TMQFzVr/EHiIc8AoFUzoDbYtpGVwT+zakGDlj8ajKP+SadQHjA/YNwUbqiOuqYjweNvEoBCpR+THlUyMVjXDj7AOlcXH8VxK1ZYI8nwUbrrVTZWVAMioACGfSJXRbtA6Zm0fBPxu6IeWhTMP1G4wa7ruOJD7EN+WQbUOjLp3AIjwZH1JB3vqjcwJThUN8isnoXvlxIBdcw7CCYCIhnCsCMoideZVvFcZZ85Wi+1/OLWqIWLNpGt03QFMAa4SU392Hin09IwfPREks43OflCJebBliCMaSAKoKh8xQ+17EzsVQp+juPTNjR/MBLkQa2U64DBnWX1KLUixP4RsOVVN/3hh1Fyf3NjK2oMTK44cRTZafdHAEOjgcwzuXtuPzq5yVgg+q9KuhTFwSvmMYOD0ArKV/zOmOQkPqQO+EB928ohAF/82aw/FjcpQHvo2NkJE/tP2JeZtt4z2/sGV7IuHEt87DFxZUtGt4AgbhaeS66ZbbBltXrGLmSWIyaRap9eHuoFo+8mGyKitufRkEhVoLnbgQicIz1Vg+1WaRkSoY5y+Vb2eqaIhtDZRuUXR/p4mLd0VfNnob3l5e7Ti1JvBDON6n/USFt0NVMeznlcuBHr5XJQuiWxpCFeox+PYHDBeCcSLxxKPdj0TJdg+HNtybYMWrkco7tUuoWah8TXJKu7WiPv7vzDZseAzh0jsEJaCnQWBtfQ9PgkZyxiupf7/KMLc/g/eNKlEmI/WPD+wbsR+qoiUnRHv1MwlANzOq2WIHYIh32AJ7UCQYTxfEYM3Jvo07B6YsaGF9G0xLkCdRsHdIl0EX/+lZCkMw3PZtfFDfeIFG1GNHMh2cKMvY8pblZTe3jZ12iyjLYMKQjYrJxvcRsW2FMBx2Iu+ETNwWZJgqmHUJMCSkMKOR17eR1Wrk55D6OUAvrgPul1xiY4wHXyqCqTBRQQLbDFGXz0Ku4gm2LrRyOJVqKH3KiVADyeyJPNC5Cssd6XEReV8ptFmgIOZXxpJO3hbUOHrm57CcWLANndAUGuDQR143qHMQf4cvsBI6GtWH+IK1o3RbT3te5BSB3hgdIxUsVrkU9DBOC5ItR6SgJIUeCT8L+zh0Ia9eep+ybwx9G9bVvsKGPFT1Gwe5tHmNVXTil+e8vfLFvhb+nesR/ez9HjZKcksaqexMtSp3io99mikaTk0SDEdEC1J/CybyzOaXAu42u2l0/sbGKO5vF6+J1mbfiH0TZ68dOnE8UA+4Qd+kF3pMt8mEMvE6/pIZ4KSDM8FwNi4i4YZqxghf9XMFdEo+VtLIkRWr+8Z4DHczQbGViNsXgxGRJurEWcvb28OUM3x0iijb3dGBSR1lMS2SMarOnn1KXDjoG1nYzyCw2WmW592mdVA9iKX+PdFQNf6+UYcq2v4EN+x3cZgQi7WnGLvoMn5CS+heh0y3nEPNn6n0apWAq98KHH1dkRAQjrOXXrnP+Gjp8ldMC5cvlYBV3/DSq6afYzMGfsuxqUJZgapu/aPtm1wsVMrkkeeAH7Q/N7OQRR2OqqyhCfJauoMfh1hi52BnkRP0XKk5db6lV8B37/ZtSCFQj9wwcRGjPPRtTKwYF3HTByvGTTEYJ+E2DoICPNIjGxAbrDBefqViCngmKXlnDuDGgyqtgt8uCFG0nmzroSV3fvE6ylQdOSx1m8Yz2y8VUapwFx+r3yCkCqb2eBsuRk2cacRl5uJHAU3RkERsFeI5NwHRZHUFZF148JogAG1AsBb1RN7RlnFjCc/CtS04Lq1P+TRRLcxcxbpY9ragWgy+bxCGOxkibrQXDpuvYY6wvIOb9NcbOUAxiq1qYHN0h7zXJhNL/dGlEL/vY05601hOIPSiqld8tGgJlyu4lqA8URKVN8H1k90thnJGTIrWD7HbnGW3AUV/NLnhrQTW30apZPt2dAeXegAOmYOMUFSKGZ7DJn33ligg2x4CHVOtg7buWobfv8w6XrmfKEb7sxrhh0tX8Ym3P5aMk/A4NtaF3MANNUHVlo0ntD8l3ybrOrwbGIpZQjA5fiY4QOJFVS0TLmtSmB0CSIT+8GbBv57N12rNIm+i6Kath9RHzFTVSW/6aQyqogFGuAKiDxcFDUecNMb11xNuEj6bWypZJHb8KWctC0XcJ1y2cK6aySp7leatRyf6k83bQBOX6x8NVYIaDsWpNnodex//krt4BdVfr7B1mHKPhu4JaOrW4hdpDZ8rehuJD7LD6TrX6gWWrxpMTeAqaBnCe2pI1gMTa2UwROWsV436JgqVQ6Yqc+OQoWro29gmycKkHv6Bt+EVtWUTQ6+aJkkd9ZbveetlJGvsYhwT6nTFLXw1fkcyVvUBTIclUUYI3kaW1t3OUXbAfTLxkJER3MVJUDGWh0vJdibUTN6GV1zEWudFXcP9q9fOudlqsISESmwzIDrdAtekjkdwA1NV3yU8VfhJZO4bqxLYCCahqtTeXd/F71+1QLKjUEH65W9Q3h/IbQSMEE6lfEPPTJEo7Fs13MEDuQlRgUPFOUBkPWyOGrzzObXJS8TphD/6xR0cqLls4qTTKADPbQfPsvZp4yD05BukkX/Bw62qv6lt4yoaiOpdaAph81/9bbSQ8sHpqkGcQi8MqsZNRDlUZOuSmiCTU++KrLoMQxLhglgshJ/H87k/jvLklcO+DZEMjOaMqAfPF4i43lzHPWxedPfjduFfGDv+cttAgIBn9VLUYjhrPMzFAEDFZJH5rUde0fN3EVOX3JTCoCH0OvZ/1m+V8j+/JQ7ln3DU/ygRlzyRquLbY8bls1+MdrzlzBnPcbw34fRIzsMxUD419Jc+tfF9TgJfZbZN2jFuHDVo12OPhCKfJ61F0bXvyfV4CjHa1OPnz2icCrv4VMVNcvvj7YIBXPlQWTXy/4m7mtzGeSV4bAFkDuCF70HAPgAfrOE6BuIbELrLi9hV3U1FlpRvoQSTzGAQzCKcJrur60fdRMKBZipx38fFX3BpTLnLxKKpCxARMAvX89oXyoBqIr5CdT7lGYuLasKwMU3tOIz/+TXS2mKRTXoGhtuUhi+GmrW7an4XmMYrAK4Tztz8sJF+tWyKMCBO2Vyocpc32qzZ4Ds8ClGkxb1mCi3fm7IVo0E7qJCbvnFyuG2rCbRUUicCjiiI+2pI1Z9w1J8X9rc6/A2EQG50rfepZcbd0Slj50ACNWVSF3kYPHgel57cHC8iqVNRfdkOpmGpPpxkBOumRjRR7emWd1z+gNsNs/j/KN+3p+Oc3CZ9NxBNynVTcJmjgpU4sqfoZw5dUr0LFQyQgqezBTuI7ADDjI6q8UTylm6meIG+9LR4v2v/ZHD0m/BwTBNKw9eG8hRk/Dt9L/66umUTQFypDdjWt+UGNhoMVlwlGm75HjXxa3vEszqI6BjYgVSjmqv6V+O+3dq6ZJNqSqaqn+6WQi/VTmL+UzsUTOP07m5T8enzBqbx3tgQi1dhpN9uAHUdE/o9Sye9N1GILjmcXsR5gRQKHIJoLKoE0E/txwVUjXCo3WGwQiZOGu1U5BgqHo+CrIF/9oxfulSzM3Z/7UONRlqO1iAXle41wk07KqRc4sSUnLD7fkvYjPyempwJr8Z9WJizqYQpjyZ7dUfxeGuv41if1fMReFdxzzexp2rHMS27qi8Gvr8uz1N1f3Qnvopzt41/st1oZSG14dVMQSGq8MOpYjvHr4k1UgNF4jAs+Do+E9mZszHh5C2ZzSHmICaMyn8mPjUKECWobftN6mMSlArVUnp62zLv/aS9OCgjn436OajxiwJVCbURkoVk2dY17CMiykGXxFGQb/Fa3Af3jDvPo/uYuQpnCO/jSC9l2JScRVmpjVYU7c2Y8KViVHTGLwu7sNN4uO1AmrXF54c7jMSwEyZkKeEzUDsT1qNGf1Jvc9dXRXiDiUa5W4c7MD2OOR/6+Y/m3Fm49sPYV3kSOBdpa9veTx7w0s5ickCVsRRO98N9esGADuOObhjA9DQwXYVl7wSXae1shLojczgPJN/dczEYEjLKOlxrY8wbHVVVUVkdna6y/aqe+Fz4irfbCkWB6hDQ6sdi/PoXvobgjJBPFUgaCUaEhk5Afes98TbtuYlkc60X/lTOnub5w2A1It7S5S/Fd/u+ni1S2eya5FVJOnIIpcg5FPRS0lRNtuFoVur/FMM9WdskiQ9XpqHYZjxJwgaOY9DBDwhV2t32Bf1y1zyHGbtNHec2+Pgf5CCbc8LyIPJ6cEPhIrw6IlvpRo2qTzjAW3RUrThsM/5FF55m+3KxAfAMnApJQeRTNTeF9iA45o4CuBT6cd74mXEZ3r3hAttmhJUl102NvpmKEeHUwGw5g2/Ct07vXTv3EEdIIEyIXd8kHa67q9zEofr9y/PP9Bum/BsGdbxNJBXaViMFo9SmrXsq2LiR9bseRoheSJmiJra3W+qhXoXR2VisXFN1dOtWRQrnR8PQKbmveBClPdvu4ZgmPPQ0t4Bk4HX5C21Tg0Y+vpsqtLgtfZfAYZ8k4Bx3jjFFeBIRHp7Qhw9u6+dn8TbrPbILCx93wzRcoEbxY7j7mGwVXgquKU5/RQ8Ethd/VhuMQ3ldXVMlKFSgVH+RBtQlyK1URm/ymcIQPUtE5nC3epU4ZFFZWppD80kfO6O8+8rSr3RWCUUXTYvzmEjzLDZ9T8XKg9/QTvULRFy4jFxP1cRe1S5Mxg0RjA+3m3p/MgTWKTbUNy+97Wj77FddfktrpRGXme4VcMqLmgA0CkUdB5E3hj2j7VAn47paJevoekmGDndL4aOwNnyQ1tVxeM7hGhIZ6WpjSCCmp+BAkRQcVBX229tFYczrJRq8iG7/+0gGH8BLpFAKRNP74haOPoKIQHN05zvFwwB0a9BUmRYH4u4pQCMkG56u+3sqpI4FR5J0LA1zZ2A1eNCD2FkcAUUGxrbP73Xb+oXhDlcRzBp5kVLWTIdHmoHdj3o/g29rAyBun8mOhBB6nXxDBSCX07jFYUqH8/ybngokBdBG4MPq3T1NzrSfIBC6oGQnuZTiiNRdoqNqLtB3TW2/ozbitomIY93WWszCovRvhhI8MXdP0/TjqgLjsFBrBubn5exZ3GubYN4msBSI6rymLOtygKnIrm0CkzTkOlJsHSbpGiHgIvyw7gNLxHm8rHe3LtISklcSC/WisjU4GitFp/r6mCY3/r0s8f1c3V9jcEEvLlxDaM2ExTP0/S1ciPco6Y4RCmRQKAmSFocAATf/IQo5IwrZJGRxY8VUug1Thc+tU/ZVGzam+vOn//MN1zCtr+s/BUbOm8WVFa0JHBw4GFpGVpvIZ0xXlsLRFayomHAi0es1eltuNUyXnir3LtBxffnKVwPrPuca6W4qLF3LhJV4fXMgZVEbrz+ojS7t/YNjAvg6VMPy2Rhug+1hd9dMmacg9ITctOHCL4xqg0RTF7Wgyj0/RLxF3quQRZQEBbLuX4u7p3g/VXc9Leuk3WM0fnEX1cnapgs56p+aozUoLTqtWHSnI8HIfRBmFtd0sfiEdyEe8XHID28jKdcVv+T39KlqdFssAKtTaHSTRuFhaItb10tDmly4dz+XOsxTuIYmNWNP1UZo1c6oRiBxv5SUX7iHUQXrpIaOPGXBZaPcUw/tb1sEUNwnTRVv3tlqg/tYTyqccE/VOu29HdzEerLh9Vyc6smb6lOCtPTZ4I7JuOlWG2FHVha8PR5oIkniLbkO57sxCwQy438eMCy8R0sReGzZJVQyoVkbHYo+UfKqF1VdvaUIjlQ5ENIU5n2Thw1P8cN9ojo+xSzsw2jqCz/JBLv6lIZD/oVZEnnniI3gpZYPVxtIAoI2gBZtB3iE6okOdnktdL/1G6bvg8EIzr62vq8NRUZGACOvjsBzOaGnuqgI02sGhqRukjeleg78PPRwWAJsjLaLzYMjQg90dnkoaefezPKcJvm+7qxTFqsNOEW6fUZVvJZMdBzGu/Noz7jSFNp5XDte9BmckUtjqgAaGZzTiA8RCN2RhLCrD0/kpWcXHG7BcZpRPT/ieL9hlDCfyLjw2MkrRvUMCKdHfRndJTURDFEmepmmzcLAugmooXp3nz2LPxn3/tFwKrMoXqAiwg8JwfVUab+rymAloMVVyQbnjKH1U4+Ro0bONFeNeXv2w8WkGFV1qtcmK8N+SXZ8qJHNw+BV5QQ13TN+gq/h5aqGuEYaQUEkjH6yfeJNxTEj7HhJRrVNEDBEfHaWwTOWyDTq9jXqCjy/tQErY2f5bK1VdcCtQoXFNq5lqzaKQ9RF3HS2tul5fToM91PMFPqrShzaABiGIRxZ+iEKOYmkTKaOqComb7pDH+is6z4Gn7yTWpYfoHqtvRicOLreTqVfhK89G/Ppff/r/3TBsQiZO03b9PxBqBpUH+7lGmSJ7Govk3l7ZllztPtp0LEjqGveA0a3NE0wAnTeWsKKIZuI+0oZu3WfW4QX6GW2j0Jfce2pvq6v8zHchlNdmDA397iY/wLNRrp1OIxvD2UAdWHItFudabj5bmQRUwi0qUP6W+z81vMUrZmF9VSFy47jeeKSws+Ob5IAACAASURBVCZcG9ydI6mYN1QUe/p+g+bEvXpfPJGG0Hvu+B83xsC0pRHI0WwkwWnTZTijR+X1vgMEadIZPBaPPQ0TfW5h5llXhK9VyQi7lYGBgzeVjOJ/sN9AGsr8bMyIumw4WgYjPaGp1beoxYMhWbLiyMk5e7Y6CY5SGNuIYYkO5su9oUNWlkiFtYs6cRu1UIZwoaLvoiIKVDki7kviF8/DqVCL9orb7i/oQ76iYgp780ammaRgIYlrJU+fGnzWCSi36KviY1PHVDVQA/Fw6o2uiEihemlnAF9bN6nty/X0DGU6VNFMgT3VwNAT77dK2/StR1yzOCJCkeXRyOoimXTtp7LwR0OqzK5wwzahA9ML3EQ65HZ01BBloR84kgZq+bQgxNNcT+XhNmPDqwiUP/RhSJY7GhYmkseEl5lMaKEoxGh4IR1FsgS40zeSkX75raoMli66bTW7IxA9VR1Ajb4S2Y7VhhSHOOKezsOlauClmgF1DEMlcLXBxKwVVnp4i1K1MVyTw+mVboM4txpyEI/RTD03p3AX/IoYE+OGkOY5UfKKlcaBy2ouqW759/2/9C80sTZufOj/f2Pg9prLFHZXfsl4VI2QHnKKtPZUmltT6mfB0LNVxs5BEJ+q5BZaIzV2VHSeyHT41TAQlxfVVch/J/KpbC/+qaA6x7+brTV06XToI5KvE4UfwtpwJm3OZrXxEsBQ0Hkvr2/Di/N3KYSnKPjjRcWNBixdDh/GJE2VeVs8T66NzvPzUy2RsPxOttrwbs9hDyxM0DHJskmWrjEuZZcCF1LYx8TwSPvCDR4bJvFCokKHoTvpzOGqsHkD74bYTEpP9Tx1Fm/6jSuDm4ZPLjhonpDs0UjDMZKhzuIpamUMD+/x4hNHR9oQ9+lYed26UF6KSk76EqGiZ0UVCiEx3GPnUZSn8GJu76l68Uuj/qp326cCI8DPO+vCQxAVn3gz3Pk+jHsj3H7/3d0Wf2PMYvDSOql7NrHGnlee4SPqZVFA/Jyc7fBva2NuAJw/saj3z503vk//pUGx5t7WyiOpWRuhKp/q99ZM4Xv0u1NFM7NDmjzcW0IzFhm4iIr1s7IK79tckTqaOh8HUqyvZVdbp9+fR4ep8yE/jYcrfmGKGlIyILOfRQGFhZAv7ZsnRJjmQbKR1XnYwl9HpoY/VFO2wdqB+JUBDsrA7cMC2nGUokPG8VF8cRav5/k8XOmoyIsmMiJB4fqUY+lnoQLb8BS4U83zdu6pAg26Y2+coJmKLeJyNJXfVqwG4JDR+ez0tB3WBqCRX5UHzuNLjmOBjZyUoWx+uNrgcuAbboFq5PALR2iUhiRtxAajZ0+9jc7IgjxDvabidlpZKa421EgEaw1uNf5DR6XzhtTGv4V84zw/XIlfbCguGVWUCEDCBKXfEScL3W64vQZIbUb3HKPydoCmP+wNz1twYbF3w7jo5kNFxHD6D6/GSm34ieOEvfhTvaJn9f7w0c3cvq/FZ9rDqaSTClHtiKPZWKhCYIaovudwccmbwxxsIR7f9LfVKWCZ7FPVTERWfkpMWOjBf91TMSvocu68AVD9BT/cD1xVdKHS+jgi2HB5fvDzlFVfsNqQ6hiZm9xuqcc+PWS053u0ZPZ+3ydRDq42yvQLwLC7q5T7efWyv/8TdyVJjttK9NiMIHgALXSFXnOhA+CHCK7BCOoCHTDvYiBnSKLmD3d0l6uqvXGlEzm9oQ2eamGqWRSLcT7v6W/NiBdloXvXseEJpATewZH12gkMmrWPaD1lJsDdrop0PVUf3chHyjXcKLq8FYxtNkBc9hc/tsVT8bEpspgCHSkMpm00lws2otlFGDp14fXIFmfgrdKS2T2APuJJ/LGVw/Wbdd3cVkC292uG0mJFL6wWGmngTbOIWlglbNhZUZGxti57ooAEP3/PGkgkQeVBzkJUjybDnZlE3VMJTQ84ArPgC2vmq7JfiTTzQTyEFruyXNixKbdJCByCUuBwqEobg2/7l5rcUUR3UJdbjn7q6ucYXzjJ0MGeiu6uJZOKThnPcFnhVrCERKoV80fJAZAqNrUmw7+meyorMqnh6JnfRLBbfpyebqkoI9DyhPjJ3tVXJjOMs/zU6Wpt628Gv2RrB8uyXd00CCfyUUOlDa4oVGE42s0biKZi3h8I4lquWc8KbboNee7v4Bg7BX68uKI6K0HcxGRCnMjpzFKrzj9xVkwKSjeTn3gGbJIbHyWGzH96F2+9wxX/DVELi/QqqcVi11kB+xdW6SpErLlxhfVkNWKR2jHNlN8hbRCkzVaNpO4m2OEmFTtKHyQHodsubNyra9wmOiOLQj+HKBxlCYYscStVyf7RSzVKQLzTK9O5kuYWZ0UZyp+t0lXKU+4c+lSJ3hGTkT+rG/MmuxG9NrXl/akZioIUGJjApOSRVan6l4aN0Z9cL8ho4+RutI9UitgwNfbnDMU/M5vs2k9jph3hPH/6TlFuBCI3XdprRaNP8IWYfxAMQX+S/FFfnZEe1nEnWtC90eIW+zgpG2ci+uUOSu1gvZjA3t/eGnXueaqcf1T/mafw+cNw0PwXDCm2YW4shrx/AUw0c80Y5qlH8hdRVE7qOB04UNzTOGUJEhoh6aen1z4FJwgKfbIbEfUNoHh8WsdN3WDQSOPcEH9x1ERST1fsanvpqOjV6p+tcJ3qezoSsqhSg2QLgSrgyVLDofmr2xNnmwUmMlVucYaILCfwL1JD6sYKBhz5d+OeSla4lwstRthlTtUk+1dP4kTVZ8NqAql7w9eQOZw2hsJoeq5DzDC2OyqSwH5NjID+OBY0cIjln+XStNBRZzdMFFMoO1zpqfgGSwfAV9aFWjYwG0aZ/MyoYQhNKEQl7JmH44Y2utzdbgYEndi4b0tfhUM9GJm/0Vi7TSHq6jCOV9drtn7/StnocB8y0gKXcOk683WsYVHrc1NUznv38IREjbsOo7ozFKBI+kluVEaxDXG44r8h6E9dGYqD2TMvdwOkwuOGbkVGofsJw49XhpAOL1TyyWhX6M2PpRJSssKqXyTHLPY0R8DhttxTEX/jyg5FhnFepr962+Bt4Ymn8M64IyMHUwSp3JkAuLjEPd8fxJNBtdF5QzWPrNIOTxqfB0IeqnW63BFEarKnUlh0JBxuFO1UXKbr8PcS/BZvsCfX2dzA35OxOznjU3VW9qvbO/npETbJ3laeq00VC78tGuapYguOxrc/o8Bq1lT2oRrlUP6ClIVHIiyayXVn31cDOK9uPZMC6LXyTxV3yE3RODnwKXwSZv78VW/LyaFiClDEW97+pKNCCdYLD3+GN1Bd/x5L543gO0NAhRN5njj1PXEkSaXOTOZderQUEW9Fc2Ca6t3t/G0crgn8ijVsWDcQFX2TG4hle0qasZA2o4FUQLeeqfr5yRKLZHKr9gYIbdYi++1tUonu+Wr6E0Ew8aj+LjdS3VM1xuGSGyYR/zq5/pEPhzigPO2nHJfx3gs9WZTSXSVBrKhbCy70uwho1UqvvMLZ65V9kHUVu32+ptKeit0wG84bBOBZiL8hiKr+2l3jBe0EIogTpE1yYzRiq5VT1hlncOenO7tCY9xec2fs0Y9d4zaypf76qWIa5kWsghrqqC9HXo0cmdtkAW6dYtSfX/xMWPKH85X9TGcgCmKUxZKSDyfwJEKS1lJReAFqMPPF1FehRiqH8WNbbtMiDOWI4x/fYsfROvI+N6EZXd+J9Q/1umeeNU5KMCPAJwsZXpm57wJ32CvuBrgzy/i3zV82uH/12kQiPI354stBRD+pjA8VcUZz46FZFgGphMAMF3FhXI5eXYAc663yunBn1JhlxGCjkxtemWyo0meo273xD6Cf5Nx0ODS9bywVnqoTViyemkbr1L77WI1C8iPCjOtGEc27ssgCbdVJZnA6wbp7Ii/JIkYMr0yN/GhLtaX0bf2Wp4r8ULhuLC3rBjVVcOBYAKbQMWOc9oXaUT0b/zzlC0yALAs2GoVuxFGdWevWi1iC21tUJYlIIm74JAZ+hGJjKc85/SI5YN4IbKN8bMyJPfIvxIyY/hbCoWT98SkQmtfobK54XcLZpowaKrCa2fXWqDpc0oGm3NA11cYiknP6RQXX3GAhPUyNlhh1rBuwNgTMSDQkZc6Ney3VeKtgbx1hvfe3hGS+gJ+Uv4ELw/ODAp6YWWZIlwYnktjJYd62X+XG9N/sqRZSwzUszKH2huuf79DJnMlj2RhRMK+rPP1ExOIMNfwGeXtTyWeGP4uIYRImk1DDlamffpIXcollN5T2nNhFBXGRMhCVbNbR2e9VM4EO1D3d2HvNjevMwIWIqB/5yvFyD56Aeykayc1JPKlYwvyTlgpm8SKJdIH7Rus91UEsxo1tr9na9tUr1D8C33poapEP23cEojrVLosncZHz0kWd9yvGzOJsNIsXbRfepIvy8DbP2/az3DBMs3oz8n/PDVjhCoGD+PucHGTp93zwQ4LGyRw4nCqtQlflqzUVJsbJoyLY+c68MV97wAr9tT6/isjtPM8/6W8NSP1yA1Jvwm06io2WWj4IdeZlQpMTNapeJw9hCBBKhBODRgzZkdwn+qn/K6Nw6zmcPZnmeftRKP6IrP3lfwg1XJp6DECZovlviPFS7Q3r5ml8tjV0IGDPXrCqfiRLEUezHwVGq4XbyQ6DLJxFPEEXVawpsn1InrkTjsR38fWGMdCipyJMNK3UO9GZFAr/vo24BshIivQinlA3uJNwNlTmxU+P/QRmkb0V6xOLZzOG4duveiqLGcHcaMttwngg2tDoTHbPzcPv3MRxAOyuGDQFwYNEJqdjhuTGLooqWWNevcKisgibAG0qWzj/ICYWo4650ZbbRG4oR5Vv05mjf2ohXuPa2NrB6rR50b9l0VWv6gnWH3l3m65ThzFwNxNgSuk3ZYOCoaL2EIpmeKojzn8HFkUaUIQndm/9cqbRRf2KevSzswY/Veo4yrcmd2f8s1jcpG68eBPnhSHv0X+QGn8U3mbuTW1zA/3+juAUay4cbwTDG+G8ruNkYAFDWzkwJMyjmZ5iRUiHiiZxbanw5ZqTgaf/Ij2IvI+5UT1TbfBUtDg82J36IOS/t/LDiccG5YZDW4HpelOld3GGHPoH+9vqBCgyYXbkYKfXH+BGZvS0vlA8Wt/+jpwciyBx33yobNnwRBBnYRGwq+7sRVyaqyslqse2J4TErSxgLXVj29IvZo4/s4h+0q3p2BiHu6Cs4UGdm4au2o+8GRYWJaaaIWptaumngGi6xOZ/BNShfXCJTXTlmMwUKJa8iXnJX9YOQYwQmqp6qhp5mh144hiiium9XcqdwnDVSQ7M3NfO30BG1in4/NN3+U+gWDxkX8pVtrLkndR8dN5+sLGqCMq8NGx43zhanAJ5cHS7z1Up8BFI5WWFMlAceJ0CPdVK9mXe5yCsgx9CCc+K3VTwJQZuDUTcyJ9AGOSdWh8dOogtbuj7m7HlTelL1AhjFFaxClqWY3MtBetpfVHqX7wNBTW/A3/As20seTH4/BlEwg0+dMHFroQDJr9AeeHDRB7VOT1W/KoEBUNCkVkfg0dkR5JUHox3VSl9eXP6A0XcaEw29m1aiDOec2NhEA+yOOo+VwsJdsB1XRlwTZj/wsUcjIFMBSAc0Q/5Q04KCEj+TihpEui24VYo5BiFsJcggsSdOTfmmrvPjBryIf3uoVJn0kNzrWi8NjEtFl2tI/+QORKxoycqmrQYOgkMN8W5o41lFo/B5Ucqh2NdS6rkojEw3S8HIZSft4MHC94FqeKQIOHh+EGwZa7kiSELJE+1fbM/RBlwxiiAMG17PdyD0GkGbKo4PzAQsX6sUN0NMwc/hhKjnAz5xYo5N8rX2OmuoMZT2quQE2JFWao1v2KYFKvP/+WenHIDBoN+6uFefhgDs2RXuXR6YmOB9Cl45A/dmkJQd/HGubGQ7gsX8oLiof/5pXJEJKBpswXpg1+Wj65EaY0+xvJY5XeqW4cQoIDnT/ya3ynID4iIL91UgDKeEweECwJ1VQEBAvn707SbIokVFVAc+kadihS7P/k1IbRtqrxQWu5wBVDF1ybSKMZnKPLaKkpmRPyKXjMJS4S/zsEo/++Xap6zojxVg4NkgLqx5oDlgp8/CyUrpphreHAT/ehXKuT66zZBkuoZkl/TZC0wafrAufz9cp62SXIjiHTbsXXdsHQzCEeH8eAfMmQDfyn4NxwRMRwuf3ft1gi/SzhizLlR/oTcbeXSsUL1KI9TTo+An8NyLidJ/liCU+IBibHW6XJ/GiSqk8oiTYJbMJv2D/pbuG6EC1lhLoe2dUM8H5jCj9lBjxIkyTDIzx09ryFJMFfyh1Ai5DiH8leQGzkPcj8FWRHK7JcTo3wSS3sLP/MyfMB/vKfE4L4q2Gcq7HI6VEt9ri9QySorvNVQAWCEHiri0ixte6oj1w5c41IhHxAgTf0SN02RHq9BWiqs6x7+xse1RKkUi6FkRsmP/EituZrkH35psHKSTLFU7jKDlDIeAvpHlw+QG6uEY4U/OKnfyRAWvJAt+8xyxXL7eCscfytRQ8mNQ/PcAKdg9Rmg5SF2VQgioRoOMwhBriI/ZzCUY8bktMiDd3nAQqkaISdCfqHyQ5WzIJd1D7/LKM6P0YoBgA8YA/xm0GCsDztettQi86YJFe21oM+vlw9KDe5v8Z2qmqpGs7gYm/FyhMDRVDtwqJCNCf0F98CwZsytE2RMTpL886eqUT4bSm7klFnzq5ULS06PCA+XD7ggCRgAyg1elMCfVT6H2O2KLExWv3uarhwHckD+vtLcbjOrLSnp71hNf432VEf4w+fYQST1Ij1M3QVD0VGGYEzwMwpb+fccfOnhu+WZWgco5iUzMAgBPjrIjVxEXHnT4AtMB5g5wioPF0Yq/MOdVdhZmsyTQn1oHrwygPiXvWtJchtHoqoblH2D0qIu0H2E7rnB9AFq0VfwRIx2WgwjjCv0PRwh1soLZQQwB3C4fZchMt/LBClKVeUZU+oJwrLE4gei8uHlDyDwXBH544WcCMDQro0ea73LSFTLrDHQecjhiUNOxnoMTCzVTpj4bAGOVHocKz+UFQMXBgQG4/GhvlWroeGHvldQdirxfw7i3Vm40feuuTzgyBlKKmO3bvZnF+Z4jmWEJtOBmhWppuHLtzlQvrTLCxzaCT+X96nE1lFOXPK9+ENnNnvYB3OxFJ2IAm2IqBsU5rZy/SiVE/qy2E91V65Ka7D3lRtHi7Ay1JMJ26yF4XJo4Mk9jfrU3ZrmTNpBcM++kK9NlfRso0xU9n9QOVFLfbHucJt9B0vEaj/sFbhhOXWb+pOjcZUgH5Al+QAfq+zIDMOnqCUBDmSO2nItlSn6yDPQzKW6WsqLAZ0hTNwNDnDOxhQvdVaJQzE69PCnMuxHD3rk84ner81qgM+gSjNi1Kz6AMgXo4S92TLvXy0Or82kXUNLFvapFJHEHic5YrQ6usk5NY9hsdsxHjGIPK1FVIotUp6xvx9Icewzy/DXQJysFmOQ90739Xa8kCi5HMCW9r1HgPgSJPBTOT/M1+fJU5s23uSb0+TLNywaeGiXFkc2XRbmBjwqe2rc1xlHT8fORW3iJxC7ducxjlVBHzF5TK9WQt8GW6K4DPwYFMHRRF9f1WRWLMCKAnqYUBiX9zQl2cxJ745XnvG0vsYcxpwP4+toGdlv0Wloy8HbnwckkAejoROFnWqqBbmBrCENh4JxRHeHtXhN8JoW0w2dB9GoEhzR9wpC1lG9veHUQ/Am/YENJdiCXdigt+96y9VXhoFlD3rOF3oLJ6uRc0KlA0aR+vStXNMUzBgqd27IZH25xWJxsQVYJFbvVXpUmVtPOcdLH036/scRkJQjkKn7MqLHrBfX/FtlRw1vd72+VQey2spsB40mhlcGTIZBFUxWB9ggKYzXs9NHAxQ95eKQrEaJqeryNZg14EMQrlX1hcEGRqfLFbgh/sAZnscMfpiQjQ6GgcJE7WTYlMFQqMAVo1wFP+gmk3Ktp6/6qRQIuKjcqatCcfnu3rmjVIFxByYHuF7GjB5eMJyx+TCxWabAF6ajAotRW2wBDDZknBlZyqcS9o4X8elfjuUfZj3QB2W6SiExVlgWxU6pcJhqq4joHBkZixYMf/Y6hrFiUq+qWCglzHlRB6bBwyijb6QKVZzD0eg44MC0fI+pnvuXnrONoQ/PDkXMvXPa07QwN5QeWPfdyr9c0keIHZrJJ8DXd4NmR6j0vfIh26m7KuAq+iMpUdsehW971FIAnr53Cw8qldyWohqr94wWcl2+a/j/nDHwg9F7fnERwUPovow5LZI6/deIxQWjqmxCXjhWhc1/Z1w5YmdFwDCBuEkQ2P/Mq6GU6gGNqTKYUdjVWbwp2mRpARC5UQrW3uuJ2wEs+VQZA9/Lw0iVP7MsVcZ/GiL5BbqwJmdG6caLWS+Zw0XEEbO4eUxOCcOQHEP63LULuhAyaLAd5L1zZK3jwH6z6SYqnGJgKDB49fljyWAIfTKtog+1VaiuCt1g+mCMXYwkfx7qyzOTMTzFsmFwnM1q6M+XydPJi3LDhyooPTQGLGWMSLi+cwfa3ZaUb4pxAg1P1VSQogROoAUOEzfVbBlo5RwMUj0GUIwxFrt7yNgzZX9g14nprH9bNwo9aFvDLPtMLz7BSDcJ/xbr+8PY+Go3akeHtGDU6UfIi4nsj2WmzO4kENOtvpwigz0ZGACn3nBx4/4R1j4bXWBgJtwxXEqwhbsP2RPDflImPcUWl0tX40YHbqRugEOn5S2pRWQEz/+o5BmYJgj1ferH6qt+fOpxTk+zn0fhZTjIRdMtkZyk8gIsPB1w4Eaa0dDpOj4Vk2MY52aW/Acg8Ep4VP4ffdNabI83o0t25nx0D43sgOfGEL8N9Gn02zQYgeMIQ2uVaZKlWq7vz7khmK1KJ3Uo0pqQ9MPRCPRz/bJP4eFYq+3D6GRyg4G9abZwv6h6zIHzkN8DPGBTOPeROxGqE2xFUrmKT5XCr4oZkvSe1KAVzkJpGsyf2EwTZfZjkerjfZZXYzAQ0wAiz7q02g1QmKnpHQzv2ZCpplrSboiFOzYHqKpO5YcpLDFYAg7VZH4siJPQwFM5JdQcuRJgfYuF6o03n7xB9+6wwReD2S8Bh7NjmoOB41zCnUJ/+IkNX85upOgHtOwh2GGkLRgzbRyxuawSSAPqFKa54I8U+suGbOJ/AK0AWFrMYk0pICQcCDHmyRxG6RzAg1Q/UqE5N+Anw+7nMP5AJiP2aZqTjBYkvQ43+M+QoAlJlipJXBI+uZzQHZKMKgVnqbkpsDcJ/1WWRjMeSACBSFJJEANuEherRV7pA/Tj3Qz0ixsgj3lyyc3ZNY1uyiHNNNnFfCq6VBGSw3rwmcCEYcKFDdvAsGgRzR+NVTcZR0KlGZaJ8rUDIIN4vOWkcAzcPEljtAwwOesDnI90+uzBKM3MSS18okmuyQ2OOrREsjQFwuwKnvKg9A0Pkyyok/jRCSmAY1RS7rClyIp1BAdQmH0SJ6RxTRq/AXDEUyf/hSvd6D2oBdiMqeVYkBs0Hql5wMaLJjMHODpLGJhgYV+gnhKRUyKZ6mI8aSCQaHQBaDgSwQE6QRIYJEO9My4WPmsiUIIgkinKwscX03egYrbMhtCMx+4szg1ha7A1J/DiqqUApdCQtEiBSvaMc23mFrpA+9bFdqSpQ42RzaTh5ChQV4WkLA6SkEsgIrWXGSHzwwtY6oeoNt8Q4IBn6FaQ+da6EDfS5PEahwTyhsBxs55hBAqYikGH1xffxPFiXnNgJ3AisXqzDQVAxycx65wjUlqVqSgBSlihwvmcUmwW0IRxEwOmcwES8kBJYjriWUAWtRsJqlLnrEJ3uSAASWlqUpJLFM2Jrb44SEo4oChEsEHTEVOYpeVcx/q5qDDqpUGvZgzWCLrM/ou7yh4J8WkIeIBgVHHjR2eNX9xNO2CvYzcmQ3MdDqGJwJqyMCuWTEmpa3SVngNZ2mELKhuyVetTXNqeu0ZNwUhJobeCfuGDJ0weWzrzG0rrJpAbmLEReQXTYHAs6HbTfei4MJCER3MlbqT4SJ4qgUlItCnw/BipsumG0unwlBTXkaBbItRbCV2MHRYLswH5xAVmyjY7YkEmQWVyi95yneasM+ww0D7cu8LIKdnwKPeuG8eBYFRUMRWxSJeuzg2Jvo5WVVHdCBGScP8MK9y/hPRgCTFozniUoPX4FV2oss6PAw51GDCLnZoeSEqCp8448/GSYOpSYNs588Czzi1Qo8hoazC1o9/4vBVfPt5oup88PkdPlLUcjrwCd5BMid/gEu98XZfE0YyJlwpr66je3EQYfaIRROsgeYyJ4fIVshaDu6XRWO55u6XDjmSuAyhuqyziR804Nle1G6MeD8PClFXCLBikCQDDAyBUXh10F+cF5zJtTBULoxoHLjXfFyRwVQcbFUa9c8UHO0VWAaYUqlG6xp1rTJW5Dm6T7FeNHki+NjcalZXiWYJIYY0H/HiUIo1Maf0ow+YBEZIB5kIAizrUUC7sDyZitEMYEQtjA6a4zUJ9tFiOPt0GbtEuJbKaZpEVizuVs7rqej5V+y7BElh06fwndBE1hh/iKVAJ/dP5rxTnXuqaBERQAwLqwn+wjD/UIq90PB2RwMVYQtPCm2jRTC2RoG/T2SBsSW6k0+E8Yy+PLJ6ePZPOSVGDnMb6vCKN6k9uoxqKQXQSlaaWuiQCQe+YXGpqE0m+A5eAEKnhadNY0kUpLcgNuRSfOzwRIY78QFj3jj1maQZbmfhunjaWpjfYkXBP25WapMaRa9QpjJTQxrEPVXx+ITcvI1rS+TAllcbMvR27cQ6fkfTnenFHx5LLOTmWMq8CRot4R91ykcRprFM5A6Hnwt33aHUilV9gJ93JuKlb4Mb8+MNGBPIqxF4aCnHaxTWP9un50o202qyaPAE4PIKm/0hSGB2n9Smlb4obci5BMC/Wt0DDxOh/zAAAAmdJREFURnwR2AYPmVw5GQPYMHD00EWaWoPU1EbenjfatxRvzMYejTq/wJn0FmBGQklngR+P4BgDMH+3cor/mPSjYPc1kFzVbrwyA3/uiMy3epkYne+kbZriJadWpUlNX2L3a1vOrXDjpduW220e303Yvw43bgOCF+4pXUTuO+7+xrjx1ytyebf8/3DjNkS9IENnuCGv1JvplTqlDVBH40Q8T+35aB9H0o0y1F17loyvZ29r28PazZ5zev3knNNzkUwcdQ9346rYacmUbtPZmrxHZtQt3A6Umcrx579tNp9HZf95tpzZ/aqD+9jY7/f+aUe4A8dn/+kFeLGSvV+598onNe79JC2f8c6rYmNv97if+V77dVEFNllve+f87r3f8OfpjYx3TYX308+/bTY/reVGyi8DGr+s5UbKr79vNn9fy3XKr9Mdvz1tNr+v5UbK04DG9unx8XH79PSk77bZbD+OjsbBp9hqLmyv2zbnNJXg1XzgTNvTfsQ5vteq2T61e/2c+HP8BdNqRt/kd3CyN77y8eS6yVnz185VNb7VRjiP2+12QOP99v1DfT1sh836pn9he/vwUE/gH9sH7I9L3rcXNtfhJK/Fz9TXQ3z4mXjZx7C3Ocf+fO9fGF/ir6b26cWTaprK4uqH5ou3cTP8YZM94x2TI+3rpKpWWiYWvReV7bvN5t1abqa8AY27BW7n7t39pe+7P3NT9+3Z9/ff9yvuePRu9h7u7evv3iSKu7vxrd+9u3Rzd5u1rGUta1nLWtaylrWsZS1rWcta1rKWtaxlLWtZy1rWspb/bBSMglEwCkbBKBjOAADUd4nSeo14OgAAAABJRU5ErkJggg==", + "e": 1 + }, + { + "id": "image_7", + "w": 461, + "h": 307, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAc0AAAEzCAMAAABkA6hGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAC0UExURUdwTJ6cu52bvJ+ev52bu52bu////////9jS4f///5mcv7m+1ZGawf///zSoU////////5WdwP///////////////////1OR1FuR4v///12R4f7//////3GJ2jqV6P///1Ws7jaK7////1Oh5SaL4+xdLepCNXKJ2upCNTSoU/u8A/e8BjSnUqq0Jf///1Ws7nKJ2iem7h+P4SKa5xyD2hp61etENBdx0EKF9Pu7BcPf9oPC8OxpV/QAAAAudFJOUwBgTCGAc00ZCBAzNkA7/R/jETHCQYAoIH+ZX2CnxptIzr5w+N4wcKXLmHTQZOpr4Yf4AAAVd0lEQVR42uydC3fauBLHsQ2O8BGw8nqx1/dgoHnQtN3QhKS9Tb7/97qS/ECyHpZk6Dl7j/60CWBjW/ObGY2E3E4mXl5eXl5eXl5eXl6/SWA+nxvttwKuZ2A+CVZzb/Kr6WYRY2Wr4T2zeOF4jgXzyZXzUbwGtY7jbZpmcZxqQmu9qpmsnU9CCK7WwNO8qlZxvGJ/SzVvAADn04A6tj3N6yprIaYtsTnTxTXPb3oA2H2G3mUUn2kC33deo9OMs3MpRKKQdKILQOnOV1vcnwJCgWiN31pPAN66oK9aOtghyCfXeOc4BW3Ep/QQW0ACO8OZNp3Q7hk/xzTnmVlH7WXboaU83HhB+tA5jVXan2KciyzeLharhmaW4fcpTpbmGve+a7p3nZozuiG+qcmS06wxzmyR4tdZdxKviyrlC5uMvlwTKCk1N9iSTNx0dTVNyn8Vbzmaq5pjVyeRLhIjJS9TjLR2mjbT0p1SXdnldQGabd7dYj6NtddkB54miSlAyDA007r7nbeJe41fr+KbbEsOBno0Mz7He10n07avFvGq5Uzf4ml2FQ1Ds+4UsbZtFUw6SrCO57Qe5mkuOPBeF9OcFiptFeROM4vTNVVT24DtFtdL+PCrFYlaT/P3aNum2pQaf8tk2kGa2zbpdpkWANDN/hCMAFdPBKGn+buGKC01avy2CppwNG/qCO7TXFBGa1K51jEOutErKZMI60W8zboUXtP3NK/ac5Lhx7aGOseDiHQbb+c8TUAGnjcCzRu6d9aMUOIUf7KbZQAxpbWKG+IpjVe8v6d53a4zJdXLoh790ZkB+nxdD+9X2Zq+nWGa5C2Q1RAyMiLBA0y88zqjIYefb9fn2aC0/mDWbKQv0gzTvMlo5zzP/ATfdQQA+xw4f9Jb0svLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy0slgCIidPkjI3pkBP49B76aLcDVLpk5RxIGs2mrWRBGFzobiCB/4ORSBoqS8HzgaRBc7MCIs0UQwOhSRo76RkbXQAmD2tAJ9UdspoA0Y7x5QIKvnj8wbk0AxzciIiRnIWwPDAPShHC83RGc1bZgD4xtcYF4EYw8u4iRe4YJZAeNCOFw1KkQtvhMCHKUBGOtAyA5cNI/MCE8G2cdhS1oQ0YeeDYVgzwitgiji7KcQaCk4d4GFCpjBSXE7GNYBgoLJKQ1zrbAlxUkQJELxvg2NTJS5oLgQjxRoDUrSFx5Aqh0ks5wyNXkuksiTpS4mlxnVmJ2N0cB4aAtwkvk22Q21HJCxcE4Eb5AMEgFOrnfkCfjXRyMQ0weDWcb5GILLUszDmaWGa5cEQZje+TQJHkAB+NERs3GxonsbREa2QLae4lBEkKha6o6X5qhQ0BLqwMjy9Rs7JoADdtsbfXIlH9oEgC8l5gZOZnNxuC0MKWd1ZF52sBWT6xCPjTf1QZnYh4ZydTSFpH5ru44E5vQtjkTsklzILDAaUUIWvQP0DCXuNjiOkbuf9QuY5ifSbUnypECUXKVcLPAmdgVBtFoWyhd2xEnmtmlf3JhRh8AkgbAYn/3TLWvSmFrMI0M6VgWIKYfiGyrPFPjWQcbcItOh6DGTTALoB4bVDzz2pdOHpnYj2fMwt7asY2DOXAw8sxhejx08AGjJvRtnlfPou5Kez8xdCYHc7rEAzTxEziNHMIscADjMlYNh68O9YgXz3JVOZ/q4FVsbmQbF5sb+UnkNHNkjwbNQofzkKwOrGye759V4sMznKKr2BxbNBn0P6fZOgM/mc2cKprANtcq8yy6fyC6d/U23rGSu2eNCs5PAruYv5xtHG2OmxoN+Z9rfWrXVIU7oofPP1p9flC4gd42HJTkWa/Cwjah60hsyDZiYkO5XJZ+4ux/tmkomElZ/uAk5TmQlhLWHXMamSdDnEEwNh2ipCwT6xDph2a++a7QprRKVOHUdSYAWBVCSNaX3H/+0dfne9vgZOOAwDyd6N/28Xw6fnwcj8f6TfynZG0TjQpNVNziIx939SFhwtgmtMmXSphY0CAoxoemZXCGkqt4+CHTvV3PyZmmOp0aZi3Q54+nRu8t4lyRpIcqZfHUu2OjHULFbmfqgH0ipQbm90PfFpFhmrIOztAiNENDmLLg1GVE1jRli7H+jX8dn54YmlTPe7OM2DMNPPZx5h3M45HEaDmUilTbtDQ3uirBYptBvBmXtRKvMYepK1c409ydWBGoTxzNmvTpHOlAE/U9F6qOfZwMTKJiAnMjBxQ6NyuacArUI6Mxa0Mi8zGn2Lj7M0E8Orm/r2tbKUycBaCJm5Snvt6fxNg8nfYmRu9HEGFXIS5YOe2q24q7LmAcQVY0NVEfziZjZB7ZYqLtCqCH1kToswKmzujslrs+TDY0GZpMcKqN3s8mFUWW997geCIjo4tbrGhqjB4Eo2gaO4OYAx5kmVU5g6A2OtN3i6F5roCwPk6S4FQbvW+aBl6RKxItD5MvtQc6HYbmpi5vNxqaSqOj6bhVPsaJWqTxVVnBWp0IMRuq00vv0Sba4+n0gnXegoaN3t9QttBanj2aO1Ojixs6mkVZHA5lWRRFCTcqmsrCNZqOW+MDTL1ByAFffv36RdPsyBOxLbhreJ2hNTQ/yAZuSzmYnYQzotszODph0KNZmaYT8YwNzU0O2y4ARHBSKGgqQxBOJ+NkOkYRWvD1F8X5MPZE8OzoCQVV61T/aWgeG5jNFqxqMITEbFCw7G53uwGaykgRK7qGZm/ap5lT2Ig1CLxKt2l+AKEFv6gM86zmRMz75UubTTt1NF/OlOnf/WAICfkMiWWPlqYqhCRppqHZn5QtFDRVnj2apmEZJLTgvqb59Xzle17Q8ERMC4oXTicZzVZ3g72QkLZ2u2Kno1kYdg5ILAFK2aQP3lNBU0VNkyg//cVqNRmVqtEgzeq/vEpTmucWVAIzNc2XwfoKznSJViJomBAjFc1S2HVjR1M9E/KfJ05/jJsYFGh+qWl+UdIsDN1mZk3zlf5EQzQF94EDNNFw/6jqT8su0eaHA/lVbMIu1W6ME+L/Gc3X8+ODjDDfmdHm+/uRbnmpf+bWNCfaPCsMUOxpNvwwvRC/IjuFl6I5+cTC/HP1r6P5JOi23lLvMLGnCa2KIE2mldPcNDRx9wmbV7mCpnWmnUzSPzo7/D32Kxj7frNw6DfPsF5fJDTPKF9fX4f7TdF9tD1nYk5T3m/WRVBJV/6WZd6VQRZVkO6L7FWL85PNHI+Z26CGJhJq2jt5FWQwQikwJEqK/JDQbLcSDde0spaVO4tEq65p5SOUgo6CziI8L1bTEv1Nu0zdf/ZgOv0gnIjOHvyzfBT23Nc0c8MWMDFbvjISab7XG2qg1WALZJSTvLpV0CyNJyNV400Sm0nReD0qyfxhftnx5l8Ypva/igwNB6z9E4EvFOZy2TdZXsO8M20BE0JIT/OD3VwMmkAyLJzYhKZmLihUjDeJBx++bw6Hw+Y72QfKRyjKWc7BwX/6aX6RuSDhRLjjXBL1g7PpPyuXedo9S1OoaY8szdx+nlZbB5UWaUs9T3uAsFs/kpQbxTyt8hsI025v9DxtP2+ByT/LpQRn0RRB0NTRWaMXr2/0QX68UWgNzlvyvN1CHnfM56GFoxbGBa3G0TXfoRh9v6mENm7pgTwdGXb9ybLFiUSYd+ZJhPEn9MrApI+O5tvbW7cRv6gMLCA9pRznLrdxdPGUdjSVbgJm4Sia5mvExBM9tjiX32pjoG/LpWJeT5PRWaPvCUeq5ndL860hXG95fcsN3ETOOZH1nblVoIjLYizXHoRj+73RHxcXhKHlWY9Y9bNXWa+p+1adtRrscDVAO5q8mOOrl2WoPL1ZQ6vvNLUlSTBqXZAmn47rOIH5YlzJNbA4z3rDeVbwdc0Sbs7o+x42Bc2cuSz11+3ydcioOprA1FUUwgpEOU1FFaRxEzCFvyXRSoMgl+JcijC1q8nYqM+NaBZmRb0sCHIhMHeJGTFd1CMpzVL6bbV2OXswZtGezYdl65Dl0ZlbmYZfCF++/fz5dn50NJk3f+4NTcP5EIJlWVRip7lDDqYRup1Svsj9IKGpjaAxVa3VGjF5N/RNYPkouVj9/XHcbVMV4fWzZdrSbN6kb7Ohr7/5h7szI5etPNhBpVkTreGgEPOiZhOKc2MzJhyx2D20uoNTZjkwyR95lrk0ayX6Lpm1TdWwpOpodu9wMAduzOvdNpX3Q3MHXbOW8b2vRZ/mwM1niXNwWt4frLqlDH1rgT5+k1/p0K2rvG2qn2cxNFuYiVlxJbcNLHa3zSIvyT9zYux/FvdyFTzNwZtmXW/ztf63L7R+k9sFtc42lYYmV2ENu6M0hvI8R0OOO2RT8/ssy4PV5yLHFdL2//BB4PLvmJj4ce/Ww1JJk7uPxMCPI7f7If/X3rkuJ64rYdTAxLEpUhK+5BxvuyZV1Pz2+z/ebkk2MXfLmAxor1WZAoKRTX/qi2Civq2Vx9++bg9svpnbx3qfX/zAS0ZuTXT0Fv73+6yafzbe/rGckofG7DE0aZ5sR8TRxH8foolzYMJWSuNi0sk8Wf8+UfPP/6dczIS3OW7SLieExFEXM2WebCbu/bP2Ps9m3DxZntT8f4Zq/t6cBPDFSHdIvB1o+xh3GBkovPeSm+Rl9i382j5CzPMHbjd1VVVNVf5zWmOtxqrku4Pa6D0IE/9dcjdjVd94ijlxlSrvdeX1Bpazv1cvB3LvNXmAmN67Dnq8Qe9dcqd+WO+1M6zPZq9eB3vtY+yz0a/XLrlecnop5HPwHWJaOUeeKfHeGXbsRsZrv93Mx1vdc4/x8TuHbxfeu+QmY4Vf3vX/T0ZaffXmWzKN3CV/9P7v3lb33YneTNjlOFv47v8/8lJ8Z8l5q69HvM8pa4MRxpnSNmLU1awWE6b5+tcoWyym2GIz1/y/caabTUDWb9MCwM02KqaXzHbSDLwxUUY0Nrlk9esXlGzeJvVBSm7225Hot5ilCZ9ttnTxOtbTuyLZnkHbK1pO7eey3VzrAbVd3u4lc80WqytaTm5Zsr3aaGu1mK31lH0P5zuemV5o95zGKHa2kdh2s/g12eRuopzv95Ws7xvY2mL9CFusL9litXmbo4HgodnNuQbvItmuXX++ewO56de4Hnb5swPfPRdNWznTMm8wcGKbEi42d0Ys24Dw2BaLu1v89X0CD6aKM/JiFc2MvWDTOHSxFOz9t3n6qa5sK8+3fmDb23I9x8DGwb8Hdpc/S9vTA1sselvMMHBie4Z+28IOvH5Qi9zVamMu/s2cbT1n09bENA7tBl6uZx/YjmwGTma1xeLbFjMOvB0YebPeRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGTyE+SYIfnFumj4/P6cR+xitK4wGDPrWbckV0/7ksOQM3nV3OcQolKUPPp8VEINV/IN9NMpR/FR5ZESm5cZ1K5V2Sm9lFZipovpWb88fVVxPHHZ/z1FceftvaJC7mbRlFGFfQSan65mtakxVjcMHFCqjgWH40L8cvP+AM1XyVvdlg1TUzNnGaFyPf+mbqyN0HNF4y05ubTLVaMfFLJZuK2qBmEmhJ1C9QMRc0PezdFzRdcb76fqGlyp7mHmq9T035a3s/4phRE6j2Lv1DzZdTcf057Jm/K6jP+UgVqvkyoTZLE/LPfeFl9hzepUkmU9N+G8Y0YAAAAAAAAAAAAAAAAQMiYLw/hx3jg3ySKkO/w44im82uJkn9T0VkFxSv/Oglaoicx9mmZwTEx4hPlT8RETqJsgNEWMQMqhhAzIDkRM6Bgi5gByUk1G1Jli9ECkpM4G1AlRJwNyTkxWEByEmdDqmuxVkDOSdYMyTmxVUBlLa4ZUqilBgop1GKpkEItlgoo1JI2Qwq1pE3UhOdMnNgJNeE5yyDsFJCalLT4JqAmEGkB30RNYL0JT6Qmn+yFpCZl0GvAN2L/uSKIxBlSoCVxoiY8Z9ok1AblmjhnWGpS1QZT0eKcQWVNnDMs18Q5Q3JNytqgXJNYG5RrEmuDEpNYG8JSEzmDS5qkzuDERM6gxETOoMQkd4ZRALFQCVJMom0oURb3DMwx0TM4LdHz78fYubs20hvur0mZRo/ANsbFuj8q5OO64wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADARNQ9Lx5uC5Eqld5zEXe8PGiKRrdtXo3SqWn1dCPGut19n7Vty4Nnq7yjuTWObnUUtW2FdKf+UrUdu6vuUGTmRg6LJ5+qlEljdCzUOTXz/jr0jWEyOUah5gVva3W1K40tiyuH5VaIqMzzO6J0ruUUqm3rC2rWlpvTpdIlvnmWWsRUA8e5oeYcgf2ymj7DoOZZlVrVZyN7r5D85XJoWWZp2dgHdSm5qiyLKC5Fgl0ZR7V7Qu7XVqKyNI/SXZM3dR8RZQA7TCmpNpVXK/knI7ZtI78yaprh6/RUTWWer+xI3Y0Zu+zHtudEzTNZ89gjy+8cKvbSNo+pPqeVJi4b3SuXbAtzP+9eJg8ye3ybu/mh7DCZS7WxHGAEVF1yVPKgccOnJ2qa59xllN155XdubBNI7DlR82xFUR2JqavGCWVsV5Wm3pV6U3wzz+teTeNeua1XhmoqbVJws58gupXydNfaU4j8Nriq3Lwuz41vdsOXezWrqpEfZQ5s89IKqiszpQ7HRs3LSWyYvVJtJ3/WOnu1mftVtFet6tTcOfNnB2o2LlZXfT1VmVdKwnU3TXeyep83zanUXvt9TVvY51I3tZR168q8KrYHadQc65tFt04RXdKos7PTSO8fdOs963XFgZpialOT7vrFjoyWSSiXG5UaCY/VrKJen07N0qL6y5CLa1w2sEdmRVHYNI+a4/JmZ2kjzn5FVw3VrAZq1sdqtnvK3tN3sRybtzuj6Ima5bGaR2Wv6g6xF7LTfcZFzRE1rdSyqlezGah50TdP1JT7bsVYZ/1aVsqlSpw4r8xh96gpr8p3dY1v3lpv5mm/8OyzWDr87OyWb9qaVHeR1tzP6n7VsWu1lnSXSdljxrpHzaZP4qh5wzn1Lq7NkqN2hWUR59aMB75pnhCXO/FNeV1TFE1fvOSFqvX+s7nURMbUFcFFL2BmTlifVbNwXFCzdJ9Coua1zJkPk53qslMTHfnm7mC9+a1m94LGytUtVrUaTJXcDaG/3dGe8Kya/ee0Z9Qs3HNE2pvB1thRN25VocySXtuaVGunprbq1Hkuv5YHYndto26szceumXXuzN63Q+n8+9uYndY2qrqh5CAzsJLVq+4fRI3uyrBGd+TmudhOrcGF1Lo7j5LzN/urgzOfhw+/5vLdnP7wePW4KMIXmgAAAAAAAAAAAAAAAAAAAAAAAAAAQfEvTUPTBH0zBT4AAAAASUVORK5CYII=", + "e": 1 + }, + { + "id": "image_8", + "w": 597, + "h": 590, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlUAAAJOBAMAAABsOe/ZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAkUExURWyO4ECR6iQkJUCX6Hpv51eT5K5T6AgICAMDA71Z7MVp8c268unKkLYAAAAMdFJOUzkjASolMicKGDI9VhWjmXEAACAASURBVHja7F1Nc9s4EuVhcd+KD5tjwvEWrqNlodbH+QlIUKiZn7FGpQr6B9LPXqBfNwCSUJL58K6IiLYlWaYk8PF1o/t1g57mx/ad24fpgcEDqwdWD6weWD2wemD12B5YPbB6YPXA6oHVA6v/wRa+vYv+P3/+n8RKp6+QN53u6Rf8GuhRfsxP53vaRZ6m19FTGiPFX+t3/lvAu+NB2g9P8K75jXX+md/s8/Vfh1V+u3LKcRj8BA9b/pBvZxrfzE9rIQqNNODZvAezR7enWt421BNE+/Lrw1t//p/ESmNkM5/GgDHNcZazilMolNCaX8BnbWbagBflzzjTQlTNG70q1id4N3n9jE97i88HhH8SK5wxzRYx61norOVEgcVp8PgTTm451hCE5Ixz2Ysf4ECZByGEYuyhGGCY5R30m3w+vVvZ4w9iRQfCJ2TW6Z2EW7xFPZcRER+CeJGylbPI+6X7sHJRnU3rFbWiZsLM4U0+P2oB61vTylewCvNcXahOSMU5hpjeOob8MI0u5PGmP0W6wwjyH3EUefjpccj2EulNouyb34ee1/R++SvwTz2EyK+V397o8+cQm/Oh9R/kVWFvpGFiRPXkZgTzh9LB5KOINNJAA5SjoPFgj4BR6cjox9iQlUau8fKIT8lj59fSoYS3+nzaHxNC+Aq1bmLFsy5xnc45DTKfDgws4l7jnNPRyfhoQHnf2DwZtUBNw6UvOueRXq3x1pktzBR8C6UIiTf6fNgqYTnXGfJ3YFXsWfMp4SFpGS9hGHAIMmyML9LhR5iOLscc5JAjkwAHHUI5LAYh8lvigLUcOQ74L//8/EZ0O2umV/idWPEEQ+OLMoR8j1Mqw4my0RDkLxofL8/jkCIPXMMz8TN4WeA3KmiUjXfEEb3F5wM6AV5rieR+D6++PNlp9C0doVL+9A8iBzxNpuwtsG5g9fzz2CipBNJkVb6ZlP3bu3zMmCE5MNXfjdXT8JRS9J3Rou3feTaLCC0QzH8vVr8MD1SyPmsTVOmBJXqdGCzMl6E7GfawGhyqhBBurC28UupXAos8PdKB78Lqp+EdOplfhktlvHj7nF1WjBy19pLpPVbP409/Fp4dxJqsV16lh++IWFGyhu/h1d9/AAsEUjQNKrAq4fUJxIqwwk5IusPqn8M79QxRAYu2BFUCS/0LxOJcYB9k7bCaxjdBYMZuSmWUfEbMKzHCSMn6N3n1YewAFKGCraTiqdCnTfnPYoRx7iWGW6xGj6xoBlQTnDr5KfJVGbV0V7x7Dku/5dsH9lbEJTJB8Mr6qbh1RbTy/l1jhLpWZPpYjR6xc7CgpoTN5MmrK4IrmWG6TVPh+Vxd1ld5pQePFqydSlylrFJCqswpm31WmKuWE77urz4M7agQh4JYmPg4XqCQIUOVvLu+XC4AaxdjrbEa1gQRVikFbWHyElllkCw4RXB9motKOH+DV2OLMDQFloSZUMp3+Z4MkIxQn5lYBJe+idVP49LKEq9KdCVoASzP0yDNhBd27lzhvoXVf0aO1UlfAGCcLHsEoTBD3n6dz5GJRWKyvoXVL4NaHyl7BJPoC9ll0QTIMXvZPqWgIRHrwoLDbRscWoVpY/Xsoege5meLCXo/Z3/FvIq3bfB5UFYpChmg7BVxz5NDF1pVcr07Z2JdOMRahe4tVuMKokoCK7gpCda9WuMErK6JV+dS0b3BqxEjUSAk85+tmpUiqIhc1bN74z+fL9dELIC1nglbrAZ07VZyZgVqkdlZ9lCqRUm20/l6viIppGLhj4KVQqTQlCAUp8teTLBFyyVamU/n6zX5q54RtljZEf2UWkl7JQ1UGzdVbHDJrJKZMIXuDbVarAaUQUWCsUVZl0gBvspukEpb4tWVZ8JNgNVgpacBwULrQssrxOuqQylDZpihSlNhBkuvZfcGq+fBgLICUzv7WfHoSm2jhQRWJtaVeHUWh/VD8YozZSrJe3+LV8bxnXtPvJIEuhWSR+WVLUkgpzWUykxtNqPaGZDMz+SZELyqE2GPV/rjYEEoSqZQ1zN2MDvFtLIdXuUf85LBunBSqFsNa0xeWVVj9qpU0SzoO4kNzX/OOfohqK5SoQhd3x4+juWrrKQ30uZBSEG7WlHKZZxghk541Tj36rBG5JWFqKC4FC+yHifNfp8vE2COwnbjrlc2wjPrfT0b/DgOp9BdJVqV4MRhaAcnQ7xKk2AC7KWBKq7qqY0NDsIr7q7isKrqVaoA1eY3Ds6KwUq8MuDVlaWGVmgYjle2QNakNZQre7pRu6zGUQxKIUO2w/fg1fVc2tY6McPzIOYHgCa13nxth9nYHzt3IlX6eQ9ecYUi9HPnj4NAxRUb0WBYhKnS+sqhYx5MIGVO5RsHrCRq0GFQf6VqZatRFjxHWKUUuIrYs2N3CBoMbQWqi/TLjMgrxQ1DdipuvWpVe2GBzc8wYrK9wLVfruTc89KvDq++HB+q0oiWAfNtJQLZjd3pMGSAsEKDyF3mQW4ummswOg6vpLmf/ftUcIK6rvZ6VeEVrJDJ9SKxKElYbY2wYKXnL9MIzt2CVdarpsXD9vRiwsk5gISbBNVyLQEWJc+hJs+ClT46r+DOuWJalRiUIJTfIWYYKopAiVFLxmsp/koi96gHmwelEVSVZlC0d9gK1tatl1iBHVWmWMZLaMWizFwb3QtW4cj6la2SsWqCUPHqVlocd9kyR1aZULBGx7y6li6sGrgPMw9ChEmw+QmMEkqVnj27JpVhDcbAAsmvL4lYVwmwaCLsasjhwP6K/BPlgF7BXSmIe1zZ2isLRa0yjpFyC3n2yisE7nke1EPximzQi6jnMRf2jc8hs6EE0HHCTLZnANVS/FVEQtjNnT8e1vg2a5EmXg2hWF5oxXXDQijLC8aIdJzdessr7mmIzaVAqg0ecx5EL7aq4l5RixEn9Hy6lwSQs0A2vgRW9VcSNOSFl4PwqqlBSJN/7e0o/Xpqa4HCK0RVhlwVOfb0y28FrDN3jep93P58UAu0vM4GGgxr68r2mzsw/UFdh7fynmmVbpa0bXm1z3HSM6+HtEAW12tEVaoQTZ9/27NgDMehCN1zZEXBFczQFH91uc2rI8btSsTiVllnYa8XKaBaClduZPJbyK0vApbwqsQM9dJFR47boSzIKjcR12Wd6U6yMnBXRtR1iUIXskExwWYe3AajB46vLJuhWpkgutbh0FWnDp+DBobJEZ2yBWbbSzhlbi3rfDD25sEjxu0wv6l0eMAGJzSvr5Hi2hZqgEwvDkKZV9kC8/bbdaUi40qTx+YVahAiFitoC2rfBLqilZHWofxgEZeeaZV+wVxY9StaPtHNcQ7prxioSZa5iW9HamN7UqiIe+TVOQckn+7IXS3NPHi5rNenHrSfgUyvsCqvx51kyZbalbYgEhuW1ksO6E0TKrARuuqvpPujozPoQ/HKTiVQ4ARQilvK7rR1VyMGV5QFBKBGoJKt5oNcIMyX9NvnOK8HQoovSAGfXrusbO3ZU+u+PWkcYqTECplSlDW7ddwOYhFU4bixqC3N2LaqnyiberUvbZkiggpUjn26g7QAjHiT3o9r6XHf8SqFXK/HIZWdpqpV1fU1vRTQsbInyroEofnBkqMqR34dc2DeXkp8dV5DNR+x98NKBMrL4WvXkLd2v8qGFWPD2bIkN0uxvMZbVV5dLhWssNMZDsEr214/zjYX7lDK9tvQBCwn6p64dUf+KoNmCqkqr0qB8Mi8slizpeqFhqQnG2Go3U6ARnxVptVSGhcWygEzRkY41forjhlC1B1/dYCYAVfOseWKFPmKMKzqWV5m6rfaHlFJqoAJs0UcO8+DWzNcdppMOGotlefApglG/LrtyHrOV6+O79IQQ3G6WU2BK16VfLCnX90/r8oaeDa+SbwVp4J2n9c4J90dEBc4VKDJz1Rtod3WtQnd7f24e39li7hnIVl5Ufb68YLzrkoLtbjFSkzDK/JaBTGBioupYV93Th7s9f55xZUaXGRoapqxZdmW2i4aIaurkpWUIBaW+BqM9rzi1QB6Pl5tQiZABomr8Nb6m0IMyeuekmSyQuYT7hfh1cplncym96Ob49y3v5KO9VIypXCUq1uS/Nm1+iK1iGqBUuEiPwWQ3A1elYaGng3evb9SbclULtzBPXtqFVgVrZhLymjaE28FsYr8+84Al6el5oPlGjzHmgdFreKZsBHXle0tG+EqIFBDALrwNGhEXK+U4genhNSKV+za9aHmQStf66Z1K8tstlVAWWfKSyGEVdUEJVIwG1I9nRpeIRjtrF26Xw2Z+4XQ4tgUtlQllb0hFnvnmz6YYoBEK8QJpkWKbl5WsWg43hqT1UKkqn9yI8w2qDK8fFJiUPZVrQG6rVs/EVJPy7LRr3r54N2utQRK1QSbrvUirqttf7EkM7W1qjQtkKzQ2U7ZANPNSw2vOMfp9Is+36cByjWZ+ALi1QJtx/xcmQO5copUEP4J1mfE+NwerVMzD2ItvQ7dftHXO/VWaPEQZV16/HeXGFo5K4nS69oRbkVz1GS1bGMrwHRq4yteZNJd53WXvLK1Z4FJ5cuSJI9riW9pxZekcLLIhlWYWnww+wD0ib4SYCeZBy+NJhP2NfrXe/RVzCsO1K3oVLarrZs9r3J5ufgqTm6Q2Oyc1lP2V6fl/Sq+ov/HdJT4ypaqFrfqlQvo9C42JE2gXsT1fOUhhonxcWYTVmWnfqIp8Kn1V7hgWIjd6zO83p+r4n/2U/7vT6nB1wKE2qyvwU1JAhdXK6a7RLmJq04UMOTvbY2+E7ffny4qlxmS9bhY3s3lQPtf6q6gNZKchzYMhlyLuuS6YSDXLYyhf8J3NBhD/41pPsgcA6GZ/OytsvQkuUqV3ct01/RsOsPsTcjy89PTU28L2s1tNbl6BWKXapVYPbutVUuZatUqSr0y7cFNXh2Pb8/wOZHPSVCor4RJTBdXoarMY1muvh4sMFifM2o5gPPHnME/h28PaEOA4YMhdq7eOJJI13lusuWUqDuY3+OkSn21okrVsOgcrPNKW/t2eE1RRl1fSKoT+8Hw7AhcYcLajsIQLyIdghItCmDoA7V80xFsoZqmTV4dX1MEMXaWU5jNeFvwZycJU9Wk0nXOJWbZV6W9Yc8lUGPEEdS8IjeLq8e3H6pe8dQkc6Bqt56NdU7uFXtFGCuRV1FGFRw95wpsELTdfq3At4+5Blt1fzk+bs/GFEbkMGCLc++fuiJiECQIF0pkELrqRRBap3IlH30P/oSzmjOPcxh8lbP6wVgpNj8Dw5atSoUH3IgvNv3SQhKPFL2HDYVrakh04oCNz11e2d0vx6tX4YRdbp15qtCg63KVxOur8hySzJlSdiXzBOxK+zjJNTjyJWhqO96Dh84rSqrKWaUeOlyjerRQ5P1X8bxZvrW7RVKYtC5Yy7Om1XV6MI/DnFGjzaufbIr8ej2ut2HOjNh5Lp4t/Jle3wOhaiHHjYhSMLhlGNANYGjcQmxlqsVpHAflRVvBenV40Zfr21/HqOhkTM9A3XQiqufzRahT8mp5KBu8QNGhaK2ey4SnGCpobZ+jJaEi69rrq+f78f0o1YqLu8VVIkvb6XFV1mMbMLrAdZYtbI8gvW0awDJ3YDuN509Lyiy13cFXPw4RqcDzEK1SiY2c8FWuN2/ivDIOOpRc+FkzxvykmQiIEl6ntBrGVWvi2O/BrH4LGMmtAkjrWoydpGXD7MICIFiLLZgKzcCyxaKTho3yqtfJWFOng/Wd+QgiwYQxlhazJ/Io0mNep1WEjDb15HpEiJRiaHGaM2t47mfDr1u96OsheNHM7HrYInbH7aSAVi8sGmLlnrQhKo+N7PB7I0DWyIzMHKlOJ9Ow6NtR8yory56DbcrzAjzvvQxvCgD4KI3miNn46LF8Iz+ZJ1AM7ek89HNeb44f8lF0MmQhQPshTp01YRa3obWVI5z2mOZbwtR+s9q4pC0ZymwMN7tGZNacWOPTWoDlzdH/OERW8fZJshBXUYzYLnj9U5kjWYIVycdKOBmmYnj2xiIGfuRERVjzPwwaqrddD7qj8AzZAAe7VZgFDKEnZAoeOoUpURXQFp071SGS0rNXE792WqknrNW/nd05+usx9AzZsg1IKx2Rxxo81yfNDOeyUZrCqz0hw8S4oYVpKVeT1X78+gPmcQg0nETxUTVUlS2aepteImUYZcHXMWKgskaIj9eVi0K1lCvQfbY/+Gu3l3owvr151LPkg1yaRM9e1/5DCX3URtBE7jpvDmJMW93xJEwy3YvjZo7+9cB5Fbor8XSqKPSGb8h755BxPIGtSN0J4bEwBEco/iOely965XzM3x+N9DN+MtB+XP8QffvSm8hB7ZoyXMD4QF7aYXyv75eQ3uV9CDv2cvl2qe/nbyndzt/ez/W2/Fducf7iJ/W5nOeYxfgxcUfnU3UybFz7Z+jb2djxZLyaGuXwFE63/P6Un063OZK3p9zw1/z9lG8sF0WRb5+negOB2mRZtxlMfMTLklb0ab/P8UN0fb+ae7Sv2X55eTusDhkGOydM4bzLnq75hNb3OffmxFoy7L1Vs1SMvnZJs/clRu/pVi5lzrFLSXVOqzl8l7Kk2Pyn5dfHkmZDtHKGXzva2sPOTWR+8ciuKfTEGEks8crzz3JWl5p/oz9/3+BZOB/Ip+Vf5vRaDm39++NSyyWWy3wy68f85/ZxucRYPy7xfIlPna6vccgbru/tx7GqFHC6vJyV5As7dZ2Ke/u/QKP8xmnsaUxLkWrU6fyrRAw7M4fazy7JDK93Bo+TV0FAKDoTPHea3QhBDkNQKtFf+PZLoieC8OPfPqnv47h+yEfRM1BNUkc5sFYwqMgbZYzM6gKtL3miwCrKmOBXgZrkkXju+zhuXh0EXwXZbSNyK+UYfGUMk+wM2tvbj0ckREyrjZxSdqLFUHTVx3F1MseYo18oUbv+LrNRRd205sV9tohjqBqLC3nFE81xl/SDQIYfO3Yeh/s4LwfF7YGfzCfxHTKq0Lxxs0pqVp+MPi3q7DfVbpy+4mhAJvsuNLo+iGtf3xyvsMfjdtoVGFoLp6o9hbusBc+ZtLEfKq1LyGYVJFMzbLunFx1bT5X5Bq1XsI4+ov4qsJo2iPUXS/m2MzfC8NHbrxrZPxWoxFGK1oHIrVGT9qCbskF1Mp/w3nk92Lwz9eN5npIV2XBK27ZuUlEd7fwXoRSi+BqzNBth++Lum6BtoOegaNXesGn9cPxVMM2bystt1P5yG64EPysYn2BGokZxNsZQ1869N/H3iCiNVlsLfwZPz/BQ/ipzUzCrhEGyahOpAvtLCpWI+AikA0mts6lER/6oFYuTa47becWLvh7rHsxYWGbcZ3OLUnA2CwtjwBegrIuQm5BdPThgxWH4lDzmyt5Aw2DmJmSb0NV7O/947BlkxSMwaMg+ta5u4jQgYdaQRKAFmrgpJX2B0qVaqQqLAnfubIqub4fC7dbOkZG6ManI2fGflbzi8STSGHOj2brp+C9AAlIjNyVGyCCbBES9WD/38upxc6kBpo70/KOtSZCFZs9+XRclVZw+sWmCp05kwjj6r8AxyrzEnFKtj8pimWjzivxFHS+L7w8M1eLPdEIvvvIRzDn7Y2/qvlfR4KrozbP1F3SPyb0AWc9Owj5OKLoGlUP+lP7ggfwZMovT6gk7O42VhzdzKn6OHC1WGuPxZ6QLZRcwcMhYyzBNLP6Yf690Mp5m+zFvZ97WSSWr9mttwPFtZ7kK9EOGfMGEbkKVcjkYdLbiqClF+QQJpPGO/snzOAfaE5f1CpRHYKjOEsoiz+VS01bEx4WqFJ3m8jmrkW5Akn1g0hIxi88rQcOLM8P7iHq1glVowsN4aLvbNMEhVJbgQawQYWv1BUXFPebITFW79uzIRNMVPfd9Z38/zl+POYMnWcKFUS6dulnty02p4hAmFdBiQAIuMcnT0mLwFHr2yJOVg8ZpbH9HXum+Cc8j5fv9s6pJFgIsjbVRWncE2lV32mh+GZ9smeRKrnBBWvISHshEx0EK1nO/x8TdC3Dv2p6xLfBk9GhN7p+zU6qKuoXajZ187el+m7gP17kgTRAfIzoERtvoxKBzE7/EdOAAfn0hgI1hvliMF5zFGrRypBr3dbtbCr0aJvWSFyadAUc1HyIuwGGYWmINpl79gu/Hw/WibD+rXh4gYILTg+B84pb72tAjRfVfTzsJFbmeszpU3jS4/BZle8uqYTOP83AfyEBdwFPfhjCWAtWwxklcjSubM+nkt3RtInj1knZExxOrQ4WrGmSyZMABnH+ePzdg9NH3YD6xPtuI9jAhHzaKUExxJeP/zADU+O+VPaQ+AqTLFE53/bXAtYANg50fpEP48uh7MDMLE4xBDOuqstd7Z59etamI1ictpf3OA1x18JyJo8UJlF+tXI30vboHHz03EYJsIDnZmRvPeYF2b/EoJQp7tJZycGoqe+FiQo9ffNG+a4YJSbWU9+Uz9bo+11ft9d55RU8bo6pCqIK3hxIGYJxXUfeVJWuVnTxGgY0F+scMH75hiRefP7oIt7j9kT5FWFfdfSoTe44BtNmam6SvpUtIot9Snszjz+TVIvjvpuBGquvIq3HjU/RYvp1Z0JP24NvaFheDYmV15YPHLXjDwyQ8mcvagW+S+W+4xjRlNo4dX4Atq5b8os/zygfy+kA9A7XgA0R6Os3ceszB3eym919VpYIw68lx/5omqVTUopHnzBKsaRTQQMFqlWrocLvKZB7JM7BRhXqwN8oYUcqrTRFVVmmgDV+Fqtoxn+3zisHnaI8dg/Xlh7Nq5LRS3P6JevWwXUKZjJqsHk19FzayBdjVF1kdn3hPCzeV+U3jdf/a90CgCpCK34RLZNo5HFs6Deaj9arx7a7P9p3mUhl8YrWN2F9mV4eWquqEMDsSi9l/EN23shn9Fsig50+A+kBpNQyjDdazarZ3vcLudAZpllKmbKpaL2yHvlkzJNsPmriRaXUZO/VbWuL9BQhqRprpL0uE+kCN/Rnk1WfePq+X/9/pAJ6Cgezq1+s14jmvwCvI/FayQ7nJ75Pi+osKqgb4MAzt+Mk1OLh5JXMT1wf4twdorMwMhHB6a0O5Ik2bJAPyUZ16izG2cjhQNWqa9ABGKlEcpJ3Puo/jzePcBbcHO5uLfUmh7iwYLiwITZauYoUC6BeHhqE4CVIwjPo44Y08DqBgNlF77vdNeLzob8cM1F1mxH5CH6IGXH5hdQBTqsXgdGX2ECpVwqSe1ItsPESX35JW/LqZ+KW8Ludf59X1Ib4fNAtolttkmKs6Nk2i3+Pxh4itbgmh8sWfMKhQHwFh1IlQwFvw61jxHL2XV79d18dDNdSSCOBCiQZdb6yGYg9wAQ14uMQUr1EjL8DJCIaUeRnoCjRwauyB1Rd5dXfMoKp1qu7o2ezaX8ogM3laiT1F0luwOKTeFIUgVmqBatQk9UrCNH2RVz9/dvDqbjwDoYUMH9pgHWjzOquKeKXxrkAGoDGBWEieUo9cPGJnETMKWufbz3JVX9creN2/3tsPOVCXOZ9EtY6VSe4QEoH2VLqNLayr0s0apWs/TKBBuV7Rc0beNO1pPI6AoP8WK6lX1zt7DoTTSRQe6qeT7ZxNt9m0wkQH5HpSxXraMfanxp/ynlHqOli9gWmqafgPsZJ65XnQ/da80nEkrPU2bqHBG91KtdN1iKn4ngKbG8pRZWfSdBhB5319+jhW/+vq1au7q/E33oMBSkdFVhqqvHIc4jegLCGpRTV7Ef/1zMLEbBUllVR0fS0LTTwOw3+MlcmrO89NBJbviU+T0Vh5eD1pXkVdP5KSy+vppEgEpxcNqT7Qaxmn71/CpfVKlgm93m8Pb8AmhJDtklNnWaCEqVZZAiRPQZDFnqs4hP3jELv2wzBMAjunfUzl5pXOWt5PhxxOcKZY5t1kC2yu//B2LbuN5DrUm/qAgpTFbJPu9looFzDLEeIAubsCBP+I72A8f5D72bck8lBUSU5cZafTjyTdPYsRKIo8PDynNg0MIY9tRLNQhJlCw9Ytj0pFxIo/9RgEyojm63Na3sGPK5qZ34i3Tzv4IGAraZdn8dW6ctaoJ6sILcAuG8o1BuqUVhofksvslxuSep3bGb9qxNU34aITE0I7iBU2QVDlrzhm/WdeZ8sC7A2hXuBTzFUH+pKiClXVmo8cV9Ul/B1aYZMoHOeBfLURGKDMpPe8U9kuWyKh5VaGddKC04gqgebuXyBW12uG9A7+Ply0k2qdPRCmQhlN2kEsAqK/iZE1cLWee8CxpZ4DecKK/MlH1W+KK97H2e9/V25XXSDMNToRseraQr0Z1gtqr7SZ1Q33M2ZAxwwQlF8+10u9blbfQeEUPZ9/j55MB99qxRw61QvMso6rc3uQrS2hC401sM4bSGpUQ4BCSlamvz2rU02h7uDlGvfjvP/78ecExV7lhidSAg0QZszCaAzsjRgDDg2hL55tqWPiKnSQNLXqoKhUfV8IYLXewW+JqwnyLxgv50XTrkGxGsVkQzWB5eUbdQNI22wMHTuBrBhL79HWmA356l/hqp1/w97ExPtbnVJWnXgjoiJ4kO7lKcsY5/OClGNYDCAcWI1JvzENtHKrnAbL/YaPZT94bu7jfFN9lZa+uVjAxKZ0rRYLEm6Y0S3LOVWLuE4p1pvMPuu5quL5X39jqf4ZztDCr/YPjyvYUO6mzFugsU3X4lhhYHoa1SZ8G1YYhsypGhb0s8GAK9RvCStT5KvLNe3oh8fVJH2z2EsxXKwN3kQ8R+C9UNorMmI8tuYQRplqqAUIqhZufQHdZ/WVGk2od/DBccX0da6oCmGmmgoz5sIKS0ls73bFrgwgjIEcjGMqf6ISM1Tc35mvoBX2/XEFy6RdPq9T1zX0eYPSX8dqaVjM35dR5RzWamQBwnAPuP6c5L66+h1saxs+tG7vOoDG2TfwJIJfkwasQl4cyXNmiOeAalUxZgkF5XENrvbDcwAAIABJREFUVVjMZeyZgL0xsp4kri7wias1Uh7aD07gORKysAPTuGtz0WCwCDV/pezVRqwcZHlTwuplU4v4Z27DGaFsrXL7paX78eOxN1BUBHaQWzhdN80dRe0rjHlgE8aKhs2zZFhGqBG8KYek/Z35SmZeDV+Ah/bOEwmwo7E5Mb4+LdZHRpAWTnnDBr+uDmwGlahkQTKxFQy/f67/KmU5dUNN+RK+vhcWoJFSdD5/IyYz7ZTLaVIzzjrGmb0XsDoS1E78KMUU/6bvYLaH4KFNnikLAOrWNcvX85Vo73wrX3QSeE92kqbWIDCTYbhf1rLrYZD97oqLbbJlZ2bsyfDdrc1T5Yv4XtDb9/smzvDjsXG1E/reKQ+Yl1Z4Mto68WQ55M3l1takgWxA9rTpMwvUbIopdV29Ve8gA6PNHd6/H5arNNOR46q5QDKO4hqovNCxuVxFFcBPbnAYghmwqSXJx204pSpf/StSrPvv9HyZEFQ7TAJrHCZgKVDJV2XQKjQc8IjWkTtmx0Id2HegeeDNF69O/3ZRXwn/qubWPr88bG6zE8U9wYuryipkUhpVo8BAuWJfsrENzCH08h9dvEFmNWZ7To8n5b21UjNkvug39YMTO3ey+KViOTYkPMasXsXtDe/XsG18ybFKBRUEhooJBNOFVp1W+e+MRVjpun1p6PXw2QQUT9AAQkauBVnBhzmzFmAL0WiWXc7nnKzYKYkWIMzGdB7Daf5h63yV9iau8Pr+fkyq0uIwWM3tlpw02Ybgn9nhO2StvVCWCjCzgXU8hlrgFt/c28gzUPwH1sZn0D8tatG2RsqPhxWhu4lFh0j8srW/dRpHbcwCTRjpbFrlgpi5cbPMtD36P3a3BtTyH7o5rAwH1vz5SXE/rmlHn/cvjzgq7gRFdIglv5ZmsCELw4xBLwVeUwJFdaBI2IawBL6GW4t1L6k9RlXvX9+1dDTVot/Ab592rDqklgMlS9VVKMMwmug/gLs31lxQXoZfkLDNNT7xGizUecvnZqu4amrvXO6PK6yQdLsO43gmO06VEzoM0Qe1OzIArWrcvwF0haEfyrGpW1sqOFWm2/mgfMpWB8rxUjPAjv78DXV7B4PFJCcHV5au5sSEPI3IPI8gMjoVZmwWyxAklDM4QHu3HdWn/8h5jirbv73/r3QBbWDI5wfk9ozDRAMWvoMlf48pxtBm0nTssaVxyctHMa56JW0yIFH1t3WBrjowy2cTXz9KVvEPnMUdTHrIH0386gH9YCfMbNh98w2canfFkTUqxPaOTqsp3WjU4qReBXT3IArx41A0zXx2C0xmH5ctz4+NK+gOEXDcafF1dQfp/eMd02yIzgR/YaMVgJUQ9oxSzOHqE3Ob9a+fdRxcPj5/Pn4ZCyyf4wo8mZYvwN09jujI7UShcKpIHpD7kvqKhIzHq8qpbpD3r1cb8XRoN6IKi39ivLx66bwcFaLpe//2vkhXl8fzrwhcyM42onepiqsg/L1UhQ6jBmKGurtRLsw0iSesCmom2y+gVz/nc5rfwHhy6bzeyllqW6/v/HJvxa70CTGQr2TXR4iJU8bKsjCMw2iKh2F+Y0ap5BYy/cz0a7saPqkDfedTYrc5rqx9Kjnbkc/w2LiCiRSV6wD3FjSrgH5Z5AkHNkG/9ghSY6Nk43pVV90wgmhFFpedMTXNlYKzHFHz6ZVxxbpqLa7afn93j4N1N3CtplOFGgdg7Mo0nnPV2BYPMKzGa/iwiK+3hoPdqK6c7bmgSkfl534wpnhbxNVnump39DiUo5Sk/4mFh6ZWCSqshXEUsa+GehzrMQ1GlgEJOO6hbmLW5yoqqjzDCilheXr+4oOYvtRx9XGtbj//9wHcNOVr2tZn4tIhAzHMQ2tW64YRPq6rsNy27qSaGKi3AGHmk+RSlP7gafEOXmp++/N5/+uO5mbKH6d2YAXxnFQijgwaj611XFEBze3fQLu4dBPNLR2NK4uqXCk4y2c2f7gUV0c6svwOXghDbu7EvdzTCRZc42mp0IsZYAksZDs3Mr8bm2s2hW5Hud29CYKxjtoaeyBwz6ffY9WQbiOf1cdn9dVmXJRpHkoDGqm9tsrN2oTledUjU9YEzcDegt3v1l87CiwqERitSkiDNfGUXjlnvb0XXtj7tr/zy/bnb9KK4rAe6RqM7DzbgpV3U5HQKK1ZB+UcOaqvSgVzJbN7/I0Ae2gD05eUv95UP3h1N/z5n+0rp3xYPLg5dV1jPRAKTehuILku45va6SclKChWGWFi37JdWh6a8/N/TmGUDslSUJn0BB4oa/HHUxlX7d3wTfkKR0VOEXBqablK5QuYEL7c1zAhNJTFAjYhKL8zZda18PLrVYKr7iBDxrFENyk7cUDN6T2F1au1y7hqeChs5hRRTUUmXJKqyiFzlp0Ngq+fdCM41kYHQzaAEL1wXhpxZkuumj9RdRAPyHhHOT11OP5A9y8+iP5JfOKYA3luadC9bLyDHe9HdCIlUO8xj3CVQr5iqfVQmyiavBaoJEGzuMKmGaDFT44rSxBMzOtcjBI8o+IK/WBTt/bXJnSvg6o/aGlTXa8HyHmM4juSpWGGpYy/U24QWgrG9NtY695ROUWlJ3Uz85eG0rucU/o4Fu/gFT2Z/bZ8NU2i1qvMkha0bPalFq4/g6GyFR9qmQUemrJ1mzEQ7bgd2nOap0BVOnc2PVVUnivRVDLQR4Rn/viz4DM0e5wNvD7a4tqBD9NBqHeqDypg5zuoCbNSpw/avY2dowozlv7rB9Cpr/RJyS9LT2CqPGM8HWx8CJ3ElD3OvxSf4XJtf3BTfSWbSSym2jXsAuFtypoLJ7XI3AAXUISKIlOmNzrnbjkos8jr+JFgPTM/db3NCUtXC2W+Yn0GFVb6Hfy1IaymTAkFvle4CwvDES4RQyjXkprEIWP0kinkLdezhoBVMZxnLSD2uTqYC/Xi48jH9bbkybR4fevzVVfsuyG51zr1Y2aEBlERD3ktIiwoC/DlTBsRorGwYg6vxa3S2/dKt9Ak4MUQHuMlwNRh2eNbyZNp7piszlcdTANVuXCqLAODiqsgvlJkjHRVHNQJdY9V6M2tJYLqqyOhA5NlrgfoKbSoD/ibFE/xpNJvf5S8vrav5Za4ksiCWPZC/nLEGiVOaghB+06WsoSwYwEO2mMZohea8SqaHldTXFV5xx1OvIIHOSNJWVQy+Lc/y12A1g7veWU/2InwyURy4h3a5lr2JBT78Wz4E0JzHO+cCFcNShNmPQ7DgAL9xo2xXwSWHFI6p6O+g9jHaXEgn/c/11eiHVyT1D5zhYOOIKaNzB0S6sIysxuRpHBZEsbcugloCpjKILhoUOO4qiLsKiFWto/HQzn9mI7vaBUmQ4X7/tLqB9fNnTOFtivsIk5LPatEdEwj5gxZtYBQI42gy9tbPFleMV02eUzq6dHrGW+xVKkf0lGlSOKsHk/IHw/HlLVUXOXRxP5uPsM0lU4IpD6UGVeYcTHPEfKgtBMRwlJKDmR1yljcMDNk9fXLZxoIqOe3TwoFLxmLLh9du/nb13hMh/Qnfy12ly7nO/e8KFHtTp0aMrdMc1nshN4/wDGQcQwVtpCVdEhtSJpA92l1YMpvbWbrHSwjCzadmaWiyiGakNXjTfTHYzq6Iq4+LsqiSr+DG/LVpMT9F/N4VlrIsLEYSY3NZW8h0BrV3phblBurfBU7mAiqp5Cav2Ys3dFdfLVSrEuuQnU1H9hfSy2Lph7yrxW3jweCmfB/mloCmCOKUJiPMAY6tvxeSRbGYBtCW0GsOSmvemTUUZ4y01yGUjBJWHkcV7yPRW5nK6FzS2f7+fnn2kpUzwMrvr88fKwqjrWkAS9gqJVhnCb59wiqdZWVl3rKp5/xh2M22nxESOcx0pDZj/Y1/R57Z4mrj+s622v2cWCJnj0jhBVT2JVxLQr/kczMBrYQ1O0Tdj/Pa8TrznwdTzmjeSH3exwb4krGy1IexOM5WNRW/vgaP7+9L3Rrm3rIP1cUDGrCBYOb6YpZ0iiSQyDEZPtJBRmjwtKU7A01KAeV873AeHTvDqr3O3ppalI4xYx1PMTsbnO+Igpkoouet9bt3WJ62sELtsjsBFnB2y1bJS2xPUXyMMJaELGFL2/fEih2CVVPV+7VgqwX8zlmzJKj5Aqmg5s/zc9g/PyfEhdt+U2cV7yDfEqilEYKfN1UkUJHUeodYJUUlkLGA6ho2ZhFBHndV3G1/EtGXeY/fv0/Z1eTWzeSg73RAYSqC4ynE2OWgqR9CtII3V4JELTvhZBFLz0zsW/gPk6OOCr+V6n0nl5ed/ycLAmSRX78+JH4jS4Ce2AvSlVsI/Sp/auOFcOAFrN+RfnKNM8Pzwfptlslwid03uZQri98VsNciSjdPefNLTnNScJoj9LWvcH2KEHVJkehsaRaiH+jSt2WV6P/d8pvf9FT2L/yDgpmtQoxtMCJWdRkVk3nQAsV3Sq7QEm3AK+AxgbV2puYWFc57G46tlGMxiDJalRwL+aoWK9LBMYvk6/oLsAv94OVrtzI0QhJU5WpF1aZyK+0G0GqqomlGqEPWQ0B5wo3fu6u1Xj+om7GQ6ngvRnTxGJhpEIdf8YyAYvScYTf/rD7OCS+8/Kr7yAaCcxl9k4zxnEvIuzRoVYkr9MGSX/A1+nUq5zkZJ7/I8aKJGxoaFyQrnkvGoZggHUtFfbPgCEY7YV+hT+/GZ7MZ7IS92jdXjHZw97WWA8XvntBq8DHSHy9PZzKdazi3+ppTuKjPehVDUJVtRZUbCKXDCCwUKAUhb4Exgr4a1KLIrX2vbQ/+OUqujCn09Nj18zCC+ZeLsVhUSFbr93B3IYQmOtDG6+DZZ4/KExMyMvIyKcBQbF6YL+K5tr/8ZvRdPo4uSV0aY5j5EI5Wc3zXDgFC5VVu5p5BPmVXThtREOHGexyEvBBPpqXnw2hL4i0d8wD9d7aaRximsL/o5U6DED4m+YrOQF67J0v+BVdZWa1Xl3OTXTSEGGQofwtv3KChuqxg/p+WZUM6wPzO5CsHsnrHt5ETupQL3D8dZ7Q4vg1jPvf4zsoEWhxBtnH+VW/SvA9nHBVx2PMCbqer04uyQoX7o8wtt4aov9laCHAHjwujxDlTCfwtc7+MOI6eALpBRzpEzgMwx8GQwbPOvrVy/13sKLjgSTYayaCa5bYVzkvpTqhhp/dZhKh2gS2NWlduge2AIlV5Qj1jDgxoMVIquKuD0wVq/TUVB6yfBjlo/UVcbYLfnWpbpfDzHy+usqUColrLGMbTe3FnaQm0aeo3cVZYJ6pAnY3NP8LvBQYktqTuj9vDIcVFnw6egrFVh+MMzyX9Bku5Ss5iLeqoEdG9xfFeq3YVUcgExNvUoHepr77BqbZKoKe0C3TvCY44sBojkqAYn7+dttwZgeQj35J6/aPM93au/UVSvAxJro+af1ZFYBQYITCleGeTuXmigstUx3ZsVom+l9cMj10zXt7g+CLADEMDjNEjO1xR8U6tjVp4krr9jN90Wvv4GyY/6RpVR2XIzhf0eU7HUgcTOWsQgz3y+4iDOP5BUQ2aDRQQ+SqoJk9UNwBljcEMU6g168b7Sevr0q7S/ffQRpFrJXebKkyThoKZa+LuQfLZxAOSqqOxKy0E+Sb5/X13C5iAcCXZbgqSL4adayMs4hxr60wuZs6QeMxjcH3k1uN9/xqrswqZaW6Q1UmvLCsvWHOLsJdSM9FCH2vMZek3OWhaWPyusOIE4A9MFkBBqgjg5+Q5dmZyEhsIG/86s9cr6+IIX+9PMBZZz0Lm+l5LLKaxPIUzMw+HECXjQiFrC71NWRMHgPSko0HWAG8yztC9fZo80JWGMmvKCaHsRtGaQrHQ75SBOv58bqdeQtPqxyOKIFWKMOu2uLM+C8s2pBSodAcm7p+WHM21DWzP/EhlNE72gvG72CdDsZatpTKwy+rGT7eMzELg/X9uMKhNcDxOs8ZZoVI6KL8ITM57QtX3WDNuxUdx0doxkBWRxpxiHB6/IPvH7DUxZ0CzR2ioYb9PyjRw4ADwdyn4uc1xfpKd5fu1u0VifDpQbyiAJhObpQY2pcmzHz/oGnk7uSVqY2zHoUL8S4ot7jznKxq7ZQ9v31Ba6nTj5k7Eyjz8ljdPmODUxncKlVVJRiG5P0XGpv2KhLaZ+xZJ0dy0VCCGl8nggYkLBh2VaOVAsGfPngIQUH1ond5Mtsh/qxffXzyHn0Bv7rpVwQukArfSlPBDAulQrQ3F5nbA7jgZHYqgo4MsN8rrVye5AMl95AWCjB6EFCd/Ap7vzCWLXT0q09dyCn41dc7u5QKMBwHpz3zQnnMvFL5WdiPx72I9gDvNVfHgV4YaKwZAN9uFBI2TWmk8YsFJyLqaDr4DAWbTZqvdrf6KONXd/LV/KT7gdI352fRucEB4hCOJDiv9xnPsWnlSgTndXe5XI/oFPzBWXxHVD0Oxv3fRqFgj9whe6QMCQRz4lvTt1Tr/uW9xIF8+3oTtDJK7PNhPZdP5/YKs1P12aeGagjcU911vGbjHngCg1ZXIB8H1ShzG7H+rIMwhTo2lVd0/fSz2XxFlKJiDP7vZg2qQbgWnYr6m0UFoJfsCIm1Fg5t7HzrgYKhYdjF8fMnfD2d/VH0YQlKU4gA4MuZT23RVMk7+HF2Y/3Mr2aBGcxV5lRdfJG7ZS0Nmlex05K7lajU161ZjLgFhTbH7Tb8V17bqiOs5yylPwbgQMxi8qpwJ6mjvabX35N28GTm9eUcjKlYYFzQ0JyRtup8S64Lo5rOctT+QnyhbUzBfuUFtPtIsvRQC//T1OyjgRfCIGHnbxhr2g21aT/4yezaUgye9oOzRCEjoXNhlXIRvVDU9l/6oqhqw8PAxhRXF+c2jVDRBhjEe2icBQetefUBvYnHgGgknEjEuj0ULTaxW43qV7f2cb6cChAJg91IG2vd0NOUeREpaMLWW6aIHneTWqGE1rdVZ115vMVIKLjSkCxrIazQUbGO/pXAn1Au5JaayF5TxpN5e3t/YO5cyeqb0a0vENNWnUaIvGp6WEpOBbYCMdROxsyX0XWsoGriNcIEQoDjYPZrorEGO6YhYL30+u1GmnZj7VGofkUSKc/XeX25SkXhxGK/WihG7ny3B2J2y9Zilfr6suaXk7zOk3gtEhhTqBku7mjwELAJ9AKA+hvZKsOvuHc2pG3Dk/l6uvrNl26MXsycHONaLbggZztTYjbtxss7CPmdL9o8II/dkNYz//SyrAWTZKWheZOZuKwqZaoNfWpPVtGxXrN7qW9X+aKs1VTJ8c7j9Xg+iUfkNAWOj4tcclu4STDje4ZqnBkEesZCvWzgUuQhf4GB0CGujQyQ1324WX2SU21TismIsY6ziXO+KN7ZWE3NXiXEUNzSNVcQkJaG1Jg+4aQ1IBOq9w8e2EyqhVtMi5JBdrUQEB1rL/j6yD0yQXvDSbmwGeeKKWv//na4oXCNL1rxQKJSQfZ0cLPI+NTIOqrkwlIQdOTdCBkGXrMU7tZI1MGeFrTMHWb0aCCMww5SOlIdBYQ5KUQh9MCxYgRG471md8PfirpqP87kVZ9kGFG83bKIogBd+Qbw+ChRQbQYI6Z6CbFyB8iYuFbU2Ixar9Nvo+ep+63oI6faosEmaHCitSRfffIifVFP5kv5IokMbp5IU6dKLmwsQokBx2IJ2nyVmacRZt2GbpW5q1PTQONAL0IdNAis1UzgWViDeuFzFOMPCirIURP1gli5v+Zz54JfFesr2Wme5TDzAV5YFz6Z1MKSYKtFaELgI0pMa1LVldGpWTIlDhqrEgoGOo41Dv+ILqToS9ByKpRrBHgGwVRbNNw0HWcTJZ3tL2XdbGwFZ6NFm6l69HJneEXJBeoC0wGqo3qdOxvezX1sZoOLNgHFQAPrLHhMT4HGpByAnmFiXyxBo1dt5FOIMWR+hbOJ0o31lx8nyLGInxypjjRl5uqq5ZFgf0jrJHvi7LXOyzciqOdr6AUE0SpdmcSIxERFHQ19dSe98jZJiQC/kl9Fz9r+zPJV6YZCgd+uplJlnaoqCoyzppVKhZbOcNVmk4Spxhc00oLOmVFbVoIwuhUGHA1OsQC1qLq/UanjE7hRGGICe/1d17xw3/m5oN/+41CGyhkztNNanp6aA1N9K0K0R1V/uRWhx7cekKYIJDOkoqBSsKt+QFwWgd22gTnGhVphonoKraPGin412R7n/WzmVarbhWw1p3LQ2YbgKqeAetl4W1KltPRovDnYcnXEFUi7H/YgZGpDCKhAfB2nduiSw+1qAWpPyFEbNjmQ518zDbqS9s5LFoOzHI+gE7qFI/JEpRVWTMtOtWRKAo3Ir8vk9N5NjSYHYSCpN0HFOpjjiIBVJ9xrPyiw4HMEBgtP7P0QXSDf2qboVtP4l2AytDVRuoX98tvPkgyRwKHgUvYR7OVqGSQrWpMvlewo6Gid6o6cqkNrOd3y5jeQg6+x8DoyFcyuiMGL/Vhsl8G5sEoYIfawFtXe+fNThdVua/xWIm6cZPWMwScrlXvWaqlc71PguGG+o9N7gQ+uUFKiQp5CzSMuU61TP2OLz1EpVnn0bfL8SakAyWrClPWqt89YD7l0q/FneU9wtuyhZJdEiAuAGrflvQiayFsKX+1c3Ty6xlyzmWLyGi0OGqMO0jpRGzNEr8utpX5FpQJaLhprSvLVqV7f839+5uACQccsxDfn94AWQq8AXe8XnAkmz2AjIai4MbbN1zihgHs2sI8UsP4MUlzRBL4eaAWeYAXfnUXfNmm+Akth5EFNCrXVZvMVx2BRy+IfP1OyB8mxq2ZhNpVn7UuuQ1l+L01XRHU0PTOgC+68EXQncAzN5X0ineqxVc5izueIetLbbGApePzAQGQsyO3Ta86TKc5xNAYrhI5N0lq5uakMcpwSQ3uR31vy+6ZUgLYi6XgD4EtkVAOrx5FfocqsrNiQcFxAQlqgPrA4CER/mhjT23QgAZE3UYFlcVEUKnor3RLKagZe/9ZO8Khc3/fUNdMtLszqKq5KSySMH5P8Xv3AAXQC10lIPHjHAo5BpluwrYzWgWTlT2t1LhDIOpSi4He002b86vPv/KyljcF/2XFEpfcDqRPM124WBmJwo0uOdmasGGewBdeQ8uydZ7BJCY4DEUKZMdTYNVxgYRPKLlYKR6faTBXK2B4EIdsrfnZzHfPVhb0JQ9GeRVQg0eBTVR2i7/V9LuzoHEsQxV2bxikr+9Lbx0B7FCqWRS5J7Ezvl8Vu2qD0xbIKy8+NiimsrihHjdO25TGo5VWhZjAxSP0y1urCDj0q1y865TLjiD4l8EkjKMpDd1T9nSEuUBdYa7sM4wddMKVQ7CQEz/K5djfRYIitUyk6Td+jS+0/pu/fX3Pt6NI+zvN/fyoc+iQgH9YKuVzasopfsRJtm9btRlqcFJoIXHiorPIOjrHQoilVoDVxhnQmr7V6KFtrS3E9eP0obUVn0ij8/ppr3Rdxhn8mqgKQrGh8Cl5VHaUw/0/ZFeTGjSRBXfoBDfID1syszgSbDyCaIAZ7aoAgsA8gCFg+uQ1Y+oH8AsPP0EX/W1ZlRFZWsdhsecZjjY+JrGRmZERktLsRIGZIL5GwXGEaPO6axFSGva4XybwfYercQbHWmUxHtlWn9aDcY1CWYAmuwELVuZRa/m92fzxbnOFtq2f46924y8kNMz36fUjuLTbhfIsehk2VJJWyQymNALpe3fsJxEKQTSj2XC13yu4beLJwwu206iRGoMSwrfKR8qPzPLu/TfLq+vKS4Wxff75b/fdFNRLJbNPgfBn7hSb4Dq19QgO4x8Pet60EeNO6LezEXJY8iyQfv+B3SaWb9KLbDDQPvAhpgb87dp/uhxkv0NSr19C2r7UA7NvB4HuQHRemwfWlmyEAxyMvCDZ1PDZXwamQWsobkarSbQQFNgFY15J+NnLJoKrZSKwJGChaUSlQ+ulzcZqWnJr9T8/x7GyPc5h65efBA1eCYhlDssdlTDyIGtlz1U14fUP+dq49r1h8YsUcKpaSsf3vI7LpRHY/Vbq5BQTRdDy9+OvHDnQJU+fgK/fDnPQM2d3E4yNnHKwCZRcoW/nDim48qmFvTZV81INWquSiE3QVjttUu4nVqupU3E4EZ2/FNqdVrCqTR22cUL0ZnJlX/RQgGLTry+NbfrvESnvRDP9qqVeCM1xoBgbCFSN1WAtPjUIQF25WCwmyjYXiUezfAapgdyIpRdehMviHR02of3QnMZHzWVVmyXo98XVUJ1+xzC9ft5acmm1e8Q0+ZuZBhzMc+AHEbUple2S8rcwXcOChqfjIYg1xRNgzf8agAsItN+KwrJeGtN524jJkwlNufwMBenJklnRiuXI5Nc2zRO3538T+6mXbkxwuxxc0V2Ny6QYOFWrBYHWnw5oZWpiVfLXN9IjO2YgPqPv0ebE3h5vYbgjMYnpXlfklICCYvovzCh/A2X8BXZQkTi6vNFavKytWi7f7/gp5pWquy/qAmX+H9ai3y7A9jTc3lZFTolbdDYS2dsZRj3UVL6O5OhnxQ9ltUYZIVOgkjQIAgxbUzzb4CPr//jflt+fvLr2D8Phw4LGbnKnHQDAm2Hpk+nUp7lV9NOYn90yBABe8myp9FrjmQkEvSTAuIRaRxU2O1MhgoVlH/9kxRr6mS5laUivOK9XR53gyxEUDN1QvU17i27A89ZbMgc16DjQOYDti5ioOG+1zRE15iiQRTjvpfGB0wbzJ6+dqecJeS9rObuYqYmnYXUr5oPXos54THb2bndf7wR90S2PfPirGfslcHI69YpqVZ3YVpFzF/e57rWrjo85KTAkNdwiapDbVw1sStjQJoAyhgeq1AfVvb4mPjxYK1xzNg+IDmeOLXv/WvHrQW9aHNK1GHhEczQXBFWxVxV7sn/EqdJd/9MjIsQ1/UufNeq68xlO7RVfAahmQldJnBVNY2qy+R21Hg+XS6znpGbI85KUKfp7xAAAgAElEQVS2cyE/CsiXYjHmki4vuARf8eRsEpVcx3DgrbgPMvZZdSqIXh0JsB+xrIEj4a1peQKejnZdq5W06x7+7H2NcvHxqSXP0PZXr2qZmfPe+ecQbQX1QGVCjGnkNqWIKaE8XTHTCq4EZcO1sz0trJnq0RD2zvEHUP1zWNTLXGfVK27ca71SaB2D4NwJvDfLf3wjGueVw2RetzhFT//RvDK+oePKqWJUaugYYeuNdamQm7BgDxX1J3YR3p4Jqxvl+juxTdQwlHBFK8NkU6azzWQ2EbrdQifVzyFS+AFN6XO8m/B2fU+rvPr+bj+DuEtySQ+e6slTMmgzlk3iFwqJ/BKpojAEhd3PIM4bBLuTNvIlVBQ0T59VbQ0o/j07BRln0IrOk/RTvgudGSdXtZ5THvLa29DdPnuH9NTYFpqWvTHWOvZ4YFSuBFmo1YOvwOu7JSUprJ14OJVUSZhO5uPXinWO42l3xsqxTKsV2bJggaKWT2H+02adeeU/iD7Znq2v2oank8fbg9PxBbjxIV1IDGZ/Wg/Nmp0tVgIq5IKXwF2ToGQfWB7eyP9oxEjsFc63pPCTToFSz5FXAVDve2SWAAszuwb//zavwEPO3MdxN9bf9e73ZW3AIEt5crPHgLOvP4LksVuN4B1uvR60qlqeywUtrQ1Ts7jFwejEVahzt8HF1hVEh2Z9MqDCLB0C4yZBk2hNIVb02c7rcXzffpFDZopcEYwZgqiSvKu6pl9FKj2tgmfv/RcDK24kXJt+NudGTF7p18/DDDm8yjSiunnwgbPFSj98rFO9H3T8f1P86uklp8f5x+fVwwMElYcVGuo3qNTK6zX5OlrKEwrVjl1N63f85Fp1HQITrTweV46zgGACF7TMtlYT6I3Ybum7E8B40k4dSdZLRslg+PxvYsWavZcq+JWAMWqtk7SiQzg3XOehYx+qsOU67rMdTR/aKmgFwY3klukWTniAZa5mTRoqYjHc/XU2TPLmXFahyKN598F6/l884+T7K1+vzJn0gz2li30gL96gURiaZv36iqIyRzawla/2YRggViBZBT7MUc+NnGkCQ2y9zEghlNQB2pDuHzoXk14bBgmdBEvhBlOvcI8+27e7vLpQdpO5ZR3whWCFWdfrTXOtLpicbIr9K4H2Um57tC71LFSnM/XL5AyVK6yKvTqVk6LKnXSvxXEGk3P4Dsp4k34H38jZvqb91eNP9lfhhosV6jbYoTahUg2JTwzZxnoWvapu1ipTtZzZJfwpnC9aJ/eEjfEsNzY31IBhsMEfs64fXEg6F55uRqQmdqHyq0/z6vX17XXz/uCSV8avIsGOB+J8Bowh2SpuGEwTWqmMq9pqQCsz2YhCYuk31U21BNMDLSjpxt2GvCYoAgOtil+/GbVqlo9gb16d/H2f5tUveO/kuGqub1e5/OUSX3xrBvXg0za0bjIvkI71FmK/SyMoxhT0WtC2KvEQN2DV2b7CXt9g2JgqXRadFJuqGVtT+bGPUmuev/2JfWvzepzv7/oA4XGVwOyDMbbSS7qxRr6qg6/H7gusct9BQlaFJWa36l6slLQyh1jJDpC4umnWfZVCfk0c/XxeTSZO83oezGEypm9PUirMzaOaHNdqHJqBQ8lfqOgSU+xiobwoXELHtXRYHa9OdtC6eXHuhivMZEQ2Peu83ZfOaKikVOkPCFKI1BKrP2aP85bfD7rZ+YHGHgebVkMwmIOmWZVcyU0u2ZyCbCWTYHHP+WpJKX/HRijsZ7WG4RlTmQLp37/lctJ3gdeonI5u8sD6jAVEL/9MITw2VBor4qJ5j5Sf70L7Z4wusXf2ONppGbPgyg4ahyPqT+xOW5h/QcNFOIZHkcSS4gTz4ly3LprJXtdaXGmFXkHensLs+Cd6jmms0DM8XbPe0V8+cCP2cEhwK0qUxLyJi5smdooRuv8xTIL0irnTpaJVo3pYfoWGoeNKPm8cF76CEJdOFoBxvQLg9NmGKpNTUaxYr15y9+h/fIRjngaNgThiGMfA4hsyN79rQ7iiA+a+jtKl0rmsqA0MDmkdRptOtLlSz8vsLp4IDEhCIPGZEXCataozaKGsb8TqlQvCa+4e/dJf0Qos/QbS4VHJ2QPf3xBxs+vYU+AuEp/fR1QIVUGEwfg+A9+jMjDdMfcWYEBeTfYbKCQ09AfEilHW+81YAWfIcYr8HidclY8A0XAab0Q+DbzONUQCCTUXF7e0HbZVEfbxMi7j+PIpuIlj/WD6hKzIlDULb85iehheZAbUTgFh6jN5Ffor7ryumTf45QMg+zhaU+hmDIzHMA+uTk1Vyo7BeY2iuEW1snx/XD9vwzUS9xfKbDySj52JFomz3EIEHjvaK/RVs21BCVzNt94gRbxPWS9W1KsYOUZRb4KkWT6Aw4pI68fAKizl78Fh3OKU/HXxqODIbA4gwESg3SIN9WEQ5PK9nya7CMSAQ/pCb+ab7XrF/WB27/zl3W8DV/4LeiTP6nSjvBKIj5FCSn1G/e2xdbORj7Y24igHdWCb/fyxZycFZuq1TRcOjP5LTtq0FS9Tr1628PbHq88rKeyX6CvIS4Lir0pR87CyDdXDSexB9+u6R1/OYjYU0xdcahVornQbv9EnkFncdWYG9P3npIqICfTZ+cb7s/WK+8Fsf7XUq0BhSPxoiS/UlqO9tqowGvm7rieRPoRlBHVcbaCEtmgVyrx3QLDMAdcxahUCTyHklSno/e169Xqrb//xcUg97AcefWuCVLAOpzYGy2SX+QbH0YviE/fjnQG7ptQZxkPcReDdndo2Y0s4kV4cyP2BCyqdAVp2rLYmUGi3U8vOOBtYn9M7f7BdP2Tv6TZoE+SEy5CYVQjGoA/Rp1S111hVvqVCbhWtuH6p93rHJRdHm5TpAUyvVxXzZH4JqYoQaD/PfQRa7cUK+8GnLCZz/etjVH5aZOqhjtChZV+dbwkqXWAxN6RvzLiKLk3m+Umz0JLtfyYVpt30j4Mifgq0BfTqM5ZbuqyZ+2nz6WX6q18vW5q4p8fvbh5cW/1D+mZuTsX0tALdlWnYbww3lcar1cuKvqOq1MixjJJKvoDlyhN0CujeBBSmp4hZACtul3VZ0+8mVdRfvby9bfJkXF4JcHwwgWooAEdeYbyJLAulsVK7mON9RpiVGvBVeo4SvBjwh4xoK6sNpDEo6NeBMItQzfwKskD1O6H6GvXtr1u96NOT69svyZFYkohID60VvUpdQwHu+a3EXiNaxTgffNePxBXoUCH37+Cok3mHE132oAcEphBqu660+plkmFuZtURq/h3q1a8XPw/mvHcef3xcxozX+ICjbyLVVZC9iYnsLloFiaH7EAO814PcFHhMh7xqcZ/MgMXxLlDmv45DYAfh1txZNdJE/st0x+Nzv37b76C+wcxu4u8PaUNjmWCgZ6vRavINLPSU5ycVSr6qV8GlEAzazv9xVp9ewMhZTQQFN2QNCR0bTSh4C0IcQpZNNwO1/P72JxoHDf0qrleHMePH15gzSjXuySfBopoLV+SrmybjlelEsYEAduzgPm+914b7pe2OgnlSclVH3QgAz1kKFur6Xq36/TV5g6/bt8+url7FQl2/jTCcR61XCTetNucWg6Z57w2Wx6ItKdJ1D/AUbDy8TTa0lMHQOK5VE5BitO5EQvnxI2mPbVXf3/kGv/1JONuZm8XXpV6lzuyNbgQH8wlceeuIySMd/u9Rf5e6RBWyR6W8UI7M60tuZQZamFQJaIG9jooRREo1XDer+lcXqd8pzvByzdX2pV7Ftml094DPsT//3SQK8IImx4WxLNxC2W2y6QWgolVLudhYldKk/KJ50pc4qWzy/4xdQY6k2A5cjVTbFFxgavTVa5SZB0AgLoDqBggJzS5bX9X/BFUnQEXXBWYOkPf7yXOE7QcPyGqpq3tr+Rk7HI5Q8llPpj8pjk/8SLj6UfPqM2ik3NJY38/7HytJdtXVCTgDbREW1cpLEGWn7Bi4Kt05Zc7j01h6T8WM10ULfFAjrNedgaG9Yxo3jFSzDy3MpWoIJWtY4Vfv768JXbXbn/eobSfhUbRQMNssTZSMScu1oFjdPGkJW5oH5QxgnXARUUJavK7qdAvqVvLk7Al1oW841YSGobNmodsrUoMGLcqrjy39q9vPeyzLzkv5Vgn/V+Gmtdc4r07FEw9wrVmfzVeUq5xCedfWKl9U9iYeBhvlZLsI9UpxPO6sRiZWSK1xsLx6n/fOyTuv2+ujv0pIQnMUVDfdpSmJjs1iZP3E4ZvdfQu6LgADbdAp/zyv5JPOk7Y27Uzmq0fM+hpoFQB2XTYfvMHwe36Ev18+o2PL20Ze+QfYOv3scwQwtGev2MS1jVdBKZ5aNsNfsRIDvFPtgWMBQoUhWqWEeaniyLVp7ehBGAEbx0Dbm2rC78dXcBznv/9e4VdpXPSPWI/P9LNVlD2+vMkowrDWwtw1DgwL6VKuwE3Nw75/UFpIbE5VwKNDc+V3gMobkukPV8zdfrDGUNRHhMzeoNOtXeMM7/+5xw27mlm/qUH6SrsQ/fr5pF7Wex66mcHsEFsw33hjWQXdIcmrak/ysqv9zrRGSgFj6D0RdCer+Pc459WjXPXfX7EP7y2hxTrn1QK3CsjxW6vyVgshlKKwuRlc9me0e0tzIrlQWfxkrsLibxrmv3xDw1i38hTQIctReerMq/6gCx3t+c1DzujyCjcmt5S2oXwH4/WpVzq+nmN9OcrqnPUz+ITjtwyBWODoWsIlVvA2re2aeYXB4H7SuGiaXOSAkt1/lFfy/EaN2jiEoH1/HXphB7w9tkqnzuOVi4goVE6rQphpqqxzfB8hVkAhp4oqElYNHz84TAkmc0mI7tWm98xS1Rj/DKstLuGP2vZRHt8QQjW4nmHXY/2+9KlUxxvyjqP1KS5JzJ1SIlXsN1alsWlLL5QN7CoyrE7db1HKKtpwkS6LC+bG9hG7tWqOjaaV/G/4++UzPsh5TfOvvIi9M17ECfjaeNgOKuG3+AQ7rRA2qEJ8PCShQBM0jcs6JRYDLpqSZ93Q3KvYwvZOef0GLa3C13AYxt9f1l8JzpDQZ5jxdmMRtU6YnaSY6AnGjm9P4gvKizmdqjLaM8tukAvmlP9Ip54/TKyusftJrpZ7u4vYR4uHHs2CTIPyBB/BYl79glHcLTUPuu+gFCpcNbeq77FwnHLacs+y03J14hIK0YVUPojIVWCozcBCldYSUO31uLfSW62GGOj+++MXkF/BULHmX7+/FhbrybxivYKn7ts1FuNr/YSTyfvzQuNPiAqUmXfZqLhoZsm6UKSpXB9xNY7g4RTR/KgsMeu4XT54hoIqDAO/gBKpx3fwZclVS+p+3KMTcLc+RRuaWt9kqlVxbAyUQS1NddL0OqLkriavPS878Q2MtDxY12sH7UWHSFtN1Ui0SluFYcCX8PsrujFJ6TO83vQ7CA2GuFpFU3NBiXG7UnpmIzjXqqKyM/kyd7pWuVOKKVNk/4aMGEPZiYFiqaUHpzvFfXAo6DCwr0KcxmmIvoO/tnTV/HcQoSLjSn0XV6rQ7p4kTXlc392A6RjqVhVcq0uTE6jrDZWYrtG8EmChVuIshZmazvKq2U0r7GzQJoSghff3CNVAnMHp1v5I4aIqcIUFDoxiAYi6FSp1wKhdeNpnxhQODS3Vk6R0pFC1wsPhaRUbMTdefr2pl9KEXpdiv10fMfqFgo5/DdI2THOk4nolBjk/Un4Td4/HQGguFKqFsEfhodBMQasnkJjidKIbc2a9lYyCl1IPKLc4aZ2pZMvSxg6P9BhX75d3MHX5DKJRH5Bdj6hN83fwJd55zdXqtpFXdEd441ElebTX+FLw7GyUtjlEi208jt+QV5cIDA3+I3mYceoto4guUqfoGm2nPMC3Q0SzFziO+BSO+jPn1eDz6n3zfvAW6lXLlsH5uCxtF5WeffZKfMVzKPsMrJ9OplZ4Upvvst72q4YuWl17IX8ECttT3gd2R4yF8AIlrQb06wjV/NcSF/2R2OPcrL8yulXbWl5ptLLCLpWsaU/YTWVxtcrm+UY2grMMQxn5fEMqVBfOeVqfsLHTeLRXvV7kUuyk21ktYw4UuJg91SQNwzC/wcn6dpAgkzv6kFdXGwbNGOF6va6Qq4J1nTPgYVrNq2a4TJUn1yxAqSlXFKZMMYdU+iTihCKTIFBx1FtJ+8niLnnF/JKQTdozeI2UZL0CxEf/xXY12hiRL/OfwOOZubT770p47M4bvQbIl5t/YILD3vGQkmpfKrvnWKDNPmg14g+7hPAAp0E+g+EZ2hvcvpsIHEgJ1pu4ImjTbjifLW8yd6q7a7ioQbxgH0+mVbgRpBFlWW4aunWghULPv6m5NwVlqLPXd4BTYfyTvEJW9VqqkFeLniGpFYZ6RWJMEMVsqdx7XSsdq5FSGG7SKEO2UmCgvjhyqjwxTOLtludLHkMT4cfenKUhYAVggW9x5/vX94hRrxjM/DOhZE1RvZpX9B9bHMhHvRKEXfKKntaybG4XHQOVC61nf2bPPEvKFRD3wP2IbCSqhUZavnTWUCFxdWcRzlCncHHTHU2ClleD+wnD4Cgv8BEunXE+Vb99CxclbAX53hXvn2CM+XOB9p8dk/5hSOLu5EuSHXlAUq3VBLpa+3Vho9W9LFDZTXXdIbo3AKvSis5OYQrfvlFCFf7hZhzY8Kb6duIMIbfOEDuWT2DkZlaoLHt2iLFnlliXuaBXYctVlR5ggKjcJWVFqU4RjXVWbrbB8ga3lJvhGnvXKbBZly5hkJou0XoU+GjGEf321O3Sz3uo57a9OStD9LwxM/NCIgVdFWswlPvAU2SIpzPzGl1QHQFQrmwViFsI1qv+MLGAKWi82Kz3HAblFU7fLw7q+0jzr26vgiGbpSA+f9cIjsl0ECwccvWUM2VpyvVe2or9VVlvLLr4BJtGhaysbafk8x5pYYxDZRHiN3CSnv0Rr3Fdr5KaAz/vLZdd8gAj6bTlRYn7Cm4GK8MywlQLARyfdGYW+tAlLOW3GUS1KV82zvdAZkDLq1RiGWVBgjW6qWaSSOExhmDFebWxH/wR8HZoMLxdIyG+mEOEN1hkamV29BmUa0ppFy4CXJXSXV14TLllQAKNbMyDTh3GyX3hMnB3uQz4hW0CvoASpTlMw/zrEarJ+nYC7um9Mw7BJaveVIzBgXyQFvCSMYcsWrzBXIWzMxp3lpRp4pFutQKtuI7gbKM8D3A8nHROtw1YsbKPxGFsApwYrfAER80rSvymcIbbj7/uyjmGHB/ubpbFXU/ASfw/OpAoKd57cfqqVrJITkuf6NZmvaWGCB07UOqf9LsTc/jwDVyXaqXiE5S+IWSV5tVHOAbY5NY++iuWq/aswk0Lww1y2VHYz4fShbOgMQgMpdgHgm+FXqGiHWWiTuEgQs1HnH4O1GBUlLDZ69Z1xPE96OO/6KpC4zAhXN8vdjeBe+dbau9szrrq1bzQ14FNrJnpbrdX/iJArFpweyrqckIJrYK5Rk4Z6DKpVEFOaO1PTl3N2p2VmUf4R5iVR0miceQLxCN0efW5m1ev/7176Ep4/6uvoFzLEzsunrBJz8F4nPXS/EFzjRlHXHPLDQcgGCaBll03Th8GzCHpGA4ZfIMubNg4hIKOFtRS6/sl8iwOs/MtcefF02bdSbRrNrsz3KD7cHE4CYauHfD6KTc7ktIJ6pQx2bGJSGmcCDuVqNeziD24SvekA8h71ngKsoCqFf6WH63tn+/btwAzfnV1jCtczLeLxuq85P0/0S1k6iD4yMF5yRUdVNYpLQHnLBUZxodk6vR0uWkikG+HaOWKVc/xRrrQkFUDo2X91bZncfgOtm+KsrdrQVrReFQeUXZIO0ZHGlJpPr+BbyCP3iiZlhLMZpWK9PeC8EJtQo77YRJ2xzCAPMT98gRYT8s6iheCtdqlvid29Lf/3d+0YTCn2IjHl1mkQDneCFXmDcwEZghjziWclKh94KU0N5IFetyY9AL3gTjOBQTa7ZPRBs8aYquO/pPNlQDHk5SrxRvUe5y1r2W4m7hCm5YU0fOCdZydzybadHAikTl5HRGLEdVeIRCBbyV2CPnaiquxwZk2sDDeAnKMstVFGtkJln/IK+lAw9Z0CoDxiA5B4jS6UE1+54W+PeUbfm8dxEDacRtbKSmH4Ukie5lhMxi28henrsotM5Cry7Jl59pGznMV32uUj90dHUVYXrEDndsDfv9YsSROwzJW6guQ6tsD3u6sXGQvr9NgYQofwg9Fy5Adw6FQ9ahw2QUhsPACy21JHQbMriQo0UT7kZQ0oYuT1it27AKCjppZiFCUVm7G4T3Oa8qz+I4BB+zQaIEKW+tog7rnzSU1HYRj4dKenFwhBHVIuMrTwcIyIhJf7014YYcROmi8InLVhJ0N2gbJro16pcBomiej7H+qHbfXSOTKjJQCsz+1wAmr+iz+DM7XESXAYy+tk9M6N6/jNU6HlSnaUNoyN+Sw80b3kLc+9KvJJuwi2Lm7n3Fdrz5E92ODfzWLzLXqerMS2CEiegrw1RP70yonox1WG3WsXF+mbr6VPOskv2oFRDtPHmp2WDGaWg5amELvOaJTGEa2Vok3+OvX+6YXtuTVo28Pl5XnhbFuYYJ8dF/cX+AUyrYy7qzioDnWzCowV27Kn1hdBwWtUZXCfSA0cDvsFY5Sq4aJZctl05iKlQltp/PqUavOb+irrn4xKNK9MAkixPecBhjNuWJxK1kzs7HKUyIVGifeyPd6a4rmfYNsNZLj0WtfNXp2hwQHaMzq59vvcWbd2qRP3F93komuCaVVU25Cz66Mj/2WnZyYIAZWORfPCwfActladcDXzdsNsDF0F5p+/yJitJI1xFiM7eOHKRGnafo3qu0fm/6DP+8BjdFidV3xaA1m3yTSZgt8IYALubEXTk4LWiadanM3r6dJ9hHEDTOTa5OPJqsarVQjIFAZAUOvPkzL6r7uGTZ01R6xC/MgsavloUSmnZXNzE9Ihwa9Cirx2SmJLibq2ijaTly8sybUw1a9HgkuhMQT3dWoFAb0oMPktstIqriw/zv/WedVQrf20V8FoN0rQ1+jUZAbr2wnr9yZoG9Ec3Tudk2ZI7UuG+pDhI4bK1dm7KbScttT4IAuVPjYLFhoQYGzJ/PqH+Wq7fjR/3n/P2NXdOO4kgNjMKQEbh8O8y3YE4BgQQkMLgPBgH4HeNi9CPYiECBdAivPp3H5ndWsItmtbnk83p35JthsdrFYBQW188eOcIVwnU9nNVPKTCWauGUPz5uggtJEq6eXmnJ8XcFCiaxjaUQjwxbMl4dj6h7vQT6S+VaeZRaYC9ISflbGSvPqM6/7sdEYqPAYvwXJXzgb5fEbyoWCHIep4NV2urRdr4M1syeI9mpZ7Xe5jGzldC+LHQPgKhT126RkBbkEJ/esGQ/zSnUgP3P6V6ac9uEFfLVjII2hOZjfOEn208ZfgB6YlPaTwjFtfmxjVugdbfDAYO9uthxYInuM+lx2iJUMmWc8lQ1sTyK1JVWoV39sN7zk+bLNcVQ2JplINFQjgrRA9XKdBFzHU612wzrlEh77BfBCnZ3g+LxyVKvBI8b9we4kONiKLYxWrPbdpwvXM1hffxLux+dbqb9yR/AjMX+jh4QqVjQvmHxNeDg3VzShF2+ykX8wD3wK9iqrOjippluv+PFQGMiPWuHJhREmmpGG5lxVX5ft6/PKzehzfl7/k9egXITepKtqzgnv+MW4uRXkGLLQXlVAXAQ7cj6yJ1EFBVzLTsWTV6CxtAv+DXgjFOPP3pS2oJpX/43zqrCP85f0DGfI2H/srCqlsp9PzXeotK3MmQN43Ng2iVhstE6oycQqeoMYFJGRVbcOdR1yMeVFkpEb35Ntb2lRl6dztlvHNfj8ar3Stv3Hzt/5+R580H/4fa/BcKbW8enQeKrydoKCWtVQFzAOkXRZOTrtoIQPUx7i3hb1mg6GzCN3kiJsYeTDxoY1cZVawxkMxX2xvIJeX1bb8O0fDwxPbWmXWAzo7EAZDpdvKrenG3LKlPhgzCUcPlL4LvvOii431rDT4vR2mFRCXxgVNebzRoBiDAbnKY6XHr9wBNdsXu3vwb+1Z9j53oih2flUfVNYgBzHE4l8EbzQmqxAxhEPor207ZQRoPx2TKs+TwlFu2D89ck4VrPBxkljta7h33YE7R789VsNCDO6Hw8BRM/vu1CRcEz93kLTsDuX7eUEcZ3WdIhCZhXtSHrqZhuDAa7Cqu0/HOy7+VDJJQia/8yalT2DM6Kl9+Bv0BkKefV8D74rh+E9tkdQpJ1v5yMS0fa8MdfFwKUVclqnyjqtcT0S2V7TzQbGwKFNPxwtkUzKyb55NrYUKynvuT59axQkXJJby5Lcg1m8/fPtrwccGBPVCgh7UJj9tTlCRboV7Ck9heHCQfNlNxOk9B4VMFnXO1XpDRPUwuNmND0KRaxupDfKwRuzbegzPiGvli1crhdVTCbLZ3jQKi/i0lJI2/blX865aPh2InZ8CvpydQ0B346OSnu5JvPvjPQEhmjbpi+RsoU5xAOoQKj0V/t3jbSfsxSqLVyL5dUh1vfMqzMMzfaa45ZXJQZDtTeXr/UIdjS0lo1KRULr/fq3an/59Qh4T/bFTWZum0qxSoY2o6JV2dZqDb3Cdv62P31tlz2vH9m8+pf6xb7HjoJbw3By/giHW821wlbhYSMp1ol8L/R625Sc3fMOpHS9CsVALm0gieFgM+Lm84qAFR6B4z5S6ywdVTiFAY/ZovX1J+Jf5WcTW15BOSZel4f/4lndSV6FS+YRMF88uVegaFsVNAWUQDQ4Fu2gKxEvdClInk2g9Rl5NeIndwRXVK0QLJ7B39AKc9dgdA8+PngDphYlaNrDaPBUHQ8GtyyqauYVVOyJWymFqC1YeA5UrcdDEEx2qveWFgQ5uBnj0Snuv9K7Br3VuoaqvobP1w6Tye5NPI7avUQAACAASURBVN7f49WbM20qray/0gOjZJOKQisQs41uUNnbtFrh7A3keahmPTR0+uHV/kgA2HUij35K8gp0xym6BFfA63zfyDl0sVIBrAzO8OPtnw+6EL8nq4J6AIO+R/VqpUsEKyqx1W3NSLfmqmCXBxh6E4U2N0oN2XAwPBVBCtuIeHZUN+Ouz7teYQWogF49BGmRj+uvwJPJzSae/ZWsdO3GgtqEfstMSZaZtwNYKZPdBPkubd4aj4P4Tu0QelUQICiT7UINs3LkBayZSpOQmQVKUcfvlZm1/fn1xziQvwqamds9mGoLVBatBp5mR1TaSAWybclpB3+Wsuz1/sk8aHMFHZRh6NWKclAB6OxBnIhZTYqEupkNHoJJv7BqkGZpFFZ87vN9l1c/cm+c7R6MKFeA+UhgINJ3RBHdoiPHThF2cYHr1J0LgcpsdA2d+sf3FBqX4RYIakN54VuUPMgemnXTdJ53QChyarU3YECuQrAWV69UzGLvG77Vq51oBXSuSNE+0A51Q/ln09Cowk4rb78EPK7jMxjeyRhJDJ3bZ3b7XLfhaCK/KZyQY0U22lgexi+8A7d6JZ/kHvz1GzhDtmeQvIqWBSsTb2Kw9pW9SpUF6toJqMlhDEPBTSutzSiH9irwaMuBMrqB8uxQ1J+dnOyzTbjA858K6B5uv0UAK/RV4bPel68Yv3rL4QyfP/5+fESKx1VEJxKOdr63qvbcfwxwKsP4Yt/v3T7XQNjKyRVi5UaNEIqbXDdegW4eqJzsecpAMIs7gZZUvmdQz+K3jJZF6K9iwXGlPIIh+gpov0i/EN6BFWVj1BzIatZ1jxuDP9Rb085xoIrw9UWVtBE6OqOBVko0HncvQQnXjLyyMD2zavF5VfTUC/Uq4yahfrGgXDWvxxLQIQoHD9NT3oaF6engPJTUYqMfzA+voKgzcUF+UqKxQDEzK9U47ifx4RRu5xD5hHDdtzPoe9EDr0bBGZzAh16CegNWxxCDhOranlSYTyWhzaOyBhZz2U0GHbpAgePDYuXuQdeGBjYo1gMzSYVeYZ5x9JhX9yWk1eLeOL9+FvurrV456Ko5qz0JNI9fEdpr0Rs/ccSsdtYhTn7n1GeYkNghx9erejb0xYcDezcoNE26onSbQO3gfGvcw6C8AVeZn+onhOy+3n1elbXu5T2Y6NLqAgBA9teAzDM8lVCv4GbGmQR0Y3IQH+02WK+kQnFXl4unQ6lhGN0OF/VOwEfLXIPyCkQTam2oJFbUM5Twq89n3x75pjesVU3kUPItJe3aRFaNe9w6X8rLTjMNDRbFHcnju0XTm+zW90Q+mtveQlGfdv36yh50naOyHpqHOK+4P1jMq8Qutjor+R9MoqxoReW25aFyTOLxKRCurrATrOuc1D8HgpzJM0CRMfqtNOW6UXLWhOQmbpvm2B0SqSU6gVu5kpKV1qvPbF79+5H27BREoZXECxaDSMyZzGP4dspnR8fetnvKMdDQ2AxB3Sj7bGmfbkrfm0wijdS9ac8I1XnpqrBV1DCEUN3dGfyJt3M+r6JRl78Dz69pRC32muvaKNq1A2Q6Om50eRkUdRve2iyAC70J0ebDNU1EY/AKHClmNe+nNkuY1rBjAAozy+Fb7vg/wa/y2obP/ioaDFZen13kBUqlvYkdm9u2aZ0QA4bN17bbQ8eDs5S3gnW7RWq0Q4m9YPMIlX52qF5crBb+XoDq8epb8N8zUM9ydfe4aMF/8C307YnCTnVWTT4CMkfNFZj/qkq7KQu0EPjQI7hpaV8TK12sB+pTsAvSvb5aDWVlY9XboxzFNLO72mNWeOGsC1+CbNcXiZmr7cRkfmZ1Px67wSAE/78jhMIF1Paq6qGyf7ONba6Q7q1zcgK6rcs7kKrZYHr0BwLsk71xxlHIjnIPTpl2fUEjusZ1Xe6/RQpWhPXFlO2If/WIQhWq1FntXKrva9mT7mHziLpV26ms1r/5J4W0uvWxlEAhWpPjGussUGSH7OEcw1Yr6XvsEkJNX9C13+93n1eSWHv+1fMM/vORYqJOj2iLVPWNGG2H7nK6qPsiLsKtrarrnE5F70EGRdlVVeCWHXiNqj4rHHYMbW5SrKYsH9uCtRgOM6+o6c+QSXKl9Spf20O9cstKobtS3YoXy0oNmcd4Cko3eqIOJs9fHR1EtFb0sDYSA1fky+6d481p9Op4C1P5lOe4arXiHGJefWZtlT1kmM8rrqVmPapCfxUN5xt7NBfZtI05TwUxou0SBI2BC/MXBKvNQQy4AoHx9SqCgjXB7AGc3CwC5QqtwsRJRMKfXVmtFpndEFcI15/8hLy6+/6quGMCnCEadnFd99y8UvdoHe8DVqimhKL1SjzAE3IaN9+orQM9AVBjhiMfIHEesY5dXsyZU7gKpu5xBRR3yam7VKz7PTqDvwo8mYC3n5PlZmp8nL6zJwG0OFF5rI1mVZddb4y/oEoVN0yZi4KhHOC4mTwkT3Yk49Vya4nhPbn+QlEP3VV8BpNNryivPhzQfvbCtEf1qjLKFfX4YpnHGmbNBROXvlPBmIGivTfbEsyk1mTuipMNbiAkNzkNj5RlpX0V34B3ya27hC3qRf9jvgA/cnh7YhNkyjEvoJiqpt4xmVfeJI9oVR0jo4P2C4P3JvGO331Bo2LCWJ68GGpkizhTyuBbBC2W0r5GQ5vt+N0X5lUoWl/JLsDPrG5t1F+pMB9mEoc4Xxsyq63ZsjekszuluYtG6RqLhzqZVWN7aAvaH+kbC3FvhP8BVYeyA64VVCuMTu+hUrGrCn+ExPJ5FQrWZ14zU+sVvbqoNfctT6UAszeyhyO0Kxh6hql8BwPiOnEF0lbBrDZMgq8vaetMshyhroHzDe8agWGmdL4lN1803VoIGzNG/Fhtl/Yqo5HyGfIqNRc02f/m2AG1BsYg7DRn4CJ28hKqvIa2qs0N9jnSS5t0ldmk5AiFjtltG+VZxaix3IChauEWTPKqqEn+pvWqIiRqs/nTy7HgqYHYY6sjCR5ELqFec6KFnVkIctRFJGawKU5WAAXYAo8hCKEJe2F1NH+7A2VkI68b/SxJvQo+vG85rfvQX/nX4JnWnrIyf8hOCwBDILMHt9iTL+wt93U7j8kMGiqs6mIDFURaU8IsuUtx1kVwHWhodtdtwRdhmlGomFfr3R3DNK/ympmuXul0Hl6oLzVEa9Vb3eDj1q8q1cyr3SlEammzYGxH4xMN+Smzsz6ArNVs6hRxVq0gWwFgn/GeQa1a0VithXr1+ZnxAN3wK7dZ6TbgqhcWJRe/WBJvwHXxHnjKiultBZz8UFslKXDTRhDZpRF1E4lxprpqusEF1h4gUMGrcPWtPHppXv12uwAZDNneg04Ws/IbAC/MmlXy/9raXjMslNqcxmOnAuPmJ98Pfr7VH7D+uSEPtmPh/NleBPoqRApdwupa9jiv2IvmfC2ZVw1eN9KKVpJTTWldHlW+VVptXfu9yvragpqW57P3nKE6/iyGETnh7JEOw6Pp742khe6Y2QEElQjNMbTA9ur/jF3NiuvYEZ4wZJNZCXmXzWACJmQl2i8gbLQeuJvA3QqBdhNv2iEP0P0EItIbyN40NBcm9svFOvXVz5HqyH1/587yUOeo6qvv5xId2AxngE/R69aZcaRvB0NbzNmL1Y6BVs3Ym2Ylm6fJWr7EKcUOc9xWWep/xd46a0v5ln0qGjszd7KPjwuM9DbA1sFeoEc9tFXR7Zu/V+jbt67H7yd3DKBeUcR87kq4CiuZn65fXoZRR6OtYba6UTC0nLFoIay0/nJMUEuSj9mnQqyaRBnfLnGYkdkLI3ULF3RVqKRh0YjOcFEy+fX4V//WukJIArnyFV/JbaZmVNeC+h0UVz4n1rpiQoMYFzYm0TOVb4NY9C6isS89BHqWjxgUFKDViCEw/B7ds0IugLvz2nHfDo8PwthfiBoz766KWQQq4QwGkJHSElPaGA/FLTxKC3pkPmiFuvKuYWsbhi6yFad2YbmTHwzFmFErHNL8pZrVFTS8Oy83nOZBtsUUa8wvMa72GeLl2buQndOorgIqundQUUaPDfexgcvciml90xr/k469BGK642CwUEtdCKstqatL+r06r/gUcV0VsLnS2fmZWpBE4DkcwXJNkgjYwiGRUlnjBrKyS8zA1CymfmKd3UH2hp1N59BheF7uDXWPbx2BDGOyrjgXwOF+MM6AkwLvCkyi/JmmZOE0x+bQJEDdL6i0PDKrTBD7ZpaAV6lvYCehLWq70C0advlLpTbcLqBxnzVWybrydRPormxIQpqhlkdm9mXmUBjCqovs0w6LHAk4MRyNFRgv6BPUmM6YxsCulxaCDm41CrtKcQXhwuCc3Ft4N7jo+TXqRmM+A6ubjY9v/oX8KUIXZD/odVfO6uZYWRsUprBLXfmvlSp0G+6leM3cOSIuViZZfB0ozOgUldNfuX37Sd8rA16lrl9hKdqgfOy1t4LNle2u5knNtreqWR+vZnxVUtPVCSumbzA4z5jsuHoLlhVg9gug9bW3/W2tv9qG/irn5Fg9qSdEbZD3MkmMNW27bAVnobqaP6y8Y1p0MaN2cQc547s1IzO1DL2+VzMGH+HsGJ0BrtPiVOCFIV1XkC55uonTLqqrnF3Hi2e5gmaVShtUcRxPWWKKvQd1C+KgXSkxZi2ZMhbp9jCpaL2VIIPHuHz4+4KdxGX1vTqnNbxhxkFIAqd15c8AmemBKgInJtRVUYL6X4poXlH2jfVt0gAJerOaiv0qmsqX7Kpnr6zlIY/o5trTEfSFcbArrqG/2I7Bv4NXM+OcV7Thpr/Klfj4lemG1TclmLTlsZg2Enu1QdnM8RiRLElGpXGv906K+R6dWBYKeWFpu0BrLlVwDYLDhKcq9VbFPcP7ayJD4fF/pu9gDojhJZt+Me2qeKZD3dh9M402JSeU0DkdIspjzaiVROo2FWxQ6hUTFKgk+ul337IwopsxrgZBROWlMmR/LLkSVbXgFJ1efd/aTw7AeZGAXR89ZpChRAhjYDAoS3s+DO5Ld31zNP4e4P2vpOMhFRYB34/aQmvlO8npUZmlzQAYZkj1Vva9MpYDO2+PQ0Vl2GlPdqh4sYLn+ARbZZvY61Ebhv3iK6gOj4zxGb5VOmoDvVXfcq/QMSLj8K0GOTAADOG9Sh7Ubfpl6yrh3056nJxtDNVj50tp4GWWlZrThWl5Xy7kb8bEnhepFEwCZIHN0xwb2laYadZfvPVMYkZ4pNE8OPDOhutqXKkq+x08Y+/s5gJ8IlaJDR9XpOASapYHLCZYMExT8z7TLPAjbyQ28UbCEI6PVc1BZpWmLj6pK0qZ6hiKWTKtVCZ/6YU9RCX15K2ybzs97Un9IIvBNbRy1ZOIeFaP88l4MfH4DGbiIFqKZ9M8ML2qNGR+qqIjH1K1boLSSSazBH23CyUX2ipdy9NMM/KCOXlat3Ba+l6Bz7A9JfhXOUFXBdn/p+oqX9oS7Rnjo379AC7txsu4rhXiq9g0hs2aKs8PsxNnK6PT5YJqW4fuSOtA2Z4GtApktIs3N1+d3YTwGVxeX1HwxutFoOPnSYzCZ8cqteSeYV8uLa5kKaicdiAL61p52kU0pmPvJMG6nW+4aBTUXlRkESOGwSHViOp7dX6nZeou4fvBFNGXLFvTVqK2AMYw6epRWgdOSGBq2qKqgLCDoG0wBo698Vp2SbDWSbDTcpqNgpAIWpYVPoGXZL9+xQ2c/pK6en17W8nH+Xxhz9WXF7aO+WISajCHjmKIKVXiKIJw87xXHJdnDcGE8linJ0GDs3N8fOu5qrKZDr1WQqAdxrUP4C2UldbV2xtdQs/LYuLJ8Jv+uIEvaBhWLAZIWUmKcG4YqLc6lNiebjxdMzwruA+tVaiUcg5lHnsDyjHberSepRXxQmVx00f43ugU1k2q6mrfq3OaA/no23Ox50NQyYqZ9kbtGDKN3WA3e0TeLMw9FF4wNnPiXui7gbWxvY6x9ej71u6aB6axSxd6GQwUOszXW8uPoPkOnsnTaZfGGfLcpm98QU6SHTJyZ4+mm9L6sm88Rq25fkd+r9zxptWotzZ+2rkRXbIdRR0B5Bi0odV24YramnukTEe1c992jc3LmCSzyucLoDFzaTO2hi45eaqM1LoBh5FAQYw4Es1VR6nWS+dQTUbve0047ZZmoQOje6A6GrFNsqT0zbrPNSYupyjMgzDyhUHts0e9CNV1YM0ujzelXEHPPs1EpVfww6xNKELl9+sml6TDYl6UzeorDr4VljZAQ+lJTzztN/kM3kLbHvVXb68momo2D1qcPXumBp/cwHjbHNjHJjP2QN3CIaGYl4ygplJLWh+NQTJQC9Jj03F4i2u+AOMFqG64DR3Sq9OoaZjuocVFkxqT3d8/CyDIkOA8j2EkY77QMex5cM6OwEMpqysC2olyJdvmx+EcWSa4FmTW8kkZ52wJu1nKvnurIVGK4+h0V1dTX9eov4Jl5snz2Z7mQaJ88Lo5cQ0LNWjfGBYDmwuUxwM97vysl5F3YQUnBqAyys9uRAWXjibp0KebQK4++gqS8cLQq6scc9llf+PU1HT5bvhP+16dzwk/5MAXtdHNxTOaKEx8C/FuYgaDcQ/dLDC+uK4Ij6nSddXxBdQUQbCNxWIuNmIPT9ZFOvbwc7ykd6d6B+O6el/LH3z0DIb3mD1L2JVMs9KyruD8X8LmY+7dVEtdocXivA1olVzusSSeSsfueOqYXdf0DbxY24UxQYnRm4ev4e0WvVcEIZ88X7Xwtktc1/MEqmIyQ8mJ7xGCN3TCcUjHdSwFxySo0cNJ614+qUYgPtRVFw3Nozh/DaJRgu3CJXX9btwohM/gjapLc3hfz4m8id32b58aF5SvZOzmLJTIdCdhOB8UsVsCkdEzq9AvVGZ2rmp62glrT7iItjDkY25M5NXULuxVxxETzsVAouMl+VrZ8ppwhn/GOi8zPEcZVS8S1/WF+I0DHZghagcf+xIsIte1QgKbK7HErOuUqFlElcyJsYFTYvBhIfYRJhXjOOqqeUx16zcFQwMccwvT8/2/0WripFHYtq52H+LeFCA+VwpXzDUAKpkvOfxtuowHBKdvFvE3YFwxMQ0OA4xd1U5EM7vY251g2/qWvbI9HSOKx9oseMWzDvzqPX6vvP3g4+cHfQefcERz9nukgyrYjWEj5k1eXUmwvBEpiY5rxcEXn8GuNQhfv9AoDb1Q96JVM4F8K1+/q+BWt/Cv6/U+s7+alhO7RV2dvk/+TYV53PP1DWqeMZv2YJjHARHdkPX/UgFQ4djqKFiwdqfBls2zpWGAH2bvOqzqpMMyyoHxda+oGOC7TWUVYIbwxt/eZ/nOHmd7u/3rz4+6YpLoupV2lmlEiS67SAO3ZMZIAmpdc64nbeUxAKZF4KCGCszOKF8/0zWPYj87s0mTqXlIDszyMQxX8Mcs8sX1Ntyefv2UusqT+2aprALGjxpGXDLEUGIvuAyY1zY0DIQNp3T51xCWAqJtZmbMIkNw1P0priHW8Ws8D54Ap7Ka/vM6XcHrH7PIl9126+ydd1MzymKJfG3ZFULNNoEVg+xmYbRT+oZno82p6bVgMRXnI1RNMoO4U/SqNWnyyw4U58QHxYYeuH9Dch/ITRbAvnscG346uZl604dwonxgxlnpGTaxozbnCh6xmSc7lMMsNZbbKo4pmZr2Iye5VJVvxtcqzGcsoQGzd0vkSrnsMjL7AN+NywrTjdSVfAbfFvBVVFfb79/CV3DFYiA3lhVlmJ+NqT1z+Urj9xiFbnAIHCCGxgB8dZKhzRlKmowwY4cOJl6jj3xVR25D/W3glX/dpK6uH/HLPulS3bo6/eOT01Dzr8TsgkkbVPO0b95zZGVZeio4NmnnW1hX3FNVLjOm5e+gGFy1PpfdQAz4Bo5jvDtNoqFX3k3cwjT4x3sEiwZIxtnjPJquD33Xi1X4Knz8kK4kVCL2QuH+ahNLldRHtIbPVaOEK29q7oyFr/p79IvD4qBFRdl70LNHf3HDLSjNNrepqKiurujagyr1HLszzOrq9P0bX8BilceQFeEziCCqEEJFpMd9ifypjRePoPE3opNoUgLwlj0YDBjDS9SYmzYaUfMoRk1D6lG3LzqO6iLvlXRXQtn2MosfR7Xb/fqD1l2r3v/gEGFu5nDPjT5W5SJ5Q3aDZt/cwEYU2+bKjX4znCvJ050pb0aJmSKMfRBaTBKKQUHxJ3D6V2hEr3IF+bmyZRX1oo8n/5dv+Arm+VpAglE4l+pOS4np4fPnUj7gxmAS5hteS9S+TMLGyXc26WZJIxrhwAB7f2IbD5el6C0Cr0JrhYO7ma9guITUNLheYdvt6+73D8DHz9PTJ7HEwQpwrOHczJsWQqWa2R6IR+B1RJ105GtVAtezy9xythGxriF7jKCwD+uP+xXDYLRHldAlm+48q6vHm//LZ/bEyHBi+2+YIYPZeaOsK5zO3kBXlSUyMHrMDJmGdQCu/hR8D/KNaU3wqdxC4XoojY8NBcYxiYVSMQHeI6z9cVQ3LStGkHdb19vw8ev0+q/7z89jduHlazMr5StI8pKEG0olbfuxalhSspr/LYZ8egGduEUYERk4Jr09jSfBK51W6BekrOhlP0dCgGVdnU6/3//0tLXaS3s1ndSBPdqxb97M3ituQyXeuoaoC6J5VzHfmLqSVVfbLcPRg+ZGbOut+wIxrcY1dCFcvSu1pnd52AnpI4WJgRmis5q+j6+v/7n/eLZEFc9HY3bF1tCb4yKvkiWocg3pDsISM+HE0NHQHAlQJXlqKdRll7lBZuZxZXNzm5E+Hj/u9/+9v7/P9vPqNzDHGR5P/mNUfFzD+8dP048/T3/89vjzt5/8H3/5f3tXkOW2DUP3cwxucILeqWtuwBOE6g2ynPX0BpnL1cT/AEFZsmeapOmLzWRsWSLxwU8AAilZxt+LbbyOt9fx9vr68jJebfNS3l7fXka5vNn/N9t8G//Tg29uBuLrKa9Zxr58e//7pHx7v1fCAdMKsl11Ply/KmNWPSr88f5w5XVlaj6q79CuxrznQpaXS/3tdy1ftj+/bF//2r7i7fJxPe6ZqKYF5Cu7QsQaRI17Sx+02Ncs40Gs53k77Go85b0/Ll/hgyr5NHhlV2BrnDLb1h+TqvQEyHy36I4rOxWi3qVBf1QXNKeyR7dnD9zlVyNzr2BqVP+dw/ttquLJomd5ex0PJq/KkDW+5tQeMGK1RrNan49y7YNFxZ1wrM1vD0dW97UYv+ujnseri2khHe30wvG934dywHErUdNpVnIar8ZxJqPN/LBvj2NanUXn6vENH6zmgpJyLJhWx6Pfjfax7f9bx/uW91rltGebH+DVDbXwDw1M/pTjgLGn7xCmvM7UpuOvxVsz5P4Z97OvonYP7TYVPPdBpA2aE9Lm9HT7Hn5fuuN9WehJuxOdkDErNqiWSJxyXAZFTLQVfWgEhMbSfbu7KLvUjiWW7nHlsECAWsbuN8jISs2OK/GVGXPCxqw0VNkUupkq6mw0njO9lhdquxTuCRP1tj11mFJ1m73ecnOKvlDvde2D7821bXOLhlnMte7GZovArjsXvLIrmV7oedZMtrDRZthPPXVVF3Z09mUOILTGoUkre9IzhS6FwHjMEtXIIH6i3xI6JiqrQvOjw6Zugajmawd49tx5vBJcqvcca9hiN74Q59XxJvAwWbNadKPxNLK36/mGsQuP8MpDxGV/x1uqlH1EXV4+0uIAhrXxFJ65zGo0nrQgRdnarpz2PVW13vZBGTlWGFYiS6fGiGW2JN3d0th7stbYTkmdzoCRenuxGOR9vbelg+pB1onraQMj52ql4bI91DFUBDQR2YtOEb0lAbEQw5ngLhE9iu12/blqBHij2sG1sweOhgO0Bu2xo68KoufeZW7FQMK8cDWAAGy8qXtGuEiPkWMLdfKhGLyBI6J52HpU67As9UenoZHqDFaKhavb8coufGmdlkUFQBiJ6ZCfuIlNcMDVQufaXjuHOTt1uBvPJN4T/PSf+gB0R+s0Zpo7DVDdg9iWwMSmrxN/jger+apCD/eLFQZZMtEju/KlGdFcYE7T1gK5+b4YFQSdTlXpBjzaVbNOLb0Grdjyn1zp64BNOfNDyzJCBK0zAwWp7EyLA23pLLJQKbd9sCJkXSLWniw9EqppSLp+pLQsZH5wMvsRQM/v+84157+vvPedxu1cwR1kHee2fb5wmDO4H44AL/qzSjtmfc9Ou9mrdtLqrrhb0Da3EdwLcze2w7bsnoeqj1bs3v/dstXNeGW3F4mdDeUn2tb/sIilCmZS8hGuKq9/jbsbZHwnrKrWnz+ev5gk6yit6mAqeGpXcEP7sRNb+xOcF8UuS9ufvUGoZW3KY4Iczl4qNMCFI6Pd9aAU1qUAICFaYIRcpgv4CH6A+YEFv57hj7ESUlbkKK6f+yCy+3E28NOCiUKXhpYWApGFCXDsGCtK5S28qM2Bm+dWUe86NB7NBVmNH3SZ4kZXj/Blh68B5lmSJvyqZ/jijNoPfI7Zzcftipd0Clbn7W4Rnh8qL08L8YrMoar22wxqu2TQLLKYkj2jbBygbUwrKRWq4s8NB50BrsgRviZ8qFO5C5srvt7DR/NaTyg548rYpWowTQV4MXsdAuGlVfCJtJqm5rOhrw0cV/LHT10oBmEM4sWcLIwOVceN5CZquH7BT7oqPtZT/LrglwVfr/DNlE7xC+RYMv4JrqJBJBs2tGacZqQYsYKhBis4zOtEIt62YsJur6VQI0rTwiY0Yi3ktzBAFbeqY3yQk/BrwpdyjV/P8Qtfz83qzK7E7waBWtHvSg5AHxADpkYdjPPCQ3Uf8j4Jl/dnW5dFnKhbovEOHwT9IHwmAKn/H45XThcTeYyLUAVqZJ7KbKRK8bTEwREmhQcYM8O5OfhsV7CyBi6Kc+TyyiG+t3V84WSXGdIn8dFLnAJr+RxX0QY5rMmssYm+DiAM7wAAAQBJREFUec4Wc3Lx2qglnAX4uRX95fRBvB1sQ+hjMWuVIMDFrfhpj+OLTG3lM/hB1ylRd7gS16JOtokO98QoCkKBYNaNCZJTWOoMvG7Z6Hzl8pBMJcsc1cgG3a6O8COuVie5BH5U/iC+h5xb5bZdrQumMUg1nylLWa02BlqcYz+IoDw7zzjq419XW02YJcZlwc/rS6SuBn75JP5a9bu4WiZA+9njPHjDhndhM7/VfUCVo1hwF39f+bP498oHuapzsM7mRMti4Wmv76gmB5DRn0P8eoZf/w3+D/HB7ypSfm35Qfj/CVe/SXly9eTqydWTqydXT66eXD3Lk6snV7+Mq38AvvCKQsMZ9jkAAAAASUVORK5CYII=", + "e": 1 + }, + { + "id": "image_9", + "w": 707, + "h": 774, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsMAAAMGBAMAAADl8JTCAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAbUExURQABIAABIAABIAABIA0WPhYgSQECISARQwoMMPPhF08AAAAEdFJOU4636dRwBhFvAAAgAElEQVR42uxbbZLrqhG92UFS2UFS9RaQbAEKLUAq/38/VCxAqvICVFyWHfqc7gbNeO6X7XnJi/FYQtB004dDCyHPly+v9Pz0t1d6YvqrIPzvV3pm+vLlL3//xys9Mf2zQfyv337La1n5zeuKb5G/wuLsdVaPc6GkCfIjB2mCb8YJud+ZQX4tmi8mypxJuJCL6tmUjK1Xa1n6BSs/xT6BeO+/A7auAvH6Sk9Mv78gfnp6QfyC+AXxK70gfkH8gviVXhC/IEbK46n4xan4Zit9xHQxv/ASbdwryg1999kf0tn+fwPE9iS5+qO59TufOo1nTn+EZzs6k9XZPPgmD7C5I1xyRy0rcCVbowfYL286kMf2fyjEvRudbSwrWlpGltB3Q2LthOu0zCdOl3U9u/2W2a7hPvtOeA5DUYmSf5jRD4fY+aA4FO18sbKxf+x1yadJXpxJug/VN6J066n0WavmbL/KCVcGLO6yn3vA6GNd3gahT2ZxZ8mabR+quA9ZO8gNMaUStrIGnHLfzSsWHIhAzqyl/6WcMHbCFZ3N5SH2i1HFAx/H/geJ/GiIswVP9mF1L4rjAWiKwaRjMmym5ryOHkLYI68Bgc1LC8DZ0cvZxrXbvtO+T4o1+z5tMcafbxOfATGczta/wj1Vbr8qgWzekor0NhtKRW9lhdNcibauuv0r8nkgXNYLbTZM7GK7vev99tnafbF7IMz/IbG4ZGexTemiPbeN7eJb5UVHo1ih7qWzrTbK+bT5zgmqm+h9t7xrFvnsAbyUe+275GqjVYpNIl+2fBrEjL86F40k2R1lx+0tQ/fIXzMUE6cblc7k1cjmGu2dir+06KQzLN3k0IOft2+rQsaZooHajfzI3e6hEBed0v1ljb3icT4Mpe08wN/hcjLmPI6OXlQjbB+8EdHiWPhLJYPxl+znXPNIcNWUO4u1yadAnP1eV05vxzpcdZilt9Nt9vXKHgwISH0Hr0YKS1VDxy/ZX/t8Weup3vw5LSU/h8VDZJRsPbnbKmTqZXF8Lae5af2vo6/u2A0URjGf5nXEx3AoA+t/zn6p7+xWcLjYjbS/J/7WCvlhEHPlY+EuWw/b3KqVUNdc9V4E7NwHA8fL7NgObAspufJsOUGg+osVt1ajcii51359Mwo+grrE+RQW6+1mYM/Q36ocI1Cal0v+ASHIZR4lA3eqtq2Zhe50oZ7Ks6AOzZnxmnahBTH0F+yTtHrJGekSZ36vvC8/F+LSn7ewxoLTzh3tvQBEVMBsAlJHDyxblKhVASB0LITuajV02iDSoaA116wg/qx970f1/pTO+B6Tvrc+fiCLh+USYwScIsKStc7LRekEYgHoSZZmSku+OHM53S2vzaEYNWxUtEi5zmymol+xrw7oWFdK9UHhdPE13zMhzr7H6DeF0UtjEIroj2a9QBGorMoOG1PudCSZizXMymc0UrDA1ZyJhiKTf8U+DYHspLfFGgxAHQKFPXuXJ7LYnjn63aPqbacOcOm8V6+LkXvAsjghnf2lnvBwTBQSbVPMglJ2sKw3rZ+0r+NYbPoMCi146YAjNGbb13teoBiWSbm7WeqPpneS+VRYamfot1qdNJQfFPxYYOyAmh606v0324bnR+uKR0BcjMOcxMWIUv9kaYhQJL+uQortV+Wnrij6Y1z5Gfb+z4OuC5o8vO16PMSFu7h6p6t/Rvp+GIt0eVNthzXfisaPCRTrsCVQ/58A1vWgbys/L1BwG4D3gjPG0yF/ddKMnHHEaZISVOB7mJBVHQeFeX24oNVMdlTVdRr0QIXkDjf1sf3BJsUOb6nZj0MFH0Ry/uiO9wCI9Sf2RdfxDu5EL0cUDLLD+j1N9BHjMGLMNlWbTK2y9lppgKYigBpHHZj4wBDHenjjj+zTpo+CjRe44XAj1Xdw+9ot55vB+BGxWLd+Rv5aB5Vt4JvnLR2dm29rFYtgDDxMhyF1hFpDDVP7Hm8TJJWicgxK+O/aP1V6uWqqRx9QqBqWh0U3idZbwfgBLC72DsyfoNS5AG+bhy2rHQ8jENOIi0JFDEKXnULHhSCEk/ygcRzLQTIczNRv258G+ye4PaKoQwcCXx1BVh7ffry7G2K+etEtqE5h96i75/55Xs9EtcKBMMJg40LfwuHo9xR8LE1nsMPRTdbp+/YP0xdkVLr90N2op9k4gGxbnTf3Ne+FmHOj5L6UOBEJnZtCCAc+Ez5HQLel/JisimSDe4GoQkYKJ63yg/yhCScIjnaN4+F61d4Rvmt/olbkre+cAIpwH0PNgMy2PaWL4xsP0XezmL/00A0fSTav4ZegO7Hj3mdAYN7IcRoQJmqALQCFg0AozJM7ffh4UAT4sc1Emx1hNAjftk85s6/DpQPtCIfjFK2nHpL1CWR9Sizm7o8tJixAtB5+RfevIbVc+BpSCFuYNinZwoZjCl+Pjd/2CU1SBKQUsnItQ9RUtOJrU9AqNqn62hTIUWSDHltdCiiVS2mkdfji4lv2RXsIV7Tp0+dE9kkHKCjkurrz57xsv/l6KMT2z4/ZEK7VAqL0ZUOv0fkEnmyh+dNKmqutVDoMEBMOAuhGN67i2CZyqTWQmiugSq16E7kpHtQ5CfwHxrCN6dZUibSMFOC4trqrwE+yfmz/QBG7Qbg5AYmxhRObPgq+Lr5t2zTnW7+PfcCirRR/dG7RiWNNjmna9CTOJS/ZAonN2oQPyiHSjteg0pamYM02lW7fyMJtFEx2aiapztV/ZJ/Hq4lsQacQ0zGeLarZekMjctYfj7wLFffHYqyK+62uSpi4kgbAgHgQN+3+pqXB0NySgyO+pmRjg/ZAR/4SQEnhjD21qcqNWrctOepA2mxpj0b71qgdYxjHqs3BjaPjpX6rDcHWMdM03PJu/Sj27kDhvzNQjBm3ZDInI8TcPiFFnGMrakflYXAgkoLZ5GcyKcWRbZJmtglO9i2mqP5vVNoOqcltAhZwnxvN20eUuexoP6ETM7uhaHpXwsD6dOL0ZIsTPiL5o3R5wtNdHnbYKp+YMMXmjdRNMSZAEWbxpMHXrsXveZZvK4nbJUYgNBOL5l+raCVJr5toEpGEVi01BdKaVORlq2yqW34T/VGGZwawok5QTk0lNL6xH6LEGlGbIrUljAKQ32zmjfFnwBoo29KNv894/xbvLoiz/eJU34ZJmJARRl/EBTgpeDXXG4lSAjjwMYFVDTcQT9xtgyJ+Ayfh2YXt5WomdMKmGSFgFq43xTuBxvC1URCFMo4CuOAedowIygNHVPph9pvSCAMXCRMYTGiV9uh6hCdxmJED0LoM50O9Pn6U/P5XK3ezeF1rX07I0vSKvjSA2Oek0AnZIh1uTkRxTjgj9JTCXYQuMrHh5Z6ijlDDar6IWBNuuVmkifzOwDAbJgHwIDagnmWCKZm/N3QuyKn9hnDr207duJRhSGTHhsnBCimFRgaj2W+/etM7qr8Y5+/KH7xoK/4iFCtizqjWrQtcBI0aJgIEUJ134AqkF7rbeEX0Ne2AQVgfBVZIhIa/uAw8Z0E9hiXOS4pEcBa9F72wNFylhvCiZkFwqlHtKF9aRvDGBIi4dSQgfhF4ASzC2TlWyANLPca18dvHj/sfoIu9dscj3Vfc52bGzZ6WqGgt7rQBzIolmgSl5kXrUKzKljjfULrEpZdFFb3gYl7e2ufFAvuBDbQskesyeDAJWugEkBGODCpz4Iy0ZeTk0RjvLf0fXR4Fsf5QUJ+dsZpApFT6BDrX4TGAiQAuJYvi7XKCThLbXgiKtrn0QaCmdmoz5qKtlj2qwp2GLyO+S6QCu9o5RMRvmd+kaOOFOCXxPoLJM+OTgWw72rUMGxUPDBTFEea+YQhcMsC7heHzsuyXJeF6j/vcUJBJjYtW1bIzIGIFSnaWJDngUoSpKkaISL20B4jEUJRxgHaVxnmB/A6D7JOol6Ik/Vt2WIlAFD0bUlii+jJHiyZkcQidycNOhSKcH7tos002bLBt8rCPOYfe7nNDh/wlZZaZYC4+7SWLmSvYNDhITMiSuotUbAIUxBaAxNmxgOkiuCx7JC1xPTcp0bwQY0gp+FG7EkUbsOdcihhNHTCO3MUjk8aihTfGoMu9fs8jyLzf5ceui3ULSG538oZGpo1SeAH1cLoIBHCpFezN7xlsWgQHAXhfREYckgYCDWUvGg6EgOBno/UCZJswMBQlFznJ0nrhJy07pf/D3dUmu43jwMsRZR+ALN3ApQOYVTmASuNjrwk0Pig5U7sr/pDkTCZ+fnl2DMEg0Gg0qly69gkq/ArtXm7/l2vS3Ftf62tc/hA1U/Id+eQ0Uxa5nqn9S5PFDuQlsLFWeF87/OiTHjLxGlv7gq/JYccB8/teaYKx2gfza4hS+E18v/M1QXsT309eM0Xl/94T7rBDiU34MhA7fjNQe6LmevIRb5Zg/y2FTdculHg+m7BO4vfsyuL1/DPtGeW1+PGpeXJ5s3HbD9R2R5y3+T1ieTNvKXbGIMFABSJGlsGfHZ3i8HGHWMwY5p+WEOMQqu3XJA4it8pfcDxlw+ERMYfdOFaXwvEAngXv+9pHzMwXCj8tHlk4xuvzfB9pr1LgwhWvNeHn8E2+0qVWCUBVr6B4Mv7M8vEjTUP4/BanlkLGorEzV17bWHH4uNOsmOFsRlLeHMNKVVPwaYdQCjvyZ5zkXbMZJxgSf6FOaitx4wnXRO6zuapfIvxtjgXts1PEjatdNapVf6hO0eQVz1rlpSd5SeKLTHI2ip2LHQBcAsHG6seGBjEddtv6OBwoABUvH8GIubSgbM6Jt29+zMaa3ALx24Vd30zjHmim8o+DPPtkz1DteeMPRScum1dSPyb9CLWgI35PfL1aOCowMs5WJOzs1mSJG/dLAjI/OFB4KF646HhLeVbl328GnOIftXuU7d6Zegqml1jjD/gl+226SX07enpvWXyjf8XJ45VEHBy8JC4sB2+ResnSocTZm5x3iwBBP1qkBzMKzthWsXALxUksrG+js0L9ixW37//nrfbf6K5V3Rn65627zJtLEm6kVpYAwUkj/pPfVslQM7LWeNr9mNfteXfExMwWnEPh8WjQzIRYtn9z/36r/72VRn2r7r6wq1xhbQqWJ8lAJGgwKGixGJGCvXho0iaD3gqy8U2K2DLmNv2Pf///fd36159nNybkE7hbFFCRP/zA0+rj1YeKg8fdqjyr9hLv9C1G35zPT+W6t7qLG+EuECTUfWR426K9fjjxPMTEOiqP2k56P0S5XNm+vXVJa6WMipPg10gw5BZyY+VdDfNisTAHigZjPhjBNAtPF7dvF4X5DiHJENxEWlNdnAAQNBIvjvWzgPFUvXi70y0jl5OaD1hqQW7MdIuGy89KmB+YUaza7/gW6o/E2EShe5nWq1KOwfoAAdeUCs/YsKpFMixQKNLGMFtrHAqyWO9mZAHm8BU6LVJPOzQvvY95NYGb4yaevXpuCUXr7D9aB+1+QaJolU0Ku1gel7J6MWLxD57xgONuFjhe8ol7WjgmyaUAz9cOGNtYD7wfxLYDJhbVKGvbNRzzkW961hVka1ZgW2rc45lMptjw2o5SVVZlqfxpVMqc7xWHf4AXZMee91Alb1uGH3fQsZq14/FI5DDm7WyrAULKDyk+Qn0nQzwWKLrz7lgBLUo7YuPG4qNKudz5llGIaINXSB4bLx6XF68CAwEsfjYeWr3raUcd7iYdEOmBoLskE3miDzIwL4YcEUOZXNxx73G6oXlJaxD08QJOYQSsxb14VF686hiNxgkmnt2rttMWiBoZb45bS0UrjxYpHKTYxYnjjaUPbPwnMY1junEYZtBNaF3FWGHBixc07zYgxaHqTplADMi/pfV8wzgBxhFsXOSkQ4OJKYXBi2fRAo42PlZ6vBAouK2UOFDcE6HQkAzDFmdBuhcLBXZet6yrY8edyKNJQvF4JGSONzMwOT2G20tFSViBF6RMivWjp92AvNi0DK3D39iCtUx3jcPCCvIgoY1+ZG0NagsE2GG9O5VIENorEx9vl01oe8kQNyOGeluJU7anBYphbKA1pMXMUxnafT5Pq4NgZ+s6l2IMcm30L+rF87qjZh7qepjQBw/RtGmW6WZxOJR2yIwV/mEw0xiwWt2pFw8roFUjQeBiIeXeLBgrz8rKZmMGsZ2T9fkjmtnT2g5lFIrIo63EM0g3sjA5LJHllCOzsMZiRAofOJ+39fORAno2LFMwCrpTceetOukiFaMFxbmplDderKrjg6gqPujxvYI8V0+3CsZIJfLOi8GCFSeW5l3nxetrWGPJ0mLz4setUHiuMQrqOSrOzfR5vpgWh+JuHROL23NgNvepsbjcJi/OSu0W7FIb+8rK9AlNwMWpzyjWcXgxIHnxYk7aplvYt7ezcKyyMOaDeQ2Q33vxmNJjfqlA+7ey4VH4e9TP4PvogYcJGp0fdNarwGzCVXFxvHEZxay9O/bipF6cS7mLjYvOZAIBChQgigPbOuIoApMWi9chsXhV6TChvr4laas3CBJkWVvRqWz+bS27kBWT8uQ/T5VWeY0DM1/qxTxyx7Pv0x18mCwfztkxecwRq7iABoqexS1dj1GDCKshbTLn0TKKm5x0OThxMdmATmbAJv1hYJvRBSI/j4OBpLxrM3dvtLXugEtoVowGhzFTHMM0L3ayyjKYmTkHL+bp5welOvWjjBdFiIsOTGO0o6DdnHfSIp0XP322cRgbKIiRcpc/Xz2jIOOsSVYB62afzu3EKkI+0c67yC9exx13MobQYjGrTt0BaCMY2xJhfNUp60ggpkSKyLsX23rkIaWHIm2ceLNe1aWZKuiDEppJXm/woCgbeuvE1n4W3W7s+egXng/x4s8igjV08QKaPCSb/JBLvrTp56SdfQnHXkGbF687MbxjeLEedy0vbnJsFw4UJrUi0jZk87hWd2zQCfSUsk/oPrFCa+DcnY/d8WkHzO/yMHxRfqCxqnIMwipe00sEGUQB3f5BHeiX0QYb0tb0n6bLEzNFqUniMPw3h8a+O3HHZ1NlRw0VY6q7Wbv8wIub+ud1OfLWkjOxBFI/dsumUHUAyMykiPzHQvFrk1McbixhyvybtzQBxXzlUw6xwoQRQ5OudBJ9IrmavP/87HmD42iDnhfzqEd6l4uOmGd35IBQWE+/kAlKinW1a+fl8xNMlaCbOY7CjequiVs1mdbrgZk+tIhkLQfeZag4ikdgUvljl7iyvBj953UcmLla7y615ihd1onR9BRwjbTdrP1QyYrNiWFj7yy5Num6vsapqsw2TdMyCtbYpumC5x1k8iylsKGvVPbnnII/5MqkUTdTFle+BoGZ62sOPAqoDF7OjZ3x4+KwyNeggefUFLGwuK7EYnLBwdAe3Yi/HsMonEfxzSgejapyxfMObSSbmiHKW0qKjTsrUiy2ds3zBavE1nUdqjY4O/n1Hxkyv5iFgfh4sxnKPz7hrAZOm0DBMdjOO+tAYwZ6DF6s26u+z7pwdfduFfT7mlkxRpHAKCYq5BpWTMAsgvkgk2jJGgVBR0fkP7u20tEC+hUp3JUrj+lSxxxqZjygUrqdprqmaZE8IV7skdjOu/mzqvrrqHEaF8wUHOhaHWh0OAzuEWjNTW3CKWBhioajJhQkiucmr+vyS+u4pM0Frv5ZRLb4et0NVUcukHCkkAr3sE+STFjKOqRsAZK3AV0E40GjjU1+aVZ56AfL5l8oSuQAYNp6AKf9dJjEpqyDB+cNziZb78aKJXxgYZ4evZymSs5uXah4uMJd2bmxysij29Edd7YVgbkqo5r8LMCk590f1lS5CphJRqsK+RqU1zbs1siayBaFhWdleo4uxM2SH6M60LwezNuj/Lm5UHFHFoKVkGL9fNp7sFQaIU5IVuGamR+HMuehez2i1mCjcLMu//nDcJz3sonb4uVc2TSSkjVDAV8CiXcvXpIYGUyVUUnbatM0Kg2U8mWOOnLRUWvmF4vEZefB2g8VY0tpR/1OhE8nXDMP82IOFW3j9fP7guVCeTHmQSHrmnMYHo8bmYKl1Y2zBOW02TqhNIqBsqSrVR5fG7etqW9ZkHGBky53liaoTZBtgkrYgUWKrRk2ARv3K8MWmVj6QPLjtQ4U1/XRRmXJX4I2SEWn53zwiygMLjpMHNBLBdckTqi5HaNY4q7iUdVdXK/Eu5WuQqMg11Qix4j7+YKYqwnuI1vvcgowMcX1NMZ9HUVVWU26xqgqbTXgdP5sgmyXRHZkLXf7quIqNvZaykZ1FXpKzh1FPi72eK2jqCoBongKNVO8uJ7bfR2dICWsYVdZaNFJNW2BAst/taSzwo5i/RymzMfN3bHwwmorrOgSkpmkQkpiaIA+2edCe2RNAYkcgAlNJnxFprAonoa0DYvFcR+CLKapZ5b88A6osn0gklusSUfZvdhyCe3tI2kjVB4Utqwvvp5GDrt5CAy0Sl4M+WLNKOjckVgk4LM5cw5ROEf+ZcgmJKXoLZx0+beRgbzJv23eHRKusTFz6UBXXj93heoumxTNRl5ik00oTmxpsc7Z5TAR9gx7PX6MehwFM3VAt23ObRvDT5wX5w5/xyRS3k/dNmMrrcrVfwDFh+GDFCKxD+j+WI15mKqisbhlFBFgOWWPA0vAbJhOcrjd9mNtOhPirkVi9+IuZwsc+bEwkFO4EYsfpx27y56vkSUWSoEn2ixHBroWSzzIp4RY7BjFEr14HqlfjEGE1WMxr2KtJw8URcmsON9KmHEm4wbikMMBJ6QJciw+lnbdjiUuPQZup2EykNq4DYU92gexnjRKaJ8DMHzRFYxRJMVdOAcesS1oDIlbDsZeFtuMyfNKGxWxw3mxjXqklE8LZmr1hhMvBxvHndIR/1FvVhzeUmP4bzzxnqapMlauf4Y6kHaWHg86Z9KWNw0lSdoK7dO1spsO1fwY7Q7AxV2Q0PpZGktNPmKgcI10PVadHm1S8vms6YQNxxTv5GsiEQBMhS4xfRsCgrTuYFtKES8GChSHPYZNLL3ChuKF0ZGT5sU5pJNZf2UHgpBHBBHBHDkTwsVEzzkbC4giLzNoiA1sj/KzfYxH8Uiy+/msgUJheMWGkVdo4ubJmoLv4tFwV8GFQoSgPUTR5hA+A2EgATtkOc3yT5vQnc6aF+cgCgYL284vhYgJ+YStxxX7ouWh6CUpxtbXd8ZUQc9j1FAYd/hXW+7aFiLI/vXzObFNImkObLlw4AVuqJeUtLFPHootSQ5QWys9tAH92StEH14Yb9Ojb9CBTnnUFVM90LFF2+ysQ3XZ4WFL1kw4BaFY53GprzwWoBS/+VYHe3cm/PpMp2bJkwXjUM79vlHIiA2lMO/dhQiPEx+jFw+bHp1fgfz6vb2Jt06c9LijIApmeKbXdx37RxlVNjiT0PgguG/uVYGeMhP2DJy218C8GBTuJDptp5umoeKjHErBdL62e27uCZg6IUoKTtgR9zcvdq3Bkaoqry4vBkv+pO1R6vUZ9Y4hbaUr6ALvRxWKs3qx1iJd/zlsM/8Pc1eb67YRAy+3jH0ALt4FCkMHsIEeQFB07Fq7HHJW8suz642lFAHS/nrYMhQ5nI81gftNNtA0ueVH+r1EmR+MNChB1UYVI5VDif2DUyhTJ9gOQWxWo8VZm7vSmQYKcyUdulfx7xFR5odd7kqPsMliA/yE4XMB273dmsjOqrhe+KW9Pi+HpfPZCMZVFNYNzJwmdhssbKBD9WKlnQN0eEfhZc2/tOqtlo1JnbCdwP4x0BjlG7TMdHYC9+zuS917cYEz9fp1OGsgjdeG1XMOXGJFs7JVLnBihyfUN47EoDxX8dIrCnresRfDz7H04nsrrjDQcR45cHg1VYcAalMN9GfrbodPXsATgIgVZ4/m+rGq4n7eQAPbDRYO93JZOtY4USe0HLHvdgwFI54oFL4x+wNX15SKxFfRc1O+0lRxJMYPXR2u/IXvc3EN0L0e7eqh2fnv93+SS2ZoZFv728UtCUMwZjTgx7ruFD5SFDLwpV+auWUsDb57nI4EtAmdmzOcBN1NkNM5xG0QEi14Dhl7fAfhE4lFCMtc7HqaeauneT8pLJSNUi5Lt4OVsUQYlTOqzFI74xxKbrnxO4hr1ox1M6/55Y71ucOln3HNNBC/uAzGR3pfbVgUOILC/wcKUUPiQyxDPEwb3Ez4nFyQi7OHbPDi4ZGj41sC3UsY1yyBCIfTNmJCI+MqKuO41olmBidIJmrbXfInFeG9jo/836DFbzu/urlujQq7HacTy+qxI8CHnxrkH782w5XYZKI2TbhmSaOItW0V5CW/Unu856pST/yVqXKSg1353SxQ3fwH3cFNn5mfEto6kAXNNYUcapJskbaxHO/Ipq2bWUItYvTic13kDwS0SYtSwIwmu61H1tZciXgTflCKY79KoPJA6Zk1WCncc28wE624pLte9SYHuUCDJRhcCTQPcsLMYE00ZOIQjNrc1nReDQGC8uqxFDJlFHdzuLIIXe/FpW8daWjTVRVL86FLmST7a852is1DK9FViJC5WT0SLkvFhXu49OK0FW+gocbTVOfXQxUx+ztjycvRjrOk5pbUkgTNYAkKJVvoHLcQvn6M8KMwHsVl6hxSPHFS2NdhhjZt/wXAj5vSaGvAX0cHmOZKGCwlGIZRb2hx+U0Vd/3cBb0YeXeHAoE0LvnGh3chOR/26/6cDbE09DK5kgZVrGBwb+biYMmbnKalA70fjOlVvPx0p68jFLAGLZ7+S8QkGT0lxM7iVYzVzltBxB4Ep00eoECWFz+4KqwPjwLmQNVt8GhZbJLDTEkaWzDJmdHhutup8ycEzEt7Xbc0l5TWzNdIYiM7iqHr0IYqTuP13ikWW9LbQbpEJlmHgZg+Cbc8FUYj2Hu0rnVYPCgAwTYQ5Rv/WKt47snMHMi2BokIR8EohGA2AMZqz2xX/RQwccqETSg0M05NoRuHrh7XxuI0tqYqHRfoy2WI7a5Gbd8OMrJl4Gqaw2mC1zl2bGsx53AAACAASURBVEzhYAX/FJjdcW5gK1Ra6+7mM109+vlRgG81L7e7enA8DD6BGzQ704QDUH1VRM2EiZWbIiiEB64XdeBYN+fR5YHHfyjctdd2V794rqe5ptsBljvx5VntuK8xsLWS51aL63elhjCIbx+Kl49K2swUo3NVulVxHKBnM9c9jMoc2ZbGbQWGKesAn4xhjede7wzqwLsyjJlSk4VQ+gR5cM+XrhPF0tlJ6lF78W3/9/X0UHCBHJmALFfpMqceKeErdIIFtMbHDfW7Po6OsAa69+JfxpPvZJYADfQEmXmSAzlcaWR9IdM58k9SWGMSSJz4i2f0KhF6Vdl+6VywVIC26ZHjx5tVbJaZVaC7QPJ7jxSmwqWAgwzsJ4UIIUvbgcP22XzuDGXDwcNfWRJJzVdXj3l2wPjS0Y9imdhgdF4Q+SNMxYCKPYDKjD6YnUJEwQCJXdqBKtaQ2aEDb3c7O0CfiakyTd0SERDbCFGY7pwDLcwUtDwJ8OEXP/hM/vBKx1CGMt3uTh0AElo4dDNOUND2XObYVZ942+h8npzCrfVydztIL8bWrBkpHVsNrstmUpvagSrG6CCBAj0AKMwy041ruh35zb7YXnhJMz/CeVRQxJ5IDhJbyut4VgLlJUwEo2dQ820rV9fETMaLqzy3C9I2EUoBh6t9z6MSWLz6AAES25q0rXSrSxGG4kIZM6iRxyudrNpEpEDXqbgrXgwrvDK07Tq1CWSMoticgcLXSUIeONRQ+ped9QUyxmi9gQY15mGNnKYObYDku2EUUcWpDm26e5cQogl6FqqPE40LP6lE/eIRC7Otd+oLtKb0uE+M8caFJN9TZh60wRrsocuZf/ezh4f65A0xxSXOWYgnKPTC2I3dQ7dZoNPj3SMIVyZtbFlXb3kDuYPxvRX/ruZAu56T3MNcjKodhrn1mYnIFiZhirszSb/4jX/4da4zm4EUfaNT4gJdbEnLWLyvnEa8iq05OF6sDLf5tuHiL1c6IzrJ9TIVptBvK5iGNkPaLj3ZQBGMCXPd/T53Gk3CcExoDrSxTGlwS40uXO901INbNI13Zt0Cxg1GMVx6mYiVsRgs+Sof1T3NdUPB6NJ9swkL1kSjc27bcRXqh8V2DMM8sD0YJ6pVAtEGu1NVApH/2ptupbR1gOaK8Doszcp7XQxroExoAw8/ok3IVkxTPne/zkR97Scz9ze2qLAdKdwNJ17dEFOCtO0TRWIQ0wyWvEPY/hGvqPLT9240D7G43bWfvLfD2Fx3V8DMHTuxhIUV/MsDBsocma1xrEvwuaO8jljs+NaxYai0XCAb2oa+VTzEelfSzEsa29feRUzCmQpM0HVOc2JHBPJ+jvVC03esqse9+IycMCfJXy69/Ivr3wdKp7nKnpEIEoR4cbWBE15188Gr4tuImanzsJMFnf+j+v24xmqaJsy83wV6Ah2o6u7uy91pRxzIDs6hJbeDqJvlsg2mcdUgcaZHJp9tlT/Nw9ElnEZh+3M/HsUFLtzlBrucR3eKHhWC1yQ3KDHJGPPWAQgWCBp0NaFh7dlf9YXP5HPeSxRG/OLlOnrdkzeozppArHPyDyCDEi50dlmHU39MRZNCm9T4u/5QxnMbTjN03O6Cb7VgmV87lLESe8KS6xqOVQ7H3CzBvVTMDKwf5/tcu8V989IjqCo1xWqyRMGp9+pRnV+rRHcXYMLDOnJsHcJBB+Buu0m8hj1NSs5p0yQPHZb0j01iDEZbtXPs1osnR9rORetR4u6+9vnORYaEUBCu3TnyillF6RysNFAya1RiFP+pVYxOuBrhJT/V3Nt+51HqxcvPumOauUQWueJjJ2vdTANPOPpD6T6sv5X087yGXlw+d3b16Lp6kNvgeDrt4XOuXsRgD1sV2zRBWufsFqMIOzAXNoBrDVtNn8GKK0RRiZl0f+6ZZn5xt8E65uzh1i9xUvKXFtUIWqutgg3iw8xc4K+UoluEmlGefeE1VaXPRDGQ/VL92ukOVnjiNzuxAFElbwSK88ns6uEpHdUHYcNu/eMZ6TFEMbqpSs8qrv/D7I2R6/G1SxcOG0wA8va6eWVJE4tz7cbmpuRM7S0yrD8U8blhqqCKuy3QfrorSv70+QcW95uQ7BMFIfC50ZE3ZphJPKpDUhye9cFa98f9meLiwZLvF4wZ6TQA5WU3OpCPatmdzHOdfpt5Ih4VjHjMbbF3gHr57P48RoAurOTb2Ma30swXwtUU4TSfvo5qc+lw20ZjBya68Deez5Xl2rAnonSfBybYjGJlJd+xikl3Vywd7914j3HCEbaKEWsTXCf8zOohuI6/s9mdwJtGnvzWnYNH0QbodunFmCjM+fWartdSRrcPf+Xs6Oy0V2FmsdCO4YwqHDgUXqMW+yWPAbYfoWKrYh+Me55H3VTFKNyVJH/7cKtwBLOJQ1GipUSvELcCwweveUH9jlX17NRW8OK5H9I2edS2eckvvip7XOyyA0CseVaNtAM+iYata/L0dxjnvtqL632/YJm/iocYkLae2134Fxc084O3O9ZziItn3PxHaTBObv1DgbhQz0RDfuA4+uRLu+rugVv/26IwJ8nvwmlTjBOC7MXMiVSJ88gVRhNuiUm9QX48g34zr5kLHn/uLt3iXSvegQTdgrTdTp/LWJL13VkgPsD3jmVffHAGUmmTMvuu6SstGJkeyT3EyOCql9F5JGMWUVhlS3+UihnJwnnllKLr9Dp4NTKIGTkHrx3r1qK7eON5M7N1sIiuzMx/6/Kxy1hs9s8NGbMRJq0SGEGagGGKMCLxQicugR4lm8aHNnBV+snMgyU/XotiST/TKBSqAxAn3P15MfnJ34iSSFEXcmYBP0X/Tw0bu9gOS9PsQv6h21wcUdvFDE9vn6xg9RzR0BrYkTR4KbD+CZdGQyjc6G7jXPXs4y7vi7nNHD+sUfRS8l8coyhfu+tn/SgkZ487sFZs0GXeslyt92JgY0g4LCckvbx3FA2/ubTVZjxMG5782wFAQzjXLC5iX18f/N6tWrHyGCFsXxWG8MK3I7qLsl+KvlLH1SthDk3YOnr0/Qt00UCfq+HHxyhtHoYrCgYxbc+cShViGbIVxIOHNdir09rZPIGWB05x5Mdc3CedZoAZnieF3X/sk360iCXMJ0Q2nj9oENl6BUPCdHdeVe3zMHGT6WFXj6EvJG8vPCAHeuG0fUKIICAQI5ucIAl63yzkpq3GBTKlqNv+pLR95PQkhok2EfrcyWOg+0Dy02WgdJp/K1H0Y5i8Qkmes9s1Ik00nD2qw52EN6PH3yq58P8/NL4MUVTF8zexHh2YmYvb4BKIsIwUtw8QrqT5Ded9c/FYwe/kSCxuk6vapGY/VHD8VMNjKGnS2ZmZuED3i04ZjCV/H1fS4l98+tB9lLgp9kfS3kYVp8hZwznJaT4akqTXXne016VenGJmmy3urpuSn3Mxi3/xB478nvoFuqCfOHASJY1BnDpwZDbHO58kSP6lL7diH9mWPlEUS+7B3W0uHpj9WthAn6KqSMbarMhN2rDX3KSxtAXPVlM3wpSXx4jmtm+92NQ0fOXvxcysU5st0GXvOP39z52E1qDuzprJv1wz5QO6V2PCZBGhapzho6/OEiO6hEFAyYG2oVAzL5dO3kATZW2PM1KK9UMlrI4AxSTcoPHkuu+gcESSy0MH15+7w0hdInJHk+sQ7n+l7TjaLRgzJEundCpfu9tfb8XhOgHllyHxLVgcFFeBTBT0wFAbvIRKjKs/jAXNPFdV2Azn165e8paHUK8e1Uv+bwd7iD+ymrgjNuYclIlEwg5TImmjIPcxQl/vwI7/eOOoA4XtHvOlH794Ik1YHYz1+ndDGyUTDzO3KYx2FQ2TRstmRTQgsPgAelTa0748vzif453PZ/OjiMPStKJxv31YsuyUwhv82zZtQlg8cHjsHmkFsDWnjv94uxYct3EYejkJ4QFo5AaDHCAB5gCCm2Pv2OLnUfa0TkJvt+h00e52V6OhyMf3ccxSXXPfAybiActd7iR5JVJsLvEnz51HCqrZ4HKVrqeXYjVWmmwbKk5WNb50jMskJQziPX6hTqy75n64FOqyCBt1r7S6iCXGWM02e9Cfdfbg/y1Ct1Z1nBB13XYzWrRnMyIK6r0GQcc7a1EynMLIQHuCpU95FLrkl+CAMwFj1zfr9Kyq5xp9BAsmWipnoqotTSkVV3V84JTJAzDJ5g095qbf3PLjltVRdPsQ2Hrc/we4uELbBvwfCHQGakqpYIhgF7jC9PxKnRgmZ8gdLR0uJjVVmb/SAuNNFPZT7e+XVXfH/0NjXNWdWJZ1YeUcK0W/rywosXKA+BXq5d5q37BM09IQWcTSKPX4ZOtxE/aruSVczxWPsm7rmOEWT8MiqaigWW3LufhgBw9dPTwyE04czXRK+pFCMGaqXf/y2VLdXedbLRpoPrOZmGRgnsDdrkCk2qZZU2+wPnBwDQ0xv9SsUdkbnkWHYGCm5EDneWbOrm38XoGgk6e7aq2a1oyKRMzItCqw3C9VtxtD3uJL6GUTvLg5WNHWEzZto+oQwiF/VChm192J1uPEtph99pgCtRV9nxlWdcYFZL2wYLt2qJWIsNpm/4yaMNLpLvcWz8rM1I6iLq4qp+I/LINzNVIxONJMFfPIi2nsCiOPog7E+EPIj5fkBmOHhWIugiVVLG38+j+z/PBbfCnLYulxLpFC3jghFqNnyoRyGenWNNpgu9Tg11Ycbfhp6ywgUuprI9tAp/oX9+ZPdXc/f85d7CgeJx2udA96i1kxY2zYLPErxOCqZXm1bMBjzVpDPMIVzxvWYPHJwxIFoaf4iA00q9ajSEdxkolY1SpR1aDGGWy8883MJhhC64ZjPYSuwSpUz9bQCvve6cWt/ZJi9fkG+qlaj3v3XzpbniQSxkm1txNqlArDVhQpgt5N7Pto/3OwGxajtlby0UPg4o198UeEq6XquB/FyqM4yxuIjU1svmsi22d0tuPqghmz3a9gvFbfGOfsbMmKB4VhWuN/YIBOs8JTaeNSi++LTdtZEmh2IqYFoYw7UeCngGeKq8cDCf5ou0YFRzqYQlw22oUIUChuiRRu7ygsL57PKsWhWxNTYjnkAvwq0yU5qUrIPzzOzPXwwKF/Q9Al4882r12e7m4hcWsO9He5XNa8u+tZl5gx2WcKC/0JLrHc4El6i2FM/nseVdkiaXCffeNBBEF3KOTvrh/D7PFBLZ417c6zR88wrqk84cp58szsgV4FAIWnQ5jabpPgc+gO0/aVI1KgTU49rD1uyrjKWvJrPs0ibVznp1PxCSkW7ASrQBJkf+csBsWVX+z2+4fcaHag4kaKZMIvt1ZAsPRM5RcruXjW3d0igT7Hf0mjs9W1cZuV5L40tmxW8/KKb907LOLNMI1rENveOff19vWVeYtn3Xp0pO2M+bmih5Xp6xjZmCD6CkTBYNAIio5Dg134AIRXL9BysYVIMZDa5qRbLK8dCdJ2zTdLYFvbMejrjKAyVaO/QwSKWmh7AuDRTg02+c3Jrc6sIqMBKTIkk4e2bBu6VUbG0kowXoDTey2nIPL21JmHoN9is/Uo2BB7HhVvkwDr8RLR9mpGK/Fqd9aVOVzNwhzMGT1QFHaXzInrCcdr+iTWVGf3Ga2xX/M+GDI6ik7SrxfgLZMt4ENNOPILVQUa4zMcrtaQYr7fp/tp/YSSrCw+dJP5pZXYPJ+lo1CWK1hPHGP8NKCpSMVo5Dt+Mhx5fe38wUuTNkrG0my+NWfcYnOwEv1itPQwB3NHiovd5RpBn5f64eaLud3q0d3ZtGj7LYYA3TlpgHZOW1fyn7YdhbcOBc6mqlPER7jDZoUJypmjHphjO4EH3fCQO0hhwx3ZDP2VhLSJ7E5irH7qxJqwlEq4YstqrTH5vbq1do0xKIqzmTq0gkT0hUJMA22CAqMtOHCLn6O2FM+8XI+bclVEPLr8eWva3SO7CGskVTT/meJOP3AnJJNKa/GrHGIDgGhA2pphmfrgkcrMlW/1/BJ/3SRbUgMzuxHeI1uIwD5zOIMNje6QDg/cCTaPxhIKxTHL5/CBRvUBje+h7fjJDYzz5DTIabuX1aftmnvAbPa51aIBdcFvXXABFmYFP239+xKzsv+lHdea0GLB2Gz7ZfAocIuVDJRl1w+5HiuDe9lAn/Dc9UfNXMzN7K5giqhQrdgYxLW+Q2ttQ70g2zcbEKSfCPssNAQzb8/cpDBc8guHO3GxVPUeC6G4OlU7WJiXIE+qKsMtbr12iL8G4gLc6v9Sp/GAw3tnnLYUNtAc6ED3wpdcmM38Uvpun923cb3IO2RXsH2uMdTgyMwxklAIHjntghttmgqz6zdX0ixmpiFBalyzUtpOWPKzwZcoSupVuaKQnK0nRuCH36oWtJ2ay7ZdExEp4EDWGCf2xb2jWL5YFluVa2q7ZvsOSbGrtbp1ynqs+t5Zv6YMeAbZwStambYpGNBSNBqsEpoYMFnGUt/wZybodiXCc/nX/5xw7cU4tViIipxDyEFPuNTNqPlNCFui6oqjvuD00+KXf4N6S8PFpgGdb2gRrTbcKOX/hJnpySntzzI/X/OCtnmCjk08PeweR5Wz+U2wYBXFfVxBUsfHnjzaAdtgYi4BkO/DiTTGhEbnWYol2y31/eglNSlMlTnKTXGrpRp6NTdoVKtR8a16TRpK4+qowfA8HjD8M90x0xbQYpeQltoIjo6ldFOVrJ6tukbJbi9bprMZI8DoLC53VfMtq8PEx/BL320Y+BDrL8HEB5qlTrp6trBWSk1tXOuEJCLwghcnYxT9YD1OQoY6cxJULS64IPBre6RYGdpOR0zbDUiD7/0Wd5a8vng55Ne1GvfxrrRLW7iv95xbbORLjkCmeCJMIaUDWGxVDT5GwUE9QlfzH8mliyr8ot8tM8kcrha3QW0obnkYhTnXrLeY0zphH58nsM5FIjzHAMaROFwPv3JbqjZF0CL+JkKoyCyu3Fz3lmX5IUjbLGYJ62OXyaKQDlgaN2smbLPvcR3FkHe7xep8d+yQQ70FGjEBR4VG8rb99k0iwpyqWFKftpVHsbLkH6nvHY7QmDM8WYfWjcNMfBuqAh/CL1sZr2yLS9D2t1a67d/iND8KMX7tWWyXNOprxV2HD3WCxBe1bdRKrDlJ6ospZgj1pQcvIj+NIkHeHkEaBhUTIkCCbjcJTLQlnVd97tq2XdIwClce9DG6jkkzIbROI30qEKvY6dr1mJ5jIzlAjsoeWNTUhvtZQGU+90DzNHNdVdM0jSh+pLQT1f3Y2Inx6BY/Ca/KhORczAr6df57KyO9tQDOtjM2DwLeZbRTIsWzB8ZnWeGpD/eqJrmX+zUNo2Cnw8uaXyRJfo0LSGfA+EfxNa6HM5K2UAUFYgrteeA1Pd/+3BUZ7vruLusW30BOs+yV7kllguGxcw2u7+yKKJ9NSF6MrM2vEH+iD1hBn5TIIP7lk2K0lebk114m5ltmpKBtlpa698iw/KiYNlw1u26K8V+wrXNfJfZx+TBA4eIC8jGaYKYmVNzR9lZ36uvSUNBz3x3os+gUd19aLvE9oU5waNkmY04E3/ISFGBK/eF4vEc6CtoOebTzCtJf+Zs9io1i/s+cd4t16/G9sm/yYqxUxqiTBvOQEMgWP6632P0RoBOuR1riAaIMPJS/mFT4jt+ECGpMmkS46vpcDVlaveSXM358DPx0L9fu/qNObFNIEnWUuAoNs4ZLy0eHZ4K1hv7YdONsbOI9Flax39IczbwJXpyVsRRjrNYz/tQKD9AJO2AV6zMqQzmAQIV1rc/FFR7Hxua2KxONuGX8QINobHThzgQz5zWM7faUXMyf/7drGjohye8xzCcK7OQ8pUzIjMHvsSdosxiloXOD6ZoGoQduPbpNW5pn5vLieZr5ZemLE9piBiaQE6zGUB/Wi1zUdCK6NR6bnmm4lIR6g8EaaHu5tSKb16By5OekWtwxCknQ/V7WoxnpNCJ11mA1TVZj1M6Ypat1bkUNlTgEOdd/FGGwUaKxtWh+jfeqBdz05sY18tx9ZRGuunHhE3GgZc1/TQAnukF8VfjdSzHcYpmclenK76ap+fqi0WCksicI2/wqWuHp5JG3Hl1KsaSZL0Ztn6JA7KerpsQ1jB0yOyO9yuQc2gwfSpCg+DVP49KItEA0tF5C9jzJdKeQ/POJdv2p/sV4i0sGWAz3uHaeVR1Uom7Db5s7zTvAIz/UUozMS9oBfNrvoIb7LxXo2uak1EZBgaQWL5D8essej09LsbXE6jgxuYmVU9mKemGWV8UckRbhUwRtlOXt95mbEEs27qst7/JyoL8gzbxjFPzhzCHIj6E/+uIJAYjZ2FUVXDGFD6/xgLppOr6vayhipOg76sWE9oxVxObc7CjmRKRND/gmcXer2OPx+ZKf9TJX90QoUos33VoZk08O3eVxgdQ2szTtIBi00TWSkF9tgF5l5qv1VxqFG8JHWy+J18/wHy0RKuzQ724+Ua0Mq5bcn8CXHMtp5LI5M6WFfph2DRRUCkIx18OyR3NEYfDaCUu+fgxPiLCj6sFKxyYnbPRAsMSMfh71iJajjZObFN62Qdnob6qxAuvRQLhK6ihuEhWGeDFPjw+eO8+umyo4E9sbt7FZslvsJoJ8vEw4f3UcpVsby8mW1oaBCBq3vRzwM5fCPWtevOjuLvX+GSRfdeExKf4jzAlP7ShbFbkX45dT1Xy/Yer8DW1tDy52UFlF0CEwPstcV8gqT0udKPxJpKCBbEDVjghQx+PVt8r0X2yuHvzSQPerSL/hzcX0QN39U9yrgpJ/Vg10DkYhXKDZXEkvHxNVBCeGnAMXKIXAYZPMeHlwiOLvh90cbG/2le7HSlur4rY/OF8WilkT8ivhLf5KxCjchbv8KWve3duIfIWpQ1HMCZYck2fOqD98EakzBGcf7NtoaMXol93RPtwWN31E+t6Z0/ntluVw9fOXu3CTJKc8Pm6IJVsN8R/E1yypo6/2q6NqB1aijQaDibjLj0dJOxi9vXU/d5juPxf+W4V3uBzN3HqYc833+qV6md524db9kcQEMpAF1RLBth5q4QommC9hbDH0i4ZL3AjZlzSO2lIj7Kz7IdsCen5m8ii+bt5RrI3xh0ibivVl8DDx12DqobFf6u/Kcsb1OBIfzHK9UDTa5xGH6tyGm15GV5XbV94G+vali6WVJH9ZF0vX92eOqUcd6Gs3md5giqsOp8TzS10Eoa9S2aBqu1K79ju48W1ElW9Vj84CU2QZ19wwxar8+fmPWVbQbyPyrGgxYBNCzISz/Y+1a0GS44Shl4OCA9DlG2z1AdiqPoAyzLGDEBKC7tmhZ3AljnftzUdWhPT03pMV15SKypumuLOzUe6Xoc3LCnr918lWt2mhXS0Y/uAJWuS5fEF3XwNmNoyCXrsvnju52cq+HvWR24zg8Vb5EAdrzUcuuV1uKiHj6WXrKPMaJHLGUTlx+NkEqWIUbbE0XCn+BpJ/MI+CTgrm8W77rGmzbbSzMkMHEeUqn7Axi2v2hllPGr3mGO5++cu6AOcvH1x2uyx+niP8/QGgnTuK7xZLtvEngnhOyPd8gyoo/3IjPncNmbfv0GEVX1AGCOcVU8/TPHV4BnmSjvwoqBgLXvxc1lFU45onnVjCf2QePf59iFEI4Sfo5Z0Cf5rHkvKItwPMZmeLhD+jlDAQW6HjzZ+ATx/l04nSuJkl0GnhRR0FaxsJLnbl0vaX67ugYIltUxCF3FdTLvHiijDBD/RXELv/W7d/rhsJuAjj9OxS/gROd9DIr4/nePFuSUeBMoREnpn/Phk6wqZprpbV5WwRtkkjXFUzzYn/LrjmBZ2Alpxwgb1pVlb//EWgMtEWS4dyfn0yCLTIp43xYk8XgL6kqgjLqg0fnRObZhVrWZ2dP+TzOphgTvukP2GLnFJQikWSrUc17P95rMrinVUIlMX43oX4aZ0QoWjY+Ixo6E472zY7M8OqHSi/+833JGK2afQvd9UVlEs1eesvzPMsbt6JDMQtG2XxQn6xyuJYjpnf92ljaILqbmeK2c4d8LK5nuiwPexjJ09btirRWxJfs1iGnwMnvTC2Eqn8WlciX04iKOfXfR1LXrmSAv4rfGaVwA7F1Z9G7TosG+8bBVIokzDT0dfsxLhxRWmFriHz55VzP+NhJnsTmxYklSA/vToEvc6/eNc0eYP2SzF8truzW5Xr13OB+lyr2brDw2xLIyYIE5UCuqoLPa2yiz/8RdDy0hLHklKupDXhxVIqqtX5MryYjV8h4Vz5qeGHVShb09mNBlbMElTT88TZOj+MbXDKzKtWDbx+IS/fvZLHBcn0DiSLaxqvc+EWDXTlcP/mEfrfhwGuItFNTR0iGNVm8RXFDMHcPSNxodCHF54TpzpeW+HDHI4aifKrESWHo65Hm/PrYHX+nWKpGtfw6u6+DKEGVq6UNwi+u+vcbjo3bbMK8p95DAP5GoZpBF50ZzAS5RMIIp+wu4gY8lSfOznr8Xjsy8x1NdLGriqfgxTMY9uEodKOHRhFYqMId9eG32+fe2dG0Gfr/NW0dxXvo1/914ePaLKHT9qm7fFY1lGQyrxw2vAJIPOlf582xZYJxWG4iCKU7doHWxaQB2PCu0XHy6C96IRFxq/wS1/R91x/cbmj89rHPO1B84iu091jWS3++WGZOdAFoHivoQhyDleOwYet2ed2tqNNmmT4juhdkJhbiL5N43jCKylI7D53FOQnOnNE7CnIRezg7Wht2zpC0Fd98bMWCvIQsx9cFLT1vKXYPtdrYHqwM0ILbF7mhmWi4R2A6SWA1TuiNcPjWsmfGhH9qfzi5Rz23EyQd1DOYgeHQuTLzmNf2xc/hDdYmZm/n+ITlTmhXzqqwU12oJwwbw3O8IJUfNYq+rPbuTfSU/iSxiXMrnwqlo5NqUfpVNjPKqTtpykbyQnvrjdQy14RO2+b7tb04rm5LXXeHpNMid3jpgAAIABJREFUK/+HLtefdqIjEkToxFHrMBYJwBHaYU+M2PHBxjUU4Me+aPSoD16pFInw4ntgpu2rMjExjRwBqw1F10yUUqwMHO37+utFfOtbFwZwjri/TH3Xp3ms1cLVxQcuhjvjV/aI3tfixR4ILw53XbgbRbsSgNjB0aqNqLo4bPgert523IXamucBnDitvaC/jiOpflWsMS7F2OUiEQtK5yBBehLhqggbHwtZ8gJnejqIELffW2esbP/u4Ttngr6bHZTIjidnpc8Nk+H0qqHwIwO7C3M/LjsFzLukZmcHruz60QFQU1UIaVtmrrv/qNeuKBvdfUS+I7luygd6684mCaG4S9l3e2c45Sd00tpX1Rra705FiB1lcoJSJ/Lbji9dohjnOg2JCVcVMF7GL3485FKYp47i3w0DJss9sbx8QR0VVa6uVhgUzTm+dy63b1XOflQuX7MCL5/H1I0lMX8cW9KXtTZ2bUcvRNgXD9ClThRXle326KGuSLQqrHw92HGijh0hzPYQvSrUX2mVThQ12f13BLYkoXYm0mo/msNh45YS0a08YxSP50Ihwr6r9ShRM+83xVZh8nKJcTyxxgld37qqBbNvWYI9FOkVTqmtiU957dusERVrIpXvEVjDaozBd+iMjdRqpARpV5WfrlJ8b9dflvxIRKIDir8frDtC2LQZfz/Z9cLb0DyWhDkRZvwQmie877oI/6c2ybiy5cAJo0Y65y6lc3kLgdNY8632ZVSVXTZL8KRjbHdta4Iw2dQz1xR2CgXShO0wudZ/xdU2Lzx//NUk2AFCecaIjGuCIZii9G0No+AsXmWuyz7nRYhAp8JmoTYWJ1nbzNi0y5KCixsMz5ENdvJSEnRYJehlnL+y+xFXoMaUwLQlEf1R8MyYsH44h1gxrpSOmBLkvvgA5lH8DNu7bw0d+VCYXKf5vVWJrez1R+8U0w5d1r2dsXI220yJGEccqDsVcbEO7SGfhsGXmCpyd8RmmLpmzOr8M+kp7Necx/syc138Oz3r6GH+y9PdvOquyTo0pTgEzYnX69Du1syc8OAVGuxfEFQaSg9drI/WTeSApvLU5dKcf+wxwDmBvckpTJcxl5rr7loCTSx5Y90W/33Us21CKm6UeN6KypU1MRa0RsRKb+pEl8i9Y+4Y35c4hdNkzLJL4s9hgB3SVaJoPR5nm7bvRw9RLJGv8CwOZJXJ0jbI68JAmwjigtD3EO9t7nxrzlp/BmYweR3JP171wfjRcbgyz+U6XP8niBTpGCMu33EDn6uxume+r4GB2C2BMPnCKZi+F29ZxxgEArL9G6e4mHzCjv3L9RwdJgYP+APY9FdcQXOYCr97Y6Kix+N/Y27ZsD7k8Joj/07lD0t8vb5lvgqjqFcbq5oGL23/2mlb0qD8wthq+3R2Rp9OMoqZ8o6N6U9Hv9o+GbwZ79X5ni1Ut3TClaggG/UVddCLBajA3hhynThy08ZbfhrvFj13CgYiDXQw/yYX0Oxkvmn0B01zu6fOqmOXrTBPc13hhd/PiyLxoql2ObyuFIac3C6R0i6WJhU3/dgal7b4ELj4Z7wA9M1dD/HMLHcxC6ftzpJfeGzUJDcd46ZLBS/tTHMuv3VJQtfhVm8v9qHQ+/P7mJsJdyoy8YiRsAr83vlqq/KkWvygLO4B4+8MHZs3EBbj3BbPKvktU6yqW3zQNmxGlQomwdvqKNj0zuEdycqPXYUfpzq4KNgJ1MoZ6iCHO6WUKJk9acFSwi1eTmJcj+Za8Ux9Fi/yBqoDdJ08fp0NE7VYHZ0ZMMywdXtR1RCH0HtOvEPj4a+/nDw+wI+bj9L+OirJDl84JAoSYdCVFR6OHIfDLuMoWw94Cpj5JN7gviiL+eqEL/9yhXH1O4+x1XFOPFT6KtErRS2ztlv62r86CT+eY9WKRvBXZEHfoZ/0sYNYP1+8EejrKMuP/Na5siBNStqITcUqZiaPHtQXo9ugtfGfncd/2mGJju5q2mQXjFEaO5nt3kq/RkoxCHdtRnxrQK2UGF3DvD4whxN2afm9K70ypnIOO3Vtvvkv/Sw7YyUycyBXFRyg/023xVsYtKLhrDvQO7oQ7j1z5+J8/hkYpzuEImopjolZaweCEgpzywF35cXLgcY/sWlLNN7xubvHokLRzHWxeuUsLgzj3/e1WKhW1mo3thFjs/p0dpB981u1KHRge+f5BRc+bNAB88TLRpUM4TyuyFjKqJGLMmHzZfmc4+wKnIwdRc7ipCH5VYVCeBQFL8bWarYUB3VZIpxQtgb7BLUTtTMmgqoHBj8yh8W50V+gw8A2E551HZWiLT9PwBv2xggDlR45IbaZ8rcuwqssonfl04b/LNzxhwkNtO2tgKxtC6VN7e3EejTYgck2VS3gUmE7W1h4tDvKH7ldw4CW1X4q/YRz+ZHLOV14g7Hs7o7Op22h0Tnf9Xiikj9O6u7ES1BIg3pwbiimRHk8cGBvBavZLJ3xTd9j87Vmp7Koq0TXwp8Akiy50iB7bCPyj3OzkRCRByzGzeh8H82Bvr6IwGeg6ebEhMWVVcXCNiSzy+GmdTZWjCfU8S/7dnL2zYHGXLTFY70QaoqwUwifIEwCO+MY6QuwDMd4IEcF67MpvMyjnXcdFncLsvgpCl1XKA+TTvF01XnjrVJoATZB6w7k8kwja09V48HmAE660HM+H/zkcScRHTVrpQriUJc/PgjIBBw+EqITOfLxQIwi4fCxP4Sssq4W83RXTgriAP07ZRWvKobtuNqbbZqOwFLRab9R/5e8XCyhe2ZmN4fEihFHGjCAKnHZOiPCCQXLdK5gFxFbChJAp6cSIgx8q+8sP3bNuCpJN9FRsL+HXApsB2jURKdcVILeJYW5tlgJyP2fkwaMiqXopUHGly22DQnOHdR4YEanMvjhcjT/JuB6lDEKPhb2WOVf/Kh7JcC9UghTJmJijdla4m3EgIQCbzsTq/AOn4COAtg4KP60curGQGJL1K9KrMc9iIV55HJArME80OWygFmcDMYYKW5Qsjg/dql2FAuzuDTGFaNAKkeccF8KG4tEaxZv1o7bJNHrN4B47IfDi4yEniPR6Rj9CQcC80JeDgcmc2nPqrqjdsSIxBPQhphmxBQ2mMXctpVCPGobVyBtzH2dPGNl67lAchTctDFms7Fio3jZ7N8hEoNXkLAiqfmXxsQVIi4i2GQqznYI6IagZcLhI2dxrECbx7EahXf4LTHSVl24lymW9qbQLY3xOxvuMLjeWbtt48i8VdNRw4uPiv7YKb62P+89rrSLoxQBIierJyhN5M6F9poc9Wu44UCgOJVa7Mo2JJZaLM6vO+/uVmAUrLsTW1KM1b/3AIUVw1Euw93sXA0FmZCpaPFhRr94WnWetBygfwPgROMu/fD/rF0Nct02D7wcOeQBqMkNPD4A/ZkH4Dy+Y3/EAuCfpCd1rEwbO07aSREUBBa7C0dLJOxBAQclhBfBjwApCjbSNcYp5pQli5PqEL6+H/WjeDdRWLTmpnGNFZrKDgDC2YP5QDmTrEaU7cbxd9SGBb/0O3n52mPUOc0xUuGGZTRaCof1R8TSDmNIjXt99yi9OYvfisnvmSoP0Aa/VdrowlUeM2eiebsezM7dwlxfuJbF4WMaH9pnD6/aiAPNh6qanI6JmISwZeFd4p9gJiYFs/4JRKw7MEznWNtiMcKruTzIaR7T3fEGWthA8GkjgnG49dgtWsb5DJjtpvxtYfdfNDN53YX6Q6GBH8aN7HrjEMUwJadEzMtEyGYB0uaQzYTM/+ZEe+lSIhWUGub0pvlOlqOLSfQfeRTt3F3NhDrbfbxnrkxXuw1HJcK4GB2OW84nJASdCB9bttEUNw9gxK5AjF3etJ92mUtCDXfsKw9K6OIAYtb4e/QWEVlcP6BcZPPuSNv7+0H16Ncs5DcMUfxcNhQNYGvv3Sw9MOqh2xCh2+SJmfLqPy1NF5NcFtGlBlhQPI0IOxwHnYIbKXsJmkcW09rDgXE1THffTzEzVRLGuzsix9AB3QtjFduOgdlBerDy2FY17uC1ZD8DxJO/mlSJg36iEwiN64FPOmAkFOJa/Gj4qP9htTR4xzgR6jGrPAyyGGsloJndLOHBoxNDX/w27EdxB8W0SosXxM3MQHGrFJLFN3bOK3c1H6xJT6wENX0HeRIvN3jBT8c0PBpjIm2DNRHBp6iDNCGaiUYVyuGsXBVRLL0eYcl3TtubxGeYG9z2c0F2FYHoZAG0N9ruLUUXz1zzJvze8m4SyuR1wkOtRTeUo1EwnjrfglkKomdwiUlFkwhXi8jhAnEjjXqJEM2URmLm92PSxqEWZy9aj3DeUYQhi0M/KzGKD6RGqKp83CeF+UbK9XyXzXoN5dRIyTW2tuOYUwOBuYJetYL9KAESNaa/ANywDqk/JnACDQVSGMVYAIpnMIoX12LUCfTFMXJD8e+WwqPLGHXk6Nt9uzhNhOut3ehFM3Zt/oS52cmbMwTnlKnNrTIcrGq0M3URxHlF2iK4NOOhwUu1b6uVYirGX49JG1EovnWAZr/sn+uLjKG7LY1o/OiaGwY7q3Bfy9gw+DwDFXloJ3ZMCrQPRV440SShOcNiH9wUx7Q2oBL0dXrrXAFxhTR3cCVNY6F4PYS06dFGIG2ZrPA+LpasOHswdW2bXCe2hbgtS9GRDX+hwl1wTG/GVD3huhbJd2fMQGIDwwf5zGNJpMkO+q9CvAmaRhD4OnBHLJvom/cUY/Fpewxpm442UitTe7afE96gnu0IjSgYtoZjzkfKZVmncJteYbzmCXpzwAs8JQx2c1H9tHi1TaH2gSJNzRjhwmQIzRv+6NAWc5NM5ZqIFKQdTWV87h7qKEaWvB4ptnfYQKHdIJ5wTAWJ23JJ6/Fy0e7DcsiMh3nMsqnzZlB79BbPO+ZpAwBKrK7DFr9ISaZk9ejRIpz6scfDD9G6JfqTKHkY79Yd9J+u0/TdHUEhtLr7YIbXCrDQrHoKt44tCP7e60T4jxNdXtqH/FmQNCj1HYTNmC9ojtYIp8jS8sQYfQQVNvJ8ApyiNiLkIpako6gRfm7rMWs98JtkkP2CzBaaZHQ6Bd/oa4IUh84W1M7NftI4m2bG74+Mtf1+DOlsKo8GQmhWLLulyls7BXhiommgQsFaGmonqAiTBoGIKo4QoGEDzfPz67EsVg00WPIxbGe1OHQZ2OQStnVfJT7PqDtRtSC9TcNcYcyTaz5T3WbcB7xLJk2I9oACmmNGFtdigIeQzDIxdCC4FFpsoWulqF1FDTtD8rz3eIpwNWIUuD1av8Xjvth2ejwvk7bQyEAzQGElZ+3A/LkmUfidtsOvJOPhi76BaAxMxPaLhLKG/wsofNAa0BoUOcyPnNjgOaolkJOWWiTf4znz566ZCx1IGFdZGuPwGWezrWMLIweoL5yFXdVOgd07djBuQseTohMSn3fEibEgF4Yjai5nnpExyTlEvA7QEdQUH7FNQjH+xf6ugJiZkixI8Tx9P+j8OnYU8d+HvljxSz12sM1lOAyHlKwZbXPtjbnOrJhwXoCLk/WpKm7VWynLppTfuoKTEiYD73GGWZho2IBOFPq+loj6s166Yj0E/eA18667w/IOvMHDns121/ihY9uWix12FuSOp8mvZo/OP/FmUSrug5s7cZiDiZ1NxiuXCK5kbR273UUQKlJb2VHxjQRfJIwdBL0hiaNQVV5PXjP/YrKyLPkdY5nhYna2OnccmUCzrWsYCnC4IKesIcwzrjnjyHlBgvTCTNOAkQ8NkVSYJ+EwuVHCOvqUpjguFRg66HuPuY4evFqJGaRQzuBThKtmdM5tGyNjh9Y14kvcztnNSPxkytY8rNpVsIuxzrfjSTNdO5uVvj01booRA5OHbxVy2jH1kqAfaklqSA21bjR7oFOLjllBBSJH9G4eoHxbjz45QHf1KBbQke7dnR5ZCo1tFRo7ZRvTWOD3MMJqUyG29569SdjsF+Bt/ZZ4q5+g3Ug8hkT5egTzhz7wqOzQTRQe6epTV4uxrDwIafNJKW3PLfl1Ay0gRdIsPnN1lSLSsngbq0RTMOoHtlq6w8fM8/SWT3kSvUZH8faZ1QqJWgZM0kTPdgTKEwEerghegHhqkmOUTx1/y+iM3+Vd2oP39XrI4aq5cItbf7TuZD1qh53H6P4ziw9sC7Vpnh736a4TXJl3uzpzsPVQHCg2x9yM1pdsGpHFGE2IGMgVGFMe8YQYeStF0rhbRFOd+Hpu6/FiceO7OTry2bRzpE1ZmWF3VEI/Uda28idudMV5sFzzn6rDeo4G4Luc6ACiw3TBjLYYvFbafsTIEBBA+KhDB8mhuRK7/Esb0oTmmPvi94OGjryDlp7NcxKHTwQrveuzHe6dzYCwzdiavXI0GC9c9iHP73uN3g97QX8yemKv6ARQ+Axtc4LnEuVtYX4QjyQca3ykKTpScGVzl7rO/CkNNJuIiYsYgwo/9mQLrbTiDmPOh+ysULWVK6hrvGu58wpW+gW3yIfaXT2T5LRaiOcERJpZKa6O2SjUAEv60s+BGp8jD3eucGM88CieO7XNfbHacEdzcowtdOeJbZQdNDpbv+lsTfPkv1OB80TqGadmf9oz0+4oai9cE5JttE2GQj8W7sco0IQM04ThQBcsaNIKXkTHZEEenh00YVGlje3oxOu56U5Z8pRqDo3YzxkOH/RSStjscmnNiJmuXS7O3ACM84Gk2X9G4/Szwre+aI8ExVcUrUGmOptpaOb9BleGwn4feOiAa1KZIFmCikcLkpjZrw+tR1+jQ7SeFDyCM20Xgulp5757DnY041ebpeHWWrhuJjAlrGoOP5vqHrPaXNcpRXr2iLnmIIEmmI3XR+jRKIHZ30NijAmPdB9lqBNvWd29nuwoXuJfTE1mIGrmEmE57tMqSD/ascr2+ezatEiydwa7I1njITjh+5SXjDg881VybJPETaU4rO4AB9NOI0I3U1ihS9mLlEZxTtxp0OrJC4X76HbKn89YtYN3OGN13LNZvtvKzbBCbEOQTSsRsuKQrL4teM4thP6Qk9JCjgSVwBfsPDm+mNlIY0fBJXMERuTxqMmzVxzWdSmiY3NA2gBRRCoUFOGitMHHOorv1rXx5FF/t/yUnXBUGtbWbKDHmaPT4u3dJJ6rbL7xy2KLvrBanXf9F7qGCmHRQVR4AMS85qAZGmWDV6XyV+SuLQ9yGmAUD6lH+zE2gJkct+OhQyjb7bVjtqBdb9p1S8x9h3wqxc2LDbRv5KCuvZsKiMuzXQJvMoh+WTAQkyIBO30emzPPJRxSfuowQDPIltgu4a114llmJryB3upHgZ6iYRH7ti2oi26nE7eDEjI8H5mOXttsd5gynzxr89fA+EONKMyslD8c2IOxWTzhQnS9lelVEmFePWNdF+Nv4a4YEAWtPNKAFz+1u6N/z1sPxnucCovbrkw0eGIbBHbbcLZjON6qqzsJbLjXq+V1rlsKsT9a6SseJHMINhz09EWmvlNiO+xDo4YX6DGPddwQGx3xeDXaRo/XgzeWvhsbyIsstgbt31orbHdsVALQcuNnGOxG68Zw5YiZ588HoNgvFtxcNkqeIk2+uaCzcufG8jpymPAw2wYz5RfiXBQJI/0Dc60w1hW0yULhLoPlx+xc87czVo02yLXYnPm02SYCozjP3j/TyqPfIr4HEufeTuxwTb9TmIMdyPB7n6PxY2dEJGqEPlzYuzjxog70bX7l9MHjMUQ6itKatsa4emY9OjjXQEtlfuy6grZKoRiUB7ZdcQ2D6521szr0xs3h7PelIN9ypUFYi8j2xSo3IcAF8BvVDcf758jSOmQ1hmdGMh0mD44y4MwW4Sd3d19NPprfQn4lw/7F/TW0s5c9xpTLZr4APw114Y4MLC90qzwUDL/bT+euIIe2Ocrw4fgQCnZ1nLueZ+WoSBpTq1Al/C8/cYJO8N/ctKGl+B/vlRbJ0p+9gXj0ePNwtHZtVpVg0+kZqs1mQjE50o1ZdXm21R/Bxbsz2etwx2sOPYCbhP1K62hSyWC9kdCsgV7lIJzh101ymW8gJEHdOI+5c0upOTo+OHq8vluMPb89AW7y9tDg1fZazPc/9g2xHVu2YK79n/20yMhHfjUTfJm76ta084sRWw9VgEFFk9itGB2DQd9GNkuRyWyJMtlh6BC/D8KL/VgnnuRRDLMH240EleCuTktckVnKyDKlrROKwwBhWnN9VdRPF7T9qn4+Fj32ls2JRB/y5si8VxxHibAkRo7CoQa5DLGuvGwxymjH6E9N419GM3l5l7rw7vUg0vbWqxP1N6sbuTmFQzsrMarsNjP5T9gGxLdH7ybvNR80wn66+jyF3Sc+AMZe2yxmjOBY0taZ+uIM1g8z4UlBA1StsJwmaV+c4q9L0lCMdUJYg1/PZrG4JdBwb8XpPKxm5lZM4xme2HanO3TmsDNL0H6uEnnMar8nwY+xTY0CFLkmOx6oaZVEO2cYCDro9akvYx48+D9I5cjBjDpEm986GEpO0wj9Vk7bi2+nPDXdvXotBlpLSfhvPndp2wX4DcVhWz3vehZ3HvGNFG5eNP+n7Wpw4+Zx6OVkSAdwrpDMAbyRDiCM5thrvkdKlD2ZmUW9LVqkab4PraBS5PtjPaStpaeMR4eGGQFEZLIhEp55H/SQowUm51Qw0cmAvWkbkQz/AS3aMJUUe+xkfr6NRMfLBFfjFldLrllMJ2GF2EIFdfHlSAMaxPMIvbOe7Q1i/Mw6XtMUsp1O5gO1cbR59x0HZgSFCfYDZ2NhXyZQMfqzhAigoqOd1A8UiAzouKkys1FHcTPu7sIFQGJdl56NLcV/Fo9SjGdvGZFsK4Tay0iKD27Bj9MBve3XOs52euTmVR7BpxEbpLmXVc3+qWzdCuh+rcXQshSof/SN209XAQqp3DnyPueaI3uKMdxd6Fi6af6S3uLHUx1FX946x+jOWjYj7FypeIcAeZIuzQ3yWa6JOxw7CtfYtQkdqqxyQJDHVjO8ipigt1hIcUhjAVpfz1qePzyETUpxxo0uXV3c37urRg/kUdy79nULFn3QV6yNQKuvg3Ji2J1n2nk8eC/OuR6lVvUcvHQOSCC7rHGN/uZL8SiahgAvYyPLLIOzQEHM3mavhjqxRbif8W3c4kLWQ0Vt98umu5sxS7YBSAl92wS2uvfOO3LHJTYjuRmVlpeCV09yOIxiCOHrROk/n7lBLxW1bGC9JQJzgU7I40dHUo1qStLxWXUT0r7hM2jn+Oi13k88bhduCuOu7XtXZuJQrCtep65CtWxexzaW+yjtvHzG6Z9yfw7nfIY7cXJdJQgQjd6kov+vQriNVtANVaLRRlM2a9aK3tm9CGeW5f0L8eThuQsCZqKleJL58U+32HcUFa9dWK1QmMnZ7RWdlGwjHNNwNkuzciG6LwnRehSsPVNrptEYq4C4ImYiau8GQ3M0VwFSEDbEh0XGj+JcA29xhAkaTZzc54ITjhw8VJrJtvj7svilm62xslrMdN1lopasazP7TMcxwzDbUVj8Xq/td1xOWkyv4v4bzizKhcaxElAia2UPI9IlsJpqM0sdYPgs5plGUALIWoSJRgaU3BTM3PTB8wvj7/+P6c41xn53a19+sPixY+EA7QKX1j7Qre/tX3WqBc534PLj6/TVpZtEtWJIR0azAWxholvjPqWgsDufMrnKQQdl3FlSTOja9jPOiGtTdrSMVJWrnrt+ibVOoKayOIyY4r7OzlF2PQHa5mdziX6Sse0m6Oou9rMQ89pdSQ7mjM04u4hIYmSvcVdroZoqkUWCGalPdOQ9iANJOW5KfOT9fD1IcTs3xv/23O3fLQqvRH+JvXyC3L/JrFw6QliDW8eo3P77oO3U72v9w+x1OG51GLRqDg9EsAlkIaNERBqx/PmBU1T0EJE+BCPrpPB2gj8SnMj7SZudhn1xIcn/uDCW9N7D+pXk37qnThnnL5uZhyp+5Hv44Xkd8M/HwaPpEPBx3v81JpOo4VUoFM1ExgX1QwozXreGKkHyrhDY7HOGnrmydkUKcRYsU0oGS8V8i29XYRS216NSN7j/Yx+P3Trzon6xaE8UdPvs5vTn5U8V27OGYobZ/LbWw2ebHnCjST/Q0Aw1BLEKDUJgC7yplQZfBANNk4st87MMeXJ7pWQkrRN9s8ftwlt8H02b/J3Qsi0unnixwuyiJ8h66Bn3Ury+D1g6BM7UMCfFn2Cffnv5wEX/66DLyWmWEVKf5gO0cCVSibk1qwwNp5z7oWv12IBQsFB0f67JBi8hlpgmfx99MfN1v3xP0UP5bdXoDGV2o1JP0n3t3bdnbZ6g0x9JbGnUYi5n5dovIsYFSdvAylIE/S+2DtUIKgFa+wDCKSPySLeM9kLqcDaG1JP8l+HFgOyo4VZ/bseBVr+BWH1guL1jfevMd4T1fyU6DjhEmqPaxntYQ5nIffBJSRN0gRfDaYDra8OFK75llN+9OOyfyhvs5SgSOaObyAAzpVL83O7382aPfxa/fo9bvITV0n8cMG+pgta1CcsfFofFB7fe+a1YO0yupJqe7MN1B76Ne9xYLCrbYJH9RGLwoqmQ/EsW4qLLDkqPp9n6ZKcnu7cX++XNGacsH7fx2mnmx/06kv+7c/yaS4qLqmPHcNdNi6rCIDzGetyeKbguf62Cr8/V2/WVSoVdGkuxOAe4BwziNWzw2WT5iVgPNoR6SBkuys+FQSQZJ8rxA+9dJjtaTEghmPx+iR/3u7mgL6jFdy0Ue6mo1FFEuZDDiTtDxsvkn9F2TU94WZaPBo7TFvLqAKADqpkOr94IsYpYxSh4RcRRi5h4Yzo8lfBMGERvXMw2sx8rdCq4wWSjpSuWS1zYten4/Lh0D/Tg+HHCNkAP58xqmlc3coyY4i5os/3vr1riNGmsfPzaYQtYCuctgT4wjOsBhb+Hq4Pa4kiurm7asBH2KR2G5xwXlXnemtDP8tTJCT8y3B6+pbgsS557M3OWAAAgAElEQVS7eB9D08YjUymm1eSxomqZd5Wv6zCIrk7Jtn6+gKa+iJyYpkCkeGiOINdKiMtAbzHXdABzK5py16L66mibYSEWgwIrhFzbKGV4wy3uaqD286Mx3JfBQLe+2KN29atimbanvMuA1nU9c8/rVItfp9TUk3D7NOkdykmk15bXGPoUjB20gwmuVrlrTT2M1ALSPq4dMdviYFUYD5s0w5lvXYTxo7fFhZA8F0FfpS/ulULDTKxpM3vd1+Gx01VgPaU4+Fr8wcUdEQiTA6Ge4Ymzipvb6/BKVex536RtMJMXSf3KSEGVw/c+QjB4oZdqjjo9799wofejzkQqrKUwEOiabCC3QdeSzoPuQxlZS1/+seuybUfbLSMtfl0+C5vwuGXyFzs9u/dVlxoMCfeWGJNSNTNe1K8ddg+G97Rm+QgqDcKcwZ4tAmHDVX4oWtx+Hr+/hIsPxrt/3evh9MW8jxo62sG1RYM+PMA2EfzLnFLz3slYj9l3p1KSRmhK08mZ2a7IqZJuWOLL2UpEiiQCk5V0loMLei8JASAEVYLi7kBx2H/Ix7mwFjcrxk4lf7/MPWoqedhpdPYYrrCOVGi3PO1as67CBGwuS2V9ba87LIR/IgAYepU2t25V3zWo2SK310mNkGNFlCvzwbRP2x+4HFNuVjTkkNNeGKRwyGAXgRxjuqNWZb/FZJa+LwvX/b7P3F0XtdneVn3xvqZ4TM/cBTfXra8LRX2qh09H59IAgqIubwb2Dia5T3sFconG8a5pHqmBat11wNkjskJE9G2bHHADyob7bCdsaRTKK92vQ9rsjJNS0KrzGWOHCyBVO6MTp5hScPlkcvb8xrjG6d2KXECWWqZlwWLBQMYIaFE6ymjX+Oax9KJB0APOUBNvm8E/hfMzSGgpEQJR6GunMgq9xXM80L82bea7q0befa0j/KerXlmNF78+SRco9TqxvhJjHqWBU0uc/mrm9L/ismwGwBsaVBUc5r66yCwPOeqsXYQJBeV3AKvJse59m9zdBsIDDUUjaCzT88/Mjl4wQN/YUnybUkWlKgrKLyM6Hscd+ubWAcezW/twv3N68qQdEl5PO+3G0ZetOz04vm3wfGAnPOTxYOzgHe1GfRgNclRSL1OuLddWThlvXil61OKB5uRBscrt+1IY6HYbcHHoUNuRc7bgsDD2Hjj8Z+3r7N43E4fe+KiX0N8V60bljhn9fFRNFXu3usHnTI6ZGSmqJibARs8zy3G2aExpKGLRlkLOWoE2OWkNG1RT2GVGhJsj+XstDrrRbiTqdlrpsIFm6R6liexYX1FK2qvNGu7TlpSuJSZhV4qFxOvZYrVwlaxGZpACpWg0dHTOGaaOvWujODCDWUKVkHON+tDJrzWQ4rcMr8d1+cV3zSXFHiulLdQANkzl9tixnTBOyRY7L4bHr+F1KX6OWM4empOErfVCgRQPqca41wWmpKQkM4SajVmCVT0d+jO1E2gfCu7txnMV5iMrCZ0NL24av/S4bGE8vL6Pm5OqMFTJ+jUXUePXX4auBAomUFnDq80Syau0D8lrT5M90tYLckt6gTfBM8Uzg3//KM6iJaarLg7P7UApLJ5Gut9UUBUUo4gEMu3dU/lrd+g+vi9s2mwRdO26wcUimFbnAztYO8boYUawD0Kgazo47dKssKrHucMCJmwZSgrUSQh2DIIfmATRCVIetRjjzLYNdzVioss01Ww59wKRWSP6g/f7q5WC1N39otFjSLg1l9Q9bYYWT0lLbsGo7RX9ZD1u+svIUc+bAr1qGIyHnCdMBgVvncDDEMmL2DKEzZCIprSdwW5ZZRU87MafMfAp9CP1OPcTLiPOUcnR+yWFwlK4k3UUAwcytHjxu34Wu8C6zW50FO/IjjqDaH8Z7A5leOucaMRKezD6wCj0eJt5Q1tTj8HGbG0pJ2XTaLZcIf4RPpT4RNZbXEadkOFDLvKth+teJ+G+GQxUNVPCYEtNFpxF8S7OSs0dn3RrR4vHUWhVk+vdWlLgEqUYE5tOepH5xCIYjEhiQ7rSpgZc1bSFzeBh6SYK3rdMQlRKMW7xfsCp1+Js3N0NnIcJjK8KrvkeyTVsuIxaMk38V19CrCjbiMkcuR5reAVkpono8EsD/9h4MCqFFmjF3BtRIET/FITEJxq/FOehdJBejgiOozF0IleOy4DbFGTzt5iH/FukGivJf93oIQ/eozdtQc0eS9/3w07tyz7AIm0TqGj/thxWKb1riv+MME9HzTE4JJjqKrfQAO1pSAkTexgTgRAfGIrT/sjpZ1UPZ/J1zXo1u7laNuTEM0Mzi20eZV98u2r00Jw22TqhHGfXAw2x9rSW0bOj7lz/POQpZa2e0IjjZF1NNaHb3itmD7xpuupyCxWHq0462uyQ1NjMf7BxzAMgQSdubpU4hU7PDfhEQwkRDjp3sO2O6eMq7u4+Ca76LV70gO0iE6NfHDxh2+wsCPoTRrQOw3g6S4JqOGeoRN02U537rsREvBJpmCFaWOOQXioX2igpBnukgE/TDg33mDqVrMetDYUIKX6+r5UNWjhQ7QN0v7k9fRRH+zVR/Cb/+SABaLLM1IOvvL7n+yCNwBOHJYCR+1q1UdNLXBmJQNhXpVVRYeG9DEuV2HCgcqGFHAVczFNuoKBN//r4UdLjok1hBsnfHn72WEdewmK5d+s6NROL23q5vlNaTYViisx9ZlGy3YDshquZkoo+f8J/btyuhm6DzZr2wnp/A/o2bO4AuaTG3L2FoDAlK04hNxv3WFXy3RR27S3+L2tXgts4DgQ/J0F8gPKFxA8QIj6AMP3sNauqm03Zjo0dDbJzbWaBZTjN7uo6gLTdvBZrsjBt3Ve0ZIuKXK6cA5X4JXuiPFPQlSf+S2G4LszvSazHQoux7UfoSaIdphvaJa8Nk7GqIOYwEtuCdo3dG2EJvHC8xZlnrgH6N5/s0/Ydw9jsFndHCo9l/OpCO88OlPfE/IFGKWBqHgKW3tQIB9oo54C+mfmhhNnpviR3V1kG2k6fRhPOhG+XNqv73dRA7PbWkZupt65t7gwuPktO051rimAg08jYRmkU2k1R1dhv8fou8vLooBTEzS89rCpX+Ai93PT40bkRslC52pVu/LOZjFFiJTpY7fc/gOrbrjIOOvO9U8tW2b7VdL/EPx6ydOJi6WqJCGADFcXUmc6uV+I44ClZ1BjGLj6Y/+ZtH0kUPkyn8bdIfmcv0WjaMAHCXg70QC1CMzwdmegzdc81Gnjs6DEIEgMSajNezYLW0E6QQhGevK2pR3+tMb6dmRT2ffVIhKItcq/CnvZz8Fqaojz0LXliVHcEJ+ijNQK+32CkzHFDt5fuSvcZLrUbi6U+BYwLve6AZqZsHfFCfR3pE5ibuUfa/YRJ3t5D46b3LkBt55kl9FwPYwPNXiNgyNYT19zMyubnues8pnfMiYfe4nCnn7RwbCpYl7PcVArc4zd5ICQ2wtUoxGi+dqqbUSQqua7s0sgZxHHjkAFoqimmq0rV6g6V+LTp7t6g+HMnLQKRzFl76PlrzNBegz2mIxTzB4rc8oR29ejYOEjtWlNRC5OdC2XO9PWhtyu87bbM4A6ja2Mc2YxURQoFtR1CitVPsBgTcNtD10ZO2+1ylkX0t4Uslc5pC+6j6xgcGBJGDWZbP8kCc9JEGUrCU0t+QG5IWsSbtlFrB1cf3GvIzJkbgafvXiWAbNJSm44eXCZV2y63oblql79n6yd2tcfOVLnf4Yrx7gJt41ky82A36P/LRvZZu+G2LfenQHqN29A/isWhFhxTwaZgcp4CgW3zf0W3n/ZH6NJISVIRh81Tk6iRkUi03VxRJzbiDzvWdnzv+i3W98KMTQJ9kzn5mWYJ5vyatLub1y5V8lv8FV1eOXusn4W3lld92QtFnvyV8jbJM7A9ggtSDtrlpqMgFAbkDNbJz7rdbUwem4LsQMXc2BpbR+G3eGd7HJZ3P41IcTlXsdTJr3GAXm2lFBq2yQnb68iwWt+amfv7pkf1sTIfyjaD1Rbf5jUjtjKZVByUKwBAPNZA15avNpCIbcddrvgRAiV1FDsX+6zFVXBmr8UXOp1fTho9rp3UliLQZuqvMDx/9eWzbnFgvc5/rkRHq8YyKsyLjXvJOYGLtxQgDVO/2GLdE+xTJksZBq9NyhlLQ8na7sOBDZMF/xFwqdEZxyvhna+W7rW4leJHO4p/9KO4hLa4KCjUOMUhwaMf7mzxKNORofJRxSiP5fkgAINVIyMC9degseJLpfUEkYlkfB/b10m+2CaNBHmBpDL7Zh3azkma/UPviHmj/RZfM8Qel7MSdLW6u/RIhEl52V9hk/Q1QkCrxbau3d1jfcNiS9PBv+NxMR3ReMn0YaUETJggECSjMEtZlIfrHrnckhbAxth0tIeO2MNOQrFh8Nm2z7zKnO+EUTSYQh5i13NY8lc75WAmz07MWuPZB7up7/d5uO+nu3QYPdL0BNU8cKyKmonMQwbqsyTCxIW2gcDlQROUOxUXHQTXBFOgk+AHGEDsKISu8UazndAVl0Q3e9b25fv7tOiUBmZy9Ehd7OFL6OA/YVA8+2Gjbq8flYfiqyS3yJx6onYZdLuFBKBl4tTcfoa9KMINGtyDnu1eDMqmxw4tMc+1Ytmxa+vB7aiuL8iC6iq8XfYDbriGajFarNNk5he1FLcLRw8ixgpQGa2sZt+Fzn6LTWX3Sb+WnqqTnn+2bFNgS4ygDobdTjQZJfzOKFE8etX8fggPS5EEmrYu6e7cqniLuVRi11Zt6XH76TbcJ1nhPW49vGeLSObkbsVTqMOsxH8SVdJbW5WHtf4i4zUGipa8BIYxLEhNHpoVdtCfvgWlGcT4bIxALDv27HyJPRtEnPsoQj4QQIoLb/F5kLwlQZcbFbqr8STmB0c2t2OzUhG+/UnHtM1zUbhoOaCZ+ImJyb0UI01Jilx0YXJMgcfgNrmxUpY15kZmG83X0KARzvQHbT/cYtvx6+hhwjSYyZ/VF99s62FT7RzRzDX2wy57Dl5hc48OfMOfGNUyDxhbeBUXyEYTDX5oBJ0mJX/lxVo3Smw2GLBh2tsXKWYgn6F8Mdujxi1Hr8XGVGGdYM/22/zwfi4KnThvsRQb42R6Gm8lhr54kB+8TXd+kR76pPh265QFXhNlmoxWXBinhG9FIR1s2orsEDLdPjZ3ASIrXpAllDOLHjQrwMMtJlmFfdtPyKc55xbjK4U2cCC/To5JzA87palnrc3vbvDx7gIsLWkY8564AqHaSli+LGYs2CwFp8w2AuuOXcvQbpmSF5jT0PyAPYSNbrt4E8LaxI03inw3/SDQdnkINP+3rYdbv4qbOQdW2xpjcmlnta6+F33HFkzTg4PrGKL0RF8+yaERuWpMGkb/xiRAwj4FBrl0n3CqYN5T0zgvoP60waPA/UegBLsGNcPeUVS/w9x7dOkdvV/P8gYyNlCySjz7fjQkrlmZWE130AGg9e3A/Ge6j6twjZS5ad9Ba9eN1DX4gzHSDi+fAkUbvS0Jk9hpi5ltiVSNvpZtjcQG2fpi/bD7Enpp4TS/v7jFXJCeeIujxRWHiq/oa96ddHvKz/vlfjqiQSVFF4rpYKdSpKzrHioLDVPQGmcGJoEIyzLc3YgtRgKWrk2fb8WhSsxBQEJmS4ZRWC3Opja/P6Ext/FMyw/PgTYOt2ysaLI7j+sO1WFjss3vqdspFooynm55+viBHrj4Z7XTFSElefQizMFGG0Fa3e0tJZfkQFExFwN8bClqXZw6ChULrT1+ftQXn4K0XZyqEtceWt1bqfiyKLvQVByhn1fVwmnZ5ehHnJ5mBm5Q27XeGaPcBO1GhslS6zawaJInDSwR3G2UxHgulVBaF717Vgt4qatGvOzjnbGt+OABpLj2NLaTdnfuXKPF2uxKhEMr0b0bRWd5g8WXF6NxKccQpRLyDmBxt5lHMT7AL27OHoxfbB7EgDp5jSsnDfqM7p4owSdsUdmojr1nGziyLUbtoAUY/9x+rw+WmSfIzK/cepTJX7x57lKlafVVv8kP3kZUDfhECT++EHiUHj3DqQ7tBEIPmss5RLmoIRIcmCdYzwrMUs2gSOxbeNGyMQR1wjm2yPq89nUohNouN3OTP7Fpuxlc7MI71N8Q4DrkEAfpwas376BP6mv+EjkT45HjpUtUh1ZxiyvcwhjUOtVNlPiNJmFBIiq7uwUlg1s7YJlyVzJmlUFrQuL9GrN7XgAYY7wD0nYGJH8xyZKkCHYwa48ajZ5htg2dQ2jgO57VNIYzjnSVR47xxvbNUiUqJXcwxARbAnT41hjLJUw5VRvwH7dybZeY99h0ScZzJWLR5zoViT0u70QbPJElH5ceSQ2FNDO9k4hhxL7df0PdPhjbidxaHtX7/lm5XWDt+NkDw4ctUf/Frsxm5eRpSXjY4JZLNwQznfCRYrfTzfa+9bbNdqSIxrQV9OXBbvDfZebXQJM3/egIAa3mEWYg2/qRCCxNQ5jdI3ZZWII3p64Vdm2FwWD3MyxNO9O8czcaklYgbyJNdONc/FyCjfs1XuyETYBQ45GyYjhUYXW6diLFidEp3771MKqKuPBjU+EVmY3wMcf1T2b8wAJKzwNR+i8bBiHqdmvYaNnYbrEZ27VTTsw9cGcasCe4bl6ERWx2xnvtA9zu8FrehyfPaPKdSHFa9igJAy4fDSrowX20t8LGj/9w6xxBtjKaP6fB6MpcJ5IRMskpXiggXcQnbm9fdkwNhm3NjgbECSid77Wi6EjhYN51M7rF+1CL1TSLm7kl1eILE+Mvp4GZpFF4nQhE7VFBY5t+J23Pf17kJ5TiQWh++FpsqBQwLudSqXFdYQPdaCkFeyVOHimIDdwQkyAmjlLVwjR21emtnV5lYoTw4IXVkmxJo3PN/99AXwQX97ZNpWIaDEg98WD9xGb70RUzRWOg8sBk0ReD0WoL+zQQBtu0waiODVtnGmESkhfmYy6kDV5rd3mTZa4TfzolRaNzPTQUjle0/3pDM5V4N8zQ/xgYL4WuVcm18wZjwZh6lJLxWf7SipZnFIlyzJnQ/RXKtg2MFXJWTH2r+nAv1DucU4jEq1DQhh+DM9dHtea+q6veDfumX+2GgDauR3yCbnyr2/VENlCICvPZY1zdUXbAIfrvgeOliWN6ZpeSDiQgrJQamXijYwoT7TbqzbeF0eUtt8ftq/zgtROtOVvdrc5D8ZcuP97g4TKLJv+bWzwNuZknYRQWFWbTXQfl58H4brLpeR2a4vXl0s6XHZG8NvYP0UNsY4DoAu5EFjcTnXKWyagHZBMHKrBrxMdieDEZ20QujTfhD5yN077u9zosGGhC13b9NcXSGX0xfS1uo9ZjnsbUwNn3oO4/sb43bjx6eaTpABYX9xALbVymac1GA7wMy/jMEEbmAYrm2nmBk+bnXT53BNgaDbP2vYa9crVv6zqQuVuBNqs2Th6Xy4nZo1ft7kpYfBzRie6lGwaP9QOMLVzj8vRTNlMdMEei4Q+JV7oNcBOcdN2aTZIvIkHeGW9UzTQ3D1zjZILQPnX0WxxPts8haEFMs3QTo+1yzgD9HVIb9d4JGD7c5Wn2iJ8PLD7SgYdZRjfM0T5MlXgJAumtkdZgCL3JI6wq1a52NvEiELPRtJUM6BJcA96ta4jVId5nXWArx3QcvBxK8Qm3mIF3/Lu7TnHk+JodXTMHivdpgb1OlIFEVY4Lfy8RWeQUaA6g7WgXGYFK2OovToQ3k2LFk2f8qjHmG07h05s8Jky8Hwqvy/jjhnSnN9BS6+15EPQ/MTNdBF2cxG0r0i+RtGezbYyE4j9atvTS2uqJbUrpBaMdcKWtVYUHdEE9hjlYgh/N4iGtRlxb9NTJC2xxRZLtnX09l32SDvSJcKnb22gWTHA6jzTuf4XkffIwNc1Ef0yvyK6ys63SX3LRkUecHtDMB9l57rD8ovAZlIpMrWjbMsOSf6kQ7ndVx66cKjx4tMfk2+eGuXselxveyh1aN1z53IxVbr9m+XFWXwww8xummcmfuzWSiR3DDODl54zXMi4/jnLoaPysSEYzet2Q3kGiWisPu5XkSnvtDrOhiVh0U5f/WLu23MZxIHg5CuQBtFdIdABhxAMQpo+9YfWTtGzLCfOxCwwQDMBptLqr6+E82LQ+s2KY2Q8a3TdPTqStF99I7DEtpPhrqOKFGcZ6SOo8HBkPesV5TV3/HeiufS+O0qAJyIRzB2waIysRKna83GYKPSUJJZ4BeTrYMb1KPmlR5uLDDndGTfH/zfq4kj7KSNttmhUeb9CEtCkdSP09pIa9V7yjUKzvZorSeao8ap6TCXAxAKOWYyR2MSvqGjEl8upBXvzywRPiK8xTIqwQqn7hqmNKKIRpRVz7WubrXfvsIQSod0v4M0vex7tKFY8OmbRD64X/Kam4nBOyH4TO/MAxmHkudeUamBkPI4q0p8z6A1w88q5OmFFPHmQcWElvoLJxM9nuGIL9J894g0zO/Hf/3oTUNlGxtIlfv52gw6qmbNwfls7Fan1t7pEGIXkKT1bnYBNxFppKI2bDWlCix+Ga0tAfmtMYlxAVAsyJD7iYiwdCTyQWe0w+bzygFHIibZMfzcUcBT2HDWQgkGGZ7lMnfO2wiFUNHUivisCSw93SWXmzVr9xLmEzkSSIhpy1Wzump2Uf85pko8PCEdkAmpmWkVShVdBhY62dV2+HaFZcRyUSAaEy2xQYiHMnuIrJwXgweuXtQw0F3zCLB3PtdGJB2o9r5ogQmDrRUMvCx9BM5MtMwI9YugrDaj/EibiKVYLovkR/eygHyK/MYy2LDP3O6SnzolMar6jvxUGVM9qGJZZxXcM7E90H3/2HZ+6IK9J8M6UnxUAamnbCa9Tt1i6icNkwSiQGgKJOFGRFjBtSPLLhaZx1oPuHRyQexjaGgVJTmm/3baKX/EZDmyp0vYPxMBjbxe79QFF6PaPH3Mrwf428zDuZQXMZE4E7NCRNzH7ER4WelfW3WOcKufAL/ZJXNZl1jV7l789jPxZHPNgDCUt+ynbHqwdLG0sSknZPT7EqXt66T4xk4pKeSZeIYZWDoMMAJBpaUeHbiGm4RIZ+KKQqWHwdxYg2WR0NYLtoY6qudP6If9qB/RePXaJRxbR7zPrc+QXasYGGBJqVu4RLg19fXDnwhUsnLaL4y38075TmYd6GCSwdCGPMgV2rMoJ+ongs5cyOxEjvMWdXkRzp4TObicqh+v3Do/Ed7oYTNHzEssPkp7mqaBpb0evy6kRKEgYvcUrr6wI+cUtJp1pS6xVtkABjZef0OtTzTx8uaMSCDFs4IPmDwZaGUuyantxwCO0ZR98d8rAz+3em3yIl/6immWX5obe7fmzjC7TMxZ9c7ZLZbZeHnSQ681FRIrQXLbRHt3RcgtiimKhku9rR/zJLkwicUO2czg7+APr8amf/LnulQPObnPlvs2CgzaexBTswG1+bq9hHwq8vBuEnsv0SRvRYD6ctUYLOdjt5WdUWdgmTZz4ksdI5s98dZUkA0RSjRhw9DseZ4Fft9rv6dDq24AkMxl/bxCqWrG3JsWI3D89REfvGtz5Lzo8tPZd9ucNzVEfzHYf9PTCBjSjxgYBishbMh1hjRrWfqAT4COWVz6FVIcuarTMoVHScThQ//TqkKsvd9jVxLjajczakYEDCJLlsksnRB8sl8vYz3s9jHCZmO3hN/NRpQIxEW6mBrzUiW6CvG9I7MuehsCn/AT+aWI/a3TorG+bK3tFx2J6NFmLBxFHQPU/+7+TXLt+Vtg+fHbhYa7C0n+WleCa4nLVkl2fT3UU+iVL6F4jawNgKvnNUxdFZ8FuQqLbjSimXzRXhcM242thQD+Wyvf4RKj30o9+NHzWvim8aspQSO1Io+LPaEY/pKhcjXDs1Uno6eARNROFXhy6syAmvItkWq13hzYMOHm2MyBKkJEBl9iqvQz3Y9HnfvzLRge7ytZsmMyelubglFB2MdVaTSHhD2ZbwBoyX+8YDEehcCJ2Q5YOxGBRXOJDuVfY7Vexz4BdYxJGQePaA50iqbBLcwUnQLMNe4UCs0v3mA+mUz9325WiD4L4WpaQ4JEg4Kh3Ran2rVCp9jqvfTYoq9uFyR9Xcto5a+OYcOTGbmnEVroo1CpDY0IV3OTnbOdlq+XiNsI1VLJnxo0n0nEbh82kcF3Nxw5pCxacdwyNs5ZGj3Y9w1QP1FIyL4aId60i8X4lMzHLGrM65Us6I6sDMth/q+8zNWE75LOK48sq48TWGsToYe7+Ev2EU8r3zFO7gHSjEcZfGtuWKwEMPoieRrqbYT6T8IhoQ7kiY3NpgTA9OlzyHEAu8plBmE5ez5XO/Gfd3UKW9vnpjApKIDHTfZm13mzbju5kDBQlRMkOgK4RibcR89ijplCzopEusZ9xhrl121ts0lK3x2iqJGbO0CPg2kppGTIBEM3NY0rBSt/VaeqFHSEfB6gEH45mNgmIxN28mb1EHNrCJ8fabOLAz2PgMB6o8SxTY3tH5OXCFhkTGKa1LNHPBGKNmkpNlChKsdnIcFePy6Bko1oazffReNmXzXLnXjX3atrlDW3e7W+U9HVR8US1aunmtDHyVhzv/TkZhACcqdxWgbO5Rs1g1sv1PpqWZ1frwn1Azfh2LVXHQ1+m7foxQhO9vXu8muQ2O8tEi3GGLQNA57nmwxIl+pgfU0nNuN6OWQa5zbLEN48CgDDaxHMU7twYMt9HoTFNqt9zJ9Sj7SePN87ITN+tpvrY5R/4vUqyDDaTy0dUAtkWZsINsf33lodJZa4/Zz0VIKsQcTnxJIuStoIqhPQCTIhPORo9PebhwJW7jRKziO+OqOHfnuod70pt+XIU4OM3QcetO0A6S15udpfyo2eBF7X7ys9vAY6udQcJO6GXhYoVSiYBL5sIb+ydkgoISpTAeNFRUTpOwRqzqmXx5LCaefLlbiK4nBP01KYzZKmYm72kXjksAACAASURBVEwpgjllXv4pmjRzcvmwnHga1qSCaxQzFRjmhkgkqyCWxPzMkv9F2WoSOaysNSVQaePIx8Wf7AjGt/usSEGkWOHEf/MCXTUhHTH49UUkvDImyonKXLDkwvpm4weStV0it6XMEfB0dG7LBll7CEmQi5m+gbDf3+VlVad/yJSsC3O98tDVr3ebJrzOmSjMXLc4LT8tdf8twR/xeKpYro3I6SRVKSmZmIc2PjmTK01DMnckDyfYj0bRzpTdXUWBTUQRGdTq1gy/yA0LdX3XLdhlDNe7bWIVMzXz7s0SXP4Mn0YvIfFp4LCV8/m4MG5BNq6FP3bEVmmfv9aVq/jTBLZoZPASktymvPv5J0AvhisCG69VccqtbtmrFzcPTU+pGgM9SYiwWRUXRzAWbvwqbrqrj6ta37gtOf5EOcUrPEuw0ScaZAm0HbE+bVMO7K9EI7FEgmEEppBLFn/xRb/mQdxcB0LK5XfOlhr/9TWJJf+lKcUGZrKiQ+Iv35qPPhhiJvvePd7/n6OazSIh01xMuzLnklsgLkqbjkmRzKvAARIxOTu45sMZ81/+3kECnZLclbZt2nanVBXiqlgrVu2M41I8eeT0oFN8eMvO5LUGyQ6sHC0BwIf0HE1HHihEickpIp2hmwdnzaAdMzacHfvH3/U//Wl/qSXUTNzubndXxWyGZ+mt6yI36QvemHIYTcHno3RvHqVis9u6M9BNGL5CjEsafSYCpZ3zsvlqR7h8e8YER4Tu8Fn1rG8Xj3qtF7ffDEQb/Km62zZlu7sxq61/Yaf2COyT6eR2r9DM/pxU/D3alTTn+DQECOK6ABo8CjnC/adVbuXwpGZpzum4nF5H7triq6RLnfMSPB4Y8Vc/eIf6yc/0o7g9rHfsrq37s756ePm44SQeMD1q8UjLzx7bNA7DNiySg3wBxIYo+Oa2hDjtnY76mDJAsoqE8UTzQ1BHczWnqb/pExqeQjT5Sa4q7BLdLdDssuQwCmoVy8t7UglD2aYXkwQLk4qUdYXpBF3uYEFa088bBnLxYBVNS+xgwnbkFxaQmNtvNqarsSiufvGqaJYwt/VW53OqODUwU5E2qeL1o3iU5BpFKd2QPNrgZciRoBSFcXyF9ACREu3ckbkVU8ZlooyqeGAePuDBFp19oCzQJnOun5ZxZSkCzcW3WedRU4UJTT74E7SLtnujek7n8pl+WkueBeR2kob60FZHkeWFnTCFatXqmoe2wCYIO+s39kOGiT4LxV8yPmgU5Dj4MxffRu/Xv1O4CZIPZpcQ3FS89i5A61PJs7qGpQcSt15FW+KB1jEZCrKxFcdoE84WQGeTzFYmxVcKRzngA50pwk6GCTHQFbbx571YKcZ3SVlyWv4/rh58gLYLtJqEdQPbSxfSFBzxhzvD872uDWh4/khxgYiVSI07UUFyay7mMcrFjpnE2DkCSZ+NnqKSg9pXcB3/4EqvqBI/2qbYr7lJYUqkSMFdPUwzejGG5sSSWJ889aa6cAIC5AbPNVw7KBkXH7bS+gWlD+9WxTs3YSwe+6HpzlqDh1olfLY4Wx5QAylu//51zNcpVUwDhVugF7l92MC2vndnKz2ZrZyTtvGFi7RwSIArLvtspAJkTU5JClHEwM6urdYQ6gMNAtPfs+vDv9vsRBnSBmMYMN7muao8xplTGPSipgnBOIPPvaCdwd2Z2rn/EmIWTpSYjfMRWcajpNm4itY70X9h76AwO2DEuxzpJISRWfHCZHNczHp8hrW5IKttCtLm7BKSO3uslpQbuJqv2E+U1COW48lj978RuWFEaheNx1Yj+IIEY7LmmbgpeSfNAc/ByiPusZ56JpW53ifoBP39zZ4fboP+43mUIYoekVdDK8kOXC8h8aPSIzleEG6fDR6GqzYsihsY33y2sSAXDGxt86CdDr3YyphzymMr4/2g3Oyssi8+JclS/bt3plb8D5qlaRbRm/cl7TqFgsUXDCjSoAstQ+xBj8GRdSPGNfx9GZgb+TfmTASKUCVMlLB4asUUNiw6T0Ym2FZUckRHQ5qPJoqjJtrubgNZ5W9VbA7RRhscAHkd2Jbw0kelDJZ35XTGKDviO8jZjnoCjceZGPGccxnblcnIgmShgqeMDO/snYix1geV18edQklt95miMIPknRneanjm8nogLid8ifMU7bE1gzeRMo1yuIBSKjx5ke5irhRItt8itUHXbmr7nTVf1QUEDu5Kv4KLD4tuxG63zTvyKwpU3Fzss+xeETLTqcfoKGDqjWrgr63gcI00JwPChC8Ys9soz3lH6tcOn+1258BUbLilDg61Hp8xis96cajbvW7zwtg2PvLfhDeYesoPHUkVoFgu8QQJsCynUoRIDrpMWmvdInOodoMuK7NWCuHItDpnceLHyZ+DJLJEZGumaHWBHfW3RVwNML7NSzPHgVQh+WKapXVxYsblvQosnes6/B+lPP7S/6ydUY7kKBBEL0fJHKClukHLB6AHDoBMHXuaiMwEbFdVd5vR7OystNoPhk0nmREvQIivLCsvU/nvp3N1NvuowO2gafDIGq6q7e8LzdAZhd2ldJj7lL++PQxg/FgV7DPLoDs6+ftX9HB9P95PMnP/5uhYYnbNcY1xoA7RuLlKuRfOfbDA477DXniOc0xKignQ1fmapqwJ4qOPx/3TIEhQbTaU36bd4k9r2qR4NjGQZhF/PK/E/kQemPvUS9dExbq642Kp0p6ra38RCTfWzYuXNejCtjg0wAf3HfB4DGbynVfp0teO7NeJPIrPdQid8OYfdRJ90AWvPS3Fvq1C85kC6PCvJ65HFyrlv9/MyLzE562UzJjc3LCj6tiHQVRjAilGEYpEGtAI8dKMomxNJj9HNvhptdgiEZwt+Bvd8Yf0u7fr6SAvj8BrzXDG+sILFf2cuXhmACbU2klduTxP1N8lWJLl2EBceT7b8q7QPfqYJbhCY2KgNpgbXTvlFpN7e7MY7cY+Xl7LvldpsgQ3P+n3r5WslLHrL/WJgXXHgt44CAlIJIMoEFUntCj7uZgLiUwrs3y0wfHf1qM8ZAu8WyfJBttIvpNmSsfm3ECMvz1x7vvWVPjn4woZ/MCYy2jnAH8SsPyQxUNxxRg2YuMXkcUH6FOkQbavXUo7+GWJMV4qFnzdJTWFfU41hZnXo+09CDW3INcXpfjQV7wy75szd5HFncfVXdhYkMO2QEsRCbNCQ+HYpBV86NIQgqtpdelaHVaB8sNiluYkIuDtYSHF7Yz76eVvKB/5yHXVuw4N5vfzAs84TDAZAl9H8iTmcuDmCnoK14qFj4ukk4tvRsWC+vDYoaounTKA/Y/HNMfSNt7ibprpXAtKub1fduSmz95PMbv5Wvv2Ba8pgnxfiIZNUy8RbxcMiFkjPOBAKFzwD8rhdokNJpguXOKEt4c4dGfVYoNm4oT9IP3pfDOvKSqjLyyfUNlGNCamEinha5c9ZD7oJ3iFudSn4xkwjxCJ/1kU+qN+8p9J4H9VjDUKGjiKCRvord3ijvlhDlJ3e5+o7Q9lOA++MD949nVOwVBRXGY+7UIWyWsNHE1mJoewrR5qxnSixs7I01knP20dXeK1OiEKOeko1lmmMMX1r928uPH47fn88Vqo4vtCkQ9NcivQ38fnnTbGIGtXTZvkDuegUkEJPGDwDGZvKbKVwFKUiviiKMHLncS49iDkaiLhyqJT+LlrUdA3d3vrxh2XG0MFPuI9jJSZgnifQaxxhE8kIajw4tKAUE0Hi1biOiZeWtKwjSLUg1uunzMmbUV95nMSdLc+U7DTDd7azRW3x+1Hy323O3K7v8nQd1IwqiGXsKoKA0IEMcuEU/tBUAT0AjJxijoD0tFlw1iV2PTFl25xaai2aTOKjSP5be9Ycs6QSz+YsNXbPECBdm6l3qXEK5zYFmfP0pyoTqmceEl5LrIPDQtJCdRhdhDMdEzouFwmUIgeShGbxaPYmn9UsSpdT/F2VOxPx5m7TVKzJIHwGiC28tRcwjhK3SD30OZ0FgGQ5A4X8OL9SKUptlZq+qoUr5y6hoWto1LlEriG4Sm25denBx/Qtzck3ZFo9+Q71+61VIzvG49pscJrfPAKbKS8qpTiQ8cEihJft6TWRVjowcgWvfq1ix2HexZEbMPzzj53vYh73IzeXjn3vZ10HolLR6FK/ZxxeJy4XBb3PqF3ngpuiyUXtyhfzkUH8d3UJpYx+OviD6UDrbIcnafMHMO22yF/vNzu+/2Wf+8pP3F9yDiIHCAJynV4NMuLuT5IwI1HDFh0mpECzPaS2jJez1orw++VmOfSTPHorpOAjhtfMeuxULRe4mcj4uE3vj38vLONB/b3WHB4ATnWNgIhP8EJLl7ZKYtx7+psIkighCxHyz7V8iUL87dv6MejrBMl3DIKejTaYO53dzfn3sox/QBTOQlKcf0bjyskyonrNhRxSkkSlIRMTPM+k2egv6zvvZh0GiFwDmMTN/Xr9TLRxCrrRHANk8J2fbG76TfvRUfh+7G7e4Z6xaI5N9K2BB7IjA0ToIXvvMLqbH5nqDGhsIqQFQstdwR5pN5efvmca6Wg8W4bt/wXYQk94qqL9viw1sK5N1Ro3w0k8kmZ1geHBNrVFqLuoKt42yOJsdCrZC9nMZPjNtcJUI7ywFNQksIB48y+uPeFycpjmzJp23qImG2gxWju3m+Usjtu8g8fPG0oKGklkyJXjxJW+tBiOvoaYRbtYFahMBwFVzWkFjhcbEBcYke8++WPrwNYhUCKaYulVebF207DPUA+3ubC5z1Wd8c1X5xo10xi8d1KLLAvLuzWCuRWsvNIKZSlqTLhx0XswaKLuWJRxCYMjlM+d9KriJ1mzhho/Wxbj07UZhGNzyvEwL/Mzrz7/bq0/xML9NeBZYW8qowaofkoZCwV5gc64QtWU3lIxqkqnMCnGLuwwDS1TOgD2tYe28zd3TCT3782Pl6+nPPBc5fdUVCx6BA5wR26LH7xdSpPUE1tL2BpTGJjBN21OqLDIjJBE8UXDVgrv/bW/WAO9K9altaRrjtvd2dbj6aRf+M/6K/umbtDQUs2L64dW8icvPmFCqDcYIJQC1azaI54dCj1LojNrhPFx1aO/3qZ7/g5NsYPNd59zhJcMSt22+3uPpqt/L3HI4+Pun7Z4WW17+lyLoLKDBC94neFyGKm4wpPMIoYU/IDI3M7jKeUUkvpOCQO//5r97WrxGIfnYT8sHnxw6SZ7mckoP3K2Z+mwg9/BkVYSx75rVmMjXaHwd0mMcxxxBZIqcGsLUQLbi0DojgNT7t0fUgh6a4rnHcTmjaBDR47Ck2W+Lg99+Qe1kZ+RFn5NiAqNjKGxqo+8io9JXg54bpYQrQdBxVGDas1YpH0Dh6vNsQNAZ3mVWO7xY9Zw0xx0+gBW+5EPzJ+Nmfrru0e8+FHpWbQzSj9HWnhOom7O+Ia6yyNgZd101E3IZJ8ICbRsLPXtcHPlZbi3v3aOREeEqG7zouxao8P6yhk63x7OQrKXcN2jBc9fhiDWu0C6nIKFX1HJRCcueA0kgQEY0dVWeUkGjYziUoxTjt70qUKcR9vMYkU/bj4aqFoPoSnPduP5UDHSgJLudYJYlOq54u2MCFZgfwa6Lbj5eUQCBA2Wp6LTOQF69qcuDP74tjd4lFhfLFQfBKrkus4s5sDvX50dCtRr3EeTSuYeys0t/rMCsQJs6moYmKEweMvGc9zxlYnazQsMbVjiYzuUIlrstzWX2FTjs3E/TjLlCHFTnF1UcK9dcW4/9/dgMUvQlL8LlkiP8+XkDrh60iNjMGAIRumar5lZ2fYk8Ki7Hg4wcTsnJT8nGYNie+7v1OYuanxbtIYqOGXXN8YO/fx+1LxanRf4M+VPCUneRKBimIGemgSjUIGk5yr6uI7elUatBOXxj/30UD6SEXkQB0k+toYyD53vg2Mb++0bCPtNY+qFe+aS1c64oArb9r4Kp2oLtIgBGihuhrSvI4yOWkrSLOzM07iUho0Ur8HAZ0eb1TSudpHZ8ESWkMhpLbcCsVTNVDeAX/yGRZB6FXohL3AzAvTyh2A2tW3L0JXbu2MkRAl2g5G0ZgDFYP80ClqKf2VKXgfbvLXfqCJWyzA/nkSbuKX6h0e9h7vF3d+t7bz59ZcfQliPwdKcdb8y8BVaKhnjjUHg+zweGaQnZbhRgVLQ/rB5Snx/ulRtnmLpVVzPXjCI6nt3dYuu31VOJO8dttRIhwBrCl4O/sQNKFKlh106Dr4aBbKq4p86pJlHBiQzeSZf2oo7ueHXbf8RX3m08ZA9Wu3tTrR3eOn6LDshpCqfAwO9J1+rThCwgiDRmhSJh8TczZ6nV2QyCowMRfScxcJvhTvgTTEbX1XLjYTX7t6TIfuQ2jyM92j65gp6DrGx+3lIyPvNVb9RH5Uq1TQHYKeg4pdM1hhyA6EA4x+59peyAcw1zsFIdDSZmw2YUsxThtOfNltFrfHum7zbvEnxa+r6Cj8frH0phC3S9v5lg5OJQ4lEsUpYJhDsc3JD3cePlgQPEcTRcMjyiKSeLnFpRtOlPiXduLe3+N7d43RedvWY9Ytpk6eI/n+Bf0q68efVIQTX2MVZ4uXXMbGJL2ib0vfFYMhNJiyMVJCCB8SfwmweTB7fopxAMdPfzyzVDBlaZ1FuNrUd7dDfgwl4uP5xqNXsj1fUXspEyCG8XXnuNrHui5FCCiK06WH+EULL3NZksEQ2knHdEA3Xhyz2WJJlCo44ykG3TYI8jSF+e6Qn3duXcxa7jfPfj93S3p/uRTl644rOyyfMTdm/Ay8YQujcC1HqdFGU7dDKnaZ09/74ru0FPdxsZTSkVwzgTaoHUWX8Pr2Wzd2F/6VExo0K+ZVSXKHY29GKoKkt9K7D/cBuPxCpOmJgjuH0sUhxde+TYZM49/jmIx5WZnZxzaOszb3pqHYS4p3p5+QKsHEy3rJCzMD8chjr4yBvNrtuOgQhArmbAuXdkledUWi10y+feFwv570xYJ+XaexgRptMHfQzPeLu9wpL/PxYufjGg/zCMf8d8onQGQrUGRSZ8yGIgpALKJmBNVYxdM33Z/rxP10Bd13FJPco5wmEYYnhSK398bH7R1d0HWRSc+Wo1VMnALPHTEeVotTy8YVUE2icjDIjC1EoyJIgHYy1faVnZKcr9The2uLY520Jf3ezVgsCbfG8LodM8nedh/PJFZ+dI/mHmVl2RJVMZHFxa9LPJgasdbHENlbKf4uG1HomEvAFF6YYCkddqB/k1jdT+YU/bWmQbeM1JoZyA+pFMPn7q1uO9slPpTkEddf8IgGtgrRa9kvICYAh4DSKw1xhceL1kr2dfy5qMSq+Z2vSTLvz8bFkXSgf5rHNnF312qxxU48Jznmc+/zyT8327OItgsC1r5vMcowDxlQQbQVtZeIQizGMYPPpsESRz7H5XXHF2rFmdlD48yn9MWbORGofnV5lFK81lr5UXI13vIsp1v4gg5skGtvAciSI/lOtRNMKc/QFWMYBBZFqxCSptR3E3s90O9mmF8nj+hS7aN6yFOaNv5JdSvo/KMaMVr0B0bb/j9QrCg7TokB/qlGsCBSIBNQOCnIkWHwvL7qeFZQ40ULWCewuttVPn3ejSFLF+G65h5FVJj/EeejB9P4AZ1pbVxozztMJULJQjV3HAFBXdwS7ZLxwiTyQJPg4zAY7iIl0oWR/FfXst1HxtWjve7WKWOgT5TirbvF+XVr7BsX/vm74z9rV4PbNg9DL+fBPMAH6AZFDmDVOoAQ+dhfxEdSlOwkTexhG9Z1xQBVoMjH94NPQ2LHxuY8aMCbn2eNSi/mcy5qYM7imVlwttquJZHlSlKVjssfxIketRNx5GX2rXGt+rff3zHY4/R6tNLkLPDOGSb8ey99xpCROw/d3J44hdz4qElY3ITEpJlTRrmXmDXMg6foJSUdNgyKb86Cw1Gf3St15y4xS0pWaYSg0+vRzdXivlX492dLtu6Ny65jKyQwBdtYKS++bkJArOJNkqiU6jZ6lUOek8BAet4tufXj6NbdZXZXtxukm878KlHYXdWNA4X7zU6UOuTn+IuyxzI4GAUnXIsH9Pocj4vNErcR0JZPuNe8uTP2j1kTd+4eJ+aOtWvZeiaFKGp+LpI23n7cLZa1B/2F05Z1uNuJcruF/zIpfoncKsJ+H1gbe47OMkjXwgsb6JmRtiTE7WJOxattlMq5Z87ztkPPvKr+SwcNxQXMTM1YIvo7f7t3SNiPdWkSUK2eOWjxhfQWC5dNqy9+0WrPHvqJqmhMlqE0NBDp5Ow8HHJsPIqkSv777ZK++KaZEzzdTcP27r9DwzAMz13oMx25mUNAs9SNaEqqL5dslAXbZ971F4l6JlaVLyuHd5RkWzpzh++6uDNzHY/QIe62Ho/v41Zc1vbtslu8id0g9dzX/97PIJlcndh54NXuuHpus5VVXfSDl8I6UolnVH9+CfiZsUuqY9w8JxM+22bUSG3foRRhBxCH0HM03WbpGkj+5rQe4lyT33OIs2aMHnUXWR23/bg3a2mujioqrENO1aRUQez3Fx6kx6lDV0klnQEogm+IY0Mqdhzu29Z7654EM2+q9fjLCdPLD3uhLlZ2Cxdl5m4/uoraWNRdXQYBiM83iVK0QKEEX6WStPwWE3aU1UlzP73DwQ/QcVeCew73zpDiJKfNbvEAA72KQCAnK6e9zYdkXxaUkcTnqXEpUymaP2yeCKIHgyN0QQLNnFabOuRP5YJLHMYRJLgDN+sakTaef+6EP8vqEcEoXt/iHhnO1EtrBjPHLAsP88us3q7skAmzD6yTQATStJQFCGZBWqA4N9oB++P95g63qxzXJ5cYtfi+bdeZJcCW3hsY/xFso2fFYlc8wH99NBFsGs+w8TwjdlT5xIT4YT7t+tjZ2zZ3cv3zxo1DYyxtRSPAqsx8uza10QjGtNvyv5R65DEEvlUM4n5NcHg0xVD0z3BDwGJftnZTQtZo7SRmtGtVFlaS/hCtaEOGz1GBQodn7prmRy12ZvJXaKDvN4WLobrzpeLf0zkjT2+M+dmuWEpyrs4edZlUKl7BgYwz8CCcMEhAK9zveL+0rJpT3lkAfbsQjXqB41793ANteouH5JQLdnfbrU3Q70VhHTZBwwBCA0eldr/onaUw1ANmnwRQXiX/XRwoEmIlikLG8mM11ooed/q6UmDz3NCfuHaocUqmRLgGo7iLzNzp7vJ7cYfrielo81/acAfhc502BNTkFSmiW+vqQ0zwYN0Ifzaut2yguziVSzc2l+97Yrd5jo7YFtp0ZyjFFbX4ZizuXYbuHyDM/PzTGeEdOnFk+FkxNWhBAg2wtlXSnklingViA1Nw1XIsylGJBfv4BvvqsKOxhZGtIrf4Mh6Fzh33u+juaMqZ/jB7ZPMNG/3wLPRyVv1+4hevklUqfsnOHoR+rWTTKKFDrsVhgXJG0wL11pbVU+NP015jx5Bvh15UTrNdl+vR4mkOzYGmZ/pyN210/BT/reCJjsTtlSpFhQWj8Ft6/FxcemuBAprHudkyca0Wl+afewL7CfgtWqU48KRYt99fffBu19xipskr4Yqml4e857Ht0rQZsl8azoa5gzWNjGkmlwQ/TyqhYQrQAp8wXGXhqVgtLpfaANkxx579yrXY9kpXdRSGZo4Oxv+eF+LDdo08LcUePG7d6sUlDmwtvLBjPJ4JFJWeIuxXweULZElGFyzNo6aZqXxTig3yiX56Hi+y5jZ2sruzt3gzi6tMTzPed+a5XfeR90fPQgPmqOjThxQ2rhS1Fc6yttN4FFbccQQNmCpKF9R1h3cD+rSrCL0+SQtx7IB5rRPd4HG7YHf3Y3gxqUQ3v4MohvGZOvTCNcpcKoi1HjNH5GqwD4eLzrMFwnOMEoytVumNhTcBtMK51Zx85KwX7nq36JfQnb/uJX2xqxN0xAs+lvD3Htt7dEKPfoFUqYApn7lGZEzNqMdJYxlrVBXKBP9WnGixSUY/1uTGgbIdRmLQMEQ/Gp6tZiJcZ4XXjEm3bR/c+KKrIHoio8mTpwomYnkSyGwcpG3Scg2fEYNBHvMW2XWotMOcMaVKfMsq7g422D3GCYe4OvqgeTpeZPkhfCvIRwmKJZre14npqEUjR8is58pP3cLdGlVHqyVzAI1WY77MOjvzWcu4sVbLeM7xaBnP65nVqNbgGG3fETveYKe8y0k8rn4usuv/uTkpP/Ep02s6Zge/t2Q7cmo7QsQE6eKDzWrShLhR0H8mnK+VYjEizRg8VufsIQumsq7nQyWODl5RitDeu2TaxtMD9F1k5nc/P9PbEZq8W83YuGUvQGBCMSsaJ84ZZfhngl9YgldmUs/tAiqmLJNM+ex0jF8owGJviRCsJzba4LCFLqvFu/5cFCkopbgZGNOfMYphon6GYcz81BXwXgkAUJa1KGY75LiyC9DCfkvL2riXwhv0WpoTKFu0pjh2yFBwOBDoQJflQN/vrhbLkp9eE16zdxrMx+4JHD/DIppFTFUmwjaUj5d/pqR+d/Djf4x1kuIBwhVytJOH4Mv6XT8xvH1t9YFuLXT/9nHAmsV20S2+oXFT2uDra2ynnOlwKCFrh7HtIE4iBtNVLGsmYWEmtxZl9cHKOT+y3Me4rAYqBhZ/i1HEfu08sOS7MsJ+FAmktmtgoJZi9aZO7Kt0JiVUdNyUnNpXsENx5uAO9tnWTAl23ZY3DkxBZFjViwwjXekmjgxUvhbu2+wccHW7quFY8mm7DdzX07f4R9HMLWc68PnpVV/0HCzOjgQkEcT6WU79SdX7dYaMhjdLCmQSu98ZSGxOxWLwUdyqo3xVK6JbP8ceQm7DtLXFl9bimxC4Md5NQ+7EK6JgzwrKg+c5ye758b6xFxDbxid4pxRoGHU/OsMSCBAF6sFsgVXJtRTfTnaeoOJutOoaw9pZUiSNxmTLj2s20GbUppD8axpFfkEF8pv9hTX8NAt9e+JuW6sIFQAAG9VJREFUYoJ2hmSm02B4gp6GNc8yP6fUmPClOHv+r3lW0RfeaBv+vk5w12aruyt2dzA5d6PH20RyTwaiLhSzNW4lm40jUIrEKTQwDuOZg3Uek6aL1peOWdxij6CTc1LHuxPdhNvPxW6WC6v/vGl0KzOzcIjuZcY1GrZtBOPnx0xH1Mt9gmBqcwd/JAMgpHaT2LIZTaXA6HVF6sG8ynRXWtyBoRIlnfIMC+toyqY0+eC5QnXrUd+7n/tFeXdw6XUn/I4I5MS5uY+vyk4vWpviCXDxIlmiiV84WNYoMx4k43XGDIJ8XMuA79q3ckJtF3tqSgRYEZ3W3P0TRYEGu8Fz9ks8ejQaxZP1Xe6XS093/BJVPlX4PSeEERMzrhJBkpskR5vZ8BxhVZd4TLeaea1fTc0VkDBcrakPPt14hK5h65484EKN0y1klWKmmRdRuO8NMX51i3c63F1Byc73TrX7pKWXm2KC47aFajM6sc4MZGLn0XKem4rfr+3Sl4OdK8zBSrN1a8FvRw3LvOQW32FJIZslucRvttC5hYN5fGLslhf5qyR7j/oGEqzCZiEUC0ohXUXhQ17LYvd3hCPKt0hxGBYdDEm0KbrVD4+0bRfV4puX8m+Dl/zT+bm3fR2h4wpPENOruP4uTAEqfJ4cu8bauwkc+brr4McPcdqcopQWP4GY/2j5slsLsSsaHlmLfPjSxAV77TgrjBGKayB5a9x05/G0L6bOmp+HuTy4kjbxF/q1mb8IJKtHOYaBFdhrWe0F11ns+ue5Gf8c3eITSHHsgXf3YdCBL4wT9HaVC7fc423bnHw0vwLknQh6rwFRiZLWZN4icf828wa6ziOLhNmRtBHqooLdUqNMqCt00dX+R6LcjrPddW1aFIKU4QEwBr34Vyyir3ruhJmJOvxmx0/usmZvnelXHhlGupX1Wh0HSRIQ8O7BfBsAJk57El48q2i0FW6+223X8Q0+Eb3MOaxrf6LBPYNRmu9HLU637SqzhJsEeyBXyAQ1+e8ixnzstwT/CaG8VpsaDkMQD+jKh+WIRm0qmM0mvYOY1fgX7lsIPgxk4uCgzSDdWwix394V64svCinuth70coJuQwf1rBXy+39hWfEbR8z5gQeTsrXZEVrjk3Q5Ck82UYOtGi8KZW5qEoTv6YHBIInYI/MGa/a6MGO/XuLT9jMSKfLbCU+vdN65tjUjFb7DCYAQY8LTgoBtSb9EKjHeuQpj8vTBvuYW9GwFonwP/sRdnxzRPATfdIT2zXAHfFlHcRvizJ+dsCdu259oxC9FcFdq6CWkjBnLaOaz8bHWtKp50hzXeVaoOOmao0Xalf72fqAu969dPMIyhQYkt7gbPlRQ83PRLZYYq80SEY5bCuois4d+ghwQb4Y1DEtU5vbjMSNhybOCHwvRurKryWCwUlErhBlnK/SqMpCK1+9eu+FKazsR1m4dHXdl4tpbvLUzfocEUde6DcRBv/bIanKeuUwUxoUnFkArxAYCBXcPTAKaOVbbBTM2rfkZHVhHTPFNsdTi6CZrk/L3dKCTAl13xvQmjir/Rbdb7RAWMYZe4AxUJeZAiqUdxsauHuxafcO4exOOStGo55I8BfNDIqbntroZI3TGKmscR5L6v86PtnjrV3dXZI+q7m7bl4EBLFaThAa45e4bIIUiP5phYo4VRB6T5NDUYWR+THqJXRJ4vbTCDlrEB9ILq/edl+R+pfFoC1ED34NOHlydpR5Hq/ek2sarMpbkjDeHZubnt3SnwHXOpNDvWxxNvcUZt5jLQhZ4jaXPMnhMsrRbZPSAAsFCcmXJfyL5wA8fTtLo2ouR1VaaOdBPY2eeh4GEYPzSNLN/8TIdGeNp+Z0sBrMwHSjDfnRJGlfOYHHmPR0L7ZgUv6QWUZVclPaHOOZQIkbXMBvoYsTLFzrGysqbJfP8uEza2Eht3O4e4g+7iS7veFYFrUQGn7iu8ERnx33aQtyyLbJXYnwC3PiqtWMCEF48lZanU0rcDq3sJHYNbYu7yS+lMv9P27Vgt43DwMvprXgD3cDRASQbB+ATeewVMAAIyk5TO6ySOrGS9ANPQXxnnPJjzMCVio+CVcV3dL9fGA0bNX9IoWdoNJbMpWKxOPtfTj3OexBcQ6HtgURPKsXKQuHzVdSyunfadss38fGyx8iY0YvowmNja5A2XzyIrv+2NiFoUOHl6Y+jKo37Nfft/yJZRtcbmUVHaYZMrsrQzHNW2SrsipqqEpt5w5RgMV7+8viQH2EJ9ff9iu6ub6cTx3br/A+UFMWjpuRBR1ajlV8jM8WdsNxL0DSTyuKXUGwLOxiWENKme0pFpoyzruRuJkkDqrCZTAsszLn+ljC+wXhpgxM46PbGiddLhdlkZh0njNlPcEe1sFe7SvlKf/eSj2LDlAWxLAr6/bLRKISCcMbsLaxQDH2JB0QQvBpv5EC/q8XHUYrdQbybr5DTLrhjgp55HbjrYexADuIXnjh1zvi7nbtwHoqWx4yhwUlYrU4Qy07jZH077X48wqqoDrtSQHEprftc3kBu22zeH5c47dHfWMwdO+Sp1LZ3N6TSZii2mnz9bgs6Srr2OyE5lChgVdmvE+biJPXitJkOmFaMBcVseWHIfECDRmcxvQ7/WTyxRFvvIZywruiOpIODNnnWjcQSZSa4Gr096nwU1Vkz8w8bYU8bNqknQedAYtI8WkbkixCzTWg7ywTQrPrlHBtnpaHw5n7QrPqNN16+a/cbir1n6rAum09mrmNIxA5tLP3oi3OIh9Ol3pZCbz8JjGXhACx4oMeUfvPUHHExOfgHUEyq92yNOt8s/3D+5yLz470NaXQs8MVA8aXrobKNI2sUYuZbddaPZ3fcbXO8YgzDU1UZRUETXMXa/mBaNvYgWN8HAzc1OW1wC/qWaPFZYt8FK5+ec36uxQlBRHL7Hs/DuBUG2cZjYAdaUGxzFPXlKn83t50vkh6dp0Brf1P7yqi27O6TifxoAq0b5aeF2Qlzote01h6tGtSGgOg90z6eBJT2wPChiZ+iWL+CA/J8oSt5jWIQiiEF3VaWUIDIf6pY5m9zu02Za7KUJpiaho0rK43EiZ1pIODE45nBB81KLCjk5o9Aza+CgZ8vKO2R26NFEGiP9kVkrxeff/qXgniYmvltlTn55ihS+jN52LX10XdANi2ybTpjBaJi6HlsjZutWO9ZImVZBXs4M41PUHwSE/dT2UsMjPdQcFsMxRoZXwptdY1kg7/egb45T5txXOX0zQRx7j1DKwzFvQ5ufk7QLd9AyD+hSCyF9+zCa0yQWSBILLtK2BKlQE3zrpGX68TgErsdZu3d+V59JbpVhrR1N1B0QscG67pe1sLShbA8aAjGVyCkJNKqM0YV4JmbpEUyaF4LYwgny56VOn4zvvitnW+oB5G3O97P8JYQi11v7D2KLxwgRnOuO2FDykCuFSa+ODKJ5SddiZxaXTM37uLQHsVGWJJKRJqkqjZp2mHrM6Sr+49p0yEVD4hRrehYzX8zF38dpVgazUdD8bLEGSGCrsdxr+OCNpkb9MZH9rZHGGhNPfFovkqG9XpKWxaypQzBctYczbwIPUsXWtpKxRithPCOCE0P3U9SFTbqi/I/O4z9uq74pI+7dDvQSPqWfiOsdaDXcWyDqwYUxktqIcWFUjuZohJ4MlN6MeiWHNEJwRoX5WfoaQs1G+JgOe+KtPe5Kj+BIhOs0KVV2Sgs8NMH+XPMJ8I8kBodLsLccuCyEQu7auOodZrAcYW9MDOYk//YhFWEc8xB3Ktwm9mSaAJrTSISOjZuS1PCXOYElZ8Nhj5DY7ayalaVUMkMNBRvpHn7NX1ennp3vgJtKF56FEt2dxtWo1iNg6nNv3bDFCnwLV2mXoF22HprdBWzqdEIpeukalVKWAydZ3zg9SQZxszSGAWKlakYLWidoqCPImJnmVhil2nx1YNl6RPAHW6pNpHi20AUS3tUam3K1jaB+yOnVlnzBr/g3Clgs40Sav2NZzCzNJPkSyz6fH52hhSZeGoeSkoYe03Y7dhmpB7W46fX66LlkxLQi8pFjDaefHHxgvwxiG1Q44m2tIRxlRwWdXOy2mVWCzuIvQmSwsw2P9kKyIpLFkZdnt4mBMRM5yjpdNatMCbStS1n6DIa+7bSQess1gfLuQ7gttixmMtYPETe9051uxNEGFcGCpyOuqSrQVmOTGy+2yEgTk4lnzVqLpx4s7+gBN4l4lFYptYlaX8UoVhhD5y1Ii+QyZCHN3r+Yvu4XRmz/G2bPy6GaiHi2inVycw97IwuhmPxxJCLH4ZiyT1Uz3yNlAnws2pQrb45PZPNA3kQoRx6SQaMWUjpfDjfy2nXJIvmIpCSuUyhYTHNRVUPIMUWUdxCuIcRv77hKZ6H4BcPh/dXYyx7P6iiE9zDahQ3l7LS3CPZCCwbLjvfhJWRlRk2T25/b5KIqDbuFCFx5LXnE8VMzpYFxQRjJ6GLTxpTCHOmdJV0btuGt10g7NEn1Z8vj+5tcFsitX2/5twFix6IJ44ha+aR4yoQf7TkDSaFMtCkMtH6BncNJNsejrgNVmWU14g9BIdtGyfQ4hNm9wsasAmWkfRZrdg17mzsyuz8Vul4eR7+ebVoLiXMfb+2n+tFevS39WKMtR3CD3SiOGdfN08aJ0DGNYEBL1serStkOqOVmDs+sVUzJ3Si6ZF52TXzTcKoIKNbfETaKF4qn6KlTPBbRbVGbY5+qBC2PK98LLEQ5N9kw8Uqnzusdwd37FNX2YflsxJGC4w1iIMHzuqfc4LhXfCRy5eEb+ehmu2M1BKT9FvmwVcyEHfXJmbfSjH7Ukvw9Ox7j410v+yCRTt7S3S31Zrd/qMUH2gbd9wJcc3hY21eM1a8anish57Ze/JXQFCceL8jq+XZ87Kz4N+CY4nTqOfH8xeHEuybT6chxmarOo7VsLLxgVKFHX7mlj/TrloeYR5l77zy44VOGFCMmG0dieJVJ2BXrVOouGDDqxoWJkQAYaZO4bl+4wnmxENAYlsYndEhHnkqFQddphSEO+JlroJabue0mfRDYXN5vNjpeDVwvMdt6MXXHZIwya/a8ziGmVg1agzFXm9ra+cIMVC/UE8NLyJGdtizaWF2BS6XKBKPJhDunWhl/5z56AtGrfR0OeMg2qUgKf2UYOXRcW77ANBynQMg5eq/zmWO8MXHrc3KO4pzcLs2Uaguw8ybe7edzLiwL6X4zvkzW5ndwyYpB/sTyT4eyEESzWb0RCaxbU5D0UxvLdfsr3ZrlnDEdaMApfgg0NFVi0c0liSB1phCLGxITalZMsD61c3sBvYvl8t7hV/mkaZkKM7yD8MZyK6affVEkBUsAcrFVh0/2a1ZLgtMbRQzVpQ9t7vW2QY4iuiLLTbO+RsjTjk46tRd/VOyM1LMzuFGPn1NMy6rOxBHezm3O/zgrnmeXbaxDW2qAh69A+FL8WJ/mQoWbfAf94ue4AAT29bS6u0lD900Qg6glqE3vd+5bb6VDbwK3Ep+k79MHH9woHz+5PmlIj9S4EiCQ86I7WaB+KyM/WhQl0Z5/nb5+LqbFPISG5A3ivO122schOIwPVjVUeDDM6L1RnWb26PdyvKT/DKpheU+scXraflK/RnnAK4ANs5Edt1SzCBVpqHivPKlBCm8d8ZXns0b9Ynlb3C/s8sce9ytPhPUpge96CYWg8n0HfiuF2Nns6X+kJx353dVyup4z8/FrGJGteYJGn3Q+9TnI1PJ6jD4TNTKpjFelbfXSvcX7iH2OzZG8SpL/LduuniEowjUKlYOyhoi14t1q9lR7yjY1X+fD0Xu8+NpW/3FR6iE9fykiI+AoRXLrDFHzUEbmtE9lWCvi501cqamrvv7PrWFE/ATxzE2gTYbBxVSoDhXQ6Y+2Fuu6hhyzeEx6atBaukq2K1ZxbeAVQEt7kG9rxiK+Q0eQ7EOWEMWNhGGL1w10+a6yyer/svTaYhXWmrFtZt7HVJp0wRPYByCY8GczQjV3sJq5WpepBkee0/8WRFvrIDmeI1kcFfOFPn3yLax8gWfj1/mjCu40ogMzzPCaJIxT5Q4KFY+/94vf3uVhmJVTRnqKCTKhquwGc1stWMxtefV+sagrbCxRiBuejzU9sCPGIpmdwEUA9MFwAaK5c1tLDei3+BXROqiMeF2NWOU4kwr6JPWnlqYLO/oi0ADTNxIE5zDJlyOYr8S8uwK1V111xrr4aZ9mnGaiSepEPUUpyFeQA2u9id+uJMefl9FBLuuh2DmmjN/Q0hM7KPRsXyQYJuFV/T3r6XMEb4YUZtuh62deXP9LymK4Y6z21dhah8aas3PqAeu+oEUuRZMwLRm7i94Zob1yqYmc9EtAlF/yWZFrY40ZvbDkEw16B076+tUGxFFpwE9CMWHLyUwhqM/fnFlt36E9dM3dFf59lMKXqOZ/IDbEFhTCPbMyojpij1t8bMJoTepvJ8hTF7F1DGgC4bHOIrDr6oCCT9c6el57s2bmukMzeXF78M2XQ3pgub1fF7KymgmwJrKWjTcUEC7m9aOlRX7iUyiSZd9iX5wHTBwqj6RuR7PfmLAlHwoal4zkH9ylQbmtQb3ITiSl+Kgg+7iuvnG/fz8q3xJsKFBh7kOy2f0SnOV0ENRXPUQDH7kGqrp1+pxJ19UGu+LbYe0GXj1isU/vtArq0JTycb++vo6z5z7mcaSGP/E9Nfq3wnHcicPnlvOHQ7F3Mql5MC2DamWvkhoKO0B/A9xmbtnPzHAxGvoMQkRLAILtfO/NLX/3uuJotO8B9sXnJUkuPpiO8MCSAKBa9w1H10N2hSgjbBDiqXaYGH6HB2oKzKgz4UQ/f5qfmK93Y7RjuJCm3DI4seqpjUbvwjmxpv7EL/Mb3f+rMgfyLCu5y9B872uJ745+qAWrNwxsVosMyxFExq6Vkcb1sWsCS+G+SzR3pCZ1zggP+6409Ul88cYJBSnzPnIoR/Cmbjib4R3nMU1HpSHapodP+D3uFpZv2iMv90rC4cpPwQmKuOjOs3OLwcD/P/2riA5biMGKk9w5Qc+6J7Kj3QA8QKWXgDx2SGBbgDD5UpyzJXjFOm1ajkccncbPQ3MDDiEi0QP3NXldRTsHN9DFwfuYUK8duvtzmGxYtw4EY7IwizA27HYEgc/uvA5TWGXUBqOjcZCe9433xCPTrrrve/OaDSa0K+awc+ZJhbPrtc88OYHdLtd2egoV7xm15HXCP5eMYYH3X5DGUMSjoKsV/Z7D+KLqt4K8VkQM0vTuORVoEW+LhgmyiU20ReMkXxVFCw5kGQF+KKAWZu13AqhCovDBduo32ixTT3Ma7lbeCaXnePTlDx3j7hKhLIQEQkj7Airc6iJrEVXcoPfIjZhM4y7aB7i7pLDpRRA0CdjwTslJporuylkAnWLxYr3Tm00hbwOOEta+8kbpI7m9snb1M4ck+K6Nt8N69n1WBcacWX0q7vC9VrORBD+LeOQV/I2BkKW6mRG0VzxuC+7HbfaqcgBj09iccXG0iQ3Ws+C4QsWG1afDSJbzK4qZqcMsAaRS7qbdTTnWLKNYDEei7mzZZEZfsAR95Yw27QR1gHnhK5/q7n7gBkhR5fwiPgyon5DYP6Kfn2Komeo2MO0OJ6mG49SsSaoKRiyJOk0cfTb9tIicaaZ2pKQIczeRle0pCdqJf5+8hwuR9l0vB1MQes59MMX7YmGPWniqh6K3ASClPD1oCtGHIiam4zPftyVCr/gjhSfyOJIhBWtVY0jEseTKaRUOJWzYQ4OL8npBdjlUnDKp/URQhI9JEQWoUf0686bTEQLZu3t3xTE91YwKRRaQyfGwDJkfIqwe0Y0skzF7NhXq7s7bDe9fy7EhpelHGP9K3Ivpmbhd6kYw1Ewt/JpFc/opbxrXRuoKVPIezsIlda8DyWYv2ERoIdWQUE24fCiCUNYK7LxGsJCre5j/M3QUpsvP4bmTC12zoZPNQkGElrCVFJtkjsJbzvaoxOQxPYHJQ1hmrutLx9OFkhbg2KTlEUCZkd3irh97tG6x4QDuQ0pORWNR1fWMhfTjqTiJIht6OkhRIxprICBgkGoElMheWWPLmv0prDDGUq0OzMsgpFFeLv0i2mFFVrZxHrVMNeYUHISO6QdM5LWOjYZVuom9evF4jvJ/g6Px2ixSQ00WXTYXYSRMCQFrxCtRB0pHiwBOjgn/iN7TjJtzItpjnAEXE2nc7zLDQUlfJ+HHC1KoRcN0HELC5rGXP3TxZBfNpj2nhSfNLHUuRzIEgkSEcPKjD2M6XDJ78BUlPjDQkC+kB3kBEequGv50GUfWwdFJYRaFi095wBW88tuBAnHCA2OjgaDJBPR+/CcGhfnbGn09jjlBEpalZCpJsVTRiNCmUY0n8qdZM9hWW0v9nzEks7J9AolWYfg4YEDTLYZgvreCYW4Sxcb1gdnVI5jtjMhRkZiYqypG0HSHCixZKZ0LYAaGDUaNbDiHoQIfJV+Dg1iYRMYirOKlg3J0rKpWAAK45AVTg5jVroLjXalkepqd4l8MostuzeZTqBSz8MxDCzz6ace53CBDBMgxDXUWQ8IB3gE0nDbHxP1uTJfGrghDGSp9liXFWynF+gsFj3aKj6sCJ0yZQ8XCt0ttuI/Fe6JDA+ilB0o0JQX0pM3rqGeUXTiQwIa4dAskm9UKE5ENq1mygTSZozmEFJoUKxDlCijpJduMWWCpNIv0+Jb9xcw5HSAaT4rT6gsKNNa5qLVk1aZXVTT6u4g0UAqSwQ3qxmjEtA0TAjJiMfdh9mznaWr0PLT2tWluq4V2ij6A18KcTKyxAA7miNzkOxmEOAagmtM5orxq0YUPKyvLq/S8Wa/snUEaBpL7isApvZnG2iMhng3mPGuvmQZ+6YlPzSiyB9cSEjLLtDC2woplX1+R07QlCuxbPStqkk1h/zBJSQR9EEtmQnVvbKmrzB2S7X8agWE6X21uddUOX0Pkoew2Eazamd2W/2plecU6y7Xo6tJlZuwMVdD0TRaMWyfT8PoRrROplIDPmEskhSgZzR4XOEEkkKjPtoeIxSyI9ptRJPDRu2njKMd+Xt6c8ykPLNBPmi3Mp8OfG0z5cV1rFiX94Vr9lH5AVoTDlLfSNN/pE+QL9fibLjHQYe9P4Ny77i+90NklPSjz7JmKdNm6ZytSKtbaZr2mrGnWfEz28NYfCj/zd0dfUE7vIDuYyK9Mdfh9ewQ9Vp8ah/4lMjbGL/0NxUFju3x10D8Ed711ew9h/yvxvvuRZGtdWmp1QFOOx0f1Wb03L+AxXqUK/Q+iDre2HATX3xgKj3e0wNIDndsP8pymLTXQskfosNXsfhTUJ14it1Lb/z8R9nH17f/MsQnpB/9rMl+xFD2Exf5LSH+vbYL4gviC+JruyC+IL4gvrYL4gvia7sgviD+v0D8/UWej173947rP3+0PxZxr3ZbrSxtNcdLPI+Htj95RhW91DnboVb1JXd9/7mdgA3vWk3JL9aufAe9/JkrxH9+v7ZHbk9PT9/+vrYHbn+tEP/x7doeuT1d28O3fwCQdoBnJ42qsAAAAABJRU5ErkJggg==", + "e": 1 + }, + { + "id": "image_10", + "w": 194, + "h": 158, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAACeBAMAAACSg8iOAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUdwTP///////////////////////////////////////////////////////81e3QIAAAAOdFJOUwAgTT8RfN/DMKRgCe+QbDiZxwAACExJREFUaN7tm/9rG/cZx5/Tnb46DifHcxwCQjp5Q12GUZQ0BAJGsb2OEs9ooyu0FOGmq9eUcaiUJSNsh61mbKxgHCjLBEEYlm1lDCMn+2GQX1yWNhi6I4PBxn4QdWTdWeb0/A17ns+dZUeWE2WDsbF7E9+Xz/O5z+vzeZ7Pc4LnCICv/08pcdLTu3yQB7jo/a3lRdOZ2jG1X0JEI+Wf2iVH5qEsnZMA5QXRpNXK/RMy09PTNXEpnT6cMEmja2N0rXYR7i08k5DqXEqpwwmBMZC0DAxotS7CZLYvgjJMHj55LEMBubhYAym/psYHRk8CDIwOuwTqFkmlQaF/3CQICvWQyqeH+yEMUCRycQ7IPU1L0YS1bG6SwzOkaRcEQcqAnNTIp1DWtKwgDOQ0TQ1w/2fFIR4fpkBK6QFaQ618di2nBtIZNZeZLicl7eRUWhAGNPJHWZXHpPTJYylBkNPTx1L9rIFmniHO3Qu8HCVdo6AG6JhbgLtjkfOgaIJAhyF1aOFuMnKaXcUEigBdDWX72UuXgFasMkFKx+NDpwJjwvlyCgbica0mCGU1l7+b5FHjcZdQXmTjULbPvTSZdqPJ2XEqcMojsKs9wtBCGuRTQ8L7HoH79k/IUVh5DZn79+/XOoRI+pLiEQJjGdrOubycqXleKn9IfaFfgpSh9Ys40LZVOwSZs8AlyJkxsqY5MSKdOAzE+4zDNExeoH0opach96GS20fI1CY9QkSjRtoTgczAkEsg41QKJlOX+nkvXaJBcuzi2j3eWR2CQrs95xIUygIo85q0VHovH0B+Zj5Io6Q/cDKrsDYKMHqeAkJvhDil9jD88bwa50tKiDi/XU+KDnFYBLpd++AGGeLD/g+UL1++fPny5cuXL1++fPny5cuXL1++fP0PS3neMq/0D3GaL/S0nnun2xI0cEN9LkIUF/iE7jjK/DLA1QKd3fuJxq5ld0IGIjafNeszT8zJUSPnOwTQ10HGEv1luwncC+AlfH/0957xUAXxiduzEGrtEeoNsm/BIOa7CWGbj1WaP08BJLfDRXfS+U6AFPUAATyCJLy72oQw7ojhuMEj8AiCoOAcL/QLOGFaN2Hwe8exDYH5n5gtFWQDr9PgOr4P38f5JDn6EYy8BYNXgvMB3ZkHfN20kvTwbAtm7TbMtuGnaBU8Ag1XkOkxFQK4zBNXI6ZlWmrU0hELMaTYlKDoXKWuVdRxhUK1AmCs83xD7SDGqAHIgNu8HgfGf2DRyJL5UG+7BEl/aNgy9VJp/a7PQlY2Zpai+J6kr8fwLcnYlohd3IrhXyVj3fVScRsMG5a26U54qZ0vtql5ENX6X1AtbkVpik5eEEKWGsEV4aUgT46d2eARosSsb8aobWIn6qhwpBmyyLPbLiHRBHTyxbldwrI4QQwLRtYsGKXY63StCgIdwCg9QaiuAyw1ozTeKhFUSOyEnUrldivR3NtLYTvQMrLG8i6hsBvKmw5Ul/ERSL9+DbOCUGxVKsa6MMfIAHDsrDHHc9xPCJEXsTWxs0cIOi/vkD+yXQTQ37Vh9U+YFanlEqr88BfCLOE6r2Dz4BpCNn/R5zVIwy5BxnObE9ct6CbU7R3aUJgPWakveYT6Nj2rumaDh8C5IjludXs/gYIGgV8doU6JhpcPplGaabUOEFZxkzLC5l0U8wgc1p8nXfMS/lJ6FVdmLFXW5/YTZPJfYof2mlKl2Iqkr2MhjI8Fwd5HmKWcGqQ8WnpMbwiX8JKtKnqJJ0mBMMV7KYC2wfmwR4CidQvnFMP6Ea7InEq0qXCB3w9EGMTP1Q4hRLtKxgYNXzE9gowPbztqED/jmZ0w0abzcXRuwhOEmI4befimSTkNRZE2MxZwlhBBqeIeYRAp4c0tiOh43SPQcPhD7iXWLp0Wb6SpAz8TijBEFvky3s+PSuTG3vXUjV6P+fLly5cvX758+fLly5cvX758/aek5A+2hd7uXI68/RxjfeUygNxdLP+6ySXXLh3l0t/I/Py1FUg0n4OwusNlticJko7Y1bRLSJDFUv9tQhTvyPqD3gT7zAtY+pcIbuHoovD/0RbARHN/AZwtLoFMxhYROnWmeOe5Qz5oeATJwHeBC9grPEyb2k5DRLTFDHyPS2luCZYJ9c1E8w28DOErxxvKG9hS6Tk76dXLDyWMOFcxG8CHXMKEI84dNn3NuUaLK9pkkXRHN3YJ1c2EheioIVtvhPEafpcL3w2vXn4oofgAjNJIKy+qk0HEa9+ieH8ExUaMq+xzUVyRdI8gmXMJfCWIhRD++c74Do0waOW/0Xbr5U8hfAIX1dVNAP0RNb5KO+YRFxbD7bAovCa8yEDCqhi4wrfmcog6vFiA2WbUyitxrpfPNA8nTOCPx6C6UanoJW598W/YjDqVyi/so1alUm2ON/bt1ssiH/QSF19h8jvFZgw3vg1uvbwXQXxLKQRNtJJcv8aS2z5uhfnOmuVjk2vBIXe3/i4F+wiDompbRHzHrZf3IIy3RZ0fpl7DB9U3uWoN8MJHAGEranEB/GiLDsOrj3fXIMbYI9Sbi3SjfNmwRb28136dtTnDsl/NwvgmB4ouxLpCdhC5AM5xiH281NyNQxfBXKY4BD6mzeHWy3sQwvh3qW5B/QGsbs3QRuFIzzhJpd5U6OmRFn9sKTbCTrazl7oJxSbNIohuvbwHQbyDPoEl65a5HMQrty2Vvebo/EHIqphvQtW+hY9ktA2jp5fsW2ZTxitG262X90q5EyZ/W6SE3MjDb5HzlzMYP6U1G2ir/FHrU4Bz2JrtRXgZLfLeb9B5xauX91JE/Kc+t9i9WwTf3+Ze/6z3wzAl3lriObe7r/8q/RN/suiwXqHjUwAAAABJRU5ErkJggg==", + "e": 1 + }, + { + "id": "image_11", + "w": 597, + "h": 760, + "u": "", + "p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlUAAAL4BAMAAACgqh+xAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAeUExURTqW62qP4RYWFkuV52t36KFZ5wQEBLtW68Nj8FNHj2q0bHcAAAAKdFJOUyQ4Ai0kJhUuOyNVzUmgAAAgAElEQVR42uxd26rbShIVCOZ5RMGgeTvx2TTkTUWHQB73OTAf0gyC/Rn6CUP+9qjr1i1ZcmRLsr1jK4n39lX28qrVq6qrO8XhdSw8/iheGLywemH1wuqF1QurF1av44XVC6sXVi+sXli9sHodL6xeWL2w+l2wctllOkL2I7jslsGz6NaQ3UVXnd0fJp4xvmGf82+NlYvvQk/GV5zcFuQu+cEPS/fHmxx/Bn5+vE1ei95skE8or0pXBmdw/DDHL7Hx+fXJm2Fl31Z8Z85Nfat6a8i/eJe+QHqAG37bQclgpxi+5sQXtv78bnB+frobEO5qrPibkW9LXly/NP66QuICXw32gIM8Qj9CyLiiYNGtdD3eFYLdEJQcge+Rz7r2/Ad5Kp2f/gkR3Fqs+HUcv/8DwRXSeezL4beqV53dqe9N4JAnxAc6p++PrysOdoM82x4kT1l/fr50/BLuIChn578KK2d6IkwOEvGO36yTNyIMZz44/lXuTLHGpJEnCktDcM4CO71aQvPgVNOCfcCV53d6TxBxk3cjL75Kr4hQdmYmuEamvrjepUQOKnDOYkgUVHgR5J3ycwPjdjBFCfJi8myN3WCjwZrzJwnjFwyHkPEqXIHV//+unuOAb/8TUoucXYrVG1ZPc0D1779E0NwVevX3MyEVjx/MKx5x3SVYvT8JTggV0gXiDzEc02nDPFbv1fMd8IMHSDZ4i7H686lA6omFAH0kfo845e5/AVZvz6JThFIEq/8b0TrmxAqLsHp/EjqlXyJo/eW3EBioufHwBKsvzzMAIv+N5Iq8gu8iWYelvHpCWe+R4oAMekyXHcZYfXkarVJSQcU/+uN7aC1bXMCr56IUCq8Irh671pFiBcsoz2H15UkQQmZWdKGsWDEGEf8lxAqTSfQIq/dn4RNDBRyPFIDxhm9taAkurUecwertKcRK/kZJJ4hUsfqL1ng1UYUfYnXjEOzuGIPEq8gpCj5iVv/zu2vbEKRm5s5i9f4MWqVIUWoTtYp/EmD/jbxibv2KV8tZ0K0jzTV3dptQEkWniFIVAcZIoe+J5dvIq3Za3gdY/Xn5B6uvfnC3+JNvdn7JbMCyQVCXxcNgHAl7bZ8zWQOsvmwjP/WdxOn8+bViJT40XkAlSAmr+ov/RGIpr9wZrN73+Xz1Y4g/EK0gOSyFSQ4S96ZnlTjS87ya/3T1TchRz+K62fmz+JPClQ6CTKwoWFHcw4RtyLF6u/13fUOuofhOdqLiFng0BEXLAxwJLObVmRh8pIJovfULsqlSqBCrjFNgghXFvWWLdVryy7H6cpMvuLsXwSI8FTt1SwRVqnqk+qMnlv9O4t6m2ddprN7vEBk3Ai6VQTkUMQ/AynviFjHrR+QVq3s4o1e/s2vnvE9MulZhxKx7+rUHrP8XB0JJoA/nYhAfgSA7VT6TvLNmmVtHDj/0Ytx9y2D17n1cbMixuoNI3+ybAXaemGkUg+V5BOQQjFdaBeukLW5HrOpLtKbek1XKJhCKsVJVhJCAJVB5748sWI7CcGAbMqzeln/i7kYobnR+zMpVY1elh6dRsP/JWLUxBEcG65dYXQxC92CqZwrF9VC0clUmWCTsRC4PyitpB9wNq8dzFGCSznJuI2B/qVJFFz2r4jAoMejYNsyOg2+7x9MekNa/DkCbjUi1YnIOmtowVMqv40erRaxRxe82vLpJFjNTgpFcmeNP5rZYoDhfJqGK0Rd/UV6xuo8ywkmsut2ipr45jGhRCGJI2XqiaToyryAOgn0UHo8ShUGbwS/nVb1aebpVMF1+ftB0WSmVssBYEWU119DzniPRcwxK+nzVONjdWa+vOD+k6RqQJCeJFKuUSLraBfpxbCOxQst1GXd4BL261TCIaQ7Q4g8H8ac2lIOQQzDxKqzB6nMU+1JJXYt7MCqua/yRVQCRdsDjh6DlZJpwEVb1BcDUWwt0vV7ikRNBnl3O5FysAqHjOb9RUhGvPix9Djv69osp0F2v9QtKCzybJfOA47wmVvhM1yUeyYsaWM65gWCNsarvFDI7VGHAqnsoKWCF+USElz+osu6JX+IZOAZvyKt7eVKUOgxIBGZBKPUqrcRkwSe/HD8+PlJpdMZffV3LjHrpw7vLAOsuR4pbhuSatixYwQpR9FxdqMoX69Wx/VBiHe7gGeobR6Amf1LT439gdT7vNRFMvAK+QOVVzAgP7eF39ldoAahFBalZWcE4K4KyrrPCK1zHnx9SwYpg5WPhvbCqdwSLeVQJs/KpLVDB0hGQM2jByWKQ1D1wVeZwmV59MrigUphw5BXQJ0ZxUYHxQZ8dRxsIx5PPs7zqfim2W5uB5QXV7oxZBysuVNaEhoMmD2/ldYpCMu6QYfVTB0JpargmBrtLP/d9jBrwihHByERdGxa8lEFR7JSghDmveBTkHttNtb17JGEXBwoyaaN19cpclc6ZEmgagZij1WP107KcwUx9wsrtr1c7w8pyzroOqutELEylGLC2NMsH/TgG2zRP/5vWZFB7hipuaoRM1pNfQHUIqcY3PCKtsnKfe4hxcC/AQNthqpGgR36xYSc7OhaqTNttduKwaBy8kQGoN0QJjVeQLXjLCgsebDKCLajXyszIM7C894LlLpvH6VZITnczyQNrXdf1IiclGLGgouswkqlTveLFJoc7+vZd9F3yZK4UV7aOMjehMq/MMIHK1QRcUa9kKieEgcOa0Kt68wDpLgvD7vLzAw+Aac1INbKgnM6IPMGpSp3qFRFr0Nx3j3Gw3pyHmCeCYHmgh7zBKhrQbPJmUGQY5zhH9e3TXjS8rf3M9R3GBolASC3GtsYmeQatVuGwAKPXEmCNL3tepcrocPXEb+CvIC/HoKxzw5Qt545d9B1mdF3roh/5rFdY46+6vUKxuxIpniO1EEQrHms7NkphPYXdBFI9qcqyIV61Nkd4pV51W2pMt1F8ysgHWXVPe6t8rlSgZQXQP3PyntWvnHMb98nUd49ClMU22cIRzwmh1+UQXsqgefQNuVX2xGoaz3qls6kz/ipsqlfdzWBCa9pD7UdDA0orxmZCrW9hKgYJMq23t2mvhmm9qh+HOfUSrUL17LrGVKtVaFM24jrRW1PoVBYYkeoFq2lSrY/GwUt8e72aON1uhAStfWozDNgaG0yU0tKxt9QPp0nVUCD62M9wtLpoCIvqDFvUQbt9A5NK6hmvbGI5n4FQyYKcUqd4lT6OgmVJvv2ovj0cwsP4q7XhDbpnRzXY8iSvxKRSAmgpFPyJrJcs7syr1NBwmNQr97m8qE5D6DokSP1CmQtNyTLAmRyQw4+ZleWDi+qi9SfBS+YBq8r2z6l0OYSxKitRwWTaTONfWZKwxxhUg0WbD8xo+9e7xVx9uVJq9cVqCbqHR77GVKrrcM57RlFv/JBXrbUiH8IqL1o/RgRKU5Uss8GsWV1IRasCtWtW9XzKWJVEK+ZVr1tWv9IQDHt70f2zZS5XaW+/dMGYWUeZBNTMhlX9JBcU/8nkKikhjLz6sPrVbv0M3dbBeaZejFW+OZNlzF5h4m4969qbl/XoQCkMS4Ir+SupIZ/1V7NlqW73aFwONmZbBySTkHkrkKWmqPZzSrAIHBkEJQiTvzpZTb+5v1q06Ue3goRc90xbwqQdYWhOK+/CVveJqb3q1CqQSFHeHHlVJn91Zo7+8/grgUlaG7OprUqzPgULZYIZJ2tWJf9tuHJVcjpYJn/Vjnb/eKh1XosHQF6Oq+Uq7USjTn9v6fLASk1OR1ASSFCRs4pwFSXp1ZHlan1d9H6+AWzOhg277h7AmaCqlPgrtuyW50x5haYxsAiwcsCrcJ5XG4FQ75Yta2cjgM1EcH3d6zDopRFUpwEnC3uMFCeCHHxRrYr+gnhlncgz4+CKPpnuNkzTltmMV5TRSA0mV3WJQAELTpBqRK1KDUG1Dk1jvOL91SZ7ij7DPI56KVk6YlOnWWXdumZl2sbPCJVlNV5FvezFqj9Ur9qTRXHzWN1Ik7rLxKrK63ua2VRgK5dRJ0mVVzM2tCQ5j7yiKCxjFPZAFRmvTlzD5+EVWv0FMd/pi2p4wK5Bwy/xaioLZH+u7pPtemRYQXCNeBUW69VDFWcwzZqmiUDNAr1YBV2/jLM9C6U5dgKLzJX3hQh8M6gzXNMns/O0TL1U1y3oskRZcmUrFouXSqu9J8oKDBUhRWgVvVhFUvW/xBgUXrVrazL3MlZYZStsqtF2FAyUQgUz7UJDZS/TaCiyRUGY+tuFV1flg/VdtSrtwyTrIoZrJyHnlZdUeWpqS0oKjag6/RZJFc1VvLS51DO8WuivujuEIapW6e6pKWGudGuTrL4uoYdzlFLHwAGYjpK96JhXny0GeRBElP3D0ybGEamhDYXkQU+GQDOeUlMo9SgErCLOeUk+eE6vvu7OpPr64U8mIRBOtgWlorF0n3mfuQSYra97n/Kaxg/xKo66iHdjXnX7ixomt6AbUgw1Ki+GAvfuzRTWtQhTSh2GzJVA1MRhsCiVV8mJnu8Xvf7zdhfd3l0k7CDsAvvPInQyApNZH7LpNAmk0guzikowjRj2Ilr3ougBK5hXH1oXPcuret+AuoZY3N1fpUWmNnPqKXk2sy6FdpwuGZepEFM20ppWekWNeEW+PePVXD/DmrpovdMTrA8tr8XkG8jpAhsY8wpm+mBkdqt3n3ylKGj8Y73qrzGv2rR26TONg6hNjrp8crAYXpyCLaC0Nd9zLpRL7JLZSByyXBUUitT7IXXRsLxPZp8gqy+gGM9s8foa+c+3dJsvS2/Qkho/SG9Ou2B41OtppB5UrXrEKUZgobyy6UF3WM+rm2gVaJYsBQbZisI60YY9C9IzhLP5cqP+ykbBoQ0tJCCVV6fbpOw+j7PGnVF3lXRZWVlBq6CD6Muaqqar642VjLP4U19VsLKPeOXW5IP3SQIRq7QVRZXsZ7LpFHa67cIUqRqdgxd1bxpLb1jXCS5W955XP62x70Z1hvof5q4lx3EchhrQCQxtvC40AsxOgm6URYA6Ri5RQN92OibfI2VbtpM4qdTUNHo2sxAomno/PnsBER0+c066xCE6vVe0VapFAxiqJyV9HGU1jqGp66SuKGdoYn07z2p4a2VJH2eOnGHrcMOTqxk/gXkZWhixUDxoFFcobFOd/JnGO5hcXemOjq9f8TvfNSi4ZFAXXdX704qqiAG5HFuSvSBzqIB7eCgLrDBO7WNN/RscdG7/vjyXOTC8pZt7xtSuH182TuiodWUjQlyWzBaA60Exdg4LegGDlpWc1L+z+jZf6o734K+gxFMmPkY4RzxlU6LL0Cn2JWxQNkEFjoETaOeGBenr8gzkT80PvmZuHw7sUpyuFLKK/gpaJraZITJ+l8jlQJlVqOYFGRTS2KgSenugf/Dcnts/R9eXie31GrRgfqR4EzdGFwoTl2jlibojJUJWxSFV8q+c1nhM44Dl/INNjv6puroe2taJ7ZGz8fhesTEUUXvtgb1ANytvv1LVlL4B5ZQC7iB99Lfm7kWQe/rVuzmJEdPrSZpSvF74aM4GxNisHue9KiRq0BxmBYp5vHYyKoRWvzo292M4eFjIGBTi9AJmzge02FRqvWUqUPVo4G5QVZ3SzPIMlCvY1d/BFZ3Mn189pdnYoKGEMTqDm2tWGo4d1wBj4QClrlRmHHBaMilYUYV5XW3pkF++SmPY8baRrx/dgLRP1jiMt0EsQXvjpEApmigXPAijddVVJ9VNuInT23LVrncddWSAuD5v4IeP/mFjmr1lZYdzuAmtpdKO0lU0YJf07qXZfKWHtXduH7YqY8uUeX1oVMB4NdViuwWB2ZQdcgvLIrwXABkDTyiO2Ar6CEz2Yg5VXf14j8npE3XI8pZRYF3D/HPvvFsc0sE/rLxqRK6gV89De0HvIeZ1d/3Qry4uqOgj8XYqO2zr+U1YDMOIjlNYDwF5VVxUghZpVSqxSsWhVSnhIzhewjA7LPgmzjNl31a/ur6tpHrCeUCMFzZJIUQ8VvxDXqyrQJVxVypyeeHiTd6DzLL4Wu5XL3zjXHeWlLt7UyLeIesErfKiGyI5gD0BE+3ssKRT6YmFblZY3gswxvyef8s/+EDFaaCHboTNpHE4xZcVEXtZE/cpCZbU7JzGh+HPD7+Do1j00/nB7LTrdfCeC/SAQg05vaXEvOuMYH/rTFR0A0rVZ3KbGb5tT9VH6/pi1eh7E9L2E5wdomMGCjSxUXseAssqOqaG4F6Lqhf98dTEcl1tzQxPdvnhvrJSdy4+jHmWvQfcWPZF6H+tSB9D5W3G+SixUxRYDqpnQPbOu/vV9YHCktYEvUcfZ51eUgr1bzkzArOFZQVo/4EoJ0P/BHWXK/jvYk7r6pg7OLziEW3CbIEa+lh9F/vsd0vx8VyTXrFpk1BKh8WlYhn14iRkpLCunvHwDsdettXCYpyHD7Uq2ALkUqD1xOK66iOQ+SqEs1QI2bmh/l9d/b1YXb0qt/Z65HcQaJaWVKmYL04IvHe5lE2ZthAVRYlCYXPUR2F8RV1Xh+QhD7uObnjgAvLiIVBHmrsjcBTq4+Yk0F3LrBeVaYaUSkkp9iessxEWFsU6XUr/uK7vhTWWVaOG2CGIPnywv4uqRwh7aVJfyqhqaUnEQEq00aeCB/XNC/AXMduXR97Oh12uYfP/FsE3555x2f1srtJyUrqwGT00g7OKgQ5j0xITjhomOpuvxlfO+bzX73z9PUWDWJll+HQZFSXOV5UBv4pN8XFI8Eoo8OdGUL2DqaIMJ/jV1yJ+9evvQc2oyBIn10fr7Ln2kmBcz5DIrD4Fk6O+oCmCuCGUyjox9ivmM5wez4F8fZnF3t2/nHu/ssx7lOi90S4Vm5OVDqEhmfJj/GvS7l5GzYfeQ1E2cGaYTaN3nNXwXJva+7LBjkUKH2dp2byCmtpb1qjngC9ggbm5U9PSbWQIGNyFLqQv9eezcdHeHVV0e6trKREVH9mprXQYzQt6WhcvoM8Y6VcygcozECCgENEOF52seF57D17f3Kx6i2jS9W48rEw/ib9+DHlc7VZBwWSZ3PUy6tzuhJDa42d4+2dmpOCccqaSiP3Kr6FEDnRuK/+9/wZ4Mun5cQglsEDBqJBf9XewEox+0B3MtjlXOfrcT7P9zX+qDxyCfTPkPXGgKrR20YFqNZV4CbW923dQciCPzme4HjEtEBGNvQt0dCtObWGSi8As7UE9ESPWWrqdV1cmM4K2qVtdyXfw2yJ+m7Po789XSICOzOHz4mPzkTACs+pWeclQwmQdmJRGtBjiBu3oCd9A/Q5evH/wVRjywr7q3SWXo6FXWlb8DLoMdtN9xHVcIVRhmCZpH2UNaiux41LpTBjr6q+bRU8fly9auZm5jNlLQ7EKPRd7M2eOC8txMdKd8Di+XT/zLSWbE+we3v651dWPN+R8Xm8HtICe5bzfse5YBZzEwjoEj61Td6wWHGRcifqRPT2kZC1L8xnc2qXTaW+/Gt50TpE6GXwDEQKdbWU8JKL+zbw2rQcdGoyAGGdTi2KgDQAGE9F+6GGdnu1Xw3NfvWEDs4KYKEfdsWEBmFHHA42q4DtnWXxlij69coKol1CbS1KCxv32M+Fx2t/B83/3ltJw0FSRMTEoszzPqcAmWOpp15CF5OJi1P6G95/H9UjYy2EFaCH9LHqD208f1q8ALED6z3TjqlNFr4xBMN8ys8yEjwIaMMjrjxIsaVFsVVJX43cQvPP5fGnuDf/vqeJ4/qhE0e6OqMasTFjEdVztZpWMZA60zYeulmFRCwk8Zvy1utJMp0/yD0aPx0RkF9akDeUKNiDkVdgYz5rqRVPcY1lGhdCZylYtOYbJXCYBWCtndX0f4JA1Kk1qK5K0cYu+dX+8lx/nUsokYy7wDajPZb2EhZN6FYkCrag6mMQ34R28Dazv2Fn0nrVl3EbZcwzN1U7KolbmiBYV14QwYuiyeb3Iwzh0BdJ28eHAZZlSMglWCpZTNBW4//p7MNs+5qhgqJ2T7SLhhtPsp4XpFBpM3EEySy5fCZ5eZp+yulIrfWe884zIObJfDY/1qh5cRA/mRqFQewTSLOGB0KZfHrO6xof65m7iWmALyfqV+ry0X51vw+jX6Xisb3j8AJHvj67ufRJm1aWove1tTp4H5Muv2GMGxyUy5CTlBO2o2kxcTpFkkr9uT9xQHc6wu7qyLhuuLeDFRwtwH3PJJbZis5WNF1lHYdCVF9bq0yYhl6ij7zmZF+Di9lp+hl4UjVxd884G4D5/OWebQZ0sNC+L0UDYBD6Ni+MAcQ9hxKlltZYn82NC5A/DkBktFxdC+PQC4pRWBAulwNMcbEgYVVWG6klHN68Xv4m1x+Sykdf35930jfQp8b5xZRmQGHMKIt1Kstnbvi45qBF6IRBD2V59DTt8Ac3ilfBrdXW33/n6UqQmEzuWo9JDKz6JQX0SudowFRfLynKISDNruBU8E+oFJ7wQnIO39k3ctc9r+1E4PH9S3B4fe+pCC1ZSOoRdTys3lcZUFycMDWhXZkZFvE5wn76ZgcL2xOnG4g0e5/qmLqU5fMxs0uQ0Jgkw1KogGLNF3HAKpWkeTxx7KGtvVwimw4tw6ptAyO/pFbm1w+PXr+/ZqChfdzg7SNNMPj4uwjDBIqETbaijE8eHxnTGmfpqSnWN3cb2n29ifW/Ya7kXiuGmKcWPb1XVI90Ry5idMnThO8gWpXdPjqobgeKSqrZOGoKW1DT3Lukek/MswP0OPcPwkg+h5qD0E7F/HBPBCpIw44q+sSJvQrIXjaURUQSTYJ+XD6BcwDTrVy6v7/wBuCh5m9z3xjB7ZIF2mwyNVW5uG2Z2feIfKoRxRrjEdI8UWo64Kk9GNnqdfntuz+Rtam+EH0QLeGVlbVpoTMA1dHG0gfH15kRV7DOhQWlbT3NfKvMZvk4v5wevO7+DvW27yXSSGL/MIDBw8XEpvTcghq+k6goCg7E7qJgxoomWupV8B39Mq7Z4B1/GOw8thF1HKxfEgCBaUcNgcUQrV8Dp+/VJY+kCykM4JiLgC4imHrrF5u73AjR7+59jh4Lrnr4eKcwGz9xnMzhzBuUK+cZiZtsemFBjxXiI4JA9EF2pa/24fROXr9Ys+t+basqaeyTQbrZmAjCxoMiczn8BYFAvoNVVUeYP0DGS0xDIYPEVqeV3vmxlWfx5Z2fXWV3piGiDqEsad/uY8wq8F0qa9KqEBO2gN0/dzZp6rAhDwx3OutI45AP2pQ6HfApt3VuFw4AFLCiu5YCdUIrfdGrZvQouGF4cmDLHaKJGWbm6Ol/e8R3cw0dkjdeBiQTr0Yth7EpFrFlIMB2Q5EqI0Hazp0uvsFJKK/3K9AzntSzW4Q1TKOYE6o2d3B/R4opURbcbfXJcgQ9BiobkDnYFmmL//WPg3CQ/ppnPcGr7cZbfg9ety3d9BJiI0bBQn5o25eQN4WviMKRKE+WgpXOZmKwrG0BXj2rS27+234PXF1/A3qXMEWRXZI/5xobCZHcX3aYpd2JAYer9EZ17/qXk5vSwclbgcVY0kAf1q+vOtp65RFB9usUoCa0my2NvOQIJ7KGsDKoKHSjnFKbRaWvtymcbNvelPntW13v6VUbasVsM61sWnzS5YY5Pnjo1dtkCF0IAmK7cgxZY6DZ+fiAYPZ2e25d6fbr/R0IMGUdWryXB60+N4G0yAlhx4qyOiLkOjxrRHIdQIXqpCxv9ij6vOixsbb4aXvMNzDwxDU+LJqBlGntzz3AFGVsgZlr66RgKHba+fpPezrr6+tWMFEFDoV+35UD1LBrBQ8SFpGMmZ8MUX9wMmpwfUGWzoSMFuH1elVattavxuPfgsFlYcEb0E7MNKXncxrw8hiZbJF9kKckoXAh2UkiZ089e4nGlzbpCxu+YkPJ1n65vOO4G5t55BHv5+OGFk/2KYfdOjs1tG3z+cZc1I2kLhNgQO87YiO26Ok0Ckd/um1A2UINW+yojhhifCa6WHs4C67md34XTgVs5paHQ1KB1O38wt083c7y3XykVoY7KCPsp4WIHG7f5LS8GdVSEiP1TqKR74JXd5dvTr/5y58v5dDr9FjeBDS697Tutpius28hGyS/tZg627lt/ReXfedUCQ6HtfNLOurqAmzhyFn2ok3HjtwmIbPGpq6vc2EpiwJWREcFkxsAUNOpYg3x3X0HPeV1Gs+VKnszdy8+G3UWFZw3XowPfK3AxYwxdC0hDNowrq6Ap0CRsAqg/U1mlvWdlhzUyE+eX+gc3ZtGIzAq4KYvP8XVZcnFZEINIGFP5S0UFx0J0mmSvCMz+qvLZ0afLq96D97xvwAyOR2QAA9e2xNJSGisRb9EU/xN3RTlu6zBQgHQBQz/7XTwE2D8JuoCA55PkI0CPkUsU6G1fbHFIyrG8luPkpdvutv0TKIocDmesFKGYLRNjyNBbaHqiSmtHA7+6fvysPBtJFEUP+Fj7xCVD0gLta1R/UmQnXdpSr5skSuNWilBAVj0hRXH1t9qbuHye3w6yceTdXA3wJWFZIZL8M3KsLmBgTZjE9pQhqIUIgaxs33mpWnSaO1/+r36wtM2lF9RTwSJhTwnLe76Ca4q0WJdMlXtEUBRQuEgEc+QjvfOtyZO5ruKii8fu6yhqGqElUGAYpRWa8Idcu7aWBxlIyA9MX+BeGQ6VWA7sTFdqb4Li6tq1u3QK1hf1cFAN5Qfhr6vHMG4p8yY0f0TQlqjCQpIalYbOlKU9FPbzr06sG1iDD2QrbpjVJkkleqns0isdufL2SdFe5u4sIECz+HDs/tV80Ukx8/P5Kg4i2wvtcSWlLVIeWGuOTSCUFk6V2U2SPVODsY1hxYX+s4KYBVCG66dzux9YyorNv2VF19cy2bEpj1YELhOLOc7UPcnsoC1Y3QPaw3FVS2Z+6qzQ1QyiaS9z0whBAR1Xa0bWNH8Qt7cUZC0XR2WIkx3s8TvIzI/WruX3m2urAciVLq7YutPHDaDf+EwAACAASURBVJFe1tKhJTe8gGbKV6J0grXlDsT4x7r983cwDgO2lAbWF6dOMA3s5Bm1aP3KchIWIywJqer+xmJaaq0meJgjdfvvm+IznKxt+LXnoPjqQdU/+YFYfAtZfx8bfP8kaxCpHkNwP8j7W0dOKqs9ryI58Pk5jh+qWVclVCiWGyKHklpCveI7XFftgYxPX6jXV3qcGr5q1e0nwnwR8nsEgGKRhKsqZtH+8GG6Ai+PJDWPh/is0XTsrthy5bfM6ClffVKfAdJDEbAVW1qrcUTSC80+roj0BuVOmSrpAN6ugTNJLxSqr6Cp9p239fru7yquyNCaGO0saxwZYvDazGztGQz1XkSoF735Ch5CYso5TX9W+84/Yn1fzcv21X+aUTH4tFjhIIObgeVU47qWnEXDrKBQ7SXPXroloI5VVo7+FL2+pdr9zvrq/loZCqNYUQ1li2ZC2X1iq8rUNH/DDhfAK2qXU6WzcCiwSq6q7iDt8O7HkL9evn3s3hLRPj8tNDPnPzUtmiH3FTi5K4c8w5Lixi6MF/efVMZPf/4o3dopX30yt0fmOsZqJsgrlbDTjXG1YA+sExPExaZeYa7lKI7WDHk6sCyaTsRn+FB95WshsEqINsFqo4jV+5YELR8VmAtsVIllCALZiZZtjx1T+XIVT6btAfr9Hu4VyP5KM7vm+3OlQKjx2jDCMi17PjqjhvGBgHUrt8923b/pF13Bau58uTT5DD17qfedJ+qpXKC4IiPU6AVZBzFty69F1BwLicEk1g5gbw2qqcCbPXAN83RieX4H/95Ee2c9X30Pb7qEOKTir6E1iFLyQvpfl54Nyili0pxNRaU3aRw02KUwTFdVlekNLCl+jqvfe+ur02i1ivEY4d1SuRAPokO7MZGAoxT5n5aF70IbUkby4SCuMKV0h9uYZUZ/vbX3B1/M7fcmhQ+yodGLnAc6QFZA8etyVqCFBnamhGCviA7BL/ZQX5NLaLlyXo9vWeSvSlx9DheN2LyR2moQRQG6gbIfH59TO4+4LFYok9qfVPoK1h67glJcuXrf+fZBXNQDiwGyUO5hkvUbJmf7Rg1KJA+9cDoZehoxtRau47GmpiR1N6f1x2k5jSF/DmeIPLSRDJ8Y5mMbEr+pwU48WiLxCXs2UF4nnd6DVSilKCqt8nNcfe4ORmzeALUiTY/E20nCDH1SiiENxxDUuo0Sc5TFpN0M40ZfM/1Q0lau4uq6fAh3n9XXoZLd81Te14QPbay7oekYVFxx8akFQg0tutkDJVWmStTxgc3vIMXV9Uks7Clf3U88Ma/HXVGb3ES2tQZFtMHjC7zGlSqQnSv2Y6VniSoqFaY0NUWUm6tR3qMvdeg53hxf28lKmw0rAm1tnpQ2hE9EmyLJNy14UunO9tYLWYLJ8fk5p/QZbm2ezMn5Ck8gaOzSNuvZlmfZbN+geSgtD8MEqwCesTk0B8Slm2/f47QkrrJTuh/TQ7h7f/D+4mnFSmJ8iFwpiLKjpmX751Vmq2GFJPve1vCmTX9ZVUIJgcX5qryFcz/I2b3lJfTduF33w2GF2h3ZCnaLTHOU/Vz/3AjyZJ5CyyouTECtYI8Dobn8zshXpcbKvBN3WVgJtePqdUQUHO2a7kiMUIzm01Kyt1YrtEEUKiqR+qApHn11aJZ7iP5GIQ0Kb78W8Z336n54VkDxDMeIsgcbvfnUkoIOymAjYEfJVHuBXI0eeAQJVcgUSdO36TMnsCzespfr9foZfQbC92qXN7BiPLRP4oYAn8jJ2eoRtGAs6HAKuwv1qsHRKF+e/1t0IEsp+vZ9nOjVnlIENUbpgCVC+FaN3ghXSMAUBGYPihRqlI5Hf3nF8URB9fjMGUvy1e3Ffeee2U2EdD2jMazpQWzjmBqcmJDUlLlsCobaHgmnFFSPs/ecshOIXVdX82lNeDv5LrX1+i5n7i75MuNSu98D+8MmVOm+kawCi58E2R5hKSsjNXt/q6xLUAopw4/gnMiy+HlNY5y36jOoigELXbh9qVqV9/VE4qliIIdFVnZkZrYR8kIvz8qV186p3hmJfo6rKbAq/8HXecj3XRU7Y6Kx+iQ4R8SYNkx0pbKyIlGoednWdNKHnCpES7aaTqdgVwYZyzned57L9jMw5K8t2MrDxjOKHi2w4+RFp6nBdmQPIBJin6nsasxlK85C6KmsnBpFEA6TAV3N9UNextXlvd4cHjJE1Uoza4Z6n5T4SWxgMShDZ9g4yRKzNTI5PTo4dYCs6KAyavY8x5XSZ/j1EV4fx1UaFMAgunJaLNSvHBUPJBIkVY1oD1ljOrtAGpjO+ZvQUDmz+d9QNWieTJPf/n1WZeXBDlUmSmUeHz3rFWKAs1QfwvDGgsEu2AIv2qiUbjubm8zQ8RRIQBfooFwu9RV24i5Nj6p/Tn0EgTHI2vcAzULqmOMGHBpq5YVq4ybAIakfrUK3jLevQFZZITI5134Tv/a/g/dDsGj0UIOOsh6RCtBASd3HmJ7LKxrcEOEYprDsk0spHRoeu+G9zI0xvYF090rC0i3hmB14fddbW5N8J5/hvq+7waBZjeQTy8uJUppf01a1qRLrtdXYFBK0nXk9q/GWMYwYO4NCdL6Dj7/l2od3U6/vjCUl4niwQXOlvwAP3dU+ELaTxElTbmVW/IU7IXaQG3MGtue4pzH0EJZkNbpR5av36yF7BbhTUh8qlJ2mp7KnG9fkF8BhMDKLQFAZazq5/pnrULp5fPcoV5WiYTTjlK9+a872ddMv9f4K2sdc/1otRpT4lLTVisK4KIonWvquXN2s0fYjO48rq4YGfDQqP7muKm+hexyWrq9utY3JyXEVxf9bW7gwugC5tMb0JvB5MWwVnsXq7U/qhK3YwqCr1FF0RI4xmXH+yvAFKIYTJ/nE3duPYIyDV/uCSjIN+AJpgS3wBSipBujp1FOuulMO+0EYQhgoo1NhWmKJA2ucvhBXhCG3tKO33sF7V1ghwQOHGfQaCfCFuNx/CwyyK0cuq7h7AZJDwe4Gjp3C1UseL28gTogewXFOVmPBZJQe8mlxtTo/LYclG7qym0S8Y/KRXy1FbRAyHxUMyq7MHrl4nLBKQ1MeQ66p5gs4Pv73kdTH6dzquDo6d/7an97hLF8N5mmJBLXVE+Wf3TsDLqNajmAPhP5ZBDd+YHg4JCsUC4+DGh8nhbT1Rwjub5s7024Ea/cqoXHPPgienRZ9w0M+BRAebVBbXIZFxcsUtQuwogmgcbiAnNOlEkWCL/jVDz68J/jjeHkCOaIG5u+RNRALjPsVjyn5sto1F8DxQZJVdkazFxBS82FN2Wp0+FRxtVy2PDFfefZwwWEN7Knrlx4Iq1Muy/KX0wklFOyAYba9D1qzGpA6gK3rsaBb+bDkwO2t9RVN5Lmw8sp2sVAd+S8rVOOkjFuUbTVEesUoKfT1gMKEMU6iCvDClNvnukry1d/fqh98w9yZnSkH7Aoq5LjaPI1pnR3KNrBocPS6jVUyoV1NYMWEITgmSzyVIBvny/dI76PGRa8bmuT/nFG2M9lR/BZl+5QUBjbt0WUniUWaoFTIQjF7Mzvj6zkLi6i0hHT/6HxKrprewrHCGW6/evRF733PIDTs9VMYsXVaSTvG5c4b8TsS3G2ku2H6bDi2b0ojiExDQSTx+dCW2UrNB5cSdHvi6r7zpODQ5atBMxOzqWjf1D/B8CYFmt0E8Qm0PbQ0J3yqgug5lOwyhDBGVVVUMDz+gefOpR/8MV/djyZ2iauFDkriKZc2tK5l64WVxlC7GggaU+/I7+AYCyW7oHrT6WX0zmYq0p0+qPkWjsxneFO+YluSKq4q72GanhLY55fYcWBZK2sBW/HkBom9s2JndlVWqB4Xn+MipPI4p66sNDNn+Gpzlnrf6KDvP5PTqG4nMnsUa9i2BBhZMNMauE26uaF5vO0TSHMYx2eCGSiuMG2emsBFopr7nHF0wutrcyCXcdW5Ls9bgtB3HKq9yhJN690NaTpCziqJE6wC2juIjplBGAMMJhvDbeBoClrs6rgqL6HTXLXLO3S244CszgL2jIeSv40Xr5unZS5LU1M9lAhqLwK1VeeYixI46nXB9eYYG/X1o+phfAQXz+gvJEF3Ok+Gsjp0GLSl/BA9ekDv46qNfIHZa55HUDT2zt6GJ1wCG8uopswhxtHUuYomE6W+EnJtY5b6/VpmJ2GPOCjVL881Q8txOIjFMA9Qk4qqIBKFXQRjcIQICy3NTcnqriT40T3l9ildjcrf+fbrLXv0QK3UvjwdWeK1NxGreDa6UbT/ZCo7ymNCadkwWEz3EE3zPATMVRWKcmE6qsx38Hordfu5+840j9BKmFoOmgY3seG1CLMyQx0hpLLFuHM/IOrUyHR+8gg4NjwvNa6uP8v7h2ZwjivtWXx5eY9+bc5VZI4BNAC5YkcEVS7E50GzhXBvwGXkeUToZA9lNeUq6hSZRoAMWs0ziOr5o8z++P3vwm/i8iZcFCiMxvhEuT6pprAecrGkDh+XonmY0EVcKMdDI3jJUVyBGl2FUpZydAEd8hXjDL/Wte63z+pre3rjQeWrKP8enEcflXeZf5Z3hC+CUQSGohIajKllaPcv3HBcOdAc3YRUPeoCARbmbMUP4XRaudKOvpytWxtVXImoAI3jtfhJXE1V4T/Wrl1HchwGGrB+oKFk4sVhgMssuCcXYDnYuH0/MMEC9xn7Ewvc315bJIuUbM/I3T278wwFiiKLxapxLNhDSvKADG3bObkCE3VcrAMB7ZgSigcwcbUuiZ2SO/RkNoYTT99BzxMJfwFwrMgVJqiGdbyZn44wPUW26sBlH84RaCNIaPKLDCKUjmawdcroFFdTPre1vlJ90Tyc+Hw1X9SrNVcop/K+sDoNFYVPtMWzBPs4FDYI/akFLrPAHHlt0gAMkqtqBCblHCVxxf3gv9ggfClPxsvcRgYSl2CExmWnORws6VJzI9PTsZORPJ1Y1oAeunPNDW25UVElAIMMmJPD0ye4MbU3ublZ38HkJqnbP3894sP79n3C4ruHOVe+f/C78cf2sCK/QILs5Tzi7F6EGW1FKbFQgWa2QiwQ0Pz05Vo9Unxd0zUl4/ny2rjyKlgBH5cg4v5cMqDDqSE+CPGhVx7U6bQX0ZO+jZrmUF1FVfGQ9CVVqBZVVGO5REeVUpLvOh+Upbj3tnz11ngLGV0QQdpCVaCgw/iKlMayHjKPZyzU6lT0rcnKGbGhYhbIAxwL7ukFzD8xdEUXEXNnFnT6Aut7O8MiCgXMh71mWacUi9hgtHXqoTzP5MdeDTagRNudnQjy/gOHlbKrHNecBtnjxO7kiFJune8fElefG8PUZ+sr8qYEhciKVcDP7MhFUMgw95PqqCZV3xYoq7ZXVobub4cQPOgqOkBtASljpXRl9OoaSwj5x8t6HK/D5lLjUV8/u0sSxj2QnabMHTD2+48qvHCaPiTcUAFiJLU7javiqHLGooiiIFM9mZdrkovMnDXoAkdbaP9biI+loEGKGUfBYiDELqjV0HZOUNFxElcrWiyn4/Sg6NAoqzvJ7Hwbk3kH31+ps+05nnxZiNLzZ6YSB5ppPQqG7Ivej1ZSoJNitD9RL/DFw0U043geBVI1xa0f/ZuS/pBrBsuT+XGw5/X3M5iMh97/GNQhlmeC4atdEh5zsVuZUQsFENO3bZtGITxGIRaD3WHamkjVuZMTQkxd6Q5elX/F88FX3EF/UY9Y+H+PkIyxHrE7i6dUr4sYnwLIA8byZyj/kUF12Z4EBgrsBXfPyXCQL+D9T3xM+eOnvoOfr9wNt4KYpVpT5eXJb6Gv5hFYIxmN1ZTs2rRP450ifODOSlZfywWXimrdUeNnUlQOKvlW1O0N88G3pqJU5R1pm+RSq1sd9oEwu+lJZ7UrrbngHdjIiYGAFVNiyh2bVPbLjCzkfJV4iJprrCkf1/THAO5Zt/YFOAN3NRdMmrMBcTBsq6Cw1YbvKLbowl3oFLnCCzicQPY0V/EbGIURKvxibZlx4ySuYuI2h95BA/W9js8QeDDIjfMlCHdPinaGrcL+TJBYxyox3g2Go93MIIoyq+lixOakY5QvFlSYXHrm2mqiJ/H+h3sRek32409tHP6Kuh0hpQhDIQgWjo2HIYACG11rWn1icGOEKGRkanDQtJ5Ykay4qIp1MNFxTWV9RXH1/qq48v5iXSRAiWGpULP+7WtbLtnSNao64Fmd2juNyrZyEMDk4U0yTWCOJE5ZuVSn8Jr4pOS4jA7kYVydy1diEEuWG1xdjUa/PtiSPWwE04yyADT+jSNl25QLbyD6P+xsiVRMcVS5PeaUZYKqDK46rl7ilxqYyhd4Vzf4y+ghGoOVyp3FN9XMlowusnJGMbQptCxwLONT1FXVCyjleg6f/HOMyPCas0w/+KuwBfg2X/3+gh3qrVHs+sMoCqIjtOyPBKF73eeCEl8/iKLOibUIaJsICNNJvW7oHQSAUlxxiHGJ4DbhZfmi71/iDL/P9sxm0sVSMaqCMu6BMaLFjkqUaXwy5jqxoxsL1ZNSpmm9lUmqBWUOEfLCHxNKBv2Yyn3n95foFHm2cLkY/+8s4iteNyxH63c7wt56J/WqXd8NmMo3rgZG5exZHHR9BCsuGg9LqWRnFl9VMKS06F7qce98Jl95NDaXyk4Q9bo5Hl88goO4eGatwnJRvu/Ojm0giyZ09igUq87ioHwwjgZbZQdI2Woq8tUvIX+8P6/74VmSLxhzLgOGwtQ6HDFEZfOt2FAqsvrwfUgxz9+xLkxnyGimrmI4nUCY3NFMiYkethdM0zJLvlKs70XcD/YThJuL4cVYGm3YSsWwexmGqIbzf2pFnhdNdTkJ2ILkKIuEMm+B89M1pvL9S+mWZsKv/vv1Qs62V/U0UNnHUQV2dGl3l5lGGsednBQv5nZkqduuExN1giOkmK6C1gWQESoMoaEcUVe9eMhWyfAZ3kvK9mNnJZvfQmIIqjAH1uOusseA3TdxmRpUWKBXf5u++Q3kWkFcI0S+o6tnNmAP0X/n0s4xcb5Cbj/k1p7DRSGeVu7pBk3rXpEGv6Gm9Uw8LsQXTvSClUwv15/ymVyxPUmRJQB7nabKl3DRun0jbvjYHeS87pUc4y3I51W7d2dLl+NKyipuAHsGkYfhTBfIU1Mu2HcuoGF4yCQiVpXCklMVfsrrOFoznPMFeDtYfZP3UKSOddolnvI7GENv7ZnV+xSGXE2XMBYEBkMz3qyaJueKMtSWCjZZzev/5brYfpCE1Vp4fW/f3kCqP4VPO6rnm8ZVzU8brDnCqAVoJ6P5E5UV82FM14wVkuL9U5Y/z5mn9ZSm7XnluJp/qj7Dr+Oa4e8zILsK04ZQWr+ph5I/VHbsCyFaqkJ7zLn6hn7ZqQA7S1pFpRrbvREevbsrz+JtQ7N5BtOtyFcv4Mkw51E3b4ynPKY3x/unbH7aU+GupSiXn43NoEOjrKfjtvNlunz4kjY9Dd/A2zJ/GAwZBoT7mpmtPrwmW9XiobCQ8KPKxlQbuvnujeWarpHVOdXXsEx9hO6QZQ5RC8ikWU5TYO8VHx/Twke2Vu4GQn6yFvVK+qBlLuKl2RVwyex7xt+W+w++Y69KaX0j0UrWIDpn5GGI5miTlQBW1xxfV51KVA8hHdZtLduXrNcHT70nNX5p6QYCasDYwSSizL7jO8yvnkSUJK2OweP2vbeoRNoOKh608GaY65Sv5PKZ0CpOa6akvtD3JakU64t84gSNsWslYuWyp+phQ4uN5Efs2gwIq6EJN4YwL/KW22x5Rzki+uYiYQmubm1uVFrdlsRHpbgoewk9ofsRPHSbdKFSPTc4rsK4k6xG09eMBXKlgoXfRVYE0x+78TsMK1uLJsZjqCG8HrU2OcCW+xd9ByWuPh/bx0GlwIZvxqnZHtd2eMPz0wFEIux+5/JKpvJ9+7Ar8va3jCJ4Gmi7wCT84rg3irjJaeXbtz6Dy/rHOq6emHl5ENQgtXrxUBYQKVof9te5mDkk6b2X3M7V1QkxHSeyz7iEsQJCuWY3YGhyVUhxnTDLBZzTPMMf5+l8JdiChw0xozHsaGaHp9tN3V6mN6PS2EE6bqirHOiOnbJoOwB8SceBSZ7B/BBOBvqcyi/rUV0pU61HtdYM7Lv0ZL4KSmjn5pkEBnT9lL1Pw7g3Fhx4BVWcdEX4pG9XFBB9XsdTeKivU1nFq0gyYY71rMY+fvQll6H0Eq4ZXvPVZwsH8vc3Ay+m81HRriNUDLnGsCOHKSCM1KPsqWQWlM7s6UIFDOtuzpBCdXc5j7quzDG+HhTsuJH3k5pXnAH7zoce6+9/tdZWnsfO65NI5ovaB3p/IAQ2QLIp378evSAP5BssBJ0ukcAiQne4kitWJ6PiCvWYOd+9D5u37pG1TAuVWdjHYYWUB33igrIYghf+v2zfiPdNGI8y+wCdirGQaxJlj2ZwQZckLIW9nNrU/CGToOb8uQbUbaFXcC3Y5/XMlvnnn8pU71GcAbUVe7/ReY0wKBlHLOv6mpc2SI3VF4KFw3CCbwVvDTXg4i+6QKllO4eTu7rpqGXmNvB+SIuAWBJXnwI0PNHj8FpXrqsuo/WIDWqmtEGtIIDSl57DtKPUtwxvhGilRKIYZUfezrgUXbdZfdpWWDc+KI60tWCwOENtN3H6DgYvjWB+/wxq5UPleOM3g3kI0RbCvZqm+kZNuWig41gDMhhFcMlQHxGDCugBc7Ka+dd7fBndjyfyFU8DvZecVXq5sCGC3zknrhlU/cTsVBqCWmO+0kbQKl8W6mgO4y1Lor2iqbktSSqq+Xqj/L4QiGW1LI7ewUb8ypfeCMVGiRyWrxdQodoLyodVOW4u2Y2gR4w64iq46zyNiMRCk6jaS1f5tNbXb17WM5oRV/8V/s6Px1UQhpp6y8tcHsvyfjxUrOhUjs8cVdP6t8DGUl1pgnedKIQKx9+MTZm/XuT0D/pc66lZm8J8VHMCfvWFb/h372AwZbu8gBeoFwqdPex3NxxRYIpWwHHfiljZRS4xtym2vTmjxxqt4nLho0jt+RbOOZryUc35HSyk7p/wUGDyEIELF5AdIbCzKwfWg8mARhDGXOIR205fiCoERm2NwfeoU46J/m2pjnNxAZeVwUA99HUNtGX9oFr0X94f/PHg/mAw/ghBd5V4GCHmXLV8aC+B1TNFW08L27l93xxZ2AuMpVCoZRrng+LueOIRThlTawu4vofzzNXVP7M8ivoOSlw9pCcDppWvNLS1YPC7O+AGgxl0TV4Vodv2bWisJVvy2KOsp8yR90txD+t8fpNJxGzh43xm/8yz1bJ4dCcueBVQ0415SBEpPzvs8PcEX+hVCYxuYHu5rgtK1viH5KxiMr1N7pQjszvc/iBwoex0P60PqhXWy5d/Saa+ev9u3/l7jQ+trbzZu1HZtL3N5l5J2vBQGno1EGwo2kWzPqoAbSwExUFtjHJAV7eZlDJItaC5WVM8F6OU5lWv74v9wb++R9ozwMcchnwNVT2Uh4KbabMaKI3KIBKdmHaqh/DRoL7AGIOCe0pdYAEPrkOLFxAIzG2RacRMpUKustL9EkKK9fPxO2j7QTWqFB5f0DWJrSy7XD5IMfRcsHctgtAQxxbWf7QX0Ao0OTMtdUfwOmX2NbaWmb6vmWu9f3P+vYqrHz/O6qphlzIEtbeWUpTBUCNV4Ssi0QDiv6699fr+tUEynNhlcKNcUHQ3CfQFJjlONlMtOonIR7Q+hPm8clTlCzjPy4Lc3tQP/v6S9+EvtbM1g6Fj2NzAAQXDIFYSeAIBLjRMmllLR1a48lFBq95SHTMn7f7jFHepHYuUn1ceRNCfqLmR+uqP8Q1/DBfdWwMH39GLV/OBNwmflKzoinR23zaOkIVTPIRdCVaBkZZi0rgqGAv1RHChWWDOVLOGVu4H1dfywXwVoI0ZLgXtUUhXe17NA5fsPRhq0gp2XK83DiREfJbYs3Z6+j9nV5DrNrIDDUgXMLT56+DjAdmpIb+9AKvxD+DuC2QRIBcaYG77rWYVyZbalpw3mSQzS4JNkcVi1eLWzDPFHO/EGTb1qkQpSWsVWa+SZBVnnWi+S7/lO/ghv13R0BpfYHWfAh9hJc0+Mk5TjVppE9qdFmXvKf51MZPvql/g6Qjxl9Ks93e7dXs+se+Vwf4t8CfWzEmAYwQrSr3a3nm9yKv/vEsrEaXVjh3+JHAIMs3x7SjYTfwCmjs66THn1P1n48bMdAKaob2HdalR0xaVCm1NgkBAS36hYZBIyfycSs/wx1RS2nvnNzxkw0Nr4jGootyl7hEGDsy4LMHl22TkhVNvcFbJ0It5RBRXKUfhm21ts2PtpVKw1gf3kEChRyiYFcEYpFU2ne1tYn3QtxMP3fiZeU52W7ywG/18g7yqthLvCruHrcwoQjJICxa1VKX13GLrtyWRDhqlDS3fvseK8fH9IVhZsL5/VNvww1sAOt5coXe8sX5zNwBNtmNHEpGd6X7g9jZfVNeK6/iLGJtaUi2aVjYD3hVct/WD/paAgjKv5CtYXmIkZRsaKZ/Og2ovHwbOglbdg8mMhwY1hr7yqwiDfgQdgnVOKpT+ppX85aJ3lDykpFTFrrO6l2fIdU0ZmKP0U/oFXGGZ54iTNveDn+vJBBhv6EWJiqahXu0nZnd5OnUQIXJd6Ol9hDoMXyrL6tk0h5Y2DWZLXy+dp+SZIArlf6FjR3l/RkvvvL5wu/QRLjpQctw6K0d7ZJ8QGr7Wpgg2ipcZpXXGc73V7KdmFKsLZRcW37ODcLUONrd7M1pRWtJUNZ5SrNaR+VmqYs7R7SYA9n20myA11MliBrVGEKJ2CE3omPaUk6nxjabYdDgJzuCisRMlOcafMi898woVfa6+gd+gwUTG6yGtqOy48ADX15dywsdQW4btKvXkd3DQ+5ugdFpgMV4OumoYOtzfEOZTxxtd23wgcDzDSH4dA52UsZKyCfJtTkii4VYR+wAqcAAAIABJREFU/8giAl0CUqt0C3GtVjkl8wXYCm0f1quBE3OotNP8AnUy3+awpx53RGM43AAPPVJg6M0MCKZcXk/Aa6Tx+zfXKjG2Yl4Ag5aqjneI1ydV6plVWep8zpVe36e+AMHfdYWqX9Dzm0aUcPzNHddFrdI/k9UBjWE7BS52n2tPcR0E/e4m8VchwkhxjwtSabFmIWozSpxBdCDl1vKjeXDAGfhw3es8urF5CA129gQ7XWU9Amc/w882kYqeXUN1b0NNcZXI3ml4LGjY0XouFizpPLURzaVlL9Ey36XXmMyLvAp21mUSov5KYmrCMd2kZulcdGnLflZcDqQF88W7UGPcH9xQw6pnu36vVvLRdw2lZyj0PQzM1mJxxImub//6mC8atFwFUfW4qpI9P4GNYI1mt2HyVmPlItEdtVWKWkmkZnMYVp1Cd21TZumbTTepdJ/3JPfxEcWdL46QqMQoo7mSebDiM3yYV0HPdcXSxZ91GTFmqPenenQjtyXKieGAc1q8V81zd5enaBjmesbZEv2BKtxTIndI1lxx81PeYI61TlEbv3qFiwYP8RmJQdnakyr/b8XZ7QCVtEeYeZ6o7QqBkm88m5qHIzvK5pRPrzXalHbhseD1gd8hcVmQSvwSrm9QcAbFrz6qV4E34IayT/xDGgY4m4XGRtC7I0inYBJzJ3X4KNtEmaYiwg7FvXLVBarHrd8AoakqWCkRKn7+lUCDAAvlX5T4NXTrG1Sdolc4w8/XAw6Vm9CN0v8NO9Rhp84OiG9iRk2ewnD+7k0pabMeyRvGvpCX5ikxN63r34tAVKVSJeRVRNBKXBisbN/CZ6jyuh/UPc4rTaf/vmYeg79wrTzNgkMYNlRaDRXO3jyFYQTE150K1wzdBRN2NAugWTUE+rn++vHG9NlXpQRgRgblZe3QDTJeQ7YwozLyyu1xXsw4L+pVhTAYGgNlAagXNiw36HljSvbSrI/nnh+dbi7ODs9BC06j4iW8EHlHydlvxRfQgy5W0EteSW9Vcmut7H/+6jsYjJwGKRSP8XmDvKHWz2aotKxTkBYT83imCeXS1Hr26kAQgyB1dfa1XXpPbd7XgD2koQK6IBGUXjTLM7S9M/qrk5hMUIkdxWOuwdwqVWVnL8PQOdbxxfFDzwoL9LAaBhSDSNXS/l4ftN9uA2ULGDH9pWdClTA5sCoLcMzWqkQLefWXfTs/g7q/YSM6URQz7BkMnckLaLg8EDoeD4EA1x3RyhE9vF2Z6oPq7Vb5BN6eoSloaNKNs65q0I/mNTYStfU/ZM555lUlOtD2tfzZPr8Zrpue3cyIX0qhcBYcnTsQSlV3To+dMpjE9kT6yw/NiztHcn9NiuyBiI3Ve3SAlSHHvg0tYN+K9f0Rwb6vj/LKCQsY1j6Z5LigMLUYim5OYSpoAJ8+wxPVva8nQey6lr7WaeqL6UEDXndhS0a1KjwYzn8lrSLLFH5JXjlNp19fX6d4MoIsaM0avO0GLk+bedWpowvtYalIO36mRgu9hY0AGBGZRTkxdqFbzcwJcXILCM2kvKJ6PqkkWNJfVXcT5/c4A6091SpvUoghcN9cfwQZJ/Tt2i9A5Lg7pB1T2Z+qadzd9DXTCjpNXlkcNxGuwSp9KE6ZGbACfwoGKkVdBhyEyn0HX2uFtbm1A+F2NKLT4HgxU9h/AwsCQ10Bf9I82v7mXXE3TSsgVzovLxev56GYHoabu7s5lWcn/XrZlkr3+U0muyIxiNQaJQbLetHPvoMI1GCyaWbWzLP55rYZR+DQeqQKCgHRcyIM9JJnYl1mX9b7hWPOArXCSnOhdAsP5hXmQA8tKASD/EKonl9D9YnDd/CUbq0KrXLIUYr21ar5EFpEWidD5KULT9EXlPBoxiQFwFqW7YILxerWkh1au4XCWohbHkxiq84HKE+wbLzYi5ZofdC3B7XqAnI11Gr/OBfcKvKNmlfsRc35dCQserwSFMCqpFFfi4WqpuN92dxQRpzEs2GQ5yjwVQTXStJr0TiV+Eio1jE6A79y3hwnfcMH1Tsucv9mQaXp1FCsgBjfCHcS53967vG54xtuT0ljV3hBTuR5oeQDlkzCA/NL+ZMI6JpCWaEq6ROQVbE0o/kvcVFlqA3ai+r5DemPoeWZPkIWTF1vzETijG7hTN0FOxLsKaXTq2WgWpZtR+dHNCKt0EJtGagvMvuk0ie4hnHnE3dij7OxtqYmiuDrLVmBeiUIPNT8brozOmCzz65ZWTHK5Judm8YrgTRZBK6xeWhsLK+kA3WYsQYrlpzL9JtYvRpP6qqFqxnrKpPPmMc0Aw876KozV7PJtQzQQelOZBXxKvWGdY0Cj7jmGXZlt6oBvcmOOboNqsuqQoaRaGFaloYhZTzNNbXMd+n316vbpV29GryrC4lEgZ4bIbyaBLux69wsqPq9x8eCvROtxw3AbGpNlXFuSxt0/fTdE5lDKSm8nnRns6QsLHb9+kmRXwNVssrtcdRL6NgXYFDgijK+kx1K4PCtsW/uYL9oSnzWXB2rYTpzvHn20021PKV2/X1fp+TPiFtKbUNtF5izDjWl0qPaJ0muNa9Up+j3S1y0qldYyvP4RhpRyS0cN0/Dbtc8qrjHSH1aPzKf0+Ob7U7XWeg6Dp9qG6sBwr26jldO9ip4wnvTXLWgxIwZsJJR/NmuUr8OZ5xBj7qC2r+pWSWoaUNo2ymRGSo2zZX8yeH61EgMTl68d7RQ9qHNjj26qRBsmLRfBHJ9U5r2zAdY4uff4DsPhZ9vlMc3bl3TMDQjpdyFMhVeJhU7Hk8iMeBZERL14yDsKBdK+u+O40lXkJEGd27J4mW9ekwclxPaLWZWcrWdHgpHuh9q5EJnz6kSTuOWuVJ7FLyKoRJzayXGcHVzYnujRtZ2d+p162c7Tep9vB4utx7RiLNarbJSFhRez/9Dm5Wlu5I3+K/l1Y9D3Vr1fxs2EqKTs1QaWqOgSqGMK6tPCtUIbavxeNMMZ67+4gAGxzeGTMxc39zcKrWFb8Ls0X0Fk3t50QqVTDc5sxWV/uof+gJsWoZ3fTtltNEzkOehlkpNdXbdSEwV2+NiBiWHj1DBUIZp2S5PF4yDVqweCr9QSi7aRl7ps1kfoDSlJVBRBhxprnK0vPolW/pDPsNwHUy8yf1cHTl0qMcbubuZqktBAqLdOWMEgMbVQXM5CayuI1o0j1gVLqgV4n6SUDo4Vok5pfNyzNV3sPbUO7wFCOavW53MV5pgLTYtDyRI6NMLHHahh2vBeTam9uyVQ9ULQTWzt+FKkesI5hUv3nCgZJ0nkgmfwcxWNGU3O7/xx7F6NSjp6hoqy1jV8A0tjR27wFmTaTLRJjsWPECOe2wFVeYf2xtTqjAlzB0rBpv4JEckSq1ijx45CBJbYLDcZzAyr/6YLcDxjQn5HrTqCkBCDT5umBCPFC/ECYCumsfxeCu40+LjBfhGjJ10x9lNzfGWDFkACBo51RBhx940s2FgmYqWVvYd9H37O5xhUFelq1nAoW0IvNXdiux01GcfmwpX4wmEj/7ovRP4v+hYY82VO6S816onUVSZSqV6YAjM3Adm8LKxNWVepWa9os72j0O/iUH9dZVyNfArOAS3kBh2eAzWg15eR32nTq2bwYzBVXNFd1zUPqmS633wE8jKjl2gCMRIg/6Mh8w5HApz5APM/B0he86D/A7+frXz8vpXCJaj8mlxN0/dMLX0jnnYZTqrx75TfaW0ShvdufbkIs+xb7qPLApaqaqHP0sC319rerS2yqq6zoN2mHqcV0HlHnWDM5nOVUvlqhtNval+gt0xxK7H8kaKmSnQvmhnJWX91lu7ft9OOPoFjG5pKgGKynJEiQJ0hfpevcF/zfvsBd7OWAXaCm7V01Q/LTi11aHac0Fslfe6FqUTRxIU1aHTxrz1RcCJRINw9aCoapFztNsk/JbzQvI6UWMklk6BqYUzQOL3LadoMK8ER/5XL4kwNYXsmVcO4RMmrfVXbzEryKzqVt4vBHvtqGbTaFqq6wicUH4TAuUw6DZbvl1gq9DoRem79OtNXv30uphQWrXDeXcogd38sLU0440EvWK77qTKcW+r+d7sI8o916IqFWuwbr2iVnd/RMnlVinrD3cWUfKoyir2okBBc8qbn1rTqd2LKn4VWK+uw7W+KVEf1LYRcdd5MSISrrpTFWu2Zl0FHtdOobblUgbtfT/cJFGhjdazI1zWUskfmkmKxMRmz1B2Xj/e7XHcmVK4en5ooKPS3najc/IefmYez/tT8v1dHMR+cdgxJD166FR49x/cbemUk2qCv3YO0Tjs7BhaiVXj7QffwYHUf55K+ENwSqhtbptlh9rVvZVQHlWHYTz2xrv0/2fs6lIkx5lgQfkCjS8wLEvDvJVx1buhLb4DtIzf+6FvYOYmA3vbr8vKiAzZkl2zA9O9j0JOZUbGjwd+Dx52SquYXcQw+R73BClYBypgTKpY42QHpRcp7O6UvYPf4t9+ire3zv/P0z1LfCuzO07u0K5TcuDqNEKiMUqM7bnskukKZ7Ug+tg9grCFISi6Cr/lWo2cZ4SOFmxBsa9V+b1K72Ddr8/idSlWApXPbTFJj9lS2tWDwUWV19cTdSGUp/2XlfQRg+Dw4R7jtjO9g8QeVkM5A4xH3wfqYzixooep9mfe5E0c+1+1LZKbGdble4nCcHOjM63Wqx5GjycUUTTrDXA+UtNIDfXE73EbCjsG05pG7k5dGE90L51S6hYC16fTVLxYm7yJo3qlXgxKPWakUiHYk96h4s1up/Satc7QMBuPcTeZAcrWrOmeGcrZdjlx97iOmKLPNM+f/heCfHdxCuWvcJM38U+Nf0XTmDfxepTi3jGqq90dFrWCCNV1/7RXbK6oeRPsuBmlV7D8lo8NzQpbmzA+/D7pfBP8F5tqYrlQbe7V1/m96oDzUX1Dfih0XV3JNOZ2u2XToBK0b6dWFU2WYDbkUnlj0hYibuKH0R0ppuSmecVjUKrixKOKXG6VDmz+qVfSYB3zrzqrVW8eGavayjIz5gY8xq/VDb7QL5HTBritZht5T5IfrWLdpVg92/X7U3e6enkkUO8pjQAiOplJzGTtFalDcapdrEV5MpbVeIIztG9tngZOrVKvOSUbQm1WrNxt/EW5PA6Khd31lAML+47xAduvh10ureoB8HqYJiFYTcVmvbibeH8/fgeNcSwsbaMQAYnB1RKWNpao4kprV+tyYhxjUJV9ggN9BcZmx/k3TeUusxM0f9eQJDBPRafCsUq7ruK1mte/WX91lO/ctbJBlWRPhm+0taxKeQX7jTX7ayMOuDHmFpOlR4yN+cmJSjDaptnUSebqwfnGaFZgrXNtc9Rabfqr9xTwfMBDBn3BblY6MpizsyNtcx6fybp6c4e+in3omRHDAIHgIBKJCx5CU75Z4uLW2tGSkj7VRSCZwxigoGxsctirF2vbX31VPZ2e94rBZp1qSnqjMxy4s9Nhrpdgz9s5e6ERk9V0XEqMQYB8g2a92RqromRx15xUlKMgMc4zdn5H2F+v5fl3+fkK/8Ko6Osg++y3d6FsQ1O8Wc8giVJht8D01LtfmAF+S33oS9EIDH0zMGYw54Vm4DOYw1aWgmAeVrQ0Do9UzAEtrDYxU5TG87i3ynHReqbe1y9zs+9oIfqGgbntwKetpJSkxFg4gnEreHtpDkSoPDlpYyNC3WH0vx+FlfwnmR73Ddkq/TL5RxiPitWMekW8/YyzjcPq1GtO9adtt4tNT+a9fZ7mgmHwYIUzUBzRiPRNmwUwtAtZi+vS9JGewcTiCxPsmeRaTTABk6pevVnLPG9whsywL/8Guw5O9piceywGu66WUYJ7lTQA4LEbN/RFPjvS8YZtNiVcVu9+qT6zEeeOqj7Cgm9yqlVkmU93Ktau1lzBGf455iG3QjxO3UJH4VthL3iFsjIZoche4pXaPlCtK86hI/Xy+JtjC9HlXJFSEtHmxtSrR5lsztuF2dr2tV7Bn+HgGyTh461T7IrOfPt983qXPCMBxGP58E5zpxAKhCyXHefRKAyNd1efFJ26mbic1AqHCoPWn8Licc1+q+a1Xv3971ts1ao4g5Ur+whb+EKrkqQtCSXSXuIC5n9G+TjzWcWey2KBhsZ9dTgOFmZm++6wZMZLCF0NCDFBIONYGG7m7W/0gfz+OvPrw1JC7Wk1Wandcoh6sLNvLpnHbbpdz0/L8nQBF1+aXHdjpoWNSCP0IYxqKM7XL1JxM/lAyK18bWxe1ilnk1FV44vC46PFsqtVpK884Fyx5ZKxOZkRvUZm5wc4IEhQGI+DiyQIMdD86zMm1Nj2p/DojRORBfMSKLH3MmhhWpvQxWo7+Qzf79UZ5xdy5ume9tZ7HLht5DNcxnorj5cXaszZLNiQzN4gl6TJDa7WYvUxWq3SGef51X1Ey88Noz+BaZ814gOM6YMEey/UkJhZj+6vu2xXfYp+3sGuJam2c++05PDR9X3ZjAGirl6Sp8AfOulGh43JsVWpLG9xoDTCCXx3gxcmchfEdiiKOjCx/YUIE6aDYuX4FRCsf74O+Awau/Emzpgo7W23NVu9AebTCLhzI6JGoKsBQRIN/qWrx9a0EE6h6K4sC+8xRnkCI+yZQrYvDce9wrL+tMyaEnfAZ+g8B4c4nyFWLYGrrpBwre7spim53U5TdZHekuXpkvyP5JY7Iknyl9BCy0IYN9IRvVdpeI5Tvb9atm3D5J5O3/UZ55eFezqXtre0rg7KrnanVLrCyP6SRTCe3Cvy2C80mqO9uPP+DbpqtrERgV5p6Nj9Uk0QxytgFV/ArVi7hCfzdaBL7YCMol9gHjhIDKVIF/E8vvrI/Mr6BkrdwfNuVCTxLOfNmOcIaniuCnQN34OlKvRbIfgiMJQnm3n9+tIPW/7VVyXH5OtfMGlNj9q3PjizZdi7N5l/IWTgqV24niVbDyqZB+24YXXn1DzuZIJJIHg389lImtXzYxspIGG1wioilFsq/2X9cZ6f8+B/3yfz4HqvjCOqFKKWh5RrK69w0ca/gNqZT3I+C1qGC0LMGD1MF8xmlFQuY7ADYyfdykU3k2HrxkQLpjg9mpZnL1vpvP4qZTs7rLxedW/StBvGTuZHBWq3CYehurZyfm2JQ1MBNQ71SHnktghwfMe2GTsJNTOeRPkm+5o4vVarcvzq6zA3nONNpsIBtNDuilVCjblJNWvoczJfAz47XFAs/XS8jIMBouk2ZcxjGqUFUQiKubEfkujelD60vVQLdjeLFatlyvGrA91EyxCczq3sO4X42m4TJpEQ5J8qBeLj1Tjap+R/6L+5ab4w5pT9aFECnsLLsGGedj4xUCXxOoVY+wQX3XXh9AS/qmstfxuRYZNZ2ZUg9twUDL0V3ENPSFeDZw5Dz4XEYYrgWKVk1RzQt6+PXvIPfXjfTk3zBOperI01frfmfC78+XfDk3mv9FcIIlYrBqYrtd0+o8R8fK99L8kbWKK+ajguNwsu/7a3Gejem6d3ol4Jjz24Nj7R0OIkiFUsDszasVvPsKR6BVy0Vq/e/01qCc3dSBBfWdpMk6seoNVVD+votFJGbAqVF93bqCy+wRyIdp3oYwQEk47LrhVtQuFpRaZHPICMZz6Bc5F/Vc8Sai20MvOtUBpRm3MYnCDTS+jGi56Y+aQj8lP7BIeNaeHaU5n188OMC7VSjYDaabXAuaY42yzb65Wu1a5eFf1Ff7cJuupF4Awz7V3L7qbjdP1nGPGJE8PAxxBSEq5t5F4VxpuMnh1DyKiOyVcu+AOI2SbuljWFXmG2o1vUp+j7q9a3r/VKPMGccNWV+6qbNAsXicp7dWpu4Azm/h40QREvaCtYJPFZX/XweI1UyY1qnPp1fIAhHPehy2xH5ScpeambcI7tvVpnm7ecyMew+b07O92hM0b7K1mVurrh9qahv9UAu4o7H8AUWwarwui8tCiCG4P3qu3nzMvl92v9aUaPlfshVzIU0r0y66ZWc+AcFt3ADPz86NB+LhQcFLdKhhWqO2WIblO3hF4pfJOy/jPzL6676pBVBcaa13ulPtu1/iotUFs6XfW4Wv4dtn5Q8ANLoyDNjq8kH58Q2ofLReIpG7HXweXa7gWf311a4JA/ZAUdAB/NhgDDFFani5zPMqNTcDTZd/Qbam1+r7q3TXR63xUSgnJPIncdv77AjBEjIrCIMo/HpFJKR+Rt1f2TtOyEhAYvVdhBwILIfqhvbHAoc+Fl/Pl/f3LuR30eNF67qHbbntGVG472lVw+utNe3Hb8VNRlS/kmzz2FFV8zqBv0M+vULJrcMUbI2aP6xBzNyrMONFaqZuIxa8swbfJSa7kAndrZd0r+70qtKDTzPVIFwSC6ndjspJWgMf9FojRk8HEzFmwLU23PonMntlURhLR4TItZto8fgL5lUR7yAYb8W2wrusyLYeeHklget1tmInphP3o4Mls6l6F7LlWiCQoN2XcLZwPZY3AXsGT0FaS0s6KX0b1JQNAZHLXZ79VMHvLBzivdK+rmPSho5592g77ZkeMspfK8ZRgumhPkSYIjct/GmgsKfWK8X9d+wbwE6oqbZcOK0bNbwGfwPK8azvCLG69uE0BVNHy8mYNv2ktQr3RuDW1c2gRdNVnejbsvNCvId8/oVpHUGE84xRwYqckNhxQr33HJizjbDVuW9V5JTlw1Nzy3PSbzqt0LnC1Q0NJv7IgEC72eWMyZi7Y6gQlF+97UjXU+IWTWMBLP2TDcKkwnUpIZDejMVjS9jcssuUvVHX3aO8vOuWMXus8J6nshEbmR72n8jUl1B3g8NoovAIhZYQbXM48f4WHy0wd8ekenrbuhOG11ihdr8QYdLTsrfHoO12Z+ltylp79oDRdVsRIM/9u20GFdaRsD35hMTHI7UcxbYwVLvkvO9nAHe+nUHylQPhjx0ePwQkqcAi3GaB7hhXZ99vI18zOc9R18stXquGirVAa3uCrE7PaZVMnDEU6hdvUOTcVqbLIFDpGYexZOGQODmYU/ZH07fWJO+DAoTAJgzbPdqzldLtfj5FucvLa3Njor46ovqLoszCzXdZkS9exWefiw7LooADffpnHn9e/+xupYmAneQLeCZvB4XZOm55kbigRoPYv7c+9Mo+0qX1SoaYzMM8vVvbryCltM+mhfz93A+AA2IlQS0yaYXN3HXUQshDcjoT0A6kEadilTYS+1Aby35Ie3Pn/Pk/v5I/eKkcVF31qwrp7/ARXdevnegLOnatUL+x9rieth/iJDggrsUPFewJADPObTkiPosJrkEe7vn9CFWNFEbNhW/Ah/Dso6+ecn+Pwj/VU9m+M3R8GO3VXnuFW3JbWn6n5xf/bbK42oJ3QNeWuFkMrGRkL1Vg13JC6uCsHwgdUWP0DBYGKF6DHvGI8LjmutYOv9+qP91XdVl/qL7jH0/S9lMN5o47uWKfFnf8FulQJdkohGOapxzCQl2mIF5lPGkfL4MMm2eYpH6MJCqHjWPQ4gvwTP/HyBy58s17LKv9q507IdzXoGWzUnvYRFMN4ut+sLTFq3Z8ey2QgyabIZBv36UtV6gKEWSLYyqvYUoixQqbQJBWnSXOi0ZhdLzOulsj9ZruV71bdWaHxktJdcx+0lxPTce2E/AvkahqZf1EN7dDeixorWR9azf0ZGmbnwzdem/2fsalIrx4Gwwb7A8C4QmibQOz+c7A2xmQNEQvssAn0A4dwgN2iY205bVV9VSZbsFx4MPUshl6q++n7UWtyvVUQmZIS0WAIygdoqHNcm+0FaptbzcfReCaG94qDWCyJqML6HJbuARO3U3CmTls5pKCLfEGK9iKuAMe2VLde5NDfkULF8k/sLGfymF2sr8lJb9UqhK4ZFq2ZzknANYWX/SGWfjR0Ksz50eTOoE9+yGFnlaumOpl9XN/ZV6KGrOPbWmyqlW8k/IjVVNN/gz9yr57YPpKYLcsz8vb7qApNhxxkMR3S81EnM9rCYGmOCXOaaZxof16s0oo7z8KRbyCCYw8AcKldLF4L0AG77feKjikWOSZsnY30riCN6M+jVCD676MC5C1Ug5mTIGcyJiSOmOLJrQCy5VRirY/bhW9ZF7Y394r1Zc60ekq4agSiYjjTvrtJgYz7AkOqVakza+8Gb3iriiLZ4DLnpcTdKYtcDiUqDOKjNeUDQoG7/B6UgVyqTxeXdIqTQ80VEji0IZEzNOn2IqWFPR2XwK947V3f0T7xzNhSZAx7D4Teybx4lsvISEh3KOJdMIoEoT5pv3go++wsB7QqIyppL3kErlW8RQ4PRkgiAvFf2EFCvts3kxD2f3SsK1pWRGWFwt3IzLzklvSibx9Mg1IFjwAe40hakR6Eev9jCzqFAe1Uv/djhL66ZZS2YPR7PLOL9S9DCxrVqv1apZxCb7bwVzXjIN6RKSLxgkalkPCtMqMv0kLJZtl2G92HBUPn85tpConAN1TQg/BCGUOvW8xolH+XxCUznBT/kD96mPjdnHA0FnyrLrlGsYyxF9DHDR46JVXZMZ13TxOTqEKirgYtC/jfJEau7lJzGjL0XdQuRKNqmZd8re9iEz0B4e+MdxPN3Y9eY2+0gBOdaldnMyVbwtGeX/EVD97CsYylZxj474QqvAvGpXYxHJqWXvaBvrAOV6hiDN8w0OiQfpV1IJ7XfKxkHiQT5o8W/4gHwnm0FcwvDLF4QOHv/AOdxzsIX5+y4eL45foEMXZliJWYCqlHyYhi61kp6zHns++UiWaX9+vY2i+7Vf5zDm5qrOtb38aQGhnd2Hp8O9pj85Um1mjRj/srpUdWCQ5cJ5jUhz1jYv68v4pvNBO1MdcMp1hxvs/qan0As6GnCHeJ7la5WegX/tqPbRgVrxxl+kxagMP6w9+puZ+eKw0dPGxzq1yeo3zo2u7qUCs5w1+GLtXSGGMOBSjb1zYFI69jbQ5mOkoegnl8lMzRkg3PQEZphGeqq0su336ZHiU+gAAAgAElEQVS9cfh7XJF7hs8LLcDPm4jm5T7V0HYac6iiT+p7/KDnv46Cw2zwBa5XwzGqOS1u3nnTtaAR9SJRcsJgXy/aUd3IBzq7mKabSI0o37At5zN8tPiizGXXmMGyso8SnS65Eg8EVoo2qeusM7Q2Dfw79uy8aM4kguleCUFbucbuRMwcpXCJRGI/I7/p85dq+/4h2j1Oq7/a9zi3u1wrNaa95d3VKN6YkjIPOu14rQI3dHasuhZVSKBnT0tT1sw7OI27RYLRVXTjwApdmxB7TjeO1Cqka7V5FPa9Dd0Pi3sGyXzJClbZtwv1imCGey2mhGq6RWPGRy3BGGNILCLsbpCQV0IMNAK+clazWyTJWq1PJDewwcoWwlXkpiqBVjQdpkIVqV7FdFzpsLYi+6zuQfeTGdqMGt8rzegI11XEKvXg0vYXtGNMNeL73w0qPgXVKucR0TGxscfCllbkJCehQM7VDys2y1YAx0P70FSm+CO0ePtz0+P3+SndqH9gdHVMoOrFXQD7QRsGfun2yHmVw6A3Spj/wzCUe/lXCR5+XZzF+HSD6ow+1wJXIded6sVCucqa9bCliXC/U3yvPjEPZqNzea8msUUhCvK9MguOgsd0eq8e8cVE+9nNJiNIoNAlCyd5W8UvhrJcxFzAYyOPO+VaOq5oXj5RUxJ1QYfAyCMzAX77Wf3BPMiBXh/1/moCJlpNoBKIoadwCeqq2GKghbYP6sQg/tCiJyGHqx1if5lLM0y111msFS3VLLHW8a6tIjlAfiwSzKblVKfClt7ALatXpSV5dq8m4ceY/I2j8794tPegPF5B7TwNWn52uZfXsPQX1sqzlItkuhhyFjHC9NowHOXMwTTsIRugsTbVa0XXCaU9ewcLs/vsXsFwTpoGg8lw084Ng80DfyiJWOwdGRld7Ac4LEMulHcwwnxdlJptll1g0/r1jO8fLS8NaxtmLgBYoIPy1GGlv9y39rn+Dj4JkwhGA41IiV7eQAYZ+utn0ILIeyHvkGot98ruJVJj9U7IlbEaB4HIsYrEtlauoaIM1mAuRhR2A1j5VKb2o6KeIb9XdZ7MLw1QnyadnfNFl8H4RjaIHs8+QRCJ2K+JwxFQsOAqIIQ+JVytshhUgjZZ8nGUmXfOGEEXVyqUWwnliEbMgZEa0HRO+2Mo98rWq5YfMuLT2e6jfrHEZqdHvvUljWFW9xixL+wWXc0vxa6ZUirhcIzARYoxA91jNVfrnGnFHI/IY03+AqaLtR/UljqHNDv/Bk/m4yQnDj6+7J9WaAapXR8psxk8BqIyXPmhzHJCVtsM9ZvZn75Zra5b1C9Nn0IjUAIlxjWV33KxoilYPh0SWquELkRcKu6vfj9wr7i03+9H1lVv7hWdERf1/oJ2nLkS6UsI9HgmX525zFFidihHbthtsyRMudalikfSleDFfFTyBqZeHcUqcn/1R4N4G/wrbE7vdVUJ7B4zHWr/yAcovDQdBsWV1qLsL5bDwNYeyYx2ybXMMCCqerFHK4sAwB5CQLXaFFzfr1PkI9rwn8Rn+HPuh/zxxMwrENWK/HTROPcjXGkVW7jMI4ZzzJx7iIojbb6USK6hi8SYLX45chjciQ1tKP3SvNlDCFwc6KQSJKMfodyrD8Kv6ng7moV7LY0YO3kTFsTYcX9h0c54KHP/lZ42w15uN7l6y3c3BMKkeMp82SVqZttcuTbZKnh0CZ43gtqw0xkFLuuhqFcfn2e6CR4E6SGs8q4Ya590gzM+cqPIzRdxSh3RGKCBO9KOIdJ9VfoCzOXA39NStdZb9qDnhJVEulNSqzYgyKas01nBpyjtnRv7wV8yDurOOWdq42JJoaIB57y0y4JLMrsWEc4vyzxbnM8+g3gI03hD2m+D8HlXMz+JGXRlCUWRoeMttej0BGIEzM8ryx9s7QefpsOi2QaCy5c4TUbffAnIzFmsi+J7QhNNFnO54erKHalzCEYQTwG19XDeuDA03R1V8rZfKh83XKjNR+oW0tHp35fwGU79ZNSO4VYOOb0xPu4mOabHuHzaXBE3rZOWvSYBX/XrY4cd2DyaUK4Wwh5y+VZUkj/RaDe/cXuVxuUQDp/gpl6snyd7Zyb+36rO/7y+2V3aaSc/sTt0G2gfIL7RrVc6rUXSXNjC4u/3x42oZulaYw/p3PEF/lv1AIsZHTsWfkS8DfRMTKP+Mx6OyuCi7Uy9HRf9R4LmCytfgkKJeCy+mFfUf0ZDu/xaWVVJqZR/g/3JAvGNTYn1irTTaR0KVqxYfGATTwuImAoWbyICDYMxPyuj87KqiRK/Yl3XrbT/HzUDR8hEfffgVmLIqO2arYuqPpSuTQ4mDM7mmBnljbHzWNtte7C0/4QxYLIhhG8L0n9m9crovNKM05gHtbjfD2A7iXBseux1moSdaPLNPCJK3o68/3cCYYTxofb1sGAgsxjXEspjDGTgSuC9TfalEb9avcr5ok1cdGL68dFop88cV3uNFnw4WimjHWtCEEJvXmy7gFxrEd5AAAfX3ppnaKxxaA2VKFV1vISxcqX4XhW61OYeZ7pPU7269yQFV/i4F3fa/oT7z6NgNwxdYV+46GLQPoLvnGrtlsXl2ZRqG+p81dgqFB1DYA0XlIEbd5+BihS/hdvxXkkr2tw7/5rA+shXE6MEght7AeAxl9t5EES7IbP3WGgzmDWgOzn0ZRUnopVZteLjq5V9dQdnK0MIDYVenoq7mZm5ZaCbFQ/1SprR58+WxuRJgnbL5FiS4PRgMXSjiQTvrwkfFRKDbJoJxcr3N28OLFHsT71anzAxrQVaHTxDU8e+T8sEs/P31/4GC55Mw6foJ1Lny818z7SPXsy0O2iVxvFCMT+IyxX1pLNm6y5z3YYIaYJqx5dYRQjVFXuBI9kqHOSVfF5+I4oVnxajC7Xz+v5SXPQzh2TKb1ANPu5VLp9dd135CwwQ7GYuV2obQ22oTUznnmr/CN8N5ZFxvRVUx4oXZshFbuJWSJv4tLsxqNUW+YxC/V59qn6whTOw0c7xHRzpK4R5E3vsdACQr4iPMMjU1byGI+T0NB4DyWOAoxdXpAVBr9t2+M+WEwESVJ/pIhgIjcUYiGtF9eqaf3UXh/ZbEcQ4SlpJL1baV/FvZjU/z11OD4VGghISXky0vOPdoEnUJb03RKi+8f0dsD1QPQwEw80Vt+qV728/LM3HeW7m0f94Is3uwbki2wxO0oVeeT4ifUoidqUPnXXPZWeclcbBtGSWRF0yp+V0IEolcdUEs5AtTkEbimDQ8phDN6tR1aW/+k+97lt5qZZGZOcbmB6rOR/Aq/HcYWDAlguZ6Z3JNCvWzeYdfDemhcbYykntqoChMXPj0//BW2bq0SOjoFvc6uf1bfH2Zw5rrNcrprcfGGr8AWrLDjvfB+IqOyG1U3/VIfkN7r1v2lxlOwl+B723IgnvrVz3LJFE+4VAcpsEYCW0ql7Zv/aT+vpK9UrVlmd7nCrMN05ZrEvfyWa+NeTMqkE1NLXZ3KuZqbTFN4hqtazGZ875PB2oGG9iaYRpGKL7l5dUp4TpxbBhc1q5UmV/9fmjpR/EjHM/Rs0DPNYIqq7vHwTaB7GmTRNgNyPIRT7AF+uG4kA3BhjjBZJx4m28tm2zrTSQK7tnKMZzRxUb3cL2/f29Zf3VZyPX8vnXgcSAciVm7ZKzC/zqnEk0D2z3SCyZdFAL75yPCaic4QLnNJdJlDA4u1bOTchQhmjadsi4IphW9AKG4lalb5DeQctvr3PVmNdXwnwIohqnyXyDD2q72EBtNoLKQXyI5sNKQq20BQ6VlaBYrDp3pau0bSgfl9mb1sv6F45Ms89O8lKfjCvfzabAQa7U9WYaPO8YBjgRmb2gejdxukvGaHccPuyIQSRpeV6u1KplvbrmiuoAhoWXbOTlxKpl/Ru//StUvL0kNBS8vkMqOGvgEHDG8HF34eU7Zx5qqO2L3K5UrmS6eYH8Rp/C5GGf1StXLG3WlgUfN+ogXG2sj9iY7FitVF+oV9ke5/NE71z1Xf2fsatJrZxXogZ7B98GQtNc6JkfN5kbrsW3gMh4fgeBnj9j78B3BW+9L1bVqSrJkpwQOvRUyKWqU+env4sMjj7ChpXzF1j7IEHEDa9QDUW0G6wEzimfL9ylT95KvGtQswTdOJfvrCztWIAYoXgQyM40xyXt2HfqGDY6LdEP8oiTq1fPt3u6IIS9AN0rWqHKiHMZxNjgC0QywmjZ/xrlkppcMcTADSgTr8B+LEVTGtOmGRpdLlYkIZl5FzFnwRiuVnSvZI1T0U3k0oLEIFpzSvor5mNnslCN46qEmo14C83Y7FhY4sUSUx9CNWSvMI4XC8wss+Eu0NpUiTHnY9pkGAz1Cveq4of8W9D2dIdqvLRb5Fxf+guosAs8vsj2PydtDmnpH9Zp1YuHoWR0xZ/gnCLsWthndqngpuG03IouFfULW5gHbb7zs4Qhn6yuWvVisLGVfdu2zaVSaYCVdgN/2tEkNz+s/o0jwKF7k02XU8sY6hlccbrRCWcmjbxlsXO/UEBh6BXcd75XsLLgGSfvz/CfDOeDlxJtbGLYX2bs8gfYGeP/QTzmdB/xLl72Xih9XhM9DdnDWe2pL4W3zExp52fQqrhYRpIOgTTcUL3atghvr3jv/MnwPvq7eHzc71rcq7bHnXhpSwoO5PPGwrCgFfS2t/KKxvj/TlCD59IiBNWDyYcY8EHsthRHm/AEbqFhOE7L5HlV9DgnTyLixMBHtGGLWjGobS9zlTjWpTPGmIiTGONll+fQ5uDO7sAjUuqV3qUayG60XFNg76lJxQzm0JLrrLhgHcdm71XMaKj1V62JYkw8BqpL1E6TldS2whjHkB3DaGHj44yEzK6W406M2Y3hcR6KMXCxnBNrBJnAt865hv24UOFS7Ttdr4TfXsZFs6CMjY7VlN0f+fI15pB4hdoNGqf0TtPNu0lAteUKRHbvp5q5cZrLNZuOYUKZmtf8Sdkavx8fofIZbsX+6vY7s5FQw8cmCiTur3naA4LNGhPbPDLS9+B+4WFMGDzluGj+InP/+TcjvlmmkzAiVKrjP6utVkQOXfLFim4UXS+6V/wJPsk6+pavV0m2S493EOrKxnZXFRvRAV47kqnUwLJiGLuSPbsDiW+UcZkd+RCk5HIcBjkxsWEQ3wXeR8wy1mSgULpeG5X3fYv2zrf6fjD2x+ScBFgM9D8JmjdAQ6f8NAneCKv55MQo/zsgo58gPY7TyHnW7l/n/VTwFZgj0TfulfnB3mbObG24Xd9C77BT7YpKezF3KWmtWhXDHbxH+wlWwPZOHJxofI7N7AehHadGDAHlU2d25jyy/8LFTt58j7OY9qqSaylgoeGIwr/hXoWv8PteIYe3lrH+56wEZ8bVXdwY+p/I5hlsjxObrev4aJwxP/3Di8vcCCN7eQKxyaG9oEu9PUS/HJnKhU+Qp0CZludsrxBuE9+rbaO+XaThZb++t1SrJAYW4bA0V+naJJql82xn3+iia8zY0vowBh5YDGOhPAnKvmtSMNSXpLpWTzIR1YMpxxOv5tfczLzjXh0nFf5u8eyc7xmef+5pXAk2zoE8RAmfPZJj80elIdd0WNC/jaZlCA3W4+TFwLJKtFZeDoxtCy8UJSI9XawRrXaemY+Q28+NH8OjYTh2XvApwr16lnjI/5yahp7Uu9Q0XPbrJoxR+KHcioKY9m4u1qdRdnlKf3Op9qYo1F30GYQL9AzTXnkE4S8XnxRKFd+r4/Pb8A7+Nffq9qv0DsbbZjbUtgw1DnBu6w0D46EDbPmaiHTVsS3fAyRt/v304ylrQ7j/07lUJQpdVZKQNAlEj7m4jGeAXe7VhnplfLZLWN/baTVPui62ie6lW2ivnccHhBIPlLnBfkRDZO3h4m9Qs6csvODw/RVjrcUpm4z+zRcImvaJ6bhxbT9Oij9C7tpN3x604RUOZDZql3PNwBK9GHA6IMe8yhmEf0yD89G0J8XdKzOGYKtgLTASEvOvyy+55oyuEgDfOnE5l1NaTjvmcDrrTt8eXal9t/MgAr2udl54CJGhLkvnpu64OqjtOG4VaZXg9yh91btAod/j4KfcKys+FR8isZjLMbQX5agxK+bwwWQ1Mw84c/4D5OtEtWpDbT/YV5yp9yx479z+xGuJFtJKxfigQq17ogyduBiG7gqJgmLflFBq5ZCcxJQ4s0QFmyiSgc9nn+NJzQR4rqE1Vx4JDTSP0FZtQBl2ul7HvforrWiF336CGBS60tCu+kcIQ20Zb6wjWIyxu2RHf5yQCiUmJMVOBc+K2eajUxM6qQUf3aflvOJCr8CoKJd1ulbra5NdKmEyt2zffrtnmvaeEWRSVV5rStRFVN3mIJwf1T6t0+oe3j9KQpWUEm/1b1W/40WCk9gxRr1PVl6ermcaO3+A9O3hHdzRX30Z7VLxXqWkK7EkasiMAfb//WWuWafCrm40QSU0CRovXyeP4DjKIOichdkl/tudkOPpFLtobGJI8rac30B68egZ3HGf0LvTHodKe9lf1M44reExgCxKsFV71Y3GZL5BtxK8mVcmkZcVjmfXNDKukOnGgfR/FpQYe8cZ+Z1kA8Zu7LQPPPM8BN3bNqDG4eReXLJeWq/SoLhkdj4RZELRahqxiYYfSl93uiIMS1VdvJbveN38Htd1mW+UpS3Ji865n7j3YhpUR0fRvJ3r1cYrGzx/3LdvOuP8L2PXd+oZ/on9GGgIvGvrflnYB+3eO+vOnhLUzFL+gZ5KWobg9AjG/3SCkBdLd1wkNWKCsyMtIsD2n3O3ioge0ims+4s7rD2CkH8VuR+ne8WBjL1mxvbNleuxCCs7WcybFeoYdaJqRwS7Y6lZ4oVSp1stRiMR5hstV3lpEt2jfaf16ab/cDv6OjAZ8xBmZ+fbW+q42qNpgBD1gvs/WEv7gRlqGlJycqwYERBEMonjbk2jaUX1lHwxcZFBhhkgH2sE13nOgqG2XPE5bfJj7tXfixyT3/dcwBk/hdgMXmwFVVRCjEeBQ0HqY08iy4/hvHTmsqtlE4VIeJ/hEVlwYVoW8PhCL0r1al0MzBfjxrzlAoLFo83OB/bSGefr60c4QyuCXSNEbWDi1F7RtEWspNIStYyJAhJMStDn5FQyyDSi7MWaz+YeLCc52P7sVriK8i1HOJaVIK+c+Q3cmNfH/u23orfhW+rHwPDC3cYF/cBmANpKahdGgRiGnLjLg8vO4426s0tEs6s5HRvo6vgQw70i14U526+vqFPUrx+ntm/mJ/QMvJv4ilvRYm1vrRDcrCX6CxpDJ9pKlsCZhzAZcIJzzMdHZHk8yhwIcsyZGrOItZUkuDDlMRD36DplWWmbrk8DK2ZDty43i/sru6PP+xTFil1DULObwaoevOvwDjaDjbjuRIDTdYlmlzLmOU/CcI8x37hqOmXCYVhgl7aWqKE79VVhF2EOyN4r+Qa/aI3zvJwH7xlTootxcNCts/qhdCMAmVgA92BnAQJE4TZuU80iHbjPCEkWeKsuS45slVoK7Ewfor3gDoRvAxiz0ZlpbX+WtZZvMcDA8yCUXb2aY7ZX5uPMpU3YtBBX0ml58eVzUV4stFywbvI1V8yIeKXb04ncCpfMRpBK1CarG9swfJf21/c7CB09f4JXMw7pSsjNHm1Vz3ZzbY2cpq5zHclvjD3toBgf0GP/AUNMulgT6yoRUFJgHc/GkYhX8jrgoLXKcthX3XHt6Eq3c22PeMi32r1qWQ3eIrlEnD6anyzn5V7ZdM9RQytP5YrN/7lX4MTvyDbNZffNQvyn5kqYC3NWdLoRbUHgdT6cVQsW/dUZp8pDjpc4WDVHLu19e5HXJcJBC/JRs/CwxOMHWbMLxCDT4CRZqN6olTKh8otIlBg6Zq//mV3l1ux5ySbCNKD7aw0f4PEJmhnnVvZDfjshoqmb7w8Ugx2SqJrY8HgAk2FgPNSbFsto5idu3WVe9kn48JxzZ18AxwS2MbFo52Ro3vkNFCAGh3XcrBe176Fn0D3OV6ziNfPgLTbaAbMdKrgWy6624hANGycan63PB+PHjwQ0HuFdwSAflXYrrKxlxUL3HXJhWU0CX6scLVuw0KSw03lt4TeWWj6vcNEWWbu87JKIz8uOnaObh7isawLOe+zycUB9n+Er5OP6np1HsQNzxQfQqpVkKTHBtpcL+5xfn+68Z7ZjYPj88A6icb89vyoedElkENO145DPthZzDey4MUiMgRkecVQXib8d+fgCPJ6MAm7StXM+vwVp1qKUny3KHj+CsmemydlcLJ0GX3bG4Xt1q9R2Mh2/h6/PbryaKlHbONl3cMiEAEcM7ZMHkGPAxbSCqpRHoHwpn2sRbdJkeAwseptlGzgX9EkgeaAD3UwnGt+rpFwV7pWwHhsl1PZXSQmdfIVHYQ99w2BcwQboBd8j2qMIBokcKmmxPuNEZCPygMwk6cwroPY5waw2Q/LQzmq1V4r+mHpV5rff4iUOXa+2N0a+fd36uCN2DC29krl5iIsVe825Ub2InO1BaWpW55izK2aSlg6EPTmmdGbeZHljRkGMg2nf/nWNybSt6JUajUT9QRScGK4iOFYl88xQQ836MH2o+mKyV8XxGpZIDDoQLshLXxabSjJl69XKfgLEodWnj2rVcUbfh7SH9uoV3auLd7DVjRcrnFsRwRUL1qBuvkJlAEk7CHAe1vffmR0OpZoF6GpEdLp4iFbGQEPmUymX2H8tp6X8thkau6lWZmx+HW3WS/TONQ3vn0Rc0sN6nINd2ivesWHTDnHG7mPMMh+VecxkWi+UK7Znd6WeYVEF+LRArUv4Xm53intFt+k0NaOuh3sVGUGWvMKMAOCOxKBjidPgC2zrHtGirVQfQ/jyDUOw+YATg/uQzYS3bI9JmFfC9PC5NzByFojtjeFwnKdoU/+eYlffnyDKu8H6jsDUX89bDRdttWRxulk4rh+FzXNOULBCMR7teU+w4/dDcjfGSQOtETDvaiAfTYFTHHa6zhknTF7Ib1GnYKEYakePIwv3SnZeZQ7kW/oFCoLciJ1oW80qkTjUJt52iWYpzZTwtOzi9BuxmPNwhnY+D1gtJqXZPIKEiuaUXHRcqzYMOB86La7vsh+0nO1cL/q8YWqGXEIQZNl1tVfRlYOJrBzV8lECJaL9jWeYXT0+RmAMNaWSTjgsp8TFypoK7MCuuFqtMW680wN41Kod9ypq3C/ewVaiOHjV1fY4sItsJVbgqEX0qKT298jkwwe0gVfOkihIsLGTNPDMSnBRzfykAbHGEPO8ktjRVgHAItrjKij7cVrhoEJ/pZhMWQvwR6hERGUw3uPXshLZScDjw+zlO8reiL5BclBzmANHca3wkQDcFS3m/s/Y2aRIjixBWCCdYdZN86i1oKr2gpJ4BygJ7XPR0PsR0glaOkFB33Yqw93MPaSIyEyGomcr4sfD3eyzRUUMgB3bMHBJ9fhWKvjsvayn1B7WlZxcel6x15d7D/7wQoZXtwNbS8Ipr6pKn4Mxbi52zH/KLhxRYDGG2MTHZuzKHOuL51UgbjFMBM8iInYWVvjeNrv9dv1Ch9RW940Y3oOqFy3pZHheKVzAFaJQtLdlc6W+Bh0+TZRqAVoBtfZIfsyIS1DZFbq0TMs+JND1s5H+ZwUxzG77rSn+wr7aMMKezG7WfMh/4YPxbKeu75ZcV62tK1ExoHv8KDCoM107gXONQ9o3/enRLCyG3mm0wx3Y06s0FiVXs2n5nEViPTskdiVVQPEvLQZXN+iT+ZB1Fc5483m9/Lqz7gs9GZxWdTRvLo2cO7sFYZVgwdA3mdE8HbvqBf/+iyuQoMd0YuzsCHPzFEUozQVWxX4trbRhFT7VdllXt5Je9IfF4LwakAGQzBKQoSHVPp5KdL3Brvo3Z8IZ3gbGT41MyXOYueSyWuxzLcYa8GLaJTGV31yXHZNTa8WEd6CuKylG3Xl1+ljXnkxdQ8vg5f8lpXaj00GsKwtD1cyu5rKqBq6r0UYTE0n2ugeHJG+cCUrL5KynbLPP52fNanrHy9oK38k2ocxxqG8PLeTCPYjeVf3qkSjPh4I3LgwObb4PJM1/QPIh6RsAajsoZpQWm4DY+2ehS9Jd5jkNQdn0S1HpYcPT/WDBroXodvi38y2fR/9dtyOCSr/UK11dYsMpGLsase12UQhVx5zr7gyZk+wbFXuYkMEPuwox6RojONkluGLOFVftcrJbH9R12bVwD2NBKdi3+3n1pA75f1ReqceLer5HCjXXaWiq5uKWENPg29nfLBMJPAWNM6c9hjE36loMnrbCx5WSZ292CfL+W+19s+MhGPYfd6Hcg55lccvXV3V0rosJ50GyBEhEShtoGCphjfazD1zxHpGxEi+by+G+UGtle1BHE4uSVnUDzknvzS57cNviZeUuwYOfSu5By2rMa7ZrQDJfrYFc1U/wrkCbq5oT/7/r+qhk+BwhqbWTPaZj5t42p0nzXcUnQYsatLFcu6G7yPh4WHlN2rb74iocVVoz+NlEVieDUbOxV0Np5exdGchO11Cl1kREIh0M6sf6GB1JFOo0s3RNiADI7EAE6uo5Hz7WpH2YOeUTNKP8SRCjWg/5RrKu5F/fv3/wIMQo9SXfF/VBu7VPgmufWlfeVIJ8wSagYz4cvMmtq0ij7YTaY0yriBGGFB2vKNvXU+bbDneg1xpH7dDwwaQrKq0Z3YO/DXafzTF5oRvc6/mCBad+4LA0L2oXR82HJ87bGTAAbtOAoh0h4BAxjIk0F/NzTbCAT8rPztfsev0RK8CzXT4POjH+R67a3WuZ93mpULR+RXIe7RLlZ7O7B7vuBB7vrmFBSh4nZQf8wnhd5YN1Ce8N1EI0+lLX4MYecryi/KN550vwiHt9IUMh7x+02K6KA8IyzVfVMSZ7jNNK5KRquo9T2f4uCEOXQEUPXNpVyV24gEUEV6WZSRywgvgTzm7si8n0VP7VXjAAACAASURBVGtQdPgO/I+rr3497LfDAKDzU6VEt8+E7XYuupk4e3cHSs0+fqiYdqC5y6eaDald6LgCBrEXFZFCVpORCJs9CrfL4jq0I7rF+9BkyOIxyawrUcW0BjOU9I2HlGj1gDeRuQsfq8cDJzKVKOjq012DxD0mmAIRjoE8gcmlWSekMbau+J3sGgxd411LK/+1/rHssxi9k57j3D9V5ZjaZe1x4+bOMIPjMdi4kE9zWI7s9Q3+eaPOyiTAcHaYKx+6MbPDHq2sza0rL8yWY12vPllT24YOA9bV34g5kOPJ1D4rQckxZeijTQY7csE8wElezh8RTLvXtw2fOJMLNhvyvi4YlvhmXnV8c/aTbJjdqHhoh4LBCWn1+2x2UPFsx4z++x78ectpP2o7r4jaqcomnE4DzoBTY8Ug45vE+wYBg2hfjVS0j/8fOJAY0jJ2w3xAd3zPSEjNI4AOdfQT6x4f2uQTDcNxqhl8TNxLVlNUE/nYkn4sHdG6WIN2VeOTrtlnUEHtW6ix3l2GemSs7LELNRY8DRG1TajQQqUcr9q3WhIQFNFYsWrHJcjH4GlJhd8fzJ1vBe3HD0bnadGgKrX6iVjwxlrtLgkunOzdSSL6fQ3qTeiBqxm1I+v2mdo0zrxWlWhPZ6gAVpXauWwXcgfKoY5PFi8txC7dCvyre91eUyFavVZ6YBU8zg1NOE4j6hIGr3ha3YHT/UO9DzGYCKd7zgM3UyODOlTVQ9dAa48s3K/qIb6aU7/gm/hte/CWfQ/Kp1L86hPrqgN6lRPnqndihh6nlj50PtU4H0JddAvqBpzYuxoTpEcH80WWktBWEwJt+JRYgfISpIyPY+b9+q1+Z/Cil/pKHbsRm68uPXIYWHn/VH0Foj3gAl0EYzCo/TgmoGAlBcPiBZBQiSJIcL5+J4yYrXFsPT4ZB8pnuqyvP+YfjOVX8XuwJRKFY9Tya7A55ch6QG34Xp2H/w9mAEA/Rv3NFjafEH4s3mMpZei0GDJNRURzSvRoHomdR1YosEy+UFxXWX77Czsy0cS5LkXINpYLXvnZfGcZONF0ftC/5K6CiGIce/+p5kj8v1ifz5CFF3TaDmY2pOyRn1lm86YO3ZLn1deXPQdvSV+qDiVCYWVDnCcicLR0cIl59J923Ia8B5GpBAOOw8eMBX0ons6LWCxXhEikLRI7CCi7X1Mi88DYJnVauTnOy69baV29KhisrQkyLHSuGmMMNA3Qvj1lDN91VXehfGiTb3jXJTUN5r8ZkGyWwWizLXoP9VwkFiHhlVf/qTUXbBbPA+uI2saX8+q3Q/xm5oNOy+fa7W3ZidpEx1Usj2n6U2ylxVsT8NEbkijnJrGTXWE76pefII9x3ws1KBqisrJWStMOUae5RmhqXXHunNFfvSie79WJ2+WB8whfAaT9fT/2lnUd3oIgM2ivfXjjeRUO95GAnUEUH/46XC7ueS9nJ1ZgTqE9Nsxuwro6fC3KdlX6bP9rEVWl/pWEVzJtt3omGBzsVRHz9ZWbzvstCNoqyAKOi3lRqGXafOwgRzywOVEw8HSXp43wmg5M5FWllt6CPK/CzOunfxJGdXtNtHat5MfKTq0c6AqhLubXpaa2PwFqP0cVyHyOMOxGAVRjsrewOIczYvIYz7Wk07k28DDxIoyE7JmvxPPKLaziuhI8X1t5Q3gZo1Y59HHXMVVCNO2O+ajJlVAdDyqVYRzxAOBjHsmgu3CiTelaWW2srdjk02nNZn2r3XWQs/UV3jiZ80qqK/lm5sIpQudwBQZXCchgplHzDhxNI+6ZFTQ5KcN1XVmxvnAyOFPEoN3Qk+x/X90OtL4xJLQH+lZ7fmGxbpdkjlxfFDSG1hnCHwm1eQVqBo4f4HQpw7xmcMhVCKPE+G/aBj5fstPJt1ospPKa5bmBWKhdvsNpaQ+7A/fSuroVZl7ot9dtREVpi655fQpqp11F7do9Ph1Xg2lFobzqnVNC/uYkHxQ8TjPV7Moad7WoqDwA+7eu6AGpx7Efhc9kfQZyP35mPXEwDT7xqXy6i40kLOAsGFHhAACaVoW0dAxOmAuOJT/J7FkMMpUIzb5cQtduC8pNJuQdKI/Bfc88BjHH+dJllVlXLy/6qaracVcfkqIBcIrEV8h0iYVEA7UMCHbpR9NcXV7NiwPU4t8zEhLu3P8zEnOj5S1aWZv5TnUacZR+f2yMIzDWQp8B7Jj6IbsC25CJQb3T/5+H8zofHEfNoLKskj6CYg655BvJcpk1d1FlfMu1eUxe2sWppDLHLfNo9nMc48lk6/Zao9RRtJfQq7r/dM6s9VVQsas8Da+ct5534AiNTK9+QW3ywV2ZJzFwfsqZxEUeSpvS6rShK7pWhyn/M4/my7o6IQdO/fbILhE24SODJRzObjQvykco1biiWGRR+G8dBnsLDjmnhNKOJ+bEzutJ8bHTJ7Hjg5FsxbI93QuN63bVIf96OYkgo3swvAYrQ+209ZPKR9+5sqzr3lMMTaRtLpzJt0VPusc51v0rl9Y88wlpjJH+rWW1mZ0kCDw2k4Zm63b6cfKs+x8qJ3pFEdrWxahdDQuCDTXoY3pKH7v+6rLUPvsns0rYXhgNOT6kE8F1ZcHZjOipOeW/0RwX2YbQpaHL517P6XV1ysfJ6JCVHyOyK75viiHO7kMp+7i3mzAFcJKoeexASNTKAde8ETX8ZoVdKTrXN8uz1tHpekROpWwb5voedLlLt8y6Qo46EhNK0LnGHKldHK8kY5vOF6ID+IW9gK44cGYE1QmlrcHWi0vL8xztebmgVoEOtebxHtvkxSS47Q9qhu+6/e+vR0zyF6/mq13cfJslonTYiU3FkoEZAFZfycF+D0t4H8jmG/y4eboOu67NUYuqXOc0ssLEj3YLYha4Hxya7s+tq1/5s/2H+eEcTzRbubs8xs4CUcl7dHK+oacBFSEJvVM+4lPlqETL7ChXKvqYxS14Mb8pVUctu874pgc8y/WtcA/GmzC/rlhcteUGg9okGnZjmnPA2ckI947MrmgyOIwuNnbMcXZmMPksH2E9kwV2w42vO78Sj3YVOYZ7cH90XplY7We+zyBYbRV91PUj9bHSdiKpdq/4mI/YCDeo5KM/eXBoVzoZAGZ8KD8dxAWYlKcpWw47EPER1GaHPvKjB473TfDxnHoP6sxZi6u6PMLhQcUnTuMdS5GYz53vWFS+Es1R+WJZnzTapWBYloxNcHXpEd9HPEor0hf24+FV+AfecJGq5ftXNbvH2hZtH40F5aQSsLbnjzM07z6NEJ22tPpseHPfgpzgxN32xXf7tN03oR86repsvmhp8XD2+BOpQoFOe7gFfX0V+u1JL4C8BxEtUT/qx3B+gzi43viYkUhtQMvqHQP6QVrHwPIlqePnJEY3kUABuqTATRg14w6EQX7bTWv86B78nZRAXvqibdVa4HUx5KyJKU6VVQy9s85/uGTiUYA7g+KISGdP6bRnw/1Py0yEkwLaNWD+8mxmLkLklUdN9URDBn3RL4P8prkfOkqV0UQxmrhBcl5TnWw4ijJ8uxCivTptGF1Qwr8TH4PjdRYxuy8HIt/savY5fgx6Hu3utqEo1J76PbeuguQK/ua2zBjAxBmR81XPUhRhQW8fUjB88lxXD44Jr4h8HKdrmy+OowpHu0oYlov9DdCYzYvZOWq2dbUfD1fW11e8rrL9dgtyrtQFUHI5N2iINiaq7TVtvrvoGFCu+4xP9mPGNFxgIRg6qK3WCQVWvKgwEkTq6cn8LVidY3tyXdl08FbUM7QoQ+v6kaAWdDB5EMoMtaecr090jy007z/izl43chyLwgJKz7DboeEFCtisgLVzASU9gSUwbVRgwPkQ0oSdtOQHWO/6bbek+09SVEkbjGfgmUFjEoKkLu895ztiF6TY5tTN7lTKmXfK4dyv9NntvjLYwgcrhkf31UVV7Zccf7wiQR8ng2vpMeyrF91puAKU6K3lMSoyK1rW/7eZFoPHIEYEzSVkV4LDlGaoGCqnYbvFt/c7yDkABftwcspjXLbK5M0r0tXV7iuVCS6OCckYbNPGSvp3DjbzMeJKIPaDDJyxCuWlmqZpeuQYPvwdpCr0ciq2zRKSFiRUBk20N6ngyxUv7IpOXs6p0srrJcO7HQJQKaVEeUoGDqmUXKBRsT1QwffghfWbLXG39436ipW1BfCJ8ng+biLXsquQjwlN0TccDF5BpP02u5VqDthtWM2XGjjrDsO8fr3nbmjqwqKQdFUvEAXl8YphkrwJ0Lff1vQMUjFsRcEVEpcQOQBUYgnqjxtshyL639rm07xHp8rRjseCDmOCfBRqzdCYUd/rg9zsD15Xcl9RCzndvxJ75WkTa69TgyzBAnVXisjQis25jfT/baIj42ztAD0ZZzyoPtIwYBXK8n/UsiNlLjNpju+rZbVyPOQz5VfC1X4q1iZeVcFdBla3w1IVZNmNADIMPVaRxJBE1UWh4FQqcLanwNNWIL5I2OnD/Ai5rsaHN9bvB3jIt6d/nYhrf9medJmWaFEqSm1ZKU27kI8bdbNTzCd6lbK5ShxZOf906EJ1CYo2DSTYp8SAVRqhPnhfUU8GVUW3Vf0V5UpcLisIi5IqhUK4j6Z5VderPNFW8sDh549sAhWzPTqO9HRRsvVI0N5+5I012gJra9S8tq/WcwGeVLjEJpiIJX3KLYE5OBUXoi88RsUUdSxFa0JEo6LWIh8dM0SNZJQqhn4ld0MlI9BbcG+5IN/BD5pNrN9XJzXqyrgGK3kOqqu9Zjc4eAAkAEDy8tR1RZnEiUQXH1BXHc6/esXxtTOJkdTsQz/I/AaO4DA8XohiffW+qW8vRNW+SfoAIVE8nS/DoE+0N0Ojb0mTAFdXi88cuq/aZDXqGffo5M3sw6HEqEjHg4q7YeON5i88XLffNvYVNtpPGVp7qRiZIG5nzkAl/Bjjw2kojZFScKgp03WpldLkR4qCI8+u67yZy4+M97DhQCj1QEPX8PhSmfvqltEhs2Fi2VWXB2JRAz84Z5zhIHXpXTXXlsIS3hYpEZrAmzbm03pzEj0B+WAwLwjf+HYHPS30Y5iDKdzQfd9Bs69uyTkOJ+8Wl40Y54qj1NVXsMKs+VLJrrAMXQJkSXJcWzFRDB53VqWGvRjnGN4Us8ZlXxkLKsJ7hx01g/SvAutS2L86iWf3lPkEIqrdokTpurJFwytnACCvvW1JUNspQuZqbQXUJjKgAhTMNPn6XjTalhyKvCY9ldizr/BBeF69r5ZcuO2cz0V/jAHhRsqwEKIZH/PKffYawHzNcgRllMoTnDaadoGEAYRECjgOi+Ut9R+RfL0GF9IXcNi1Uuq+sgcw6l8hQOZUnLKaWrTgVHapCL0atkOpz07r1ZINh1cqqWUQ7iqV7b1D1I5LWEpE7KGsguR+G3fdV2xeyuwr1j6iSO2yegJL0shgp6HWxDkTCidwvjqIBk9WCz5MVYKbClS0Pmb+E51d6WIowgX6C3teN4m+6IqeYfal6vH8dhQHG5dqiRkMns0UCm76C8D5QFB0KrTLqWcgFfKo+fBBCuOoQI+9pcwR7H/Hu1nr20nPkNaLctG+NUMtqRat9FOQcolDKMMymW/YggMGr7YztLk27sZwwjXRmzAO3CdGEv3Q25WiZYLfu4oG5n7k9Qwk59uQ1JYSyyjVFWWWwL56YTf4G2hEMeEFp/N4XTGntknOBp0o/DwTiZSjZAiXqlfIGJ6eDjvPoPBk3jO6PqZdXdBneVnbVVVRsF2p0JyPWfeIT8ErQXYwuGvOBW8M7qrtYpCoOnseBqiIjiHTvPkKQo9BoioVsgIGEg/orXL7al3XR2iUB7CPpeiQOYOjgjS4qBmDao9akVc7js9b1dQ6E+zSqywJl+DyBVDMUc8Ed1bu4h+cdTJr+4qb7ZctQV+JiwWZjEKSAdOErRqureJjauYjsmO6tsuEK9m0Lu8TArWBIhJ0cUU4zN2fQeUftA7esM8AqSVbKDX8CpL0uC65vKpIoHbVGRzIXV2qq/s1VbO3iyaoTcpSoi0A1OhzVvg40kIR4UNwfPgB3H+1T1/Wu7Si66Pu8SWH1WYykeC1a8W118qrN4zapckEthe6mjnRnX3icI3geNLlaYDDWeAp+fEYJ6ZTjMtwYF+9LxdWiL8K76tTdijIdRUq1LAlWkv3uEoSyBUXTOCYwFPbZIl6tKESntbFQ4lR/cI6dFKc453HUGWfwds5qeuTIPVTlveBZDD1EUSATFXV15Tq47WWcKVWKANR99gMUT3rHjs0DPahT4LB/zwVxCp0GIRzfOS++kBW2Gqv76lg3Ef+skLZY4F90VIBZGDmfCVoBQv/21qDdlqK6rLXlaEwUGTl/MJxPc8G42HziPw0dauTC3waDiyY5AJksoTOyox6yY6c9b6qbQ6HPJ2xsHqtX1UcDmeCi1S0W9GoYXVF+0o0Vy4wSvQsjhl0oNJ4cGcFfIY1nxfNUfO1FXQXKPMavV34bF74mJLc9UJ4zIbS5hcnHAehNkmFtsqaJ5k2smmNqwtiwJe2sRrg0GBeocb31u125pXkbD/rOWr6trKonYpCZImRWYZ3VcsitVpHzrdsmW8Ss3nvTGwXSWNSArWR4zdkgEq51mAD379a0kIOA57tGcQjeMmzj4FAjiEvJNWmV7MsGN9YMu7qOOCMZFeJPp8OQlWBxL03EMOBsWBjr9HQ02D21f5DKLmWGZ/XM0uvtpD2SyVa1CpgiZ274aj5FX0AeLV3bRjuEuo9nGU5kf7fed/HjA9KjQ1jp7Bk2NmNUR7edxWQk1wrHElcirUSq9IlQ1lYy1LFbL6XgA/WEmuHDyHmgsfaR6/ItPQR5GizBDqGRXxKGyP+m/FIzfBNNQN8B2/JOc4zGuHwprpkUGoVq6+Id1WbVp9KsIQoHBh5kZ4PUTtNm8lD9XhZkUrUpxKbA8IHz+WH6VhttazVh8ydTeSL2VcUpp5vilJdJUKGmqUMc2hXZQfOaIQTmigjamNKtOMXoTwGncf4DTbPRypRmgqKjGHil/PuJftkuWjujfP881RsEn2pf4WfwUKgj5VYu0Sk1uAMRxC1NUYS/4HqK+Pb1ZQB12G94CVbMMz1hHpBz5tZon10X30uJ/CLos9W5s7zg5B21SUL9YV6XQuQq4DHMLdE30jHoN43y0iCFMgr6GOeDNL4hkaoPhHbHGIxsV7YpdK2a/XNlzvOJlK9vtsTzyWyWiIc49hgiUqRdl5UfOV8Al8bQTK0II5RJud0OYqzZ0/PZlgYZxNKBhJo96PNFBzHw/tKjXGCKGyzr84Fwu3zqfNMZFjCiUv1wLkGM+cGMyXAQA9VFqnamwjH4DvNI8ITSI4u51yCXdFTVOVgpcckTjuwsZS8PTObuBcNp8vqXFAkatwWnQ9gGfgr9QwHilGmOGGDAT+DKe2jqUX5vpoFo30wGiTWo260B6kb07E761uc4WeL/bBrRZyBTAeLxzd0t2MvpoySPilrnmk74lkib1cTixfk+CGVCCeCnU8kVnJWkOrH0C118BR+fnxru/Mqrw+6fafNaBdp85V1rfgV8Cl8EQ8ODJ2bV+kwiA+8Tec3az6mU8mxBHCKzc1DPEAdx/FodfU5V6IfqRMY3FdPcPxO+dqK9hSNJlB/jEYAbrZzsotQH20oanSze8s+phPoRCmakmkHQHuWxRz7Dtrp4Gqvbz6EpGjI1VYVypDl4axCOGhXta8qW4Ir0U5lOLcpJoNn47xKAGC+gLMeVML3qinqyEzMo1W7SqiyL+dwrX7SIp3ywnYOkS14V1WVrq/emCjaKtsg4kObDs9hY+JKvI0tYZrvEl6ZkKiNWLcHEcT7VUT2ujL76rw2H7xXWBuzwZIhMhUifZUNJ4FkuK/Qa03lQtuKvL3rVqEooGfn9QIrKn4CXUJ+zLVVzwPnYRgfYxKtDAd1R2b1DD5ndlUpKQAlB+4WfFkp7qpUofeqYYGoaY4auZzT7Bj5dwGoOe9jJtFI4UryvIGv4DgdvthN8FmESLFrdT7/45TfVqWS1JZKTQStPt2NabAdE7pw5IHTrKCiiRatWL7Y5XOmzUc0MLyw4OkszP8jpejycNbhOOv11VK6P6J/LPQTp16oosoHd99NjZYU8QynQ/kVFldNvEjKWHL/jZ5dF8JjBgGJDsqyOzHn6uh19fvbJChkejLnpYeV032Qnq/kFgPhMRepKF3upH2EqeAs1G7lCLZvinUViIl01TDDVomNmSD5UqCSDoAbg0DB3T8fMqAH+tX6vjovJVa2vILJIFOcaF9VwHCq6BiCbZdyALQ+BiurMG1Xm3apy9chEAU7DJFUe9RqPsF8DA8AwdI/f/v+UF/B5Qie18/g8/lnNsKyomI0NKOm/F0tTeiZM8AxskkfnFd1g1fAuT5w4IyIxxQ+u8pzmaZDE1TaVpy5FA6do7Waq/rcaxBnqGwLpzw4Rn2Y9+AbzZuxw9fAnYX5sYmb3am4IFEw9C5K6yIdEeL5xoHVMcMwHC6v7ttK9hVl45xXz+B90z1t+JwrnNKLWpvKUMY4LW9B0F3NppJXOYIt2ZXCM+hESuRp5NWTC0B07YpiOODfRv1PUS7DoToUPoJcXd3W+QxLv+++WLmXc1WqPl89t2RqRvSRZWkuqkB3BdxxqRi6RgyDnT6HLtxgiD8Gn0TUDx1o3iXMY4IxiGN+ONCN+dCaPmsESNxX81rmWqIsQoYLngQyVGDpMLg60vPhl3AFz+ewYKdfeFt1ofof8U0hF3PgbK7h0GWlL3bUiubrqyVD7p+5qM8S4SiLEc5kqdcW5IRqjwZNONpXErbbfSwq8hyVgBJRF3oAxt7ojqd5g03sBB8ONGPmI/jxoSTI2bfzDTbWe175QTJRyHep61I7Bq+17rYLEwU7xy3p05ouVYk6JRTFF07nQ20Mud9GGjhT+NT/8b5Z6Npf0uWLwnGSZ3AWlL6vjlF5X1Uk6KtKHOKU5pEDX0CQtTe12Cv5NdimDiEPBpcZDgV2mdcgdtlJzLCs2LJeaJI41Lf6+gYZA9Eycd51y93teGOd338mRaI8oVdkBv4GRhWW6h037CppV/oL3pRZnloMvk+gdtR9JVbwSVl2D3VimEXO3eP83b7YwBZzBe7G+//9tWhNv/Dne+bmf8+//7qf/8A//r38xf8pf/Qn/tGf88/n5+evz1/T33/898evaf77/tf954f6/sEj8Ivxj0RuDz6E/2vvynIj12HgXfjBg/FDgC4kILd9sVjcZLnbeZnBAImdpGNrI1ksUYvd3WdeTaQ++2uLAw/mdvycjiNpaN6Y29WAd97B1YSphiYh09PiBIkj2u0NrcJdEw/9VADzXT9SzXX9ONG8uXHep2M/E3p4ez10y2oku1ja+h6v3T7DfDBkgiVGK0X80K7rzbOphqr7qUk/LrP2qyLQ8sOIXrKnYR9tDkJq3XGM2equvQmh2qaHesSGr1nC8+ao1tslSqncdN44bV29iVdszKq86mDV3LIY+qcSVF3nzFEGJ0YH1WU0w607/xooBp45N52Z6BuWqF5pw4oEYgpvi2vI/3Cez+LNpePFviY80ZnPbx3cY3VARceYad3QjIZ3GlaXuhrwTO2mMKDBDpjb0YG1XHMQTVs3Zrbm4KVihqj5wJwzFyQDvlIGWbiAfJViOnZ0eeXbcOOcl/VrJvjNnGEuCkXBimjUGmAHGcZwR5mDG3ypggfgNFVgDCiJLLXUkW5oBjF2wC5vqDWLizBcKT4pMV2BRiEtUGsRIdEXGvwyjMc5EFu4one8krnZoBFLfCxEdwFDhkPXUqgfeqGsQ6nuZbpFb0c9Q9W8XX3B5uTw8t3iFNrsuf4wS81LwDHYb7E37LHE01DF+KwBobd9UHm1RqwgVkAw/P8IfQLMUGTkulag4pSKJj/4xajXPSX0s4KGY0od4aHRFhnDWN08shMmDO/mDEot1tXjdnqwMmmv94hhv+aO7ZSjJQ4vNOhLkbPAvoaKIqpX1XrGbZxppe/dXfaPr/rgRFRmbD+D9bMPkfhanPfxCtNR0t2uXwaVfacznxc4F1hFxPplaB0WY4NBNhTaYCW+N8MT599EKv3mXdoOgxd9kHSZLZznWT+dU0oq7LLf5JXBhZg1g11ZSv9AoI7eg+6Hz1/lW1gxtpLtECUnTuPXZvc5yf+lsqXKUqFti6GlXdOv6jRT8VLoWWG1QnyuwLzZEH3FK7FbOjYaQvSB2sRNT7AcUFGaZP+al5Km+VhgRunldybGdUNlltx0/ZVWLjRYcFZSVfZsbkt5tQKjmEjsWgnf7oN4Bl7EJmYTLVJHmN7qEDi0Ol+ksIG9kl/tOeI2OC83xiWIchaon+S6DsGzhZI6P5AgFSlYcp9X69wBH0NTOG6pDhum+vrVA7kzAh8PfqFx7R5SOzoirWPHPovJLQbMJo1dBEer1souaORjskqIvoLVjFe2iiaS9WiuOVyTUlNGy+yuIcFA5KVOKVWudyq4ApsCF0LrQRkn2S5tbvFKeyHtteQEUCuCV/XOtcPd15btfHIln1t1wMZrr+Xb3h54xcRfwoptQqaA+5RLp2qxEhCQb+uq5HTPtPK0Zi1eTgnbUqmNQnzTVnZVUxS2uoLppyLFL6jzklcTMdLvGTeK4gNp9Nz1cpn+oik694iaiHvkpvo8LgrF1I6iXS/ByXsuv4XRxS3E0XgtG1B7qzpX2g+BN2K7eEeExhUJgZ+w8azQEEeKP/CFL3Znm+PqlV16elEcLLDd3NxJXL7eSpnxIqSI2WwP5gE2A4LJ5ZPvrMvmZsR9rCCFYDjr81nTLhWmpgCVsFYihRIC9qea4VbliU7xotlBF0psphBnNzQD74JhhCIhmxC4NoQnQi2k83Vcv9EHlVfq1jmdDcqwxUDN5uR4zOeEg2mO8Txl2yQDp7ynO1g5YDK0ULNUmKAiJ38GS1VRCeKK+xkODPn4eB0JYMvrygAAAX9JREFUOf8PKwwI7DoylVGVDZEcFSFSzA5jJLrPZIx1gQIVkd0R0MxYluHxHjULSxDG6SQMoPLC9jCC4U+cfUhFPsVamel7vEI84LDbAobfFYJ/7S2vbAQyB6+8sr8FLMRHAfnQhi7PxHFITHLHBK+Eo3nIJ+NpkL7Kj91g+h5WTAviXFG02OtKAjkQhAvgnsYOZuEPNGYKfnlqeSsfeTQkGzXKcsO7lEvggJCq/GhX6Lu8Cl3RFU8rAVk7bdbLn/mStajRgmFfrkvL4M1lpcpOk+g8QusGHVtrfO4mSf4dmO5jdWaUR31xCCTU5rRXcR5ZYw7DK0u59E/yocGbluugmoBxtbyCUCIbJ/kUrJQ/iZU7sN48S7uIUvuqLN2VkoreQPU7p0izm+2lQkJXm3LVs7wljlwK+mNY3Tlkw8D3dV7QmN+3td0g/yoY/wCrf3rI32v6x2F1J9A+WP3148HqwerB6sHqwerB6sHqOR6sHqwerB6sHqwerJ7jDVb/AYETxl4kmFmdAAAAAElFTkSuQmCC", + "e": 1 + }, + { + "id": "comp_0", + "nm": "Theme-Color", + "fr": 30, + "layers": [ + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Color", + "parent": 6, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 170, + "s": [100] + }, + { "t": 177, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.36, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 19, + "s": [198.996, 84.617, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 33, + "s": [177.224, 84.617, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.36, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 45, + "s": [177.224, 84.617, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 59, + "s": [198.996, 84.617, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.36, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 71, + "s": [198.996, 84.617, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 85, "s": [214.762, 84.617, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [36.851, -6.996, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.15, 150.15, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-4.081, 0], + [0, -4.081], + [4.081, 0], + [0, 4.081] + ], + "o": [ + [4.081, 0], + [0, 4.081], + [-4.081, 0], + [0, -4.081] + ], + "v": [ + [36.851, -14.386], + [44.241, -6.996], + [36.851, 0.394], + [29.461, -6.996] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 1, + "k": [ + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 19, + "s": [0.129411771894, 0.411764740944, 0.92156869173, 1] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 33, + "s": [0.023529411765, 0.678431372549, 0.886274509804, 1] + }, + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 45, + "s": [0.023529411765, 0.678431372549, 0.886274509804, 1] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 59, + "s": [0.129411771894, 0.411764740944, 0.92156869173, 1] + }, + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 71, + "s": [0.129411771894, 0.411764740944, 0.92156869173, 1] + }, + { "t": 85, "s": [0.447058826685, 0.20000000298, 0.705882370472, 1] } + ], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 177, + "st": 11, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 2, + "nm": "Pointer.png", + "cl": "png", + "parent": 2, + "refId": "image_1", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 170, + "s": [100] + }, + { "t": 177, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [36.851, -6.996, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [33, 33, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [50, 50, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -7, + "op": 177, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Apply", + "parent": 6, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 80, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [148.816, 147.933, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [127.745, 175.984, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.15, 150.15, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-2.485, 0], + [0, 0], + [0, -2.485], + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0] + ], + "o": [ + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0], + [-2.485, 0], + [0, 0], + [0, -2.485] + ], + "v": [ + [-77.5, -16.5], + [77.5, -16.5], + [82, -12], + [82, 12], + [77.5, 16.5], + [-77.5, 16.5], + [-82, 12], + [-82, -12] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [127.745, 175.984], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [9.436, 5.17], + [10.745, 2.299], + [10.426, 2.299], + [8.27, -2.706], + [9.536, -2.706], + [11.208, 1.331], + [12.956, -2.706], + [14.189, -2.706], + [10.669, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [6.578, 2.75], + [6.578, -5.17], + [7.744, -5.17], + [7.744, 2.75] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.499, 0], + [-0.323, 0.337], + [0, 0.55], + [0.147, 0.279], + [0.257, 0.154], + [0.337, 0], + [0.323, -0.345], + [0, -0.543], + [-0.315, -0.345] + ], + "o": [ + [0.499, 0], + [0.323, -0.345], + [0, -0.359], + [-0.147, -0.279], + [-0.257, -0.161], + [-0.499, 0], + [-0.315, 0.345], + [0, 0.55], + [0.323, 0.337] + ], + "v": [ + [2.835, 1.87], + [4.067, 1.364], + [4.551, 0.022], + [4.331, -0.935], + [3.726, -1.584], + [2.835, -1.826], + [1.603, -1.309], + [1.13, 0.022], + [1.603, 1.364] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.308, 0.198], + [-0.484, 0], + [-0.403, -0.249], + [-0.227, -0.433], + [0, -0.55], + [0.235, -0.433], + [0.403, -0.249], + [0.535, 0], + [0.33, 0.169], + [0.191, 0.308], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.176, -0.257], + [0.308, -0.198], + [0.528, 0], + [0.403, 0.249], + [0.235, 0.433], + [0, 0.55], + [-0.227, 0.425], + [-0.403, 0.242], + [-0.425, 0], + [-0.323, -0.169], + [0, 0], + [0, 0] + ], + "v": [ + [-0.036, 5.17], + [-0.036, -2.706], + [1.009, -2.706], + [1.13, -1.859], + [1.856, -2.541], + [3.044, -2.838], + [4.441, -2.464], + [5.387, -1.441], + [5.739, 0.033], + [5.387, 1.507], + [4.441, 2.519], + [3.033, 2.882], + [1.9, 2.629], + [1.13, 1.914], + [1.13, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 4, + "ty": "sh", + "ix": 5, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.499, 0], + [-0.323, 0.337], + [0, 0.55], + [0.147, 0.279], + [0.257, 0.154], + [0.337, 0], + [0.323, -0.345], + [0, -0.543], + [-0.315, -0.345] + ], + "o": [ + [0.499, 0], + [0.323, -0.345], + [0, -0.359], + [-0.147, -0.279], + [-0.257, -0.161], + [-0.499, 0], + [-0.315, 0.345], + [0, 0.55], + [0.323, 0.337] + ], + "v": [ + [-3.78, 1.87], + [-2.548, 1.364], + [-2.064, 0.022], + [-2.284, -0.935], + [-2.889, -1.584], + [-3.78, -1.826], + [-5.012, -1.309], + [-5.485, 0.022], + [-5.012, 1.364] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 5", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 5, + "ty": "sh", + "ix": 6, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.308, 0.198], + [-0.484, 0], + [-0.403, -0.249], + [-0.227, -0.433], + [0, -0.55], + [0.235, -0.433], + [0.403, -0.249], + [0.535, 0], + [0.33, 0.169], + [0.191, 0.308], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.176, -0.257], + [0.308, -0.198], + [0.528, 0], + [0.403, 0.249], + [0.235, 0.433], + [0, 0.55], + [-0.227, 0.425], + [-0.403, 0.242], + [-0.425, 0], + [-0.323, -0.169], + [0, 0], + [0, 0] + ], + "v": [ + [-6.651, 5.17], + [-6.651, -2.706], + [-5.606, -2.706], + [-5.485, -1.859], + [-4.759, -2.541], + [-3.571, -2.838], + [-2.174, -2.464], + [-1.228, -1.441], + [-0.876, 0.033], + [-1.228, 1.507], + [-2.174, 2.519], + [-3.582, 2.882], + [-4.715, 2.629], + [-5.485, 1.914], + [-5.485, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 6", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 6, + "ty": "sh", + "ix": 7, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-11.967, -0.055], + [-9.48, -0.055], + [-10.723, -3.564] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 7", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 7, + "ty": "sh", + "ix": 8, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-14.189, 2.75], + [-11.35, -4.95], + [-10.074, -4.95], + [-7.258, 2.75], + [-8.49, 2.75], + [-9.15, 0.869], + [-12.296, 0.869], + [-12.956, 2.75] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 8", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [127.777, 177.234], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 9, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 1650, + "st": 0, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Layer 1", + "parent": 6, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [40.086, 81.676, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [55.482, 126.747, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.15, 150.15, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-1.71, 2.357], + [-2.357, 1.711], + [0.357, -1.003], + [1.003, -0.356] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.131, 0.131], + [0, 0], + [0.131, -0.131], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [-0.131, -0.131], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.135, -0.135] + ], + "v": [ + [2.932, -2.144], + [2.144, -2.932], + [1.67, -2.932], + [0.619, -1.881], + [-0.031, -2.524], + [-0.505, -2.05], + [-0.027, -1.572], + [-3.03, 1.431], + [-3.03, 3.03], + [-1.431, 3.03], + [1.572, 0.027], + [2.05, 0.505], + [2.524, 0.031], + [1.878, -0.616], + [2.928, -1.666] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.980392158031, 0.980392158031, 0.980392158031, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [55.482, 126.746], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-1.487, 0], + [0, 0], + [0, -1.487], + [0, 0], + [1.487, 0], + [0, 0], + [0, 1.487], + [0, 0] + ], + "o": [ + [0, 0], + [1.487, 0], + [0, 0], + [0, 1.487], + [0, 0], + [-1.487, 0], + [0, 0], + [0, -1.487] + ], + "v": [ + [-7.07, -9.763], + [7.07, -9.763], + [9.763, -7.07], + [9.763, 7.07], + [7.07, 9.763], + [-7.07, 9.763], + [-9.763, 7.07], + [-9.763, -7.07] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 1, + "k": [ + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 21, + "s": [0.129411771894, 0.411764711142, 0.921568632126, 1] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 31, + "s": [0.023529412225, 0.678431391716, 0.886274516582, 1] + }, + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 47, + "s": [0.023529412225, 0.678431391716, 0.886274516582, 1] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 57, + "s": [0.129411771894, 0.411764711142, 0.921568632126, 1] + }, + { + "i": { "x": [0.36], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 73, + "s": [0.129411771894, 0.411764711142, 0.921568632126, 1] + }, + { "t": 85, "s": [0.447058826685, 0.20000000298, 0.705882370472, 1] } + ], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [55.482, 126.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 1650, + "st": 0, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 2, + "nm": "Theme-Color.png", + "cl": "png", + "refId": "image_2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.17, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [122.201, 156.389, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.33, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 11, + "s": [122.201, 100.389, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 26, "s": [122.201, 106.389, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [148, 106.5, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [66.6, 66.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": 0, + "op": 1650, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Theme Color", + "parent": 6, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [148, 138.5, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [422.402, 183.821, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.15, 150.15, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-8.933, 0], + [0, 0], + [0, -8.933], + [0, 0], + [8.933, 0], + [0, 0], + [0, 8.933], + [0, 0] + ], + "o": [ + [0, 0], + [8.933, 0], + [0, 0], + [0, 8.933], + [0, 0], + [-8.933, 0], + [0, 0], + [0, -8.933] + ], + "v": [ + [-82.324, -92], + [82.324, -92], + [98.5, -75.824], + [98.5, 75.824], + [82.324, 92], + [-82.324, 92], + [-98.5, 75.824], + [-98.5, -75.824] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [422.402, 183.821], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 38, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [422.402, 183.821], "ix": 2 }, + "a": { "a": 0, "k": [422.402, 183.821], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 1, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 1650, + "st": 0, + "ct": 1, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "dash-3", + "parent": 47, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 78, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-124.221, 114.666, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [208.672, 208.672, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [-8.284, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, -8.285], + [0, 0], + [0, 0] + ], + "v": [ + [17.254, 148.659], + [17.177, -9], + [32.177, -24], + [50.233, -24] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.270588235294, 0.317647058824, 0.741176470588, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 2, + "lj": 2, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 2, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 4, "ix": 2 } }, + { + "n": "o", + "nm": "offset", + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 266, + "s": [0] + }, + { "t": 510, "s": [180] } + ], + "ix": 7 + } + } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.2], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 266, + "s": [100] + }, + { + "i": { "x": [0.319], "y": [1] }, + "o": { "x": [0.8], "y": [0] }, + "t": 290, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 340, + "s": [100] + }, + { "t": 360, "s": [0] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.2], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 266, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.8], "y": [0] }, + "t": 290, + "s": [0] + }, + { "t": 354, "s": [0] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 264, + "op": 1301, + "st": 251, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "cir 2", + "parent": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [59.988, -24, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.643, 0.643, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 262, + "s": [0, 0, 100] + }, + { + "i": { "x": [0.175, 0.175, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.346, 0.346, 0.76], "y": [0, 0, 0] }, + "t": 269, + "s": [109, 109, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 277, + "s": [90, 90, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 286, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 340, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 347, + "s": [110, 110, 100] + }, + { "t": 357, "s": [0, 0, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-3.866, 0], + [0, 0], + [0, -3.866], + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0] + ], + "o": [ + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0], + [-3.866, 0], + [0, 0], + [0, -3.866] + ], + "v": [ + [0, -7], + [0, -7], + [7, 0], + [7, 0], + [0, 7], + [0, 7], + [-7, 0], + [-7, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.011764706112, 0.392156869173, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 262, + "op": 1292, + "st": 242, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "modal-top-mask 2", + "parent": 47, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 266, "s": [0] }, + { "i": { "x": [0.28], "y": [1] }, "o": { "x": [1], "y": [0] }, "t": 290, "s": [100] }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [100] + }, + { "t": 366, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [262.5, 60.5, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.714, 149.714, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-12.564, 0], + [0, 0], + [0, -12.564], + [0, 0], + [0, 0] + ], + "o": [ + [0, -12.564], + [0, 0], + [12.564, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-175, -17.25], + [-152.25, -40], + [152.25, -40], + [175, -17.25], + [175, 40], + [-175, 40] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 1, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gs", + "o": { "a": 0, "k": 100, "ix": 9 }, + "w": { "a": 0, "k": 3, "ix": 10 }, + "g": { + "p": 5, + "k": { + "a": 0, + "k": [ + 0, 0.4, 0.831, 0.969, 0.161, 0.351, 0.702, 0.984, 0.323, 0.302, 0.573, 1, 0.661, + 0.518, 0.484, 1, 1, 0.733, 0.396, 1 + ], + "ix": 8 + } + }, + "s": { "a": 0, "k": [-172.453, 0], "ix": 4 }, + "e": { "a": 0, "k": [174.918, 0], "ix": 5 }, + "t": 1, + "lc": 1, + "lj": 1, + "ml": 4, + "ml2": { "a": 0, "k": 4, "ix": 13 }, + "bm": 0, + "nm": "Gradient Stroke 1", + "mn": "ADBE Vector Graphic - G-Stroke", + "hd": false + } + ], + "ip": 266, + "op": 1316, + "st": 266, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 2, + "nm": "YourApp-logo.png 2", + "cl": "png", + "parent": 47, + "refId": "image_0", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.31], "y": [1] }, + "o": { "x": [0.69], "y": [0] }, + "t": 495, + "s": [100] + }, + { "t": 508, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [125.179, 60.562, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [86, 30, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0, 0, 0], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 328, + "s": [78.75, 78.75, 100] + }, + { + "i": { "x": [0.289, 0.289, 0], "y": [1, 1, 1] }, + "o": { "x": [0.283, 0.283, 0.167], "y": [0, 0, 0] }, + "t": 338, + "s": [93.721, 93.721, 100] + }, + { "t": 350, "s": [87.733, 87.733, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": 328, + "op": 512, + "st": 286, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 2, + "nm": "YourApp-logo.png 3", + "cl": "png", + "parent": 9, + "refId": "image_0", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 361, + "s": [100] + }, + { "t": 368, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [154.107, 174.04, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [86, 30, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.25, 0.25, 0.25], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.275] }, + "t": 309, + "s": [59.6, 59.6, 100] + }, + { "t": 318, "s": [66.6, 66.6, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": 309, + "op": 1936, + "st": 286, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "cursor 2", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 292, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 300, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 333, + "s": [100] + }, + { "t": 338, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.422, "y": 1 }, + "o": { "x": 0.532, "y": 0 }, + "t": 290, + "s": [310.836, 589.389, 0], + "to": [-34.155, -46.389, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.422, "y": 0.422 }, + "o": { "x": 0.474, "y": 0.474 }, + "t": 306, + "s": [228.836, 494.389, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.354, "y": 1 }, + "o": { "x": 0.474, "y": 0 }, + "t": 314, + "s": [228.836, 494.389, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 323, "s": [228.836, 555.389, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [462.201, 375.389, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.6, 0.6, 0.6], "y": [0, 0, 0] }, + "t": 323, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.4, 0.4, 0.4], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 327, + "s": [75, 75, 100] + }, + { "t": 331, "s": [100, 100, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-4.458, 0], + [0, -4.458], + [4.458, 0], + [0, 4.458] + ], + "o": [ + [4.458, 0], + [0, 4.458], + [-4.458, 0], + [0, -4.458] + ], + "v": [ + [0, -8.072], + [8.072, 0], + [0, 8.072], + [-8.072, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [462.201, 375.389], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 70, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-7.456, 0], + [0, -7.456], + [7.456, 0], + [0, 7.456] + ], + "o": [ + [7.456, 0], + [0, 7.456], + [-7.456, 0], + [0, -7.456] + ], + "v": [ + [0, -13.5], + [13.5, 0], + [0, 13.5], + [-13.5, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [462.201, 375.389], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 286, + "op": 338, + "st": 284, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 2, + "nm": "YourApp-logo.png 4", + "cl": "png", + "parent": 6, + "refId": "image_0", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 293, + "s": [0] + }, + { "t": 302, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [411.21, 365.021, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [86, 30, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [59.6, 59.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": 286, + "op": 309, + "st": 286, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "Apply-1", + "parent": 9, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 323, + "s": [80] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 327, + "s": [60] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 331, + "s": [80] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 358, + "s": [100] + }, + { "t": 365, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [153.463, 233.804, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [153.463, 233.804, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.6, 0.6, 0.6], "y": [0, 0, 0] }, + "t": 323, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.4, 0.4, 0.4], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 327, + "s": [88, 88, 100] + }, + { "t": 331, "s": [100, 100, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-2.485, 0], + [0, 0], + [0, -2.485], + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0] + ], + "o": [ + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0], + [-2.485, 0], + [0, 0], + [0, -2.485] + ], + "v": [ + [-77.5, -16.5], + [77.5, -16.5], + [82, -12], + [82, 12], + [77.5, 16.5], + [-77.5, 16.5], + [-82, 12], + [-82, -12] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.463, 233.804], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [9.437, 5.17], + [10.746, 2.299], + [10.427, 2.299], + [8.271, -2.706], + [9.536, -2.706], + [11.208, 1.331], + [12.957, -2.706], + [14.189, -2.706], + [10.669, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [6.578, 2.75], + [6.578, -5.17], + [7.744, -5.17], + [7.744, 2.75] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.499, 0], + [-0.323, 0.337], + [0, 0.55], + [0.146, 0.279], + [0.256, 0.154], + [0.337, 0], + [0.322, -0.345], + [0, -0.543], + [-0.315, -0.345] + ], + "o": [ + [0.498, 0], + [0.322, -0.345], + [0, -0.359], + [-0.147, -0.279], + [-0.257, -0.161], + [-0.499, 0], + [-0.315, 0.345], + [0, 0.55], + [0.322, 0.337] + ], + "v": [ + [2.835, 1.87], + [4.067, 1.364], + [4.551, 0.022], + [4.331, -0.935], + [3.726, -1.584], + [2.835, -1.826], + [1.603, -1.309], + [1.129, 0.022], + [1.603, 1.364] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.308, 0.198], + [-0.484, 0], + [-0.404, -0.249], + [-0.228, -0.433], + [0, -0.55], + [0.234, -0.433], + [0.403, -0.249], + [0.535, 0], + [0.33, 0.169], + [0.191, 0.308], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.176, -0.257], + [0.308, -0.198], + [0.528, 0], + [0.403, 0.249], + [0.234, 0.433], + [0, 0.55], + [-0.228, 0.425], + [-0.404, 0.242], + [-0.426, 0], + [-0.323, -0.169], + [0, 0], + [0, 0] + ], + "v": [ + [-0.037, 5.17], + [-0.037, -2.706], + [1.008, -2.706], + [1.129, -1.859], + [1.856, -2.541], + [3.044, -2.838], + [4.441, -2.464], + [5.387, -1.441], + [5.739, 0.033], + [5.387, 1.507], + [4.441, 2.519], + [3.033, 2.882], + [1.9, 2.629], + [1.129, 1.914], + [1.129, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 4, + "ty": "sh", + "ix": 5, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.499, 0], + [-0.323, 0.337], + [0, 0.55], + [0.147, 0.279], + [0.257, 0.154], + [0.337, 0], + [0.323, -0.345], + [0, -0.543], + [-0.315, -0.345] + ], + "o": [ + [0.499, 0], + [0.323, -0.345], + [0, -0.359], + [-0.147, -0.279], + [-0.257, -0.161], + [-0.499, 0], + [-0.315, 0.345], + [0, 0.55], + [0.323, 0.337] + ], + "v": [ + [-3.78, 1.87], + [-2.548, 1.364], + [-2.064, 0.022], + [-2.284, -0.935], + [-2.889, -1.584], + [-3.78, -1.826], + [-5.012, -1.309], + [-5.485, 0.022], + [-5.012, 1.364] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 5", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 5, + "ty": "sh", + "ix": 6, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.308, 0.198], + [-0.484, 0], + [-0.403, -0.249], + [-0.227, -0.433], + [0, -0.55], + [0.235, -0.433], + [0.403, -0.249], + [0.535, 0], + [0.33, 0.169], + [0.191, 0.308], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.176, -0.257], + [0.308, -0.198], + [0.528, 0], + [0.403, 0.249], + [0.235, 0.433], + [0, 0.55], + [-0.227, 0.425], + [-0.403, 0.242], + [-0.425, 0], + [-0.323, -0.169], + [0, 0], + [0, 0] + ], + "v": [ + [-6.651, 5.17], + [-6.651, -2.706], + [-5.606, -2.706], + [-5.485, -1.859], + [-4.759, -2.541], + [-3.571, -2.838], + [-2.174, -2.464], + [-1.228, -1.441], + [-0.876, 0.033], + [-1.228, 1.507], + [-2.174, 2.519], + [-3.582, 2.882], + [-4.715, 2.629], + [-5.485, 1.914], + [-5.485, 5.17] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 6", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 6, + "ty": "sh", + "ix": 7, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-11.967, -0.055], + [-9.481, -0.055], + [-10.724, -3.564] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 7", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 7, + "ty": "sh", + "ix": 8, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-14.189, 2.75], + [-11.351, -4.95], + [-10.075, -4.95], + [-7.259, 2.75], + [-8.491, 2.75], + [-9.151, 0.869], + [-12.297, 0.869], + [-12.957, 2.75] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 8", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.496, 235.054], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 9, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 274, + "op": 1928, + "st": 277, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "Customize", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 358, + "s": [100] + }, + { "t": 365, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 274, + "s": [177.201, 419.389, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 298, "s": [177.201, 494.389, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [153.463, 184.408, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 358, + "s": [100, 100, 100] + }, + { "t": 365, "s": [30, 30, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-8.696, 0], + [0, 0], + [0, -8.696], + [0, 0], + [8.696, 0], + [0, 0], + [0, 8.696], + [0, 0] + ], + "o": [ + [0, 0], + [8.696, 0], + [0, 0], + [0, 8.696], + [0, 0], + [-8.696, 0], + [0, 0], + [0, -8.696] + ], + "v": [ + [-82.325, -91.57], + [82.325, -91.57], + [98.07, -75.825], + [98.07, 75.825], + [82.325, 91.57], + [-82.325, 91.57], + [-98.07, 75.825], + [-98.07, -75.825] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gs", + "o": { "a": 0, "k": 100, "ix": 9 }, + "w": { "a": 0, "k": 0.86, "ix": 10 }, + "g": { + "p": 3, + "k": { + "a": 0, + "k": [0, 1, 1, 1, 0.5, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0.5, 0.5, 1, 0], + "ix": 8 + } + }, + "s": { "a": 0, "k": [0, -88.414], "ix": 4 }, + "e": { "a": 0, "k": [0, 97.355], "ix": 5 }, + "t": 1, + "lc": 1, + "lj": 1, + "ml": 4, + "ml2": { "a": 0, "k": 4, "ix": 13 }, + "bm": 0, + "nm": "Gradient Stroke 1", + "mn": "ADBE Vector Graphic - G-Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.464, 184.409], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 25, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-2.485, 0], + [0, 0], + [0, -2.485], + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0] + ], + "o": [ + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0], + [-2.485, 0], + [0, 0], + [0, -2.485] + ], + "v": [ + [-77.5, -33.5], + [77.5, -33.5], + [82, -29], + [82, 29], + [77.5, 33.5], + [-77.5, 33.5], + [-82, 29], + [-82, -29] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.329411774874, 0.321568638086, 0.729411780834, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 2, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 2, "ix": 2 } } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.463, 172.012], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.608, 0], + [0.437, -0.341], + [0.096, -0.672], + [0, 0], + [0.405, 0.363] + ], + "o": [ + [-0.565, 0], + [-0.437, 0.331], + [0, 0], + [-0.032, -0.619], + [-0.405, -0.363] + ], + "v": [ + [33.865, -1.072], + [32.361, -0.56], + [31.561, 0.944], + [36.041, 0.944], + [35.385, -0.528] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.939, 0], + [0.608, 0.341], + [0.341, 0.619], + [0, 0.821], + [-0.331, 0.629], + [-0.597, 0.352], + [-0.8, 0], + [-0.576, -0.352], + [-0.32, -0.576], + [0, -0.693], + [0.011, -0.128], + [0.011, -0.149], + [0, 0], + [-0.448, -0.405], + [-0.597, 0], + [-0.32, 0.213], + [-0.16, 0.373], + [0, 0], + [0.64, -0.501] + ], + "o": [ + [-0.779, 0], + [-0.597, -0.352], + [-0.341, -0.619], + [0, -0.832], + [0.341, -0.629], + [0.608, -0.352], + [0.779, 0], + [0.576, 0.341], + [0.32, 0.576], + [0, 0.107], + [0, 0.117], + [0, 0], + [0.053, 0.768], + [0.459, 0.395], + [0.48, 0], + [0.331, -0.224], + [0, 0], + [-0.213, 0.747], + [-0.629, 0.501] + ], + "v": [ + [33.865, 5.856], + [31.785, 5.344], + [30.377, 3.888], + [29.865, 1.728], + [30.361, -0.464], + [31.769, -1.936], + [33.881, -2.464], + [35.913, -1.936], + [37.257, -0.56], + [37.737, 1.344], + [37.721, 1.696], + [37.705, 2.096], + [31.529, 2.096], + [32.281, 3.856], + [33.865, 4.448], + [35.065, 4.128], + [35.801, 3.232], + [37.497, 3.232], + [36.217, 5.104] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [22.601, 5.664], + [22.601, 4.288], + [26.841, -0.864], + [22.665, -0.864], + [22.665, -2.272], + [28.761, -2.272], + [28.761, -0.896], + [24.489, 4.256], + [28.841, 4.256], + [28.841, 5.664] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [19.623, 5.664], + [19.623, -2.272], + [21.319, -2.272], + [21.319, 5.664] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 4, + "ty": "sh", + "ix": 5, + "ks": { + "a": 0, + "k": { + "i": [ + [0.32, 0], + [0.213, 0.192], + [0, 0.299], + [-0.203, 0.192], + [-0.32, 0], + [-0.203, -0.203], + [0, -0.299], + [0.213, -0.203] + ], + "o": [ + [-0.32, 0], + [-0.203, -0.203], + [0, -0.299], + [0.213, -0.203], + [0.32, 0], + [0.213, 0.192], + [0, 0.299], + [-0.203, 0.192] + ], + "v": [ + [20.471, -3.776], + [19.671, -4.064], + [19.367, -4.816], + [19.671, -5.552], + [20.471, -5.856], + [21.255, -5.552], + [21.575, -4.816], + [21.255, -4.064] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 5", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 5, + "ty": "sh", + "ix": 6, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.416, 0.235], + [-0.555, 0], + [-0.491, -0.992], + [-0.48, 0.267], + [-0.565, 0], + [-0.565, -0.597], + [0, -1.184], + [0, 0], + [0, 0], + [0, 0], + [1.173, 0], + [0.384, -0.448], + [0, -0.832], + [0, 0], + [0, 0], + [0, 0], + [1.184, 0], + [0.384, -0.448], + [0, -0.832], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.256, -0.405], + [0.427, -0.235], + [1.259, 0], + [0.288, -0.459], + [0.491, -0.267], + [0.992, 0], + [0.565, 0.597], + [0, 0], + [0, 0], + [0, 0], + [0, -1.536], + [-0.597, 0], + [-0.373, 0.448], + [0, 0], + [0, 0], + [0, 0], + [0, -1.536], + [-0.587, 0], + [-0.373, 0.448], + [0, 0], + [0, 0] + ], + "v": [ + [5.283, 5.664], + [5.283, -2.272], + [6.787, -2.272], + [6.931, -1.152], + [7.939, -2.112], + [9.411, -2.464], + [12.035, -0.976], + [13.187, -2.064], + [14.771, -2.464], + [17.107, -1.568], + [17.955, 1.104], + [17.955, 5.664], + [16.259, 5.664], + [16.259, 1.28], + [14.499, -1.024], + [13.027, -0.352], + [12.467, 1.568], + [12.467, 5.664], + [10.771, 5.664], + [10.771, 1.28], + [8.995, -1.024], + [7.539, -0.352], + [6.979, 1.568], + [6.979, 5.664] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 6", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 6, + "ty": "sh", + "ix": 7, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.405, 0], + [-0.341, 0.203], + [-0.213, 0.395], + [0, 0.597], + [0.213, 0.395], + [0.352, 0.203], + [0.405, 0], + [0.352, -0.203], + [0.213, -0.405], + [0, -0.597], + [-0.213, -0.405], + [-0.341, -0.203] + ], + "o": [ + [0.405, 0], + [0.352, -0.203], + [0.213, -0.405], + [0, -0.597], + [-0.203, -0.405], + [-0.341, -0.203], + [-0.405, 0], + [-0.341, 0.203], + [-0.213, 0.395], + [0, 0.597], + [0.213, 0.395], + [0.341, 0.203] + ], + "v": [ + [-0.154, 4.4], + [0.966, 4.096], + [1.814, 3.2], + [2.134, 1.696], + [1.814, 0.208], + [0.982, -0.704], + [-0.138, -1.008], + [-1.274, -0.704], + [-2.106, 0.208], + [-2.426, 1.696], + [-2.106, 3.2], + [-1.274, 4.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 7", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 7, + "ty": "sh", + "ix": 8, + "ks": { + "a": 0, + "k": { + "i": [ + [0.757, 0], + [0.608, 0.341], + [0.352, 0.619], + [0, 0.832], + [-0.352, 0.619], + [-0.608, 0.341], + [-0.747, 0], + [-0.597, -0.352], + [-0.352, -0.629], + [0, -0.832], + [0.363, -0.629], + [0.608, -0.352] + ], + "o": [ + [-0.757, 0], + [-0.597, -0.352], + [-0.352, -0.629], + [0, -0.832], + [0.363, -0.629], + [0.608, -0.352], + [0.757, 0], + [0.608, 0.341], + [0.363, 0.619], + [0, 0.832], + [-0.352, 0.619], + [-0.608, 0.341] + ], + "v": [ + [-0.154, 5.856], + [-2.202, 5.344], + [-3.626, 3.888], + [-4.154, 1.696], + [-3.626, -0.48], + [-2.17, -1.936], + [-0.138, -2.464], + [1.894, -1.936], + [3.334, -0.48], + [3.878, 1.696], + [3.334, 3.888], + [1.894, 5.344] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 8", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 8, + "ty": "sh", + "ix": 9, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0.459, 0.373], + [0, 0.971], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.181, -0.171], + [-0.459, 0], + [0, 0], + [0, 0] + ], + "o": [ + [-0.779, 0], + [-0.459, -0.384], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0.437], + [0.192, 0.16], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-6.375, 5.664], + [-8.231, 5.104], + [-8.919, 3.072], + [-8.919, -0.848], + [-10.279, -0.848], + [-10.279, -2.272], + [-8.919, -2.272], + [-8.711, -4.288], + [-7.223, -4.288], + [-7.223, -2.272], + [-4.983, -2.272], + [-4.983, -0.848], + [-7.223, -0.848], + [-7.223, 3.072], + [-6.951, 3.984], + [-5.975, 4.224], + [-5.063, 4.224], + [-5.063, 5.664] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 9", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 9, + "ty": "sh", + "ix": 10, + "ks": { + "a": 0, + "k": { + "i": [ + [0.981, 0], + [0.651, 0.491], + [0.096, 0.811], + [0, 0], + [-0.32, -0.267], + [-0.523, 0], + [-0.235, 0.213], + [0, 0.277], + [0.331, 0.139], + [0.576, 0.117], + [0.448, 0.16], + [0.299, 0.288], + [0, 0.501], + [-0.533, 0.459], + [-0.96, 0], + [-0.544, -0.427], + [-0.096, -0.779], + [0, 0], + [0.267, 0.192], + [0.437, 0], + [0.235, -0.181], + [0, -0.277], + [-0.32, -0.16], + [-0.533, -0.128], + [-0.448, -0.16], + [-0.277, -0.299], + [0, -0.576], + [0.576, -0.48] + ], + "o": [ + [-1.003, 0], + [-0.651, -0.491], + [0, 0], + [0.085, 0.363], + [0.32, 0.256], + [0.512, 0], + [0.235, -0.213], + [0, -0.405], + [-0.32, -0.149], + [-0.448, -0.096], + [-0.437, -0.16], + [-0.288, -0.299], + [0, -0.693], + [0.533, -0.469], + [0.885, 0], + [0.555, 0.427], + [0, 0], + [-0.053, -0.341], + [-0.256, -0.192], + [-0.427, 0], + [-0.235, 0.171], + [0, 0.277], + [0.331, 0.16], + [0.533, 0.117], + [0.459, 0.149], + [0.277, 0.299], + [0.011, 0.725], + [-0.565, 0.48] + ], + "v": [ + [-13.997, 5.856], + [-16.477, 5.12], + [-17.597, 3.168], + [-15.885, 3.168], + [-15.277, 4.112], + [-14.013, 4.496], + [-12.893, 4.176], + [-12.541, 3.44], + [-13.037, 2.624], + [-14.381, 2.224], + [-15.725, 1.84], + [-16.829, 1.168], + [-17.261, -0.032], + [-16.461, -1.76], + [-14.221, -2.464], + [-12.077, -1.824], + [-11.101, -0.016], + [-12.733, -0.016], + [-13.213, -0.816], + [-14.253, -1.104], + [-15.245, -0.832], + [-15.597, -0.16], + [-15.117, 0.496], + [-13.821, 0.928], + [-12.349, 1.344], + [-11.245, 2.016], + [-10.829, 3.328], + [-11.677, 5.136] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 10", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 10, + "ty": "sh", + "ix": 11, + "ks": { + "a": 0, + "k": { + "i": [ + [0.619, 0], + [0.555, 0.597], + [0, 1.184], + [0, 0], + [0, 0], + [0, 0], + [-1.259, 0], + [-0.405, 0.448], + [0, 0.832], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.48, -0.288] + ], + "o": [ + [-0.96, 0], + [-0.544, -0.597], + [0, 0], + [0, 0], + [0, 0], + [0, 1.536], + [0.629, 0], + [0.405, -0.448], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.245, 0.491], + [-0.469, 0.277] + ], + "v": [ + [-23.246, 5.856], + [-25.518, 4.96], + [-26.334, 2.288], + [-26.334, -2.272], + [-24.638, -2.272], + [-24.638, 2.112], + [-22.75, 4.416], + [-21.198, 3.744], + [-20.59, 1.824], + [-20.59, -2.272], + [-18.894, -2.272], + [-18.894, 5.664], + [-20.398, 5.664], + [-20.526, 4.272], + [-21.614, 5.44] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 11", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 11, + "ty": "sh", + "ix": 12, + "ks": { + "a": 0, + "k": { + "i": [ + [1.312, 0], + [0.811, 0.48], + [0.437, 0.864], + [0, 1.141], + [-0.437, 0.864], + [-0.8, 0.491], + [-1.109, 0], + [-0.832, -0.64], + [-0.224, -1.152], + [0, 0], + [0.491, 0.384], + [0.821, 0], + [0.651, -0.768], + [0, -1.333], + [-0.651, -0.757], + [-1.12, 0], + [-0.491, 0.363], + [-0.149, 0.629], + [0, 0], + [0.832, -0.629] + ], + "o": [ + [-1.109, 0], + [-0.8, -0.491], + [-0.437, -0.875], + [0, -1.152], + [0.437, -0.875], + [0.811, -0.491], + [1.312, 0], + [0.832, 0.64], + [0, 0], + [-0.149, -0.651], + [-0.491, -0.384], + [-1.12, 0], + [-0.651, 0.757], + [0, 1.323], + [0.651, 0.757], + [0.821, 0], + [0.491, -0.363], + [0, 0], + [-0.224, 1.109], + [-0.832, 0.629] + ], + "v": [ + [-32.345, 5.856], + [-35.225, 5.136], + [-37.081, 3.104], + [-37.737, 0.08], + [-37.081, -2.944], + [-35.225, -4.992], + [-32.345, -5.728], + [-29.129, -4.768], + [-27.545, -2.08], + [-29.433, -2.08], + [-30.393, -3.632], + [-32.361, -4.208], + [-35.017, -3.056], + [-35.993, 0.08], + [-35.017, 3.2], + [-32.361, 4.336], + [-30.393, 3.792], + [-29.433, 2.304], + [-27.545, 2.304], + [-29.129, 4.912] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 12", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [109.437, 118.744], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 13, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-8.933, 0], + [0, 0], + [0, -8.933], + [0, 0], + [8.933, 0], + [0, 0], + [0, 8.933], + [0, 0] + ], + "o": [ + [0, 0], + [8.933, 0], + [0, 0], + [0, 8.933], + [0, 0], + [-8.933, 0], + [0, 0], + [0, -8.933] + ], + "v": [ + [-82.324, -92], + [82.324, -92], + [98.5, -75.824], + [98.5, 75.824], + [82.324, 92], + [-82.324, 92], + [-98.5, 75.824], + [-98.5, -75.824] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gf", + "o": { "a": 0, "k": 100, "ix": 10 }, + "r": 1, + "bm": 0, + "g": { + "p": 7, + "k": { + "a": 0, + "k": [ + 0, 0.855, 0.549, 1, 0.204, 0.784, 0.425, 0.955, 0.408, 0.714, 0.302, 0.91, 0.53, + 0.443, 0.455, 0.918, 0.651, 0.173, 0.608, 0.925, 0.75, 0.302, 0.582, 0.902, + 0.848, 0.431, 0.557, 0.878, 0, 1, 0.204, 0.7, 0.408, 0.4, 0.53, 0.38, 0.651, + 0.36, 0.75, 0.48, 0.848, 0.6 + ], + "ix": 9 + } + }, + "s": { "a": 0, "k": [128.867, 144.105], "ix": 5 }, + "e": { "a": 0, "k": [-71.293, -125.523], "ix": 6 }, + "t": 2, + "h": { "a": 0, "k": 0, "ix": 7 }, + "a": { "a": 0, "k": 0, "ix": 8 }, + "nm": "Gradient Fill 1", + "mn": "ADBE Vector Graphic - G-Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.463, 184.408], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 38, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 274, + "op": 1928, + "st": 277, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "Layer 17", + "parent": 9, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 302, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 305, + "s": [70] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 309, + "s": [70] + }, + { "t": 312, "s": [3] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [153.437, 172.055, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-2.485, 0], + [0, 0], + [0, -2.485], + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0] + ], + "o": [ + [0, 0], + [2.485, 0], + [0, 0], + [0, 2.485], + [0, 0], + [-2.485, 0], + [0, 0], + [0, -2.485] + ], + "v": [ + [-77.5, -33.5], + [77.5, -33.5], + [82, -29], + [82, 29], + [77.5, 33.5], + [-77.5, 33.5], + [-82, 29], + [-82, -29] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.329411764706, 0.321568627451, 0.729411764706, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 293, + "op": 1944, + "st": 293, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 0, + "nm": "Theme-Color", + "parent": 61, + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.82], "y": [0] }, + "t": 495, + "s": [100] + }, + { "t": 502, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-96.252, 362.171, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [123, 127.5, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 495, + "s": [149.913, 149.913, 100] + }, + { "t": 502, "s": [44.974, 44.974, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "w": 246, + "h": 255, + "ip": 392, + "op": 2042, + "st": 392, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 12, + "ty": 4, + "nm": "Upload Logo", + "parent": 9, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 302, + "s": [100] + }, + { "t": 305, "s": [60] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [153.59, 172.657, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [153.59, 172.657, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.418, 0], + [0.3, -0.235], + [0.066, -0.462], + [0, 0], + [0.278, 0.249] + ], + "o": [ + [-0.389, 0], + [-0.301, 0.227], + [0, 0], + [-0.022, -0.425], + [-0.279, -0.249] + ], + "v": [ + [39.25, -1.947], + [38.216, -1.595], + [37.666, -0.561], + [40.746, -0.561], + [40.295, -1.573] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.645, 0], + [0.418, 0.235], + [0.234, 0.425], + [0, 0.565], + [-0.228, 0.433], + [-0.411, 0.242], + [-0.55, 0], + [-0.396, -0.242], + [-0.22, -0.396], + [0, -0.477], + [0.007, -0.088], + [0.007, -0.103], + [0, 0], + [-0.308, -0.279], + [-0.411, 0], + [-0.22, 0.147], + [-0.11, 0.257], + [0, 0], + [0.44, -0.345] + ], + "o": [ + [-0.536, 0], + [-0.411, -0.242], + [-0.235, -0.425], + [0, -0.572], + [0.234, -0.433], + [0.418, -0.242], + [0.535, 0], + [0.396, 0.235], + [0.22, 0.396], + [0, 0.073], + [0, 0.081], + [0, 0], + [0.036, 0.528], + [0.315, 0.271], + [0.33, 0], + [0.227, -0.154], + [0, 0], + [-0.147, 0.513], + [-0.433, 0.345] + ], + "v": [ + [39.25, 2.816], + [37.82, 2.464], + [36.852, 1.463], + [36.5, -0.022], + [36.841, -1.529], + [37.809, -2.541], + [39.261, -2.904], + [40.658, -2.541], + [41.582, -1.595], + [41.912, -0.286], + [41.901, -0.044], + [41.89, 0.231], + [37.644, 0.231], + [38.161, 1.441], + [39.25, 1.848], + [40.075, 1.628], + [40.581, 1.012], + [41.747, 1.012], + [40.867, 2.299] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.337, 0.205], + [-0.484, 0], + [0, 0], + [0, 0], + [0.257, -0.11], + [0.154, -0.257], + [0, -0.447], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.191, -0.359], + [0.345, -0.213], + [0, 0], + [0, 0], + [-0.322, 0], + [-0.249, 0.103], + [-0.146, 0.249], + [0, 0], + [0, 0] + ], + "v": [ + [33.091, 2.684], + [33.091, -2.772], + [34.136, -2.772], + [34.235, -1.738], + [35.027, -2.585], + [36.27, -2.904], + [36.27, -1.683], + [35.951, -1.683], + [35.082, -1.518], + [34.477, -0.979], + [34.257, 0.066], + [34.257, 2.684] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 3, + "ty": "sh", + "ix": 4, + "ks": { + "a": 0, + "k": { + "i": [ + [0.418, 0], + [0.301, -0.235], + [0.066, -0.462], + [0, 0], + [0.279, 0.249] + ], + "o": [ + [-0.388, 0], + [-0.3, 0.227], + [0, 0], + [-0.022, -0.425], + [-0.278, -0.249] + ], + "v": [ + [29.641, -1.947], + [28.607, -1.595], + [28.057, -0.561], + [31.137, -0.561], + [30.686, -1.573] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 4", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 4, + "ty": "sh", + "ix": 5, + "ks": { + "a": 0, + "k": { + "i": [ + [0.646, 0], + [0.418, 0.235], + [0.235, 0.425], + [0, 0.565], + [-0.227, 0.433], + [-0.41, 0.242], + [-0.55, 0], + [-0.396, -0.242], + [-0.22, -0.396], + [0, -0.477], + [0.008, -0.088], + [0.008, -0.103], + [0, 0], + [-0.308, -0.279], + [-0.41, 0], + [-0.22, 0.147], + [-0.11, 0.257], + [0, 0], + [0.44, -0.345] + ], + "o": [ + [-0.535, 0], + [-0.41, -0.242], + [-0.234, -0.425], + [0, -0.572], + [0.235, -0.433], + [0.418, -0.242], + [0.536, 0], + [0.396, 0.235], + [0.22, 0.396], + [0, 0.073], + [0, 0.081], + [0, 0], + [0.037, 0.528], + [0.316, 0.271], + [0.33, 0], + [0.228, -0.154], + [0, 0], + [-0.146, 0.513], + [-0.432, 0.345] + ], + "v": [ + [29.641, 2.816], + [28.211, 2.464], + [27.243, 1.463], + [26.891, -0.022], + [27.232, -1.529], + [28.2, -2.541], + [29.652, -2.904], + [31.049, -2.541], + [31.973, -1.595], + [32.303, -0.286], + [32.292, -0.044], + [32.281, 0.231], + [28.035, 0.231], + [28.552, 1.441], + [29.641, 1.848], + [30.466, 1.628], + [30.972, 1.012], + [32.138, 1.012], + [31.258, 2.299] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 5", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 5, + "ty": "sh", + "ix": 6, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [19.928, 2.684], + [19.928, -5.016], + [21.094, -5.016], + [21.094, -1.716], + [24.823, -1.716], + [24.823, -5.016], + [25.989, -5.016], + [25.989, 2.684], + [24.823, 2.684], + [24.823, -0.759], + [21.094, -0.759], + [21.094, 2.684] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 6", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 6, + "ty": "sh", + "ix": 7, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.279, 0], + [-0.235, 0.139], + [-0.147, 0.271], + [0, 0.411], + [0.146, 0.271], + [0.242, 0.139], + [0.278, 0], + [0.242, -0.139], + [0.146, -0.279], + [0, -0.411], + [-0.147, -0.279], + [-0.235, -0.139] + ], + "o": [ + [0.278, 0], + [0.242, -0.139], + [0.146, -0.279], + [0, -0.411], + [-0.14, -0.279], + [-0.235, -0.139], + [-0.279, 0], + [-0.235, 0.139], + [-0.147, 0.271], + [0, 0.411], + [0.146, 0.271], + [0.234, 0.139] + ], + "v": [ + [13.924, 1.815], + [14.694, 1.606], + [15.277, 0.99], + [15.497, -0.044], + [15.277, -1.067], + [14.705, -1.694], + [13.935, -1.903], + [13.154, -1.694], + [12.582, -1.067], + [12.362, -0.044], + [12.582, 0.99], + [13.154, 1.606] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 7", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 7, + "ty": "sh", + "ix": 8, + "ks": { + "a": 0, + "k": { + "i": [ + [0.52, 0], + [0.418, 0.235], + [0.242, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235], + [-0.514, 0], + [-0.411, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.249, -0.433], + [0.418, -0.242] + ], + "o": [ + [-0.521, 0], + [-0.411, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.249, -0.433], + [0.418, -0.242], + [0.52, 0], + [0.418, 0.235], + [0.249, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235] + ], + "v": [ + [13.924, 2.816], + [12.516, 2.464], + [11.537, 1.463], + [11.174, -0.044], + [11.537, -1.54], + [12.538, -2.541], + [13.935, -2.904], + [15.332, -2.541], + [16.322, -1.54], + [16.696, -0.044], + [16.322, 1.463], + [15.332, 2.464] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 8", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 8, + "ty": "sh", + "ix": 9, + "ks": { + "a": 0, + "k": { + "i": [ + [0, -0.154], + [-0.278, -0.154], + [-0.418, 0], + [-0.249, 0.176], + [0, 0.286], + [0.169, 0.154], + [0.47, 0.037], + [0.272, 0.044], + [0.096, -0.161] + ], + "o": [ + [0, 0.315], + [0.279, 0.161], + [0.404, 0], + [0.25, -0.169], + [0, -0.213], + [-0.168, -0.147], + [-0.352, -0.022], + [-0.256, 0.139], + [-0.095, 0.161] + ], + "v": [ + [6.612, 3.377], + [7.03, 4.081], + [8.075, 4.323], + [9.054, 4.059], + [9.428, 3.377], + [9.175, 2.827], + [8.218, 2.552], + [7.283, 2.453], + [6.755, 2.904] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 9", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 9, + "ty": "sh", + "ix": 10, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.344, 0], + [-0.205, 0.176], + [0, 0.33], + [0.213, 0.176], + [0.338, 0], + [0.213, -0.176], + [0, -0.337], + [-0.205, -0.183] + ], + "o": [ + [0.338, 0], + [0.213, -0.183], + [0, -0.337], + [-0.205, -0.176], + [-0.344, 0], + [-0.205, 0.176], + [0, 0.33], + [0.213, 0.176] + ], + "v": [ + [8.075, 0.099], + [8.889, -0.165], + [9.208, -0.935], + [8.889, -1.705], + [8.075, -1.969], + [7.239, -1.705], + [6.931, -0.935], + [7.239, -0.165] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 10", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 10, + "ty": "sh", + "ix": 11, + "ks": { + "a": 0, + "k": { + "i": [ + [0.462, 0], + [0.242, 0.066], + [0, 0], + [-0.117, -0.037], + [-0.212, -0.029], + [-0.366, -0.029], + [-0.322, -0.286], + [0, -0.469], + [0.176, -0.286], + [0.367, -0.176], + [0.565, 0], + [0.477, 0.293], + [0, 0.587], + [-0.117, 0.227], + [-0.264, 0.198], + [0.118, 0.073], + [0.088, 0.081], + [0, 0], + [0, 0], + [0, 0.594], + [-0.168, 0.293], + [-0.33, 0.176], + [-0.462, 0], + [-0.264, -0.088], + [0, 0], + [0, 0], + [0, 0], + [0, -0.367], + [0.176, -0.293], + [0.33, -0.176] + ], + "o": [ + [-0.286, 0], + [0, 0], + [0.081, 0.051], + [0.118, 0.037], + [0.213, 0.029], + [0.726, 0.066], + [0.323, 0.279], + [0, 0.323], + [-0.168, 0.293], + [-0.359, 0.183], + [-0.762, 0], + [-0.469, -0.286], + [0, -0.227], + [0.125, -0.22], + [-0.154, -0.066], + [-0.11, -0.081], + [0, 0], + [0, 0], + [-0.425, -0.367], + [0, -0.359], + [0.176, -0.301], + [0.33, -0.176], + [0.308, 0], + [0, 0], + [0, 0], + [0, 0], + [0.176, 0.301], + [0, 0.367], + [-0.168, 0.293], + [-0.322, 0.176] + ], + "v": [ + [8.075, 1.012], + [7.283, 0.913], + [6.81, 1.375], + [7.107, 1.507], + [7.602, 1.606], + [8.471, 1.694], + [10.044, 2.222], + [10.528, 3.344], + [10.264, 4.257], + [9.461, 4.961], + [8.075, 5.236], + [6.216, 4.796], + [5.512, 3.487], + [5.688, 2.805], + [6.271, 2.178], + [5.864, 1.969], + [5.567, 1.727], + [5.567, 1.463], + [6.513, 0.495], + [5.875, -0.946], + [6.128, -1.925], + [6.887, -2.64], + [8.075, -2.904], + [8.933, -2.772], + [10.968, -2.772], + [10.968, -2.002], + [10, -1.947], + [10.264, -0.946], + [10, 0.044], + [9.252, 0.748] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 11", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 11, + "ty": "sh", + "ix": 12, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.278, 0], + [-0.234, 0.139], + [-0.146, 0.271], + [0, 0.411], + [0.147, 0.271], + [0.242, 0.139], + [0.279, 0], + [0.242, -0.139], + [0.147, -0.279], + [0, -0.411], + [-0.147, -0.279], + [-0.234, -0.139] + ], + "o": [ + [0.279, 0], + [0.242, -0.139], + [0.147, -0.279], + [0, -0.411], + [-0.139, -0.279], + [-0.234, -0.139], + [-0.278, 0], + [-0.234, 0.139], + [-0.147, 0.271], + [0, 0.411], + [0.147, 0.271], + [0.235, 0.139] + ], + "v": [ + [2.521, 1.815], + [3.291, 1.606], + [3.874, 0.99], + [4.094, -0.044], + [3.874, -1.067], + [3.302, -1.694], + [2.532, -1.903], + [1.751, -1.694], + [1.18, -1.067], + [0.96, -0.044], + [1.18, 0.99], + [1.751, 1.606] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 12", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 12, + "ty": "sh", + "ix": 13, + "ks": { + "a": 0, + "k": { + "i": [ + [0.521, 0], + [0.418, 0.235], + [0.242, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235], + [-0.513, 0], + [-0.41, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.25, -0.433], + [0.418, -0.242] + ], + "o": [ + [-0.52, 0], + [-0.411, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.249, -0.433], + [0.418, -0.242], + [0.521, 0], + [0.418, 0.235], + [0.25, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235] + ], + "v": [ + [2.521, 2.816], + [1.114, 2.464], + [0.135, 1.463], + [-0.228, -0.044], + [0.135, -1.54], + [1.136, -2.541], + [2.532, -2.904], + [3.929, -2.541], + [4.919, -1.54], + [5.293, -0.044], + [4.919, 1.463], + [3.929, 2.464] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 13", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 13, + "ty": "sh", + "ix": 14, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-5.247, 2.684], + [-5.247, -5.016], + [-4.081, -5.016], + [-4.081, 1.76], + [-0.583, 1.76], + [-0.583, 2.684] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 14", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 14, + "ty": "sh", + "ix": 15, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.33, 0], + [-0.315, 0.345], + [0, 0.543], + [0.323, 0.337], + [0.499, 0], + [0.323, -0.345], + [0, -0.55], + [-0.147, -0.279], + [-0.257, -0.161] + ], + "o": [ + [0.499, 0], + [0.323, -0.345], + [0, -0.55], + [-0.315, -0.345], + [-0.499, 0], + [-0.323, 0.337], + [0, 0.359], + [0.147, 0.279], + [0.264, 0.154] + ], + "v": [ + [-11.56, 1.804], + [-10.339, 1.287], + [-9.855, -0.044], + [-10.339, -1.375], + [-11.56, -1.892], + [-12.792, -1.375], + [-13.276, -0.044], + [-13.056, 0.913], + [-12.451, 1.573] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 15", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 15, + "ty": "sh", + "ix": 16, + "ks": { + "a": 0, + "k": { + "i": [ + [0.484, 0], + [0.403, 0.249], + [0.227, 0.433], + [0, 0.55], + [-0.227, 0.425], + [-0.403, 0.242], + [-0.528, 0], + [-0.323, -0.169], + [-0.183, -0.308], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.308, -0.198] + ], + "o": [ + [-0.528, 0], + [-0.403, -0.249], + [-0.227, -0.433], + [0, -0.55], + [0.227, -0.433], + [0.411, -0.249], + [0.433, 0], + [0.33, 0.169], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.176, 0.257], + [-0.308, 0.198] + ], + "v": [ + [-11.769, 2.816], + [-13.166, 2.442], + [-14.112, 1.419], + [-14.453, -0.055], + [-14.112, -1.518], + [-13.166, -2.53], + [-11.758, -2.904], + [-10.625, -2.651], + [-9.855, -1.936], + [-9.855, -5.236], + [-8.689, -5.236], + [-8.689, 2.684], + [-9.734, 2.684], + [-9.855, 1.837], + [-10.581, 2.519] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 16", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 16, + "ty": "sh", + "ix": 17, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.323, 0], + [-0.213, 0.147], + [-0.117, 0.249], + [-0.029, 0.301], + [0, 0], + [0.198, -0.161], + [0, -0.242], + [-0.183, -0.147] + ], + "o": [ + [0.315, 0], + [0.22, -0.154], + [0.125, -0.249], + [0, 0], + [-0.462, 0], + [-0.191, 0.161], + [0, 0.249], + [0.191, 0.139] + ], + "v": [ + [-17.898, 1.87], + [-17.106, 1.65], + [-16.6, 1.045], + [-16.369, 0.22], + [-17.667, 0.22], + [-18.658, 0.462], + [-18.943, 1.067], + [-18.669, 1.661] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 17", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 17, + "ty": "sh", + "ix": 18, + "ks": { + "a": 0, + "k": { + "i": [ + [0.477, 0], + [0.301, 0.154], + [0.147, 0.249], + [0, 0.301], + [-0.411, 0.308], + [-0.763, 0], + [0, 0], + [0, 0], + [0.235, 0.213], + [0.367, 0], + [0.242, -0.161], + [0.051, -0.308], + [0, 0], + [-0.227, 0.279], + [-0.352, 0.147], + [-0.425, 0], + [-0.418, -0.403], + [0, -0.689], + [0, 0], + [0, 0], + [0, 0], + [0.293, -0.205] + ], + "o": [ + [-0.462, 0], + [-0.301, -0.154], + [-0.147, -0.257], + [0, -0.528], + [0.411, -0.308], + [0, 0], + [0, 0], + [0, -0.425], + [-0.227, -0.213], + [-0.323, 0], + [-0.235, 0.154], + [0, 0], + [0.037, -0.396], + [0.235, -0.286], + [0.359, -0.154], + [0.763, 0], + [0.418, 0.396], + [0, 0], + [0, 0], + [0, 0], + [-0.154, 0.301], + [-0.293, 0.205] + ], + "v": [ + [-18.13, 2.816], + [-19.273, 2.585], + [-19.945, 1.98], + [-20.165, 1.144], + [-19.548, -0.11], + [-17.788, -0.572], + [-16.358, -0.572], + [-16.358, -0.671], + [-16.71, -1.628], + [-17.602, -1.947], + [-18.449, -1.705], + [-18.878, -1.012], + [-20.044, -1.012], + [-19.647, -2.024], + [-18.768, -2.673], + [-17.59, -2.904], + [-15.82, -2.299], + [-15.193, -0.671], + [-15.193, 2.684], + [-16.204, 2.684], + [-16.303, 1.749], + [-16.975, 2.508] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 18", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 18, + "ty": "sh", + "ix": 19, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.279, 0], + [-0.235, 0.139], + [-0.147, 0.271], + [0, 0.411], + [0.147, 0.271], + [0.242, 0.139], + [0.279, 0], + [0.242, -0.139], + [0.147, -0.279], + [0, -0.411], + [-0.147, -0.279], + [-0.235, -0.139] + ], + "o": [ + [0.279, 0], + [0.242, -0.139], + [0.147, -0.279], + [0, -0.411], + [-0.139, -0.279], + [-0.235, -0.139], + [-0.279, 0], + [-0.235, 0.139], + [-0.147, 0.271], + [0, 0.411], + [0.147, 0.271], + [0.235, 0.139] + ], + "v": [ + [-23.589, 1.815], + [-22.819, 1.606], + [-22.236, 0.99], + [-22.016, -0.044], + [-22.236, -1.067], + [-22.808, -1.694], + [-23.578, -1.903], + [-24.359, -1.694], + [-24.931, -1.067], + [-25.151, -0.044], + [-24.931, 0.99], + [-24.359, 1.606] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 19", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 19, + "ty": "sh", + "ix": 20, + "ks": { + "a": 0, + "k": { + "i": [ + [0.521, 0], + [0.418, 0.235], + [0.242, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235], + [-0.513, 0], + [-0.411, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.249, -0.433], + [0.418, -0.242] + ], + "o": [ + [-0.521, 0], + [-0.411, -0.242], + [-0.242, -0.433], + [0, -0.572], + [0.249, -0.433], + [0.418, -0.242], + [0.521, 0], + [0.418, 0.235], + [0.249, 0.425], + [0, 0.572], + [-0.242, 0.425], + [-0.418, 0.235] + ], + "v": [ + [-23.589, 2.816], + [-24.997, 2.464], + [-25.976, 1.463], + [-26.339, -0.044], + [-25.976, -1.54], + [-24.975, -2.541], + [-23.578, -2.904], + [-22.181, -2.541], + [-21.191, -1.54], + [-20.817, -0.044], + [-21.191, 1.463], + [-22.181, 2.464] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 20", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 20, + "ty": "sh", + "ix": 21, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-28.361, 2.684], + [-28.361, -5.236], + [-27.195, -5.236], + [-27.195, 2.684] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 21", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 21, + "ty": "sh", + "ix": 22, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.499, 0], + [-0.323, 0.337], + [0, 0.55], + [0.147, 0.279], + [0.257, 0.154], + [0.337, 0], + [0.323, -0.345], + [0, -0.543], + [-0.315, -0.345] + ], + "o": [ + [0.499, 0], + [0.323, -0.345], + [0, -0.359], + [-0.147, -0.279], + [-0.257, -0.161], + [-0.499, 0], + [-0.315, 0.345], + [0, 0.55], + [0.323, 0.337] + ], + "v": [ + [-32.104, 1.804], + [-30.872, 1.298], + [-30.389, -0.044], + [-30.608, -1.001], + [-31.214, -1.65], + [-32.104, -1.892], + [-33.337, -1.375], + [-33.809, -0.044], + [-33.337, 1.298] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 22", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 22, + "ty": "sh", + "ix": 23, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.308, 0.198], + [-0.484, 0], + [-0.403, -0.249], + [-0.227, -0.433], + [0, -0.55], + [0.235, -0.433], + [0.403, -0.249], + [0.535, 0], + [0.33, 0.169], + [0.191, 0.308], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0.176, -0.257], + [0.308, -0.198], + [0.528, 0], + [0.403, 0.249], + [0.235, 0.433], + [0, 0.55], + [-0.227, 0.425], + [-0.403, 0.242], + [-0.425, 0], + [-0.323, -0.169], + [0, 0], + [0, 0] + ], + "v": [ + [-34.975, 5.104], + [-34.975, -2.772], + [-33.93, -2.772], + [-33.809, -1.925], + [-33.083, -2.607], + [-31.895, -2.904], + [-30.499, -2.53], + [-29.552, -1.507], + [-29.201, -0.033], + [-29.552, 1.441], + [-30.499, 2.453], + [-31.906, 2.816], + [-33.04, 2.563], + [-33.809, 1.848], + [-33.809, 5.104] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 23", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 23, + "ty": "sh", + "ix": 24, + "ks": { + "a": 0, + "k": { + "i": [ + [0.543, 0], + [0.447, 0.213], + [0.264, 0.447], + [0, 0.689], + [0, 0], + [0, 0], + [0, 0], + [-0.323, -0.315], + [-0.55, 0], + [-0.323, 0.315], + [0, 0.675], + [0, 0], + [0, 0], + [0, 0], + [0.271, -0.447], + [0.455, -0.22] + ], + "o": [ + [-0.55, 0], + [-0.44, -0.22], + [-0.257, -0.447], + [0, 0], + [0, 0], + [0, 0], + [0, 0.675], + [0.323, 0.315], + [0.543, 0], + [0.323, -0.315], + [0, 0], + [0, 0], + [0, 0], + [0, 0.689], + [-0.264, 0.447], + [-0.447, 0.213] + ], + "v": [ + [-38.975, 2.816], + [-40.471, 2.497], + [-41.527, 1.496], + [-41.912, -0.209], + [-41.912, -5.016], + [-40.746, -5.016], + [-40.746, -0.198], + [-40.262, 1.287], + [-38.953, 1.76], + [-37.655, 1.287], + [-37.171, -0.198], + [-37.171, -5.016], + [-36.005, -5.016], + [-36.005, -0.209], + [-36.412, 1.496], + [-37.49, 2.497] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 24", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.59, 182.776], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 25, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.579, -1.737], + [0.579, 2.316], + [-0.579, 2.316], + [-0.579, -1.737], + [-3.474, -1.737], + [0, -5.211], + [3.474, -1.737] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.108, -0.109], + [0.154, 0], + [0, 0], + [0.109, 0.109], + [0, 0.154], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0.154], + [-0.109, 0.109], + [0, 0], + [-0.154, 0], + [-0.109, -0.109], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-4.632, 4.053], + [4.632, 4.053], + [4.632, 0], + [5.79, 0], + [5.79, 4.632], + [5.621, 5.042], + [5.211, 5.211], + [-5.211, 5.211], + [-5.62, 5.042], + [-5.79, 4.632], + [-5.79, 0], + [-4.632, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.494117647409, 0.490196079016, 0.752941191196, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [153.463, 162.512], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 274, + "op": 305, + "st": 277, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 13, + "ty": 3, + "nm": "NULL", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [495.157, 390, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [50, 50, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 14, + "ty": 3, + "nm": "C-main 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [360.724, 340, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -148, + "op": 902, + "st": -148, + "bm": 0 + }, + { + "ddd": 0, + "ind": 15, + "ty": 3, + "nm": "Null 18", + "parent": 14, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-4.724, -6, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [138, 138, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -60, + "op": 990, + "st": -60, + "bm": 0 + }, + { + "ddd": 0, + "ind": 16, + "ty": 3, + "nm": "C-main 3", + "parent": 15, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [35.01, 10.139, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 10, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.05, 0.05, 0.18], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 23, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 49, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.72, 0.72, 0.72], "y": [0, 0, 0] }, + "t": 244, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 257, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.714, 0.714, 0.72], "y": [0, 0, 0] }, + "t": 272, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.714, 0.714, 0.72], "y": [0, 0, 0] }, + "t": 350, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.34, 0.34, 0.34], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 365, + "s": [94, 94, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.31, 0.31, 0.333], "y": [0, 0, 0] }, + "t": 382, + "s": [105, 105, 100] + }, + { "t": 411, "s": [100, 100, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": -168, + "op": 882, + "st": -168, + "bm": 0 + }, + { + "ddd": 0, + "ind": 17, + "ty": 3, + "nm": "Null 19", + "parent": 16, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.36, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 17, + "s": [73.927, -21.923, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.893, "y": 1 }, + "o": { "x": 0.849, "y": 0 }, + "t": 37, + "s": [33.78, -44.648, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 1 }, + "o": { "x": 0.11, "y": 0 }, + "t": 150, + "s": [33.78, -43.199, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.72, "y": 0 }, + "t": 244, + "s": [33.78, -44.648, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 257, "s": [73.927, -21.923, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [101, 101, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -168, + "op": 882, + "st": -168, + "bm": 0 + }, + { + "ddd": 0, + "ind": 18, + "ty": 4, + "nm": "dash-1", + "parent": 17, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 78, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-176.616, 39.404, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [-8.284, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, -8.285], + [0, 0], + [0, 0] + ], + "v": [ + [-38.785, 39.246], + [-38.785, -9], + [-23.785, -24], + [50.233, -24] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.270588235294, 0.317647058824, 0.741176470588, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 2, + "lj": 2, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 2, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 4, "ix": 2 } }, + { + "n": "o", + "nm": "offset", + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 57, + "s": [180] + }, + { "t": 301, "s": [0] } + ], + "ix": 7 + } + } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.25], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 57, + "s": [100] + }, + { + "i": { "x": [0.319], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 84, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 182, + "s": [100] + }, + { "t": 202, "s": [0] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.25], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 57, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 84, + "s": [0] + }, + { "t": 194, "s": [0] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 18, + "op": 1092, + "st": 42, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 19, + "ty": 2, + "nm": "Web 2.0 & 3.0.png", + "cl": "0 0 png", + "parent": 17, + "refId": "image_3", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 61, "s": [0] }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 106, + "s": [100] + }, + { + "i": { "x": [0.27], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 199, + "s": [100] + }, + { "t": 220, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-215.833, 95.908, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [153.35, 34.335, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 61, + "s": [75.047, 75.047, 100] + }, + { "t": 106, "s": [47.783, 47.783, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [329.178, -22.074], + [-22.478, -22.074], + [-22.478, 90.744], + [329.178, 90.744] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 18, + "op": 272, + "st": 18, + "bm": 0 + }, + { + "ddd": 0, + "ind": 20, + "ty": 4, + "nm": "cir", + "parent": 17, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-116.628, 15.404, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.643, 0.643, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 53, + "s": [0, 0, 100] + }, + { + "i": { "x": [0.175, 0.175, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.346, 0.346, 0.76], "y": [0, 0, 0] }, + "t": 60, + "s": [109, 109, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 68, + "s": [90, 90, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 77, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 182, + "s": [95, 95, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 189, + "s": [110, 110, 100] + }, + { "t": 199, "s": [0, 0, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-3.866, 0], + [0, 0], + [0, -3.866], + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0] + ], + "o": [ + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0], + [-3.866, 0], + [0, 0], + [0, -3.866] + ], + "v": [ + [0, -7], + [0, -7], + [7, 0], + [7, 0], + [0, 7], + [0, 7], + [-7, 0], + [-7, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.011764706112, 0.392156869173, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 16, + "op": 1083, + "st": 33, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 21, + "ty": 4, + "nm": "w1-highlight", + "parent": 52, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.23], "y": [1] }, "o": { "x": [0.77], "y": [0] }, "t": 51, "s": [0] }, + { + "i": { "x": [0.26], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 78, + "s": [100] + }, + { + "i": { "x": [0.26], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 112, + "s": [100] + }, + { "t": 136, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [322.036, 354.296, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [974, 235.587, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150, 150, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-12.564, 0], + [0, 0], + [0, -12.564], + [0, 0], + [12.564, 0], + [0, 0], + [0, 12.564], + [0, 0] + ], + "o": [ + [0, 0], + [12.564, 0], + [0, 0], + [0, 12.564], + [0, 0], + [-12.564, 0], + [0, 0], + [0, -12.564] + ], + "v": [ + [793.97, 15.938], + [1098.444, 15.938], + [1121.194, 38.688], + [1121.194, 340.029], + [1098.444, 362.779], + [793.97, 362.779], + [771.22, 340.029], + [771.22, 38.688] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gs", + "o": { "a": 0, "k": 100, "ix": 9 }, + "w": { "a": 0, "k": 3, "ix": 10 }, + "g": { + "p": 5, + "k": { + "a": 0, + "k": [ + 0, 0.4, 0.831, 0.969, 0.161, 0.351, 0.702, 0.984, 0.323, 0.302, 0.573, 1, 0.661, + 0.518, 0.484, 1, 1, 0.733, 0.396, 1 + ], + "ix": 8 + } + }, + "s": { "a": 0, "k": [772.103, 191.182], "ix": 4 }, + "e": { "a": 0, "k": [1121.673, 193.521], "ix": 5 }, + "t": 1, + "lc": 1, + "lj": 1, + "ml": 4, + "ml2": { "a": 0, "k": 4, "ix": 13 }, + "bm": 0, + "nm": "Gradient Stroke 1", + "mn": "ADBE Vector Graphic - G-Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [974.844, 235.638], "ix": 2 }, + "a": { "a": 0, "k": [974, 235.587], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -3, + "op": 1066, + "st": 16, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 22, + "ty": 4, + "nm": "Layer 19", + "parent": 61, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [19.527, 626.223, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.643, 0.643, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 111, + "s": [0, 0, 100] + }, + { + "i": { "x": [0.175, 0.175, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.346, 0.346, 0.76], "y": [0, 0, 0] }, + "t": 118, + "s": [227.753, 227.753, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 126, + "s": [188.053, 188.053, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 135, + "s": [198.501, 198.501, 100] + }, + { + "i": { "x": [0.24, 0.24, 0.24], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 228, + "s": [198.501, 198.501, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.76, 0.76, 0.76], "y": [0, 0, 0] }, + "t": 235, + "s": [229.843, 229.843, 100] + }, + { "t": 245, "s": [0, 0, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-3.866, 0], + [0, 0], + [0, -3.866], + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0] + ], + "o": [ + [0, 0], + [3.866, 0], + [0, 0], + [0, 3.866], + [0, 0], + [-3.866, 0], + [0, 0], + [0, -3.866] + ], + "v": [ + [0, -7], + [0, -7], + [7, 0], + [7, 0], + [0, 7], + [0, 7], + [-7, 0], + [-7, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.011764706112, 0.392156869173, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 45, + "op": 1186, + "st": 136, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 23, + "ty": 4, + "nm": "dash-2", + "parent": 61, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 78, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-53.237, 628.359, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [208.948, 208.948, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [-29.807, 0.053], + [23.318, 0] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.270588235294, 0.317647058824, 0.741176470588, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 1, "ix": 5 }, + "lc": 2, + "lj": 2, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 2, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 4, "ix": 2 } }, + { + "n": "o", + "nm": "offset", + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 115, + "s": [0] + }, + { "t": 350, "s": [180] } + ], + "ix": 7 + } + } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.319], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 115, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 237, + "s": [100] + }, + { "t": 252, "s": [0] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.25], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 115, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 140, + "s": [0] + }, + { "t": 245, "s": [0] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 50, + "op": 1195, + "st": 145, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 24, + "ty": 2, + "nm": "Web 2.0 & 3.0.png", + "cl": "0 0 png", + "parent": 17, + "refId": "image_3", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 114, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 159, + "s": [100] + }, + { + "i": { "x": [0.27], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 246, + "s": [100] + }, + { "t": 259, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-215.662, 187.515, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [153.708, 217.04, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0, 0, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 114, + "s": [75.047, 75.047, 100] + }, + { "t": 159, "s": [47.783, 47.783, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [337.401, 153.601], + [-29.985, 153.601], + [-29.985, 280.478], + [337.401, 280.478] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 108, + "op": 272, + "st": 71, + "bm": 0 + }, + { + "ddd": 0, + "ind": 25, + "ty": 3, + "nm": "Null 20", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 17, + "s": [493.333, 310.738, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.22, "y": 0.22 }, + "o": { "x": 0.367, "y": 0.367 }, + "t": 37, + "s": [437.581, 254.986, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.36, "y": 1 }, + "o": { "x": 0.78, "y": 0 }, + "t": 48, + "s": [437.581, 254.986, 0], + "to": [0, 0, 0], + "ti": [-0.058, -4.065, 0] + }, + { + "i": { "x": 0.28, "y": 0.28 }, + "o": { "x": 0.859, "y": 0.859 }, + "t": 61, + "s": [437.93, 279.377, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.72, "y": 0 }, + "t": 244, + "s": [437.93, 279.377, 0], + "to": [9.234, 5.227, 0], + "ti": [0, 0, 0] + }, + { "t": 257, "s": [493.333, 310.738, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [139.38, 139.38, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -168, + "op": 882, + "st": -168, + "bm": 0 + }, + { + "ddd": 0, + "ind": 26, + "ty": 4, + "nm": "Layer 26", + "parent": 28, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 1, "s": [100], "h": 1 }, + { "t": 6, "s": [40], "h": 1 }, + { "t": 11, "s": [100], "h": 1 }, + { "t": 16, "s": [40], "h": 1 }, + { "t": 21, "s": [100], "h": 1 }, + { "t": 26, "s": [40], "h": 1 }, + { "t": 31, "s": [100], "h": 1 }, + { "t": 36, "s": [40], "h": 1 }, + { "t": 41, "s": [100], "h": 1 }, + { "t": 46, "s": [40], "h": 1 }, + { "t": 51, "s": [100], "h": 1 }, + { "t": 56, "s": [40], "h": 1 }, + { "t": 61, "s": [100], "h": 1 }, + { "t": 66, "s": [40], "h": 1 }, + { "t": 71, "s": [100], "h": 1 }, + { "t": 76, "s": [40], "h": 1 }, + { "t": 81, "s": [100], "h": 1 }, + { "t": 86, "s": [40], "h": 1 }, + { "t": 91, "s": [100], "h": 1 }, + { "t": 96, "s": [40], "h": 1 }, + { "t": 101, "s": [100], "h": 1 }, + { "t": 106, "s": [40], "h": 1 }, + { "t": 111, "s": [100], "h": 1 }, + { "t": 116, "s": [40], "h": 1 }, + { "t": 121, "s": [100], "h": 1 } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [985.235, 261.651, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [1560.027, 356.448, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [1517.183, 346.948], + [1517.183, 365.948] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0.5, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.24, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 45, + "s": [-54.794, 0], + "to": [16.273, 0], + "ti": [-16.273, 0] + }, + { "t": 82, "s": [42.843, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 1, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 34, + "op": 101, + "st": 12, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 27, + "ty": 4, + "nm": "email address 2", + "parent": 28, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.29], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 45, "s": [0] }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.71], "y": [0] }, + "t": 82, + "s": [100] + }, + { + "i": { "x": [0.26], "y": [1] }, + "o": { "x": [0.74], "y": [0] }, + "t": 118, + "s": [100] + }, + { "t": 144, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [936.305, 262.847, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [936.305, 262.847, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 1, + "k": [ + { + "i": { "x": 0.24, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 45, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [888.722, 255.418], + [888.722, 269.634], + [890.35, 269.684], + [890.35, 255.467] + ], + "c": true + } + ] + }, + { + "t": 82, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [888.722, 255.418], + [888.722, 269.634], + [983.085, 269.634], + [983.085, 255.418] + ], + "c": true + } + ] + } + ], + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [953.27, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.62, 0], + [0.31, -0.167], + [0.18, -0.287], + [0.79, 0], + [0.27, -0.147], + [0.16, -0.254], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.23, 0.28], + [-0.36, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [-0.23, 0.28], + [-0.37, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [0.36, 0.373] + ], + "o": [ + [-0.35, 0], + [-0.3, 0.166], + [-0.3, -0.62], + [-0.34, 0], + [-0.26, 0.146], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74], + [-0.35, -0.374] + ], + "v": [ + [1.97, -2.54], + [0.98, -2.29], + [0.26, -1.61], + [-1.38, -2.54], + [-2.3, -2.32], + [-2.93, -1.72], + [-3.02, -2.42], + [-3.96, -2.42], + [-3.96, 2.54], + [-2.9, 2.54], + [-2.9, -0.02], + [-2.55, -1.22], + [-1.64, -1.64], + [-0.53, -0.2], + [-0.53, 2.54], + [0.53, 2.54], + [0.53, -0.02], + [0.88, -1.22], + [1.8, -1.64], + [2.9, -0.2], + [2.9, 2.54], + [3.96, 2.54], + [3.96, -0.31], + [3.43, -1.98] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [941.71, 262.807], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1.32, -2.48], + [0, -0.58], + [-1.33, -2.48], + [-2.46, -2.48], + [-0.7, 0], + [-2.46, 2.48], + [-1.33, 2.48], + [0, 0.58], + [1.32, 2.48], + [2.46, 2.48], + [0.7, 0], + [2.46, -2.48] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [929.48, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.12, -0.227], + [0.2, -0.14], + [0.29, 0], + [0.18, 0.126], + [0, 0.226], + [-0.17, 0.146], + [-0.42, 0], + [0, 0] + ], + "o": [ + [-0.1, 0.226], + [-0.19, 0.133], + [-0.29, 0], + [-0.16, -0.134], + [0, -0.22], + [0.18, -0.147], + [0, 0], + [-0.02, 0.273] + ], + "v": [ + [0.98, 0.99], + [0.52, 1.54], + [-0.2, 1.74], + [-0.9, 1.55], + [-1.15, 1.01], + [-0.89, 0.46], + [0.01, 0.24], + [1.19, 0.24] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.7, 0], + [0.33, -0.14], + [0.22, -0.26], + [0.04, -0.36], + [0, 0], + [-0.21, 0.14], + [-0.29, 0], + [-0.2, -0.194], + [0, -0.387], + [0, 0], + [0, 0], + [0.38, -0.28], + [0, -0.48], + [-0.13, -0.234], + [-0.27, -0.14], + [-0.42, 0], + [-0.26, 0.186], + [-0.14, 0.273], + [0, 0], + [0, 0], + [0, 0], + [0.38, 0.36] + ], + "o": [ + [-0.38, 0], + [-0.32, 0.133], + [-0.2, 0.253], + [0, 0], + [0.05, -0.28], + [0.22, -0.147], + [0.34, 0], + [0.22, 0.193], + [0, 0], + [0, 0], + [-0.69, 0], + [-0.37, 0.28], + [0, 0.273], + [0.14, 0.226], + [0.28, 0.14], + [0.44, 0], + [0.27, -0.187], + [0, 0], + [0, 0], + [0, 0], + [0, -0.627], + [-0.38, -0.367] + ], + "v": [ + [0.08, -2.6], + [-0.99, -2.39], + [-1.79, -1.8], + [-2.15, -0.88], + [-1.09, -0.88], + [-0.7, -1.51], + [0.07, -1.73], + [0.88, -1.44], + [1.2, -0.57], + [1.2, -0.48], + [-0.1, -0.48], + [-1.7, -0.06], + [-2.26, 1.08], + [-2.06, 1.84], + [-1.45, 2.39], + [-0.41, 2.6], + [0.64, 2.32], + [1.25, 1.63], + [1.34, 2.48], + [2.26, 2.48], + [2.26, -0.57], + [1.69, -2.05] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [934.54, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.35, 0.373], + [0.62, 0], + [0.3, -0.167], + [0.18, -0.287], + [0.78, 0], + [0.26, -0.147], + [0.16, -0.254], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.24, 0.28], + [-0.37, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [-0.24, 0.28], + [-0.38, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [-0.36, -0.374], + [-0.36, 0], + [-0.3, 0.166], + [-0.31, -0.62], + [-0.35, 0], + [-0.26, 0.146], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.73, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74] + ], + "v": [ + [3.43, -1.98], + [1.97, -2.54], + [0.98, -2.29], + [0.26, -1.61], + [-1.38, -2.54], + [-2.3, -2.32], + [-2.93, -1.72], + [-3.02, -2.42], + [-3.96, -2.42], + [-3.96, 2.54], + [-2.9, 2.54], + [-2.9, -0.02], + [-2.55, -1.22], + [-1.64, -1.64], + [-0.53, -0.2], + [-0.53, 2.54], + [0.53, 2.54], + [0.53, -0.02], + [0.88, -1.22], + [1.8, -1.64], + [2.9, -0.2], + [2.9, 2.54], + [3.96, 2.54], + [3.96, -0.31] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [977.52, 262.807], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.14, -0.254], + [0.22, -0.127], + [0.26, 0], + [0.22, 0.126], + [0.14, 0.246], + [0, 0.373], + [-0.13, 0.246], + [-0.21, 0.126], + [-0.25, 0], + [-0.21, -0.127], + [-0.12, -0.254], + [0, -0.374] + ], + "o": [ + [-0.13, 0.246], + [-0.21, 0.126], + [-0.25, 0], + [-0.21, -0.127], + [-0.13, -0.254], + [0, -0.374], + [0.14, -0.254], + [0.22, -0.127], + [0.26, 0], + [0.22, 0.126], + [0.14, 0.246], + [0, 0.373] + ], + "v": [ + [1.22, 0.94], + [0.69, 1.5], + [-0.01, 1.69], + [-0.71, 1.5], + [-1.23, 0.94], + [-1.43, 0], + [-1.23, -0.93], + [-0.71, -1.5], + [0, -1.69], + [0.7, -1.5], + [1.22, -0.93], + [1.42, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.38, 0.213], + [0.48, 0], + [0.38, -0.22], + [0.23, -0.394], + [0, -0.52], + [-0.22, -0.394], + [-0.37, -0.22], + [-0.47, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.23, 0.386] + ], + "o": [ + [-0.37, -0.22], + [-0.46, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386], + [0.38, 0.213], + [0.48, 0], + [0.38, -0.22], + [0.23, -0.394], + [0, -0.52], + [-0.22, -0.394] + ], + "v": [ + [1.27, -2.27], + [0, -2.6], + [-1.27, -2.27], + [-2.18, -1.36], + [-2.51, 0], + [-2.18, 1.37], + [-1.29, 2.28], + [-0.01, 2.6], + [1.27, 2.28], + [2.17, 1.37], + [2.51, 0], + [2.17, -1.36] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [970.18, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.28, -0.214], + [0.38, 0], + [0.26, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.48, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.04, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.2, 0.393], + [0, 0.513], + [0.22, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [957.13, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.28, -0.214], + [0.38, 0], + [0.26, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.48, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.04, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.2, 0.393], + [0, 0.513], + [0.22, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [924.52, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.22, 0.126], + [-0.26, 0], + [-0.23, -0.154], + [-0.07, -0.274], + [0, 0], + [0.42, 0.32], + [0.61, 0], + [0.39, -0.22], + [0.22, -0.394], + [0, -0.514], + [-0.21, -0.394], + [-0.38, -0.22], + [-0.49, 0], + [-0.42, 0.326], + [-0.11, 0.533], + [0, 0], + [0.23, -0.154], + [0.31, 0], + [0.22, 0.133], + [0.13, 0.246], + [0, 0.366], + [-0.13, 0.246] + ], + "o": [ + [0.22, -0.134], + [0.31, 0], + [0.23, 0.153], + [0, 0], + [-0.12, -0.547], + [-0.41, -0.32], + [-0.49, 0], + [-0.38, 0.22], + [-0.21, 0.386], + [0, 0.513], + [0.22, 0.386], + [0.39, 0.22], + [0.61, 0], + [0.42, -0.327], + [0, 0], + [-0.07, 0.28], + [-0.23, 0.153], + [-0.26, 0], + [-0.22, -0.134], + [-0.13, -0.254], + [0, -0.367], + [0.13, -0.254] + ], + "v": [ + [-0.63, -1.49], + [0.09, -1.69], + [0.89, -1.46], + [1.33, -0.82], + [2.44, -0.82], + [1.63, -2.12], + [0.09, -2.6], + [-1.22, -2.27], + [-2.12, -1.35], + [-2.44, 0], + [-2.12, 1.36], + [-1.22, 2.27], + [0.09, 2.6], + [1.64, 2.11], + [2.44, 0.82], + [1.33, 0.82], + [0.89, 1.47], + [0.09, 1.7], + [-0.63, 1.5], + [-1.16, 0.93], + [-1.36, 0], + [-1.16, -0.92] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [964.55, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.2, 0], + [0.13, -0.134], + [0, -0.187], + [-0.13, -0.134], + [-0.2, 0], + [-0.13, 0.126], + [0, 0.18], + [0.13, 0.126] + ], + "o": [ + [-0.2, 0], + [-0.13, 0.126], + [0, 0.18], + [0.13, 0.126], + [0.2, 0], + [0.13, -0.134], + [0, -0.187], + [-0.13, -0.134] + ], + "v": [ + [0.005, -0.665], + [-0.495, -0.465], + [-0.685, 0.005], + [-0.495, 0.475], + [0.005, 0.665], + [0.495, 0.475], + [0.685, 0.005], + [0.495, -0.465] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [960.825, 264.742], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.29, -0.314], + [0.45, 0], + [0.29, 0.306], + [0, 0.5], + [-0.29, 0.313], + [-0.46, 0], + [-0.24, -0.147], + [-0.14, -0.254], + [0, -0.327] + ], + "o": [ + [-0.3, 0.306], + [-0.46, 0], + [-0.29, -0.314], + [0, -0.494], + [0.29, -0.314], + [0.3, 0], + [0.23, 0.14], + [0.13, 0.253], + [0, 0.5] + ], + "v": [ + [1.105, 0.18], + [-0.015, 0.64], + [-1.135, 0.18], + [-1.565, -1.04], + [-1.135, -2.25], + [-0.015, -2.72], + [0.795, -2.5], + [1.345, -1.91], + [1.545, -1.04] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.226], + [0.48, 0], + [0.28, -0.18], + [0.16, -0.234], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.3, -0.154], + [-0.39, 0], + [-0.37, 0.22], + [-0.21, 0.386], + [0, 0.5], + [0.21, 0.393] + ], + "o": [ + [-0.37, -0.227], + [-0.44, 0], + [-0.28, 0.18], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.17, 0.28], + [0.3, 0.153], + [0.48, 0], + [0.36, -0.227], + [0.21, -0.394], + [0, -0.5], + [-0.21, -0.394] + ], + "v": [ + [1.445, -3.3], + [0.175, -3.64], + [-0.905, -3.37], + [-1.565, -2.75], + [-1.675, -3.52], + [-2.625, -3.52], + [-2.625, 3.64], + [-1.565, 3.64], + [-1.565, 0.68], + [-0.865, 1.33], + [0.165, 1.56], + [1.445, 1.23], + [2.305, 0.31], + [2.625, -1.03], + [2.305, -2.37] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [949.255, 263.907], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.13, -0.254], + [0.22, -0.127], + [0.25, 0], + [0.21, 0.126], + [0.13, 0.246], + [0, 0.373], + [-0.14, 0.246], + [-0.22, 0.126], + [-0.26, 0], + [-0.22, -0.127], + [-0.13, -0.254], + [0, -0.374] + ], + "o": [ + [-0.14, 0.246], + [-0.22, 0.126], + [-0.26, 0], + [-0.22, -0.127], + [-0.14, -0.254], + [0, -0.374], + [0.13, -0.254], + [0.22, -0.127], + [0.25, 0], + [0.22, 0.126], + [0.13, 0.246], + [0, 0.373] + ], + "v": [ + [1.22, 0.94], + [0.69, 1.5], + [-0.01, 1.69], + [-0.71, 1.5], + [-1.23, 0.94], + [-1.43, 0], + [-1.23, -0.93], + [-0.71, -1.5], + [0, -1.69], + [0.7, -1.5], + [1.22, -0.93], + [1.42, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.38, 0.213], + [0.47, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.22, -0.394], + [-0.38, -0.22], + [-0.48, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386] + ], + "o": [ + [-0.38, -0.22], + [-0.47, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386], + [0.38, 0.213], + [0.47, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.22, -0.394] + ], + "v": [ + [1.27, -2.27], + [0, -2.6], + [-1.27, -2.27], + [-2.18, -1.36], + [-2.51, 0], + [-2.18, 1.37], + [-1.29, 2.28], + [-0.01, 2.6], + [1.27, 2.28], + [2.17, 1.37], + [2.51, 0], + [2.17, -1.36] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [908.86, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.27, -0.214], + [0.38, 0], + [0.25, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.21, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.49, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.03, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.21, 0.393], + [0, 0.513], + [0.21, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [899.02, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [902.82, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.59, 0], + [0.3, -0.167], + [0.16, -0.287], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.26, 0.28], + [-0.4, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [0.34, 0.373] + ], + "o": [ + [-0.36, 0], + [-0.3, 0.16], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.26, -0.28], + [0.76, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74], + [-0.34, -0.374] + ], + "v": [ + [0.415, -1.48], + [-0.575, -1.23], + [-1.265, -0.56], + [-1.265, -3.6], + [-2.325, -3.6], + [-2.325, 3.6], + [-1.265, 3.6], + [-1.265, 1.04], + [-0.875, -0.16], + [0.125, -0.58], + [1.275, 0.86], + [1.275, 3.6], + [2.325, 3.6], + [2.325, 0.75], + [1.815, -0.92] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [893.455, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 15", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 15, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [904.94, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 16", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 16, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.14, -0.254], + [0.22, -0.147], + [0.26, 0], + [0.16, 0.193], + [0, 0.32], + [-0.12, 0.28], + [-0.23, 0.18], + [-0.31, 0], + [-0.17, -0.247], + [0.03, -0.347] + ], + "o": [ + [-0.14, 0.246], + [-0.22, 0.14], + [-0.33, 0], + [-0.16, -0.2], + [0, -0.314], + [0.12, -0.28], + [0.22, -0.18], + [0.36, 0], + [0.16, 0.246], + [-0.03, 0.32] + ], + "v": [ + [0.86, 0.675], + [0.32, 1.265], + [-0.4, 1.475], + [-1.14, 1.185], + [-1.38, 0.405], + [-1.2, -0.485], + [-0.68, -1.175], + [0.12, -1.445], + [0.91, -1.075], + [1.11, -0.185] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.55, 0.286], + [0.76, 0], + [0.62, -0.26], + [0.46, -0.467], + [0.25, -0.62], + [0, -0.727], + [-0.3, -0.507], + [-0.54, -0.28], + [-0.73, 0], + [-0.62, 0.26], + [0, 0], + [0.29, -0.06], + [0.29, 0], + [0.52, 0.486], + [0, 0.873], + [-0.21, 0.52], + [-0.38, 0.386], + [-0.51, 0.22], + [-0.6, 0], + [-0.53, -0.487], + [0, -0.847], + [0.05, -0.28], + [0.1, -0.234], + [0.16, -0.147], + [0.2, 0], + [0.06, 0.166], + [-0.05, 0.273], + [0, 0], + [0, 0], + [0, 0], + [0.64, 0], + [0.29, -0.154], + [0.21, -0.267], + [0.11, -0.34], + [0, -0.367], + [-0.28, -0.307], + [-0.5, 0], + [-0.31, 0.16], + [-0.2, 0.286], + [-0.19, -0.167], + [-0.34, 0], + [-0.28, 0.173], + [-0.19, 0.293], + [-0.1, 0.373], + [0, 0.393], + [0.3, 0.513] + ], + "o": [ + [-0.56, -0.287], + [-0.74, 0], + [-0.62, 0.253], + [-0.46, 0.466], + [-0.26, 0.62], + [0, 0.693], + [0.3, 0.513], + [0.54, 0.28], + [0.73, 0], + [0, 0], + [-0.26, 0.113], + [-0.29, 0.06], + [-0.92, 0], + [-0.53, -0.48], + [0, -0.6], + [0.2, -0.52], + [0.37, -0.394], + [0.5, -0.227], + [0.94, 0], + [0.52, 0.48], + [0, 0.266], + [-0.06, 0.273], + [-0.1, 0.233], + [-0.16, 0.146], + [-0.24, 0], + [-0.07, -0.174], + [0, 0], + [0, 0], + [0, 0], + [-0.2, -0.514], + [-0.36, 0], + [-0.29, 0.153], + [-0.22, 0.26], + [-0.12, 0.333], + [0, 0.52], + [0.28, 0.3], + [0.35, 0], + [0.31, -0.16], + [0.04, 0.28], + [0.19, 0.16], + [0.36, 0], + [0.28, -0.18], + [0.19, -0.3], + [0.1, -0.374], + [0, -0.667], + [-0.3, -0.514] + ], + "v": [ + [2.67, -3.835], + [0.7, -4.265], + [-1.34, -3.875], + [-2.96, -2.795], + [-4.03, -1.165], + [-4.41, 0.855], + [-3.96, 2.655], + [-2.69, 3.845], + [-0.78, 4.265], + [1.24, 3.875], + [1.07, 3.175], + [0.25, 3.435], + [-0.62, 3.525], + [-2.78, 2.795], + [-3.57, 0.765], + [-3.26, -0.915], + [-2.39, -2.275], + [-1.07, -3.195], + [0.58, -3.535], + [2.78, -2.805], + [3.57, -0.815], + [3.49, 0.005], + [3.25, 0.765], + [2.86, 1.335], + [2.32, 1.555], + [1.87, 1.305], + [1.84, 0.635], + [2.32, -2.125], + [1.44, -2.125], + [1.32, -1.465], + [0.05, -2.235], + [-0.92, -2.005], + [-1.67, -1.375], + [-2.16, -0.475], + [-2.33, 0.575], + [-1.91, 1.815], + [-0.73, 2.265], + [0.26, 2.025], + [1.03, 1.355], + [1.37, 2.025], + [2.17, 2.265], + [3.12, 2.005], + [3.82, 1.295], + [4.26, 0.285], + [4.41, -0.865], + [3.95, -2.635] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [916.71, 263.142], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 17", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 17, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -28, + "op": 919, + "st": -131, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 28, + "ty": 4, + "nm": "email address", + "parent": 50, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 30, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [226.11, 199.548, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [936.305, 262.847, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [209.279, 209.279, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [953.27, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.62, 0], + [0.31, -0.167], + [0.18, -0.287], + [0.79, 0], + [0.27, -0.147], + [0.16, -0.254], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.23, 0.28], + [-0.36, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [-0.23, 0.28], + [-0.37, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [0.36, 0.373] + ], + "o": [ + [-0.35, 0], + [-0.3, 0.166], + [-0.3, -0.62], + [-0.34, 0], + [-0.26, 0.146], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74], + [-0.35, -0.374] + ], + "v": [ + [1.97, -2.54], + [0.98, -2.29], + [0.26, -1.61], + [-1.38, -2.54], + [-2.3, -2.32], + [-2.93, -1.72], + [-3.02, -2.42], + [-3.96, -2.42], + [-3.96, 2.54], + [-2.9, 2.54], + [-2.9, -0.02], + [-2.55, -1.22], + [-1.64, -1.64], + [-0.53, -0.2], + [-0.53, 2.54], + [0.53, 2.54], + [0.53, -0.02], + [0.88, -1.22], + [1.8, -1.64], + [2.9, -0.2], + [2.9, 2.54], + [3.96, 2.54], + [3.96, -0.31], + [3.43, -1.98] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [941.71, 262.807], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1.32, -2.48], + [0, -0.58], + [-1.33, -2.48], + [-2.46, -2.48], + [-0.7, 0], + [-2.46, 2.48], + [-1.33, 2.48], + [0, 0.58], + [1.32, 2.48], + [2.46, 2.48], + [0.7, 0], + [2.46, -2.48] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [929.48, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.12, -0.227], + [0.2, -0.14], + [0.29, 0], + [0.18, 0.126], + [0, 0.226], + [-0.17, 0.146], + [-0.42, 0], + [0, 0] + ], + "o": [ + [-0.1, 0.226], + [-0.19, 0.133], + [-0.29, 0], + [-0.16, -0.134], + [0, -0.22], + [0.18, -0.147], + [0, 0], + [-0.02, 0.273] + ], + "v": [ + [0.98, 0.99], + [0.52, 1.54], + [-0.2, 1.74], + [-0.9, 1.55], + [-1.15, 1.01], + [-0.89, 0.46], + [0.01, 0.24], + [1.19, 0.24] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.7, 0], + [0.33, -0.14], + [0.22, -0.26], + [0.04, -0.36], + [0, 0], + [-0.21, 0.14], + [-0.29, 0], + [-0.2, -0.194], + [0, -0.387], + [0, 0], + [0, 0], + [0.38, -0.28], + [0, -0.48], + [-0.13, -0.234], + [-0.27, -0.14], + [-0.42, 0], + [-0.26, 0.186], + [-0.14, 0.273], + [0, 0], + [0, 0], + [0, 0], + [0.38, 0.36] + ], + "o": [ + [-0.38, 0], + [-0.32, 0.133], + [-0.2, 0.253], + [0, 0], + [0.05, -0.28], + [0.22, -0.147], + [0.34, 0], + [0.22, 0.193], + [0, 0], + [0, 0], + [-0.69, 0], + [-0.37, 0.28], + [0, 0.273], + [0.14, 0.226], + [0.28, 0.14], + [0.44, 0], + [0.27, -0.187], + [0, 0], + [0, 0], + [0, 0], + [0, -0.627], + [-0.38, -0.367] + ], + "v": [ + [0.08, -2.6], + [-0.99, -2.39], + [-1.79, -1.8], + [-2.15, -0.88], + [-1.09, -0.88], + [-0.7, -1.51], + [0.07, -1.73], + [0.88, -1.44], + [1.2, -0.57], + [1.2, -0.48], + [-0.1, -0.48], + [-1.7, -0.06], + [-2.26, 1.08], + [-2.06, 1.84], + [-1.45, 2.39], + [-0.41, 2.6], + [0.64, 2.32], + [1.25, 1.63], + [1.34, 2.48], + [2.26, 2.48], + [2.26, -0.57], + [1.69, -2.05] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [934.54, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.35, 0.373], + [0.62, 0], + [0.3, -0.167], + [0.18, -0.287], + [0.78, 0], + [0.26, -0.147], + [0.16, -0.254], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.24, 0.28], + [-0.37, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [-0.24, 0.28], + [-0.38, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [-0.36, -0.374], + [-0.36, 0], + [-0.3, 0.166], + [-0.31, -0.62], + [-0.35, 0], + [-0.26, 0.146], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.74, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.24, -0.28], + [0.73, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74] + ], + "v": [ + [3.43, -1.98], + [1.97, -2.54], + [0.98, -2.29], + [0.26, -1.61], + [-1.38, -2.54], + [-2.3, -2.32], + [-2.93, -1.72], + [-3.02, -2.42], + [-3.96, -2.42], + [-3.96, 2.54], + [-2.9, 2.54], + [-2.9, -0.02], + [-2.55, -1.22], + [-1.64, -1.64], + [-0.53, -0.2], + [-0.53, 2.54], + [0.53, 2.54], + [0.53, -0.02], + [0.88, -1.22], + [1.8, -1.64], + [2.9, -0.2], + [2.9, 2.54], + [3.96, 2.54], + [3.96, -0.31] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [977.52, 262.807], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.14, -0.254], + [0.22, -0.127], + [0.26, 0], + [0.22, 0.126], + [0.14, 0.246], + [0, 0.373], + [-0.13, 0.246], + [-0.21, 0.126], + [-0.25, 0], + [-0.21, -0.127], + [-0.12, -0.254], + [0, -0.374] + ], + "o": [ + [-0.13, 0.246], + [-0.21, 0.126], + [-0.25, 0], + [-0.21, -0.127], + [-0.13, -0.254], + [0, -0.374], + [0.14, -0.254], + [0.22, -0.127], + [0.26, 0], + [0.22, 0.126], + [0.14, 0.246], + [0, 0.373] + ], + "v": [ + [1.22, 0.94], + [0.69, 1.5], + [-0.01, 1.69], + [-0.71, 1.5], + [-1.23, 0.94], + [-1.43, 0], + [-1.23, -0.93], + [-0.71, -1.5], + [0, -1.69], + [0.7, -1.5], + [1.22, -0.93], + [1.42, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.38, 0.213], + [0.48, 0], + [0.38, -0.22], + [0.23, -0.394], + [0, -0.52], + [-0.22, -0.394], + [-0.37, -0.22], + [-0.47, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.23, 0.386] + ], + "o": [ + [-0.37, -0.22], + [-0.46, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386], + [0.38, 0.213], + [0.48, 0], + [0.38, -0.22], + [0.23, -0.394], + [0, -0.52], + [-0.22, -0.394] + ], + "v": [ + [1.27, -2.27], + [0, -2.6], + [-1.27, -2.27], + [-2.18, -1.36], + [-2.51, 0], + [-2.18, 1.37], + [-1.29, 2.28], + [-0.01, 2.6], + [1.27, 2.28], + [2.17, 1.37], + [2.51, 0], + [2.17, -1.36] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [970.18, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.28, -0.214], + [0.38, 0], + [0.26, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.48, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.04, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.2, 0.393], + [0, 0.513], + [0.22, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [957.13, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.28, -0.214], + [0.38, 0], + [0.26, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.48, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.04, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.2, 0.393], + [0, 0.513], + [0.22, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [924.52, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.22, 0.126], + [-0.26, 0], + [-0.23, -0.154], + [-0.07, -0.274], + [0, 0], + [0.42, 0.32], + [0.61, 0], + [0.39, -0.22], + [0.22, -0.394], + [0, -0.514], + [-0.21, -0.394], + [-0.38, -0.22], + [-0.49, 0], + [-0.42, 0.326], + [-0.11, 0.533], + [0, 0], + [0.23, -0.154], + [0.31, 0], + [0.22, 0.133], + [0.13, 0.246], + [0, 0.366], + [-0.13, 0.246] + ], + "o": [ + [0.22, -0.134], + [0.31, 0], + [0.23, 0.153], + [0, 0], + [-0.12, -0.547], + [-0.41, -0.32], + [-0.49, 0], + [-0.38, 0.22], + [-0.21, 0.386], + [0, 0.513], + [0.22, 0.386], + [0.39, 0.22], + [0.61, 0], + [0.42, -0.327], + [0, 0], + [-0.07, 0.28], + [-0.23, 0.153], + [-0.26, 0], + [-0.22, -0.134], + [-0.13, -0.254], + [0, -0.367], + [0.13, -0.254] + ], + "v": [ + [-0.63, -1.49], + [0.09, -1.69], + [0.89, -1.46], + [1.33, -0.82], + [2.44, -0.82], + [1.63, -2.12], + [0.09, -2.6], + [-1.22, -2.27], + [-2.12, -1.35], + [-2.44, 0], + [-2.12, 1.36], + [-1.22, 2.27], + [0.09, 2.6], + [1.64, 2.11], + [2.44, 0.82], + [1.33, 0.82], + [0.89, 1.47], + [0.09, 1.7], + [-0.63, 1.5], + [-1.16, 0.93], + [-1.36, 0], + [-1.16, -0.92] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [964.55, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.2, 0], + [0.13, -0.134], + [0, -0.187], + [-0.13, -0.134], + [-0.2, 0], + [-0.13, 0.126], + [0, 0.18], + [0.13, 0.126] + ], + "o": [ + [-0.2, 0], + [-0.13, 0.126], + [0, 0.18], + [0.13, 0.126], + [0.2, 0], + [0.13, -0.134], + [0, -0.187], + [-0.13, -0.134] + ], + "v": [ + [0.005, -0.665], + [-0.495, -0.465], + [-0.685, 0.005], + [-0.495, 0.475], + [0.005, 0.665], + [0.495, 0.475], + [0.685, 0.005], + [0.495, -0.465] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [960.825, 264.742], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.29, -0.314], + [0.45, 0], + [0.29, 0.306], + [0, 0.5], + [-0.29, 0.313], + [-0.46, 0], + [-0.24, -0.147], + [-0.14, -0.254], + [0, -0.327] + ], + "o": [ + [-0.3, 0.306], + [-0.46, 0], + [-0.29, -0.314], + [0, -0.494], + [0.29, -0.314], + [0.3, 0], + [0.23, 0.14], + [0.13, 0.253], + [0, 0.5] + ], + "v": [ + [1.105, 0.18], + [-0.015, 0.64], + [-1.135, 0.18], + [-1.565, -1.04], + [-1.135, -2.25], + [-0.015, -2.72], + [0.795, -2.5], + [1.345, -1.91], + [1.545, -1.04] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.226], + [0.48, 0], + [0.28, -0.18], + [0.16, -0.234], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.3, -0.154], + [-0.39, 0], + [-0.37, 0.22], + [-0.21, 0.386], + [0, 0.5], + [0.21, 0.393] + ], + "o": [ + [-0.37, -0.227], + [-0.44, 0], + [-0.28, 0.18], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0.17, 0.28], + [0.3, 0.153], + [0.48, 0], + [0.36, -0.227], + [0.21, -0.394], + [0, -0.5], + [-0.21, -0.394] + ], + "v": [ + [1.445, -3.3], + [0.175, -3.64], + [-0.905, -3.37], + [-1.565, -2.75], + [-1.675, -3.52], + [-2.625, -3.52], + [-2.625, 3.64], + [-1.565, 3.64], + [-1.565, 0.68], + [-0.865, 1.33], + [0.165, 1.56], + [1.445, 1.23], + [2.305, 0.31], + [2.625, -1.03], + [2.305, -2.37] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [949.255, 263.907], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.13, -0.254], + [0.22, -0.127], + [0.25, 0], + [0.21, 0.126], + [0.13, 0.246], + [0, 0.373], + [-0.14, 0.246], + [-0.22, 0.126], + [-0.26, 0], + [-0.22, -0.127], + [-0.13, -0.254], + [0, -0.374] + ], + "o": [ + [-0.14, 0.246], + [-0.22, 0.126], + [-0.26, 0], + [-0.22, -0.127], + [-0.14, -0.254], + [0, -0.374], + [0.13, -0.254], + [0.22, -0.127], + [0.25, 0], + [0.22, 0.126], + [0.13, 0.246], + [0, 0.373] + ], + "v": [ + [1.22, 0.94], + [0.69, 1.5], + [-0.01, 1.69], + [-0.71, 1.5], + [-1.23, 0.94], + [-1.43, 0], + [-1.23, -0.93], + [-0.71, -1.5], + [0, -1.69], + [0.7, -1.5], + [1.22, -0.93], + [1.42, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.38, 0.213], + [0.47, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.22, -0.394], + [-0.38, -0.22], + [-0.48, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386] + ], + "o": [ + [-0.38, -0.22], + [-0.47, 0], + [-0.38, 0.213], + [-0.22, 0.386], + [0, 0.52], + [0.22, 0.386], + [0.38, 0.213], + [0.47, 0], + [0.38, -0.22], + [0.22, -0.394], + [0, -0.52], + [-0.22, -0.394] + ], + "v": [ + [1.27, -2.27], + [0, -2.6], + [-1.27, -2.27], + [-2.18, -1.36], + [-2.51, 0], + [-2.18, 1.37], + [-1.29, 2.28], + [-0.01, 2.6], + [1.27, 2.28], + [2.17, 1.37], + [2.51, 0], + [2.17, -1.36] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [908.86, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.27, 0.206], + [-0.35, 0], + [-0.25, -0.227], + [-0.02, -0.387] + ], + "o": [ + [0.06, -0.42], + [0.27, -0.214], + [0.38, 0], + [0.25, 0.226], + [0, 0] + ], + "v": [ + [-1.4, -0.47], + [-0.9, -1.41], + [0.04, -1.73], + [0.99, -1.39], + [1.4, -0.47] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.36, 0.213], + [0.49, 0], + [0.38, -0.22], + [0.21, -0.394], + [0, -0.52], + [-0.21, -0.387], + [-0.37, -0.22], + [-0.49, 0], + [-0.39, 0.313], + [-0.13, 0.466], + [0, 0], + [0.21, -0.14], + [0.3, 0], + [0.29, 0.246], + [0.03, 0.48], + [0, 0], + [0, 0.073], + [0, 0.066], + [0.2, 0.36] + ], + "o": [ + [-0.36, -0.22], + [-0.5, 0], + [-0.37, 0.22], + [-0.21, 0.393], + [0, 0.513], + [0.21, 0.386], + [0.38, 0.213], + [0.59, 0], + [0.4, -0.314], + [0, 0], + [-0.1, 0.233], + [-0.2, 0.133], + [-0.37, 0], + [-0.28, -0.254], + [0, 0], + [0.01, -0.094], + [0.01, -0.08], + [0, -0.434], + [-0.2, -0.36] + ], + "v": [ + [1.32, -2.27], + [0.05, -2.6], + [-1.27, -2.27], + [-2.15, -1.35], + [-2.46, 0.02], + [-2.14, 1.37], + [-1.26, 2.28], + [0.04, 2.6], + [1.51, 2.13], + [2.31, 0.96], + [1.25, 0.96], + [0.79, 1.52], + [0.04, 1.72], + [-0.95, 1.35], + [-1.42, 0.25], + [2.44, 0.25], + [2.45, 0], + [2.46, -0.22], + [2.16, -1.41] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [899.02, 262.867], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [902.82, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.59, 0], + [0.3, -0.167], + [0.16, -0.287], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.26, 0.28], + [-0.4, 0], + [0, -0.96], + [0, 0], + [0, 0], + [0, 0], + [0.34, 0.373] + ], + "o": [ + [-0.36, 0], + [-0.3, 0.16], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.52], + [0.26, -0.28], + [0.76, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.74], + [-0.34, -0.374] + ], + "v": [ + [0.415, -1.48], + [-0.575, -1.23], + [-1.265, -0.56], + [-1.265, -3.6], + [-2.325, -3.6], + [-2.325, 3.6], + [-1.265, 3.6], + [-1.265, 1.04], + [-0.875, -0.16], + [0.125, -0.58], + [1.275, 0.86], + [1.275, 3.6], + [2.325, 3.6], + [2.325, 0.75], + [1.815, -0.92] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [893.455, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 15", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 15, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.53, 3.6], + [0.53, 3.6], + [0.53, -3.6], + [-0.53, -3.6] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [904.94, 261.747], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 16", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 16, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.14, -0.254], + [0.22, -0.147], + [0.26, 0], + [0.16, 0.193], + [0, 0.32], + [-0.12, 0.28], + [-0.23, 0.18], + [-0.31, 0], + [-0.17, -0.247], + [0.03, -0.347] + ], + "o": [ + [-0.14, 0.246], + [-0.22, 0.14], + [-0.33, 0], + [-0.16, -0.2], + [0, -0.314], + [0.12, -0.28], + [0.22, -0.18], + [0.36, 0], + [0.16, 0.246], + [-0.03, 0.32] + ], + "v": [ + [0.86, 0.675], + [0.32, 1.265], + [-0.4, 1.475], + [-1.14, 1.185], + [-1.38, 0.405], + [-1.2, -0.485], + [-0.68, -1.175], + [0.12, -1.445], + [0.91, -1.075], + [1.11, -0.185] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.55, 0.286], + [0.76, 0], + [0.62, -0.26], + [0.46, -0.467], + [0.25, -0.62], + [0, -0.727], + [-0.3, -0.507], + [-0.54, -0.28], + [-0.73, 0], + [-0.62, 0.26], + [0, 0], + [0.29, -0.06], + [0.29, 0], + [0.52, 0.486], + [0, 0.873], + [-0.21, 0.52], + [-0.38, 0.386], + [-0.51, 0.22], + [-0.6, 0], + [-0.53, -0.487], + [0, -0.847], + [0.05, -0.28], + [0.1, -0.234], + [0.16, -0.147], + [0.2, 0], + [0.06, 0.166], + [-0.05, 0.273], + [0, 0], + [0, 0], + [0, 0], + [0.64, 0], + [0.29, -0.154], + [0.21, -0.267], + [0.11, -0.34], + [0, -0.367], + [-0.28, -0.307], + [-0.5, 0], + [-0.31, 0.16], + [-0.2, 0.286], + [-0.19, -0.167], + [-0.34, 0], + [-0.28, 0.173], + [-0.19, 0.293], + [-0.1, 0.373], + [0, 0.393], + [0.3, 0.513] + ], + "o": [ + [-0.56, -0.287], + [-0.74, 0], + [-0.62, 0.253], + [-0.46, 0.466], + [-0.26, 0.62], + [0, 0.693], + [0.3, 0.513], + [0.54, 0.28], + [0.73, 0], + [0, 0], + [-0.26, 0.113], + [-0.29, 0.06], + [-0.92, 0], + [-0.53, -0.48], + [0, -0.6], + [0.2, -0.52], + [0.37, -0.394], + [0.5, -0.227], + [0.94, 0], + [0.52, 0.48], + [0, 0.266], + [-0.06, 0.273], + [-0.1, 0.233], + [-0.16, 0.146], + [-0.24, 0], + [-0.07, -0.174], + [0, 0], + [0, 0], + [0, 0], + [-0.2, -0.514], + [-0.36, 0], + [-0.29, 0.153], + [-0.22, 0.26], + [-0.12, 0.333], + [0, 0.52], + [0.28, 0.3], + [0.35, 0], + [0.31, -0.16], + [0.04, 0.28], + [0.19, 0.16], + [0.36, 0], + [0.28, -0.18], + [0.19, -0.3], + [0.1, -0.374], + [0, -0.667], + [-0.3, -0.514] + ], + "v": [ + [2.67, -3.835], + [0.7, -4.265], + [-1.34, -3.875], + [-2.96, -2.795], + [-4.03, -1.165], + [-4.41, 0.855], + [-3.96, 2.655], + [-2.69, 3.845], + [-0.78, 4.265], + [1.24, 3.875], + [1.07, 3.175], + [0.25, 3.435], + [-0.62, 3.525], + [-2.78, 2.795], + [-3.57, 0.765], + [-3.26, -0.915], + [-2.39, -2.275], + [-1.07, -3.195], + [0.58, -3.535], + [2.78, -2.805], + [3.57, -0.815], + [3.49, 0.005], + [3.25, 0.765], + [2.86, 1.335], + [2.32, 1.555], + [1.87, 1.305], + [1.84, 0.635], + [2.32, -2.125], + [1.44, -2.125], + [1.32, -1.465], + [0.05, -2.235], + [-0.92, -2.005], + [-1.67, -1.375], + [-2.16, -0.475], + [-2.33, 0.575], + [-1.91, 1.815], + [-0.73, 2.265], + [0.26, 2.025], + [1.03, 1.355], + [1.37, 2.025], + [2.17, 2.265], + [3.12, 2.005], + [3.82, 1.295], + [4.26, 0.285], + [4.41, -0.865], + [3.95, -2.635] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [916.71, 263.142], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 17", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 17, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -168, + "op": 882, + "st": -168, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 29, + "ty": 2, + "nm": "Logos.png 3", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.401], "y": [1] }, + "o": { "x": [0.675], "y": [0] }, + "t": 183, + "s": [100] + }, + { "t": 203, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.388, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [151.995, 13.672, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [166.241, -1.471], + [137.748, -1.471], + [137.748, 28.815], + [166.241, 28.815] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 191, + "op": 206, + "st": 191, + "bm": 0 + }, + { + "ddd": 0, + "ind": 30, + "ty": 2, + "nm": "Logos.png 4", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.401], "y": [1] }, + "o": { "x": [0.675], "y": [0] }, + "t": 183, + "s": [100] + }, + { "t": 203, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.941, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [106.928, 14.395, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [126.695, -3.266], + [87.161, -3.266], + [87.161, 32.055], + [126.695, 32.055] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 176, + "op": 191, + "st": 176, + "bm": 0 + }, + { + "ddd": 0, + "ind": 31, + "ty": 2, + "nm": "Logos.png 5", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.65, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [60.796, 14.014, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [79.797, -5.061], + [41.795, -5.061], + [41.795, 33.089], + [79.797, 33.089] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 161, + "op": 176, + "st": 161, + "bm": 0 + }, + { + "ddd": 0, + "ind": 32, + "ty": 2, + "nm": "Logos.png 6", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [288.801, 531.304, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [14.282, 13.562, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [32.135, -4.735], + [-3.57, -4.735], + [-3.57, 31.859], + [32.135, 31.859] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 146, + "op": 161, + "st": 146, + "bm": 0 + }, + { + "ddd": 0, + "ind": 33, + "ty": 2, + "nm": "Logos.png 7", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [291.63, 531.775, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [197.67, 14.177, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [215.817, -3.756], + [179.524, -3.756], + [179.524, 32.109], + [215.817, 32.109] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 131, + "op": 146, + "st": 131, + "bm": 0 + }, + { + "ddd": 0, + "ind": 34, + "ty": 2, + "nm": "Logos.png 8", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.388, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [151.995, 13.672, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [166.241, -1.471], + [137.748, -1.471], + [137.748, 28.815], + [166.241, 28.815] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 116, + "op": 131, + "st": 116, + "bm": 0 + }, + { + "ddd": 0, + "ind": 35, + "ty": 2, + "nm": "Logos.png 9", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.941, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [106.928, 14.395, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [126.695, -3.266], + [87.161, -3.266], + [87.161, 32.055], + [126.695, 32.055] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 101, + "op": 116, + "st": 101, + "bm": 0 + }, + { + "ddd": 0, + "ind": 36, + "ty": 2, + "nm": "Logos.png 10", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.65, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [60.796, 14.014, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [79.797, -5.061], + [41.795, -5.061], + [41.795, 33.089], + [79.797, 33.089] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 86, + "op": 101, + "st": 86, + "bm": 0 + }, + { + "ddd": 0, + "ind": 37, + "ty": 2, + "nm": "Logos.png 11", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [288.801, 531.304, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [14.282, 13.562, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [32.135, -4.735], + [-3.57, -4.735], + [-3.57, 31.859], + [32.135, 31.859] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 71, + "op": 86, + "st": 71, + "bm": 0 + }, + { + "ddd": 0, + "ind": 38, + "ty": 2, + "nm": "Logos.png 12", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [291.63, 531.775, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [197.67, 14.177, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [215.817, -3.756], + [179.524, -3.756], + [179.524, 32.109], + [215.817, 32.109] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 56, + "op": 71, + "st": 56, + "bm": 0 + }, + { + "ddd": 0, + "ind": 39, + "ty": 2, + "nm": "Logos.png 13", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.388, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [151.995, 13.672, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [166.241, -1.471], + [137.748, -1.471], + [137.748, 28.815], + [166.241, 28.815] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 41, + "op": 56, + "st": 41, + "bm": 0 + }, + { + "ddd": 0, + "ind": 40, + "ty": 2, + "nm": "Logos.png 14", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.941, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [106.928, 14.395, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [126.695, -3.266], + [87.161, -3.266], + [87.161, 32.055], + [126.695, 32.055] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 26, + "op": 41, + "st": 26, + "bm": 0 + }, + { + "ddd": 0, + "ind": 41, + "ty": 2, + "nm": "Logos.png 15", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [290.168, 531.65, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [60.796, 14.014, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [79.797, -5.061], + [41.795, -5.061], + [41.795, 33.089], + [79.797, 33.089] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 11, + "op": 26, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 42, + "ty": 2, + "nm": "Logos.png 16", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [288.801, 531.304, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [14.282, 13.562, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [32.135, -4.735], + [-3.57, -4.735], + [-3.57, 31.859], + [32.135, 31.859] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": -4, + "op": 11, + "st": -4, + "bm": 0 + }, + { + "ddd": 0, + "ind": 43, + "ty": 2, + "nm": "Logos.png 17", + "cl": "png", + "parent": 60, + "refId": "image_4", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.31], "y": [1] }, "o": { "x": [0.69], "y": [0] }, "t": 498, "s": [0] }, + { "t": 511, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [288.801, 531.304, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [14.282, 13.562, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [76.6, 76.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [32.135, -4.735], + [-3.57, -4.735], + [-3.57, 31.859], + [32.135, 31.859] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 498, + "op": 523, + "st": 498, + "bm": 0 + }, + { + "ddd": 0, + "ind": 44, + "ty": 4, + "nm": "Sign in 3", + "parent": 47, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 324, + "s": [100] + }, + { + "i": { "x": [0.22], "y": [1] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 327, + "s": [20] + }, + { "t": 342, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { "t": 324, "s": [262.751, 61.441, 0], "h": 1 }, + { "t": 327, "s": [395.997, 61.441, 0], "h": 1 }, + { + "i": { "x": 0.31, "y": 1 }, + "o": { "x": 0.69, "y": 0 }, + "t": 495, + "s": [395.997, 61.441, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 508, "s": [262.751, 61.441, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [399.934, 349.877, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { "t": 324, "s": [149.714, 149.714, 100], "h": 1 }, + { "t": 327, "s": [99.714, 99.714, 100], "h": 1 }, + { + "i": { "x": [0.31, 0.31, 0.31], "y": [1, 1, 1] }, + "o": { "x": [0.69, 0.69, 0.69], "y": [0, 0, 0] }, + "t": 495, + "s": [99.714, 99.714, 100] + }, + { "t": 508, "s": [149.714, 149.714, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [1.44, 0], + [0.72, -0.432], + [0.368, -0.736], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.608, 0.672], + [-0.944, 0], + [0, -2.304], + [0, 0], + [0, 0], + [0, 0], + [0.832, 0.896] + ], + "o": [ + [-0.928, 0], + [-0.704, 0.416], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -1.248], + [0.624, -0.672], + [1.888, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -1.776], + [-0.816, -0.896] + ], + "v": [ + [0.948, -6.096], + [-1.524, -5.448], + [-3.132, -3.72], + [-3.324, -5.808], + [-5.58, -5.808], + [-5.58, 6.096], + [-3.036, 6.096], + [-3.036, -0.048], + [-2.124, -2.928], + [0.228, -3.936], + [3.06, -0.48], + [3.06, 6.096], + [5.58, 6.096], + [5.58, -0.744], + [4.332, -4.752] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [403.902, 349.637], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.464, -0.4], + [0.736, 0], + [0.464, 0.384], + [0, 0.72], + [-0.448, 0.384], + [-0.752, 0], + [-0.448, -0.384], + [0, -0.736] + ], + "o": [ + [-0.448, 0.384], + [-0.752, 0], + [-0.448, -0.4], + [0, -0.736], + [0.464, -0.384], + [0.736, 0], + [0.464, 0.384], + [0, 0.72] + ], + "v": [ + [1.416, -2.904], + [-0.36, -2.328], + [-2.184, -2.904], + [-2.856, -4.584], + [-2.184, -6.264], + [-0.36, -6.84], + [1.416, -6.264], + [2.112, -4.584] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [-0.56, 0.304], + [-0.768, -0.048], + [-0.368, -0.32], + [0, -0.464], + [0.544, -0.368], + [0.88, 0], + [0.608, 0.352], + [0, 0.688], + [-0.208, 0.352] + ], + "o": [ + [0.592, 0.096], + [1.024, 0.08], + [0.368, 0.336], + [0, 0.624], + [-0.544, 0.384], + [-0.912, 0], + [-0.608, -0.336], + [0, -0.336], + [0.208, -0.352] + ], + "v": [ + [-2.088, 2.808], + [-0.048, 3.024], + [2.04, 3.624], + [2.592, 4.824], + [1.776, 6.312], + [-0.36, 6.888], + [-2.64, 6.36], + [-3.552, 4.824], + [-3.24, 3.792] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 2, + "ty": "sh", + "ix": 3, + "ks": { + "a": 0, + "k": { + "i": [ + [0.672, 0], + [0.72, -0.384], + [0.384, -0.656], + [0, -0.784], + [-0.928, -0.8], + [0, 0], + [0, 0], + [-0.24, -0.176], + [-0.336, -0.144], + [0.272, -0.48], + [0, -0.496], + [-1.024, -0.624], + [-1.664, 0], + [-0.784, 0.4], + [-0.368, 0.64], + [0, 0.704], + [0.704, 0.608], + [1.584, 0.144], + [0.464, 0.064], + [0.256, 0.08], + [0.176, 0.112], + [0, 0], + [-0.624, 0], + [-0.704, 0.384], + [-0.368, 0.64], + [0, 0.8], + [0.384, 0.656], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [-1.008, 0], + [-0.72, 0.384], + [-0.368, 0.64], + [0, 1.296], + [0, 0], + [0, 0], + [0.192, 0.176], + [0.256, 0.16], + [-0.576, 0.432], + [-0.256, 0.496], + [0, 1.28], + [1.04, 0.64], + [1.232, 0], + [0.8, -0.384], + [0.384, -0.624], + [0, -1.024], + [-0.704, -0.624], + [-0.8, -0.064], + [-0.464, -0.064], + [-0.256, -0.08], + [0, 0], + [0.528, 0.144], + [1.008, 0], + [0.72, -0.384], + [0.384, -0.64], + [0, -0.8], + [0, 0], + [0, 0], + [0, 0], + [-0.576, -0.192] + ], + "v": [ + [-0.36, -8.88], + [-2.952, -8.304], + [-4.608, -6.744], + [-5.16, -4.608], + [-3.768, -1.464], + [-5.832, 0.648], + [-5.832, 1.224], + [-5.184, 1.752], + [-4.296, 2.208], + [-5.568, 3.576], + [-5.952, 5.064], + [-4.416, 7.92], + [-0.36, 8.88], + [2.664, 8.28], + [4.416, 6.744], + [4.992, 4.752], + [3.936, 2.304], + [0.504, 1.152], + [-1.392, 0.96], + [-2.472, 0.744], + [-3.12, 0.456], + [-2.088, -0.552], + [-0.36, -0.336], + [2.208, -0.912], + [3.84, -2.448], + [4.416, -4.608], + [3.84, -6.792], + [5.952, -6.912], + [5.952, -8.592], + [1.512, -8.592] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 3", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [390.53, 352.421], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 4, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.48, 0], + [0.32, -0.304], + [0, -0.448], + [-0.304, -0.304], + [-0.48, 0], + [-0.304, 0.288], + [0, 0.448], + [0.32, 0.288] + ], + "o": [ + [-0.48, 0], + [-0.304, 0.288], + [0, 0.448], + [0.32, 0.288], + [0.48, 0], + [0.32, -0.304], + [0, -0.448], + [-0.304, -0.304] + ], + "v": [ + [0, -1.56], + [-1.2, -1.104], + [-1.656, 0], + [-1.2, 1.128], + [0, 1.56], + [1.176, 1.128], + [1.656, 0], + [1.176, -1.104] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [419.108, 340.013], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.832, 0.896], + [1.44, 0], + [0.72, -0.432], + [0.368, -0.736], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.608, 0.672], + [-0.944, 0], + [0, -2.304], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [-0.816, -0.896], + [-0.928, 0], + [-0.704, 0.416], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -1.248], + [0.624, -0.672], + [1.888, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -1.776] + ], + "v": [ + [4.332, -4.752], + [0.948, -6.096], + [-1.524, -5.448], + [-3.132, -3.72], + [-3.324, -5.808], + [-5.58, -5.808], + [-5.58, 6.096], + [-3.036, 6.096], + [-3.036, -0.048], + [-2.124, -2.928], + [0.228, -3.936], + [3.06, -0.48], + [3.06, 6.096], + [5.58, 6.096], + [5.58, -0.744] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [428.889, 349.637], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-1.272, 5.952], + [1.272, 5.952], + [1.272, -5.952], + [-1.272, -5.952] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [419.108, 349.781], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-1.272, 5.952], + [1.272, 5.952], + [1.272, -5.952], + [-1.272, -5.952] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [381.096, 349.781], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.656, 0.384], + [0.832, 0.272], + [0.672, 0.224], + [0.384, 0.352], + [0, 0.656], + [-0.512, 0.416], + [-0.8, -0.016], + [-0.432, -0.256], + [-0.224, -0.4], + [0, -0.432], + [0, 0], + [0.464, 0.704], + [0.832, 0.4], + [1.088, 0], + [0.832, -0.4], + [0.464, -0.704], + [-0.016, -0.944], + [-0.64, -0.688], + [-1.296, -0.432], + [-0.592, -0.192], + [-0.448, -0.24], + [-0.256, -0.368], + [0, -0.592], + [0.56, -0.48], + [0.976, 0], + [0.608, 0.624], + [0.016, 0.896], + [0, 0], + [-0.512, -0.8], + [-0.928, -0.432], + [-1.232, 0], + [-0.864, 0.448], + [-0.432, 0.72], + [0, 0.848], + [0.4, 0.624] + ], + "o": [ + [-0.656, -0.384], + [-0.864, -0.304], + [-0.672, -0.24], + [-0.384, -0.352], + [0, -0.736], + [0.528, -0.416], + [0.624, 0], + [0.432, 0.256], + [0.224, 0.384], + [0, 0], + [-0.016, -0.944], + [-0.464, -0.72], + [-0.816, -0.4], + [-1.104, 0], + [-0.816, 0.384], + [-0.448, 0.704], + [0, 1.12], + [0.656, 0.688], + [0.656, 0.224], + [0.592, 0.192], + [0.464, 0.24], + [0.272, 0.368], + [0, 0.736], + [-0.544, 0.464], + [-1.104, 0], + [-0.608, -0.624], + [0, 0], + [0.016, 1.104], + [0.528, 0.8], + [0.928, 0.432], + [1.264, 0], + [0.864, -0.464], + [0.432, -0.736], + [0, -0.96], + [-0.384, -0.624] + ], + "v": [ + [3.84, -0.024], + [1.608, -1.008], + [-0.696, -1.8], + [-2.28, -2.688], + [-2.856, -4.2], + [-2.088, -5.928], + [-0.096, -6.528], + [1.488, -6.144], + [2.472, -5.16], + [2.808, -3.936], + [5.496, -3.936], + [4.776, -6.408], + [2.832, -8.088], + [-0.024, -8.688], + [-2.928, -8.088], + [-4.848, -6.456], + [-5.496, -3.984], + [-4.536, -1.272], + [-1.608, 0.408], + [0.264, 1.032], + [1.824, 1.68], + [2.904, 2.592], + [3.312, 4.032], + [2.472, 5.856], + [0.192, 6.552], + [-2.376, 5.616], + [-3.312, 3.336], + [-6, 3.336], + [-5.208, 6.192], + [-3.024, 8.04], + [0.216, 8.688], + [3.408, 8.016], + [5.352, 6.24], + [6, 3.864], + [5.4, 1.488] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [371.399, 347.333], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.48, 0], + [0.32, -0.304], + [0, -0.448], + [-0.304, -0.304], + [-0.48, 0], + [-0.304, 0.288], + [0, 0.448], + [0.32, 0.288] + ], + "o": [ + [-0.48, 0], + [-0.304, 0.288], + [0, 0.448], + [0.32, 0.288], + [0.48, 0], + [0.32, -0.304], + [0, -0.448], + [-0.304, -0.304] + ], + "v": [ + [0, -1.56], + [-1.2, -1.104], + [-1.656, 0], + [-1.2, 1.128], + [0, 1.56], + [1.176, 1.128], + [1.656, 0], + [1.176, -1.104] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [381.096, 340.013], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 80, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -8, + "op": 1042, + "st": -8, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 45, + "ty": 3, + "nm": "C-main 4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [404.314, 347.992, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 10, + "s": [138, 138, 100] + }, + { + "i": { "x": [0.05, 0.05, 0.18], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 23, + "s": [131.1, 131.1, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.82, 0.82, 0.82], "y": [0, 0, 0] }, + "t": 49, + "s": [138, 138, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.72, 0.72, 0.72], "y": [0, 0, 0] }, + "t": 244, + "s": [138, 138, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 257, + "s": [131.1, 131.1, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.714, 0.714, 0.72], "y": [0, 0, 0] }, + "t": 272, + "s": [138, 138, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.714, 0.714, 0.72], "y": [0, 0, 0] }, + "t": 355, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.34, 0.34, 0.34], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 366, + "s": [94, 94, 100] + }, + { + "i": { "x": [0.28, 0.28, 0.28], "y": [1, 1, 1] }, + "o": { "x": [0.31, 0.31, 0.333], "y": [0, 0, 0] }, + "t": 382, + "s": [105, 105, 100] + }, + { "t": 409, "s": [100, 100, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "ip": -168, + "op": 882, + "st": -168, + "bm": 0 + }, + { + "ddd": 0, + "ind": 46, + "ty": 4, + "nm": "Modal-top-line", + "parent": 47, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.74], "y": [0] }, "t": 15, "s": [25] }, + { "i": { "x": [0.23], "y": [1] }, "o": { "x": [0.432], "y": [0] }, "t": 38, "s": [0] }, + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.84], "y": [0] }, "t": 48, "s": [0] }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 64, + "s": [25] + }, + { + "i": { "x": [0.26], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 257, + "s": [25] + }, + { "i": { "x": [0.28], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 272, "s": [0] }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [0] + }, + { "t": 366, "s": [25] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [-1111.85, 368.062, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.714, 149.714, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0] + ], + "v": [ + [742.621, -166.366], + [1092.621, -166.366] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 0.75, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -8, + "op": 1042, + "st": -8, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 47, + "ty": 2, + "nm": "Modal-top.png", + "cl": "png", + "parent": 52, + "refId": "image_5", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.74], "y": [0] }, "t": 15, "s": [0] }, + { + "i": { "x": [0.23], "y": [1] }, + "o": { "x": [0.432], "y": [0] }, + "t": 38, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.84], "y": [0] }, + "t": 48, + "s": [100] + }, + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 64, "s": [0] }, + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 257, "s": [0] }, + { + "i": { "x": [0.28], "y": [1] }, + "o": { "x": [0.432], "y": [0] }, + "t": 272, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [100] + }, + { "t": 366, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 15, + "s": [280.126, 84.374, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.23, "y": 0.23 }, + "o": { "x": 0.432, "y": 0.432 }, + "t": 38, + "s": [211.353, 56.183, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.84, "y": 0 }, + "t": 48, + "s": [211.353, 56.183, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 0.667 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 64, + "s": [280.126, 82.69, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 257, + "s": [280.126, 82.69, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 0.28 }, + "o": { "x": 0.432, "y": 0.432 }, + "t": 272, + "s": [211.353, 56.183, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.714, "y": 0 }, + "t": 355, + "s": [211.353, 56.183, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 366, "s": [280.126, 84.374, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [262.5, 60.5, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 48, + "ty": 4, + "nm": "modal-top-mask", + "parent": 47, + "td": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [262.5, 60.5, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.714, 149.714, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-12.564, 0], + [0, 0], + [0, -12.564], + [0, 0], + [0, 0] + ], + "o": [ + [0, -12.564], + [0, 0], + [12.564, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-175, -17.25], + [-152.25, -40], + [152.25, -40], + [175, -17.25], + [175, 40], + [-175, 40] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -8, + "op": 1042, + "st": -8, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 49, + "ty": 2, + "nm": "Modal-middle-blurred.png", + "cl": "png", + "parent": 52, + "tt": 1, + "refId": "image_6", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.74], "y": [0] }, "t": 15, "s": [0] }, + { + "i": { "x": [0.23], "y": [1] }, + "o": { "x": [0.432], "y": [0] }, + "t": 38, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.84], "y": [0] }, + "t": 48, + "s": [100] + }, + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 64, "s": [0] }, + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 257, "s": [0] }, + { + "i": { "x": [0.28], "y": [1] }, + "o": { "x": [0.432], "y": [0] }, + "t": 272, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [100] + }, + { "t": 366, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [193.697, 292.006, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [396.5, 314.5, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [99.71, 99.71, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 50, + "ty": 2, + "nm": "Continue with.png", + "cl": "png", + "parent": 52, + "refId": "image_7", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 15, + "s": [284.632, 351.684, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.41, "y": 0.41 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 38, + "s": [286.124, 338.421, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.41, "y": 1 }, + "o": { "x": 0.59, "y": 0 }, + "t": 219, + "s": [286.124, 338.421, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 0.667 }, + "o": { "x": 0.59, "y": 0.59 }, + "t": 232, + "s": [286.124, 356.421, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 256, + "s": [286.124, 356.421, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 0.28 }, + "o": { "x": 0.432, "y": 0.432 }, + "t": 272, + "s": [286.124, 335.426, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.714, "y": 0 }, + "t": 355, + "s": [286.124, 335.426, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 366, "s": [284.632, 351.684, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [230.5, 153.5, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [99.71, 99.71, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 51, + "ty": 4, + "nm": "Continue with email", + "parent": 50, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [227.897, 275.422, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.15, 150.15, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-12.272, 0], + [0, 0], + [0, -12.272], + [0, 0], + [12.272, 0], + [0, 0], + [0, 12.272], + [0, 0] + ], + "o": [ + [0, 0], + [12.272, 0], + [0, 0], + [0, 12.272], + [0, 0], + [-12.272, 0], + [0, 0], + [0, -12.272] + ], + "v": [ + [-119.436, -22.221], + [119.436, -22.221], + [141.657, 0], + [141.657, 0], + [119.436, 22.221], + [-119.436, 22.221], + [-141.657, 0], + [-141.657, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gf", + "o": { "a": 0, "k": 100, "ix": 10 }, + "r": 1, + "bm": 0, + "g": { + "p": 5, + "k": { + "a": 1, + "k": [ + { + "i": { "x": 0.39, "y": 1 }, + "o": { "x": 0.61, "y": 0 }, + "t": 63, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.39, "y": 1 }, + "o": { "x": 0.61, "y": 0 }, + "t": 83, + "s": [ + 0, 0.075, 0.647, 0.827, 0.161, 0.09, 0.533, 0.876, 0.323, 0.106, 0.42, + 0.925, 0.661, 0.351, 0.28, 0.869, 1, 0.596, 0.141, 0.812 + ] + }, + { + "i": { "x": 0.39, "y": 1 }, + "o": { "x": 0.61, "y": 0 }, + "t": 116, + "s": [ + 0, 0.075, 0.647, 0.827, 0.161, 0.09, 0.533, 0.876, 0.323, 0.106, 0.42, + 0.925, 0.661, 0.351, 0.28, 0.869, 1, 0.596, 0.141, 0.812 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 136, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 412, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 428, + "s": [ + 0, 0.024, 0.678, 0.886, 0.161, 0.024, 0.678, 0.886, 0.323, 0.024, 0.678, + 0.886, 0.661, 0.024, 0.678, 0.886, 1, 0.024, 0.678, 0.886 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 439, + "s": [ + 0, 0.024, 0.678, 0.886, 0.161, 0.024, 0.678, 0.886, 0.323, 0.024, 0.678, + 0.886, 0.661, 0.024, 0.678, 0.886, 1, 0.024, 0.678, 0.886 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 453, + "s": [ + 0, 0.129, 0.412, 0.922, 0.161, 0.129, 0.412, 0.922, 0.323, 0.129, 0.412, + 0.922, 0.661, 0.129, 0.412, 0.922, 1, 0.129, 0.412, 0.922 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 465, + "s": [ + 0, 0.129, 0.412, 0.922, 0.161, 0.129, 0.412, 0.922, 0.323, 0.129, 0.412, + 0.922, 0.661, 0.129, 0.412, 0.922, 1, 0.129, 0.412, 0.922 + ] + }, + { + "i": { "x": 0.31, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 479, + "s": [ + 0, 0.447, 0.2, 0.706, 0.161, 0.447, 0.2, 0.706, 0.323, 0.447, 0.2, 0.706, + 0.661, 0.447, 0.2, 0.706, 1, 0.447, 0.2, 0.706 + ] + }, + { + "i": { "x": 0.31, "y": 1 }, + "o": { "x": 0.69, "y": 0 }, + "t": 495, + "s": [ + 0, 0.447, 0.2, 0.706, 0.161, 0.447, 0.2, 0.706, 0.323, 0.447, 0.2, 0.706, + 0.661, 0.447, 0.2, 0.706, 1, 0.447, 0.2, 0.706 + ] + }, + { + "t": 508, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + } + ], + "ix": 9 + } + }, + "s": { "a": 0, "k": [-142.305, 1.051], "ix": 5 }, + "e": { "a": 0, "k": [141.023, 1.578], "ix": 6 }, + "t": 1, + "nm": "Gradient Fill 1", + "mn": "ADBE Vector Graphic - G-Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -28, + "op": 1022, + "st": -28, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 52, + "ty": 2, + "nm": "Modal-middle.png", + "cl": "png", + "parent": 61, + "refId": "image_8", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.74], "y": [0] }, "t": 15, "s": [0] }, + { + "i": { "x": [0.41], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 38, + "s": [100] + }, + { + "i": { "x": [0.41], "y": [1] }, + "o": { "x": [0.59], "y": [0] }, + "t": 219, + "s": [100] + }, + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.59], "y": [0] }, "t": 232, "s": [0] }, + { "i": { "x": [0.28], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 257, "s": [0] }, + { + "i": { "x": [0.28], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 272, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [100] + }, + { "t": 366, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 15, + "s": [299.472, 295.417, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.41, "y": 0.41 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 38, + "s": [215.279, 256.233, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.41, "y": 1 }, + "o": { "x": 0.59, "y": 0 }, + "t": 219, + "s": [215.279, 256.233, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 0.667 }, + "o": { "x": 0.59, "y": 0.59 }, + "t": 232, + "s": [299.472, 295.417, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 257, + "s": [299.472, 295.417, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 0.28 }, + "o": { "x": 0.714, "y": 0.714 }, + "t": 272, + "s": [215.279, 256.233, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.714, "y": 0 }, + "t": 355, + "s": [215.279, 256.233, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 366, "s": [299.472, 295.417, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [298.5, 295, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100.132, 100.132, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 53, + "ty": 4, + "nm": "modal-middle-mask", + "parent": 52, + "td": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [283.529, 283.023, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.714, 149.714, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [12.564, 0], + [0, 0], + [0, -12.565], + [0, 0], + [0, 0], + [-8.933, 0], + [0, 0], + [0, 8.934], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [-12.565, 0], + [0, 0], + [0, 0], + [0, 8.934], + [0, 0], + [8.933, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -12.565] + ], + "v": [ + [152.25, -172.96], + [-152.25, -172.96], + [-175, -150.21], + [-175, -92.96], + [-175, 156.784], + [-158.825, 172.96], + [158.8, 172.96], + [174.976, 156.784], + [174.976, -92.96], + [175, -92.96], + [175, -150.21] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -8, + "op": 1042, + "st": -8, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 54, + "ty": 2, + "nm": "Modal Base-blurred.png", + "cl": "png", + "parent": 61, + "tt": 1, + "refId": "image_9", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.26], "y": [1] }, "o": { "x": [0.74], "y": [0] }, "t": 15, "s": [0] }, + { + "i": { "x": [0.41], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 38, + "s": [100] + }, + { + "i": { "x": [0.41], "y": [1] }, + "o": { "x": [0.59], "y": [0] }, + "t": 219, + "s": [100] + }, + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.59], "y": [0] }, "t": 232, "s": [0] }, + { "i": { "x": [0.28], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 257, "s": [0] }, + { + "i": { "x": [0.28], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 272, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [0] }, + "t": 355, + "s": [100] + }, + { "t": 366, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [231.033, 362.005, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [353.5, 387, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 55, + "ty": 4, + "nm": "w1-highlight 2", + "parent": 61, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.23], "y": [1] }, "o": { "x": [0.77], "y": [0] }, "t": 107, "s": [0] }, + { + "i": { "x": [0.28], "y": [1] }, + "o": { "x": [0.22], "y": [0] }, + "t": 141, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.72], "y": [0] }, + "t": 244, + "s": [100] + }, + { "t": 257, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [237.829, 327.666, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [974, 235.587, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [150.174, 150.174, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-12.564, 0], + [0, 0], + [0, -12.564], + [0, 0], + [12.565, 0], + [0, 0], + [0, 12.564], + [0, 0] + ], + "o": [ + [0, 0], + [12.565, 0], + [0, 0], + [0, 12.564], + [0, 0], + [-12.564, 0], + [0, 0], + [0, -12.564] + ], + "v": [ + [850.169, 29.88], + [1154.645, 29.88], + [1177.395, 52.63], + [1177.395, 465.365], + [1154.645, 488.115], + [850.169, 488.115], + [827.419, 465.365], + [827.419, 52.63] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gs", + "o": { "a": 0, "k": 100, "ix": 9 }, + "w": { "a": 0, "k": 3, "ix": 10 }, + "g": { + "p": 5, + "k": { + "a": 0, + "k": [ + 0, 0.4, 0.831, 0.969, 0.161, 0.351, 0.702, 0.984, 0.323, 0.302, 0.573, 1, 0.661, + 0.518, 0.484, 1, 1, 0.733, 0.396, 1 + ], + "ix": 8 + } + }, + "s": { "a": 0, "k": [831.047, 256.966], "ix": 4 }, + "e": { "a": 0, "k": [1177.919, 265.451], "ix": 5 }, + "t": 1, + "lc": 1, + "lj": 1, + "ml": 4, + "ml2": { "a": 0, "k": 4, "ix": 13 }, + "bm": 0, + "nm": "Gradient Stroke 1", + "mn": "ADBE Vector Graphic - G-Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [974.844, 235.638], "ix": 2 }, + "a": { "a": 0, "k": [974, 235.587], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 33, + "op": 1102, + "st": 52, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 56, + "ty": 2, + "nm": "Text-buttons.png", + "cl": "png", + "parent": 57, + "refId": "image_10", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.113], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 195, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 217, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 495, + "s": [100] + }, + { "t": 508, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [749.551, 564.22, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [97.327, 147.255, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [66.6, 66.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [181.738, 129.3], + [12.916, 129.3], + [12.916, 165.21], + [181.738, 165.21] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 196, + "op": 1246, + "st": 196, + "bm": 0 + }, + { + "ddd": 0, + "ind": 57, + "ty": 4, + "nm": "Use seed phrase", + "parent": 61, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.113], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 195, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 217, + "s": [100] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 495, + "s": [100] + }, + { "t": 508, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [283.405, 610.11, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [749.211, 553.151, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.913, 149.913, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [12.272, 0], + [0, 0], + [0, -12.272], + [-12.272, 0], + [0, 0], + [0, 12.272] + ], + "o": [ + [0, 0], + [-12.272, 0], + [0, 12.272], + [0, 0], + [12.272, 0], + [0, -12.272] + ], + "v": [ + [119.436, -22.221], + [-119.436, -22.221], + [-141.657, 0], + [-119.436, 22.221], + [119.436, 22.221], + [141.657, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gf", + "o": { "a": 0, "k": 100, "ix": 10 }, + "r": 1, + "bm": 0, + "g": { + "p": 5, + "k": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.72, "y": 0 }, + "t": 244, + "s": [ + 0, 0.075, 0.647, 0.827, 0.161, 0.09, 0.533, 0.876, 0.323, 0.106, 0.42, + 0.925, 0.661, 0.351, 0.28, 0.869, 1, 0.596, 0.141, 0.812 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 257, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, + 0.2, 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 412, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, + 0.2, 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 428, + "s": [ + 0, 0.024, 0.678, 0.886, 0.161, 0.024, 0.678, 0.886, 0.323, 0.024, 0.678, + 0.886, 0.661, 0.024, 0.678, 0.886, 1, 0.024, 0.678, 0.886 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 439, + "s": [ + 0, 0.024, 0.678, 0.886, 0.161, 0.024, 0.678, 0.886, 0.323, 0.024, 0.678, + 0.886, 0.661, 0.024, 0.678, 0.886, 1, 0.024, 0.678, 0.886 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 453, + "s": [ + 0, 0.129, 0.412, 0.922, 0.161, 0.129, 0.412, 0.922, 0.323, 0.129, 0.412, + 0.922, 0.661, 0.129, 0.412, 0.922, 1, 0.129, 0.412, 0.922 + ] + }, + { + "i": { "x": 0.52, "y": 1 }, + "o": { "x": 0.48, "y": 0 }, + "t": 465, + "s": [ + 0, 0.129, 0.412, 0.922, 0.161, 0.129, 0.412, 0.922, 0.323, 0.129, 0.412, + 0.922, 0.661, 0.129, 0.412, 0.922, 1, 0.129, 0.412, 0.922 + ] + }, + { + "t": 479, + "s": [ + 0, 0.447, 0.2, 0.706, 0.161, 0.447, 0.2, 0.706, 0.323, 0.447, 0.2, + 0.706, 0.661, 0.447, 0.2, 0.706, 1, 0.447, 0.2, 0.706 + ] + } + ], + "ix": 9 + } + }, + "s": { "a": 0, "k": [-141.49, 0], "ix": 5 }, + "e": { "a": 0, "k": [142.672, 0], "ix": 6 }, + "t": 1, + "nm": "Gradient Fill 1", + "mn": "ADBE Vector Graphic - G-Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [749.211, 563.192], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [749.211, 563.192], "ix": 2 }, + "a": { "a": 0, "k": [749.211, 563.192], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0, 0], "y": [1, 1] }, + "o": { "x": [0, 0], "y": [0, 0] }, + "t": 195, + "s": [120, 120] + }, + { "t": 221, "s": [100, 100] } + ], + "ix": 3 + }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 1, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.15, -0.3], + [0.265, -0.185], + [0.379, 0], + [0.23, 0.168], + [0, 0.3], + [-0.229, 0.194], + [-0.555, 0], + [0, 0] + ], + "o": [ + [-0.141, 0.3], + [-0.255, 0.176], + [-0.389, 0], + [-0.22, -0.176], + [0, -0.291], + [0.239, -0.194], + [0, 0], + [-0.035, 0.362] + ], + "v": [ + [1.297, 1.31], + [0.688, 2.038], + [-0.264, 2.303], + [-1.191, 2.051], + [-1.522, 1.337], + [-1.178, 0.609], + [0.013, 0.318], + [1.575, 0.318] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.918, 0], + [0.432, -0.185], + [0.283, -0.344], + [0.044, -0.477], + [0, 0], + [-0.282, 0.185], + [-0.388, 0], + [-0.274, -0.256], + [0, -0.512], + [0, 0], + [0, 0], + [0.494, -0.37], + [0, -0.635], + [-0.176, -0.309], + [-0.361, -0.185], + [-0.556, 0], + [-0.353, 0.247], + [-0.185, 0.362], + [0, 0], + [0, 0], + [0, 0], + [0.503, 0.476] + ], + "o": [ + [-0.512, 0], + [-0.423, 0.176], + [-0.273, 0.335], + [0, 0], + [0.062, -0.371], + [0.291, -0.194], + [0.441, 0], + [0.282, 0.256], + [0, 0], + [0, 0], + [-0.918, 0], + [-0.495, 0.37], + [0, 0.362], + [0.177, 0.3], + [0.362, 0.185], + [0.573, 0], + [0.353, -0.247], + [0, 0], + [0, 0], + [0, 0], + [0, -0.829], + [-0.503, -0.485] + ], + "v": [ + [0.106, -3.441], + [-1.31, -3.163], + [-2.369, -2.382], + [-2.845, -1.164], + [-1.442, -1.164], + [-0.926, -1.998], + [0.093, -2.289], + [1.165, -1.906], + [1.588, -0.754], + [1.588, -0.635], + [-0.132, -0.635], + [-2.249, -0.079], + [-2.991, 1.429], + [-2.726, 2.435], + [-1.919, 3.163], + [-0.542, 3.441], + [0.847, 3.07], + [1.654, 2.157], + [1.774, 3.282], + [2.991, 3.282], + [2.991, -0.754], + [2.237, -2.713] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [771.951, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [2.859, 3.037], + [0.807, -4.638], + [-0.741, -4.638], + [-2.858, 3.037], + [-4.698, -4.638], + [-6.207, -4.638], + [-3.706, 4.638], + [-2.092, 4.625], + [0, -2.64], + [2.025, 4.625], + [3.666, 4.625], + [6.207, -4.638], + [4.698, -4.638] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [762.707, 525.792], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.15, -0.3], + [0.265, -0.185], + [0.379, 0], + [0.229, 0.168], + [0, 0.3], + [-0.229, 0.194], + [-0.556, 0], + [0, 0] + ], + "o": [ + [-0.141, 0.3], + [-0.256, 0.176], + [-0.388, 0], + [-0.221, -0.176], + [0, -0.291], + [0.238, -0.194], + [0, 0], + [-0.036, 0.362] + ], + "v": [ + [1.297, 1.31], + [0.688, 2.038], + [-0.265, 2.303], + [-1.191, 2.051], + [-1.522, 1.337], + [-1.178, 0.609], + [0.013, 0.318], + [1.575, 0.318] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.917, 0], + [0.432, -0.185], + [0.282, -0.344], + [0.044, -0.477], + [0, 0], + [-0.282, 0.185], + [-0.388, 0], + [-0.273, -0.256], + [0, -0.512], + [0, 0], + [0, 0], + [0.494, -0.37], + [0, -0.635], + [-0.177, -0.309], + [-0.362, -0.185], + [-0.556, 0], + [-0.353, 0.247], + [-0.185, 0.362], + [0, 0], + [0, 0], + [0, 0], + [0.503, 0.476] + ], + "o": [ + [-0.512, 0], + [-0.424, 0.176], + [-0.274, 0.335], + [0, 0], + [0.062, -0.371], + [0.292, -0.194], + [0.442, 0], + [0.283, 0.256], + [0, 0], + [0, 0], + [-0.917, 0], + [-0.494, 0.37], + [0, 0.362], + [0.176, 0.3], + [0.362, 0.185], + [0.574, 0], + [0.353, -0.247], + [0, 0], + [0, 0], + [0, 0], + [0, -0.829], + [-0.503, -0.485] + ], + "v": [ + [0.106, -3.441], + [-1.31, -3.163], + [-2.369, -2.382], + [-2.845, -1.164], + [-1.443, -1.164], + [-0.927, -1.998], + [0.092, -2.289], + [1.164, -1.906], + [1.588, -0.754], + [1.588, -0.635], + [-0.133, -0.635], + [-2.25, -0.079], + [-2.991, 1.429], + [-2.726, 2.435], + [-1.919, 3.163], + [-0.543, 3.441], + [0.847, 3.07], + [1.654, 2.157], + [1.773, 3.282], + [2.991, 3.282], + [2.991, -0.754], + [2.236, -2.713] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [746.711, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 3", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.702, 4.764], + [0.702, 4.764], + [0.702, -4.764], + [-0.702, -4.764] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [751.773, 525.653], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.379, -0.318], + [-0.644, 0], + [0, 0], + [0, 0], + [0, 0], + [0.158, 0.132], + [0, 0.362], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0.803], + [0.379, 0.309], + [0, 0], + [0, 0], + [0, 0], + [-0.379, 0], + [-0.15, -0.141], + [0, 0], + [0, 0] + ], + "v": [ + [2.19, -1.27], + [2.19, -2.448], + [0.338, -2.448], + [0.338, -4.116], + [-0.893, -4.116], + [-1.065, -2.448], + [-2.19, -2.448], + [-2.19, -1.27], + [-1.065, -1.27], + [-1.065, 1.972], + [-0.496, 3.652], + [1.039, 4.116], + [2.124, 4.116], + [2.124, 2.925], + [1.37, 2.925], + [0.563, 2.726], + [0.338, 1.972], + [0.338, -1.27] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [791.151, 526.301], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.702, 4.764], + [0.702, 4.764], + [0.702, -4.764], + [-0.702, -4.764] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [779.928, 525.653], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.362, 0.273], + [-0.467, 0], + [-0.335, -0.3], + [-0.027, -0.512] + ], + "o": [ + [0.08, -0.556], + [0.362, -0.282], + [0.503, 0], + [0.336, 0.3], + [0, 0] + ], + "v": [ + [-1.854, -0.622], + [-1.192, -1.866], + [0.052, -2.289], + [1.309, -1.839], + [1.852, -0.622] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.476, 0.282], + [0.644, 0], + [0.502, -0.291], + [0.282, -0.521], + [0, -0.688], + [-0.282, -0.512], + [-0.494, -0.291], + [-0.644, 0], + [-0.52, 0.415], + [-0.176, 0.618], + [0, 0], + [0.273, -0.185], + [0.397, 0], + [0.379, 0.326], + [0.044, 0.635], + [0, 0], + [0, 0.097], + [0, 0.088], + [0.264, 0.476] + ], + "o": [ + [-0.476, -0.291], + [-0.661, 0], + [-0.495, 0.291], + [-0.274, 0.521], + [0, 0.679], + [0.283, 0.512], + [0.503, 0.282], + [0.776, 0], + [0.53, -0.415], + [0, 0], + [-0.132, 0.309], + [-0.265, 0.177], + [-0.494, 0], + [-0.371, -0.335], + [0, 0], + [0.009, -0.124], + [0.009, -0.106], + [0, -0.574], + [-0.265, -0.476] + ], + "v": [ + [1.746, -3.004], + [0.066, -3.441], + [-1.681, -3.004], + [-2.846, -1.786], + [-3.255, 0.026], + [-2.833, 1.813], + [-1.667, 3.017], + [0.052, 3.441], + [1.997, 2.819], + [3.057, 1.27], + [1.653, 1.27], + [1.046, 2.011], + [0.052, 2.276], + [-1.257, 1.786], + [-1.88, 0.331], + [3.229, 0.331], + [3.242, 0], + [3.255, -0.291], + [2.859, -1.866] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [785.159, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-0.702, 4.764], + [0.702, 4.764], + [0.702, -4.764], + [-0.702, -4.764] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [777.014, 525.653], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.38, -0.318], + [-0.644, 0], + [0, 0], + [0, 0], + [0, 0], + [0.159, 0.132], + [0, 0.362], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0.803], + [0.379, 0.309], + [0, 0], + [0, 0], + [0, 0], + [-0.38, 0], + [-0.15, -0.141], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.337, -4.116], + [-0.893, -4.116], + [-1.065, -2.448], + [-2.19, -2.448], + [-2.19, -1.27], + [-1.065, -1.27], + [-1.065, 1.972], + [-0.496, 3.652], + [1.039, 4.116], + [2.124, 4.116], + [2.124, 2.925], + [1.37, 2.925], + [0.562, 2.726], + [0.337, 1.972], + [0.337, -1.27], + [2.19, -1.27], + [2.19, -2.448], + [0.337, -2.448] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [720.974, 526.301], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1.747, -3.282], + [0, -0.768], + [-1.76, -3.282], + [-3.255, -3.282], + [-0.927, 0], + [-3.255, 3.282], + [-1.76, 3.282], + [0, 0.768], + [1.747, 3.282], + [3.255, 3.282], + [0.926, 0], + [3.255, -3.282] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [715.127, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [-2.945, 4.632], + [2.945, 4.632], + [2.945, 3.494], + [-1.542, 3.494], + [-1.542, 0.503], + [2.548, 0.503], + [2.548, -0.609], + [-1.542, -0.609], + [-1.542, -3.494], + [2.945, -3.494], + [2.945, -4.632], + [-2.945, -4.632] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [708.209, 525.785], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.229, -0.432], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.177, 0.3], + [-0.3, 0.124], + [-0.388, 0], + [0, 0], + [0, 0], + [0.415, -0.256] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.538], + [0.185, -0.309], + [0.308, -0.132], + [0, 0], + [0, 0], + [-0.582, 0], + [-0.405, 0.247] + ], + "v": [ + [-0.536, -1.959], + [-0.655, -3.203], + [-1.912, -3.203], + [-1.912, 3.361], + [-0.51, 3.361], + [-0.51, 0.212], + [-0.245, -1.045], + [0.484, -1.694], + [1.528, -1.892], + [1.912, -1.892], + [1.912, -3.361], + [0.416, -2.978] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [733.553, 527.055], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.794, 0], + [0.397, -0.238], + [0.203, -0.406], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [-0.336, 0.371], + [-0.52, 0], + [0, -1.27], + [0, 0], + [0, 0], + [0, 0], + [0.459, 0.494] + ], + "o": [ + [-0.511, 0], + [-0.388, 0.229], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.688], + [0.344, -0.37], + [1.041, 0], + [0, 0], + [0, 0], + [0, 0], + [0, -0.979], + [-0.45, -0.494] + ], + "v": [ + [0.522, -3.361], + [-0.841, -3.004], + [-1.727, -2.051], + [-1.833, -3.203], + [-3.077, -3.203], + [-3.077, 3.361], + [-1.674, 3.361], + [-1.674, -0.027], + [-1.171, -1.615], + [0.125, -2.17], + [1.687, -0.265], + [1.687, 3.361], + [3.077, 3.361], + [3.077, -0.41], + [2.388, -2.62] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [739.481, 527.055], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 13", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 13, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-0.362, 0.273], + [-0.468, 0], + [-0.335, -0.3], + [-0.027, -0.512] + ], + "o": [ + [0.08, -0.556], + [0.362, -0.282], + [0.503, 0], + [0.335, 0.3], + [0, 0] + ], + "v": [ + [-1.854, -0.622], + [-1.192, -1.866], + [0.052, -2.289], + [1.31, -1.839], + [1.853, -0.622] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ind": 1, + "ty": "sh", + "ix": 2, + "ks": { + "a": 0, + "k": { + "i": [ + [0.476, 0.282], + [0.644, 0], + [0.503, -0.291], + [0.282, -0.521], + [0, -0.688], + [-0.282, -0.512], + [-0.494, -0.291], + [-0.644, 0], + [-0.52, 0.415], + [-0.176, 0.618], + [0, 0], + [0.273, -0.185], + [0.397, 0], + [0.379, 0.326], + [0.044, 0.635], + [0, 0], + [0, 0.097], + [0, 0.088], + [0.264, 0.476] + ], + "o": [ + [-0.476, -0.291], + [-0.661, 0], + [-0.494, 0.291], + [-0.274, 0.521], + [0, 0.679], + [0.282, 0.512], + [0.503, 0.282], + [0.776, 0], + [0.53, -0.415], + [0, 0], + [-0.132, 0.309], + [-0.265, 0.177], + [-0.494, 0], + [-0.371, -0.335], + [0, 0], + [0.009, -0.124], + [0.009, -0.106], + [0, -0.574], + [-0.265, -0.476] + ], + "v": [ + [1.746, -3.004], + [0.065, -3.441], + [-1.682, -3.004], + [-2.845, -1.786], + [-3.255, 0.026], + [-2.833, 1.813], + [-1.667, 3.017], + [0.052, 3.441], + [1.998, 2.819], + [3.056, 1.27], + [1.654, 1.27], + [1.045, 2.011], + [0.052, 2.276], + [-1.258, 1.786], + [-1.88, 0.331], + [3.229, 0.331], + [3.241, 0], + [3.255, -0.291], + [2.858, -1.866] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [727.195, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 30, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 14", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 14, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [727.195, 527.135], "ix": 2 }, + "a": { "a": 0, "k": [727.195, 527.135], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 14, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 196, + "op": 1246, + "st": 196, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 58, + "ty": 2, + "nm": "Text-buttons.png", + "cl": "png", + "parent": 61, + "refId": "image_10", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [1], "y": [0] }, "t": 178, "s": [100] }, + { "i": { "x": [0.31], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 200, "s": [0] }, + { "i": { "x": [0.31], "y": [1] }, "o": { "x": [0.69], "y": [0] }, "t": 495, "s": [0] }, + { "t": 508, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [285.577, 569.459, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [98.991, 12.592, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [99.842, 99.842, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [174.556, -2.081], + [23.426, -2.081], + [23.426, 27.266], + [174.556, 27.266] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 0, + "op": 1050, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 59, + "ty": 2, + "nm": "Text-buttons.png", + "cl": "png", + "parent": 60, + "refId": "image_10", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [1], "y": [0] }, "t": 178, "s": [100] }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 203, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 495, + "s": [0] + }, + { "t": 508, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [399.742, 530.109, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [96.613, 84.419, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [66.6, 66.6, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [205.835, 63.985], + [-12.61, 63.985], + [-12.61, 104.854], + [205.835, 104.854] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "ip": 0, + "op": 1050, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 60, + "ty": 4, + "nm": "Connect with Wallet", + "parent": 61, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "i": { "x": [0.667], "y": [1] }, "o": { "x": [1], "y": [0] }, "t": 178, "s": [100] }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 203, + "s": [0] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 495, + "s": [0] + }, + { "t": 508, "s": [100] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [283.404, 625.163, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [399.877, 530.93, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [149.913, 149.913, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-12.272, 0], + [0, 0], + [0, -12.272], + [0, 0], + [12.272, 0], + [0, 0], + [0, 12.272], + [0, 0] + ], + "o": [ + [0, 0], + [12.272, 0], + [0, 0], + [0, 12.272], + [0, 0], + [-12.272, 0], + [0, 0], + [0, -12.272] + ], + "v": [ + [-119.436, -22.221], + [119.436, -22.221], + [141.657, 0], + [141.657, 0], + [119.436, 22.221], + [-119.436, 22.221], + [-141.657, 0], + [-141.657, 0] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "gf", + "o": { "a": 0, "k": 100, "ix": 10 }, + "r": 1, + "bm": 0, + "g": { + "p": 5, + "k": { + "a": 1, + "k": [ + { + "i": { "x": 0.39, "y": 1 }, + "o": { "x": 0.61, "y": 0 }, + "t": 121, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + }, + { + "i": { "x": 0.39, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 141, + "s": [ + 0, 0.075, 0.647, 0.827, 0.161, 0.09, 0.533, 0.876, 0.323, 0.106, 0.42, + 0.925, 0.661, 0.351, 0.28, 0.869, 1, 0.596, 0.141, 0.812 + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 494, + "s": [ + 0, 0.075, 0.647, 0.827, 0.161, 0.09, 0.533, 0.876, 0.323, 0.106, 0.42, + 0.925, 0.661, 0.351, 0.28, 0.869, 1, 0.596, 0.141, 0.812 + ] + }, + { + "t": 495, + "s": [ + 0, 0.039, 0.043, 0.2, 0.161, 0.039, 0.043, 0.2, 0.323, 0.039, 0.043, 0.2, + 0.661, 0.039, 0.043, 0.2, 1, 0.039, 0.043, 0.2 + ] + } + ], + "ix": 9 + } + }, + "s": { "a": 0, "k": [-141.209, 0], "ix": 5 }, + "e": { "a": 0, "k": [141.16, 0], "ix": 6 }, + "t": 1, + "nm": "Gradient Fill 1", + "mn": "ADBE Vector Graphic - G-Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [399.877, 530.93], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": -28, + "op": 1022, + "st": -28, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 61, + "ty": 2, + "nm": "Modal Base.png", + "cl": "png", + "parent": 16, + "refId": "image_11", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.26, "y": 1 }, + "o": { "x": 0.74, "y": 0 }, + "t": 15, + "s": [5.531, 7.174, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.41, "y": 0.41 }, + "o": { "x": 0.74, "y": 0.74 }, + "t": 38, + "s": [91.218, 22.147, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.667, "y": 0.667 }, + "o": { "x": 0.59, "y": 0.59 }, + "t": 244, + "s": [91.218, 22.147, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 257, + "s": [91.218, 22.147, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.28, "y": 0.28 }, + "o": { "x": 0.714, "y": 0.714 }, + "t": 272, + "s": [91.218, 36.639, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.714, "y": 0 }, + "t": 355, + "s": [91.218, 36.639, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 366, "s": [5.531, 7.174, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [298.5, 380, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [48.337, 48.337, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": -8, + "op": 1042, + "st": -8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 62, + "ty": 4, + "nm": "Shine 3", + "parent": 16, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.401, "y": 1 }, + "o": { "x": 0.675, "y": 0 }, + "t": 176, + "s": [-78.804, -194.62, 0], + "to": [48.5, 64, 0], + "ti": [-48.5, -64, 0] + }, + { "t": 225, "s": [212.196, 189.38, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [1275.062, 630.75, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 1, + "k": [ + { + "i": { "x": 0.397, "y": 1 }, + "o": { "x": 0.676, "y": 0 }, + "t": 176, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1326.655, 673.266], + [1547.117, 673.266], + [1563.589, 689.739], + [1563.589, 988.587], + [1547.117, 1005.06], + [1326.655, 1005.06], + [1310.183, 988.587], + [1310.183, 689.739] + ], + "c": true + } + ] + }, + { + "t": 225, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1035.713, 289.39], + [1256.175, 289.39], + [1272.647, 305.862], + [1272.647, 604.71], + [1256.175, 621.183], + [1035.713, 621.183], + [1019.241, 604.71], + [1019.241, 305.862] + ], + "c": true + } + ] + } + ], + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1449.275, 468.637], + [1100.849, 820.863], + [1100.849, 792.863], + [1449.275, 440.637] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.23137255013, 0.227450981736, 0.368627458811, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 174, + "op": 229, + "st": 183, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 63, + "ty": 4, + "nm": "Shine 2", + "parent": 16, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.401, "y": 1 }, + "o": { "x": 0.675, "y": 0 }, + "t": 172, + "s": [-78.804, -194.62, 0], + "to": [48.5, 64, 0], + "ti": [-48.5, -64, 0] + }, + { "t": 221, "s": [212.196, 189.38, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [1275.062, 630.75, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 1, + "k": [ + { + "i": { "x": 0.397, "y": 1 }, + "o": { "x": 0.676, "y": 0 }, + "t": 172, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1326.655, 673.266], + [1547.117, 673.266], + [1563.589, 689.739], + [1563.589, 988.587], + [1547.117, 1005.06], + [1326.655, 1005.06], + [1310.183, 988.587], + [1310.183, 689.739] + ], + "c": true + } + ] + }, + { + "t": 221, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1035.713, 289.39], + [1256.175, 289.39], + [1272.647, 305.862], + [1272.647, 604.71], + [1256.175, 621.183], + [1035.713, 621.183], + [1019.241, 604.71], + [1019.241, 305.862] + ], + "c": true + } + ] + } + ], + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1449.275, 468.637], + [1100.849, 820.863], + [1100.849, 802.863], + [1449.275, 450.637] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.23137255013, 0.227450981736, 0.368627458811, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 170, + "op": 229, + "st": 179, + "ct": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 64, + "ty": 4, + "nm": "Shine", + "parent": 16, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.397, "y": 1 }, + "o": { "x": 0.676, "y": 0 }, + "t": 163, + "s": [-78.804, -194.62, 0], + "to": [48.5, 64, 0], + "ti": [-48.5, -64, 0] + }, + { "t": 212, "s": [212.196, 189.38, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [1275.062, 630.75, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "a", + "pt": { + "a": 1, + "k": [ + { + "i": { "x": 0.397, "y": 1 }, + "o": { "x": 0.676, "y": 0 }, + "t": 163, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1326.655, 673.266], + [1547.117, 673.266], + [1563.589, 689.739], + [1563.589, 988.587], + [1547.117, 1005.06], + [1326.655, 1005.06], + [1310.183, 988.587], + [1310.183, 689.739] + ], + "c": true + } + ] + }, + { + "t": 212, + "s": [ + { + "i": [ + [-9.098, 0], + [0, 0], + [0, -9.098], + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0] + ], + "o": [ + [0, 0], + [9.098, 0], + [0, 0], + [0, 9.098], + [0, 0], + [-9.098, 0], + [0, 0], + [0, -9.098] + ], + "v": [ + [1035.713, 289.39], + [1256.175, 289.39], + [1272.647, 305.862], + [1272.647, 604.71], + [1256.175, 621.183], + [1035.713, 621.183], + [1019.241, 604.71], + [1019.241, 305.862] + ], + "c": true + } + ] + } + ], + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [1449.275, 468.637], + [1100.849, 820.863], + [1100.849, 792.863], + [1449.275, 440.637] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.23137255013, 0.227450981736, 0.368627458811, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 159, + "op": 229, + "st": 168, + "ct": 1, + "bm": 0 + } + ], + "markers": [] +} diff --git a/src/utils/w3a-sdk-map.js b/src/utils/w3a-sdk-map.js new file mode 100644 index 00000000000..0148225dbb3 --- /dev/null +++ b/src/utils/w3a-sdk-map.js @@ -0,0 +1,86 @@ +export const reactJS = 'React' +export const angular = 'Angular' +export const js = 'Javascript' +export const node = 'Node.js' +export const vue = 'Vue' +export const web = 'Web' + +export const android = 'Android' +export const ios = 'iOS' +export const reactnative = 'React Native' +export const flutter = 'Flutter' + +export const unity = 'Unity' +export const unreal = 'Unreal Engine' + +export const pnpWebVersion = `11.0.x` +export const pnpAndroidVersion = `9.1.2` +export const pnpIOSVersion = `11.1.0` +export const pnpRNVersion = `8.1.x` +export const pnpNodeVersion = `5.0.x` +export const pnpFlutterVersion = `6.1.2` +export const pnpUnityVersion = `7.0.x` +export const pnpUnrealVersion = `4.1.x` + +export const sfaWebVersion = `9.2.x` +export const sfaAndroidVersion = `4.0.1` +export const sfaIOSVersion = `9.1.0` +export const sfaRNVersion = `2.0.x` +export const sfaFlutterVersion = `6.0.0` +export const sfaNodeJSVersion = `7.4.x` +export const tkeyJSVersion = `15.x.x` +export const tkeyAndroidVersion = `0.0.5` +export const tkeyIOSVersion = `0.0.4` +export const mpcCoreKitJSVersion = `3.4.x` +export const mpcCoreKitReactNativeVersion = `1.0.0` + +export function getPnPVersion(platform) { + if (platform === web) { + return pnpWebVersion + } + if (platform === android) { + return pnpAndroidVersion + } + if (platform === ios) { + return pnpIOSVersion + } + if (platform === reactnative) { + return pnpRNVersion + } + if (platform === flutter) { + return pnpFlutterVersion + } + if (platform === unity) { + return pnpUnityVersion + } + if (platform === unreal) { + return pnpUnrealVersion + } + if (platform === node) { + return pnpNodeVersion + } +} + +export function getSFAVersion(platform) { + if (platform === reactnative) { + return sfaRNVersion + } + if (platform === android) { + return sfaAndroidVersion + } + if (platform === ios) { + return sfaIOSVersion + } + if (platform === flutter) { + return sfaFlutterVersion + } +} + +export function getMPCCoreKitVersion(platform) { + if (platform === js) { + return mpcCoreKitJSVersion + } + if (platform === reactnative) { + return mpcCoreKitReactNativeVersion + } +} diff --git a/static/fonts/Geist/Geist-Bold.woff2 b/static/fonts/Geist/Geist-Bold.woff2 new file mode 100644 index 00000000000..39a96416909 Binary files /dev/null and b/static/fonts/Geist/Geist-Bold.woff2 differ diff --git a/static/fonts/Geist/Geist-BoldItalic.woff2 b/static/fonts/Geist/Geist-BoldItalic.woff2 new file mode 100644 index 00000000000..b1f55a94544 Binary files /dev/null and b/static/fonts/Geist/Geist-BoldItalic.woff2 differ diff --git a/static/fonts/Geist/Geist-Medium.woff2 b/static/fonts/Geist/Geist-Medium.woff2 new file mode 100644 index 00000000000..eb368a006eb Binary files /dev/null and b/static/fonts/Geist/Geist-Medium.woff2 differ diff --git a/static/fonts/Geist/Geist-MediumItalic.woff2 b/static/fonts/Geist/Geist-MediumItalic.woff2 new file mode 100644 index 00000000000..9f6a5bac88b Binary files /dev/null and b/static/fonts/Geist/Geist-MediumItalic.woff2 differ diff --git a/static/fonts/Geist/Geist-Regular.woff2 b/static/fonts/Geist/Geist-Regular.woff2 new file mode 100644 index 00000000000..dc080c9c43d Binary files /dev/null and b/static/fonts/Geist/Geist-Regular.woff2 differ diff --git a/static/fonts/Geist/Geist-RegularItalic.woff2 b/static/fonts/Geist/Geist-RegularItalic.woff2 new file mode 100644 index 00000000000..e27caa218bf Binary files /dev/null and b/static/fonts/Geist/Geist-RegularItalic.woff2 differ diff --git a/static/fonts/MM-Poly/MM_Poly-Variable.ttf b/static/fonts/MM-Poly/MM_Poly-Variable.ttf new file mode 100755 index 00000000000..667611614ee Binary files /dev/null and b/static/fonts/MM-Poly/MM_Poly-Variable.ttf differ diff --git a/static/fonts/MM-Poly/MM_Poly-Variable.woff2 b/static/fonts/MM-Poly/MM_Poly-Variable.woff2 new file mode 100755 index 00000000000..5341ebc330a Binary files /dev/null and b/static/fonts/MM-Poly/MM_Poly-Variable.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Black.woff b/static/fonts/MM-Sans/MM_Sans-Black.woff new file mode 100755 index 00000000000..f2223b1e8d2 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Black.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Black.woff2 b/static/fonts/MM-Sans/MM_Sans-Black.woff2 new file mode 100755 index 00000000000..3695c61754f Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Black.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Bold.woff b/static/fonts/MM-Sans/MM_Sans-Bold.woff new file mode 100755 index 00000000000..196f2cbc4d0 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Bold.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Bold.woff2 b/static/fonts/MM-Sans/MM_Sans-Bold.woff2 new file mode 100755 index 00000000000..81621676e8d Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Bold.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Extrabold.woff b/static/fonts/MM-Sans/MM_Sans-Extrabold.woff new file mode 100755 index 00000000000..13f07ac6747 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Extrabold.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Extrabold.woff2 b/static/fonts/MM-Sans/MM_Sans-Extrabold.woff2 new file mode 100755 index 00000000000..684c9719413 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Extrabold.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Medium.woff b/static/fonts/MM-Sans/MM_Sans-Medium.woff new file mode 100755 index 00000000000..eab7250712e Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Medium.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Medium.woff2 b/static/fonts/MM-Sans/MM_Sans-Medium.woff2 new file mode 100755 index 00000000000..364c02d1389 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Medium.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Regular.woff b/static/fonts/MM-Sans/MM_Sans-Regular.woff new file mode 100755 index 00000000000..42b1355fd74 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Regular.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Regular.woff2 b/static/fonts/MM-Sans/MM_Sans-Regular.woff2 new file mode 100755 index 00000000000..5781854e6af Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Regular.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Semibold.woff b/static/fonts/MM-Sans/MM_Sans-Semibold.woff new file mode 100755 index 00000000000..371d6913a73 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Semibold.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans-Semibold.woff2 b/static/fonts/MM-Sans/MM_Sans-Semibold.woff2 new file mode 100755 index 00000000000..5bff4ac117a Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Semibold.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans-Variable.ttf b/static/fonts/MM-Sans/MM_Sans-Variable.ttf new file mode 100755 index 00000000000..b4d46645b69 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Variable.ttf differ diff --git a/static/fonts/MM-Sans/MM_Sans-Variable.woff2 b/static/fonts/MM-Sans/MM_Sans-Variable.woff2 new file mode 100755 index 00000000000..ed303f6fd85 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans-Variable.woff2 differ diff --git a/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff b/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff new file mode 100755 index 00000000000..d85e3efdc85 Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff differ diff --git a/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff2 b/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff2 new file mode 100755 index 00000000000..0ce708a63ef Binary files /dev/null and b/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff2 differ diff --git a/static/img/embedded-wallets/account-dashboard/account-dashboard-overview.jpg b/static/img/embedded-wallets/account-dashboard/account-dashboard-overview.jpg new file mode 100644 index 00000000000..f828e8d1dea Binary files /dev/null and b/static/img/embedded-wallets/account-dashboard/account-dashboard-overview.jpg differ diff --git a/static/img/embedded-wallets/account-dashboard/device-overview.jpg b/static/img/embedded-wallets/account-dashboard/device-overview.jpg new file mode 100644 index 00000000000..6085756cb6c Binary files /dev/null and b/static/img/embedded-wallets/account-dashboard/device-overview.jpg differ diff --git a/static/img/embedded-wallets/account-dashboard/security-insights.jpg b/static/img/embedded-wallets/account-dashboard/security-insights.jpg new file mode 100644 index 00000000000..cbc4411d3b7 Binary files /dev/null and b/static/img/embedded-wallets/account-dashboard/security-insights.jpg differ diff --git a/static/img/embedded-wallets/account-dashboard/unified-recovery-management.jpg b/static/img/embedded-wallets/account-dashboard/unified-recovery-management.jpg new file mode 100644 index 00000000000..0ff754aca16 Binary files /dev/null and b/static/img/embedded-wallets/account-dashboard/unified-recovery-management.jpg differ diff --git a/static/img/embedded-wallets/authentication/discord/discord-clientid-secret.png b/static/img/embedded-wallets/authentication/discord/discord-clientid-secret.png new file mode 100644 index 00000000000..35002235897 Binary files /dev/null and b/static/img/embedded-wallets/authentication/discord/discord-clientid-secret.png differ diff --git a/static/img/embedded-wallets/authentication/discord/discord-redirect-uri.png b/static/img/embedded-wallets/authentication/discord/discord-redirect-uri.png new file mode 100644 index 00000000000..0af1f98f2cf Binary files /dev/null and b/static/img/embedded-wallets/authentication/discord/discord-redirect-uri.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png b/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png new file mode 100644 index 00000000000..98bb29f30c5 Binary files /dev/null and b/static/img/embedded-wallets/authentication/facebook/facebook-app-id-secret.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-app.png b/static/img/embedded-wallets/authentication/facebook/facebook-app.png new file mode 100644 index 00000000000..82b4238ff86 Binary files /dev/null and b/static/img/embedded-wallets/authentication/facebook/facebook-app.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png b/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png new file mode 100644 index 00000000000..17410d3dfc4 Binary files /dev/null and b/static/img/embedded-wallets/authentication/facebook/facebook-login-settings-oauth.png differ diff --git a/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png b/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png new file mode 100644 index 00000000000..e9683228f8b Binary files /dev/null and b/static/img/embedded-wallets/authentication/facebook/facebook-login-setup.png differ diff --git a/static/img/embedded-wallets/authentication/google/google-app-redirect-uri.png b/static/img/embedded-wallets/authentication/google/google-app-redirect-uri.png new file mode 100644 index 00000000000..1aa871569bd Binary files /dev/null and b/static/img/embedded-wallets/authentication/google/google-app-redirect-uri.png differ diff --git a/static/img/embedded-wallets/authentication/jwt/jwks-endpoint.png b/static/img/embedded-wallets/authentication/jwt/jwks-endpoint.png new file mode 100644 index 00000000000..9f089469a68 Binary files /dev/null and b/static/img/embedded-wallets/authentication/jwt/jwks-endpoint.png differ diff --git a/static/img/embedded-wallets/authentication/jwt/jwt-validation-field.png b/static/img/embedded-wallets/authentication/jwt/jwt-validation-field.png new file mode 100644 index 00000000000..ee88830913f Binary files /dev/null and b/static/img/embedded-wallets/authentication/jwt/jwt-validation-field.png differ diff --git a/static/img/embedded-wallets/authentication/jwt/jwt-verifier-id.png b/static/img/embedded-wallets/authentication/jwt/jwt-verifier-id.png new file mode 100644 index 00000000000..b440bc44f73 Binary files /dev/null and b/static/img/embedded-wallets/authentication/jwt/jwt-verifier-id.png differ diff --git a/static/img/embedded-wallets/authentication/twitch/twitch-app.png b/static/img/embedded-wallets/authentication/twitch/twitch-app.png new file mode 100644 index 00000000000..027dcab414a Binary files /dev/null and b/static/img/embedded-wallets/authentication/twitch/twitch-app.png differ diff --git a/static/img/embedded-wallets/authentication/twitch/twitch-client-id.png b/static/img/embedded-wallets/authentication/twitch/twitch-client-id.png new file mode 100644 index 00000000000..71a930f5ada Binary files /dev/null and b/static/img/embedded-wallets/authentication/twitch/twitch-client-id.png differ diff --git a/static/img/embedded-wallets/authentication/twitch/twitch-manage.png b/static/img/embedded-wallets/authentication/twitch/twitch-manage.png new file mode 100644 index 00000000000..b561a098bff Binary files /dev/null and b/static/img/embedded-wallets/authentication/twitch/twitch-manage.png differ diff --git a/static/img/embedded-wallets/banners/aleph-zero.png b/static/img/embedded-wallets/banners/aleph-zero.png new file mode 100644 index 00000000000..41ef4896ab0 Binary files /dev/null and b/static/img/embedded-wallets/banners/aleph-zero.png differ diff --git a/static/img/embedded-wallets/banners/algorand.png b/static/img/embedded-wallets/banners/algorand.png new file mode 100644 index 00000000000..ac065a58b35 Binary files /dev/null and b/static/img/embedded-wallets/banners/algorand.png differ diff --git a/static/img/embedded-wallets/banners/ancient8.png b/static/img/embedded-wallets/banners/ancient8.png new file mode 100644 index 00000000000..3548b9dedb4 Binary files /dev/null and b/static/img/embedded-wallets/banners/ancient8.png differ diff --git a/static/img/embedded-wallets/banners/android-auth0.png b/static/img/embedded-wallets/banners/android-auth0.png new file mode 100644 index 00000000000..dd328bd4c8b Binary files /dev/null and b/static/img/embedded-wallets/banners/android-auth0.png differ diff --git a/static/img/embedded-wallets/banners/android-firebase.png b/static/img/embedded-wallets/banners/android-firebase.png new file mode 100644 index 00000000000..5c51829319d Binary files /dev/null and b/static/img/embedded-wallets/banners/android-firebase.png differ diff --git a/static/img/embedded-wallets/banners/android-solana.png b/static/img/embedded-wallets/banners/android-solana.png new file mode 100644 index 00000000000..2e5bdf76af7 Binary files /dev/null and b/static/img/embedded-wallets/banners/android-solana.png differ diff --git a/static/img/embedded-wallets/banners/android.png b/static/img/embedded-wallets/banners/android.png new file mode 100644 index 00000000000..0fae321ae73 Binary files /dev/null and b/static/img/embedded-wallets/banners/android.png differ diff --git a/static/img/embedded-wallets/banners/angular.png b/static/img/embedded-wallets/banners/angular.png new file mode 100644 index 00000000000..c3caa9a12cd Binary files /dev/null and b/static/img/embedded-wallets/banners/angular.png differ diff --git a/static/img/embedded-wallets/banners/aptos.png b/static/img/embedded-wallets/banners/aptos.png new file mode 100644 index 00000000000..5a5d74b5ebd Binary files /dev/null and b/static/img/embedded-wallets/banners/aptos.png differ diff --git a/static/img/embedded-wallets/banners/arbitrum.png b/static/img/embedded-wallets/banners/arbitrum.png new file mode 100644 index 00000000000..b5ff19fc18e Binary files /dev/null and b/static/img/embedded-wallets/banners/arbitrum.png differ diff --git a/static/img/embedded-wallets/banners/auth0.png b/static/img/embedded-wallets/banners/auth0.png new file mode 100644 index 00000000000..3b1bbac3244 Binary files /dev/null and b/static/img/embedded-wallets/banners/auth0.png differ diff --git a/static/img/embedded-wallets/banners/avalanche.png b/static/img/embedded-wallets/banners/avalanche.png new file mode 100644 index 00000000000..dd01e76e38f Binary files /dev/null and b/static/img/embedded-wallets/banners/avalanche.png differ diff --git a/static/img/embedded-wallets/banners/bitcoin.png b/static/img/embedded-wallets/banners/bitcoin.png new file mode 100644 index 00000000000..016a5622444 Binary files /dev/null and b/static/img/embedded-wallets/banners/bitcoin.png differ diff --git a/static/img/embedded-wallets/banners/bitkub.png b/static/img/embedded-wallets/banners/bitkub.png new file mode 100644 index 00000000000..91764a0f78b Binary files /dev/null and b/static/img/embedded-wallets/banners/bitkub.png differ diff --git a/static/img/embedded-wallets/banners/celo.png b/static/img/embedded-wallets/banners/celo.png new file mode 100644 index 00000000000..5d299884dc7 Binary files /dev/null and b/static/img/embedded-wallets/banners/celo.png differ diff --git a/static/img/embedded-wallets/banners/chiliz.png b/static/img/embedded-wallets/banners/chiliz.png new file mode 100644 index 00000000000..cceb292eb43 Binary files /dev/null and b/static/img/embedded-wallets/banners/chiliz.png differ diff --git a/static/img/embedded-wallets/banners/cognito.png b/static/img/embedded-wallets/banners/cognito.png new file mode 100644 index 00000000000..554d3c067de Binary files /dev/null and b/static/img/embedded-wallets/banners/cognito.png differ diff --git a/static/img/embedded-wallets/banners/cosmos.png b/static/img/embedded-wallets/banners/cosmos.png new file mode 100644 index 00000000000..dea7c998910 Binary files /dev/null and b/static/img/embedded-wallets/banners/cosmos.png differ diff --git a/static/img/embedded-wallets/banners/cronos.png b/static/img/embedded-wallets/banners/cronos.png new file mode 100644 index 00000000000..f73d43d2d43 Binary files /dev/null and b/static/img/embedded-wallets/banners/cronos.png differ diff --git a/static/img/embedded-wallets/banners/discord.png b/static/img/embedded-wallets/banners/discord.png new file mode 100644 index 00000000000..3442d64343d Binary files /dev/null and b/static/img/embedded-wallets/banners/discord.png differ diff --git a/static/img/embedded-wallets/banners/ethereum.png b/static/img/embedded-wallets/banners/ethereum.png new file mode 100644 index 00000000000..11b85c057a9 Binary files /dev/null and b/static/img/embedded-wallets/banners/ethereum.png differ diff --git a/static/img/embedded-wallets/banners/expo.png b/static/img/embedded-wallets/banners/expo.png new file mode 100644 index 00000000000..ffc852bf37f Binary files /dev/null and b/static/img/embedded-wallets/banners/expo.png differ diff --git a/static/img/embedded-wallets/banners/facebook.png b/static/img/embedded-wallets/banners/facebook.png new file mode 100644 index 00000000000..b462b848167 Binary files /dev/null and b/static/img/embedded-wallets/banners/facebook.png differ diff --git a/static/img/embedded-wallets/banners/fhenix.png b/static/img/embedded-wallets/banners/fhenix.png new file mode 100644 index 00000000000..59def205206 Binary files /dev/null and b/static/img/embedded-wallets/banners/fhenix.png differ diff --git a/static/img/embedded-wallets/banners/firebase.png b/static/img/embedded-wallets/banners/firebase.png new file mode 100644 index 00000000000..e6ab8905d8a Binary files /dev/null and b/static/img/embedded-wallets/banners/firebase.png differ diff --git a/static/img/embedded-wallets/banners/flare.png b/static/img/embedded-wallets/banners/flare.png new file mode 100644 index 00000000000..47b604e629b Binary files /dev/null and b/static/img/embedded-wallets/banners/flare.png differ diff --git a/static/img/embedded-wallets/banners/flow.png b/static/img/embedded-wallets/banners/flow.png new file mode 100644 index 00000000000..73e552bfbd2 Binary files /dev/null and b/static/img/embedded-wallets/banners/flow.png differ diff --git a/static/img/embedded-wallets/banners/flutter-auth0.png b/static/img/embedded-wallets/banners/flutter-auth0.png new file mode 100644 index 00000000000..2313ad3efee Binary files /dev/null and b/static/img/embedded-wallets/banners/flutter-auth0.png differ diff --git a/static/img/embedded-wallets/banners/flutter-firebase.png b/static/img/embedded-wallets/banners/flutter-firebase.png new file mode 100644 index 00000000000..c559d3e6927 Binary files /dev/null and b/static/img/embedded-wallets/banners/flutter-firebase.png differ diff --git a/static/img/embedded-wallets/banners/flutter-solana.png b/static/img/embedded-wallets/banners/flutter-solana.png new file mode 100644 index 00000000000..8edd0147c52 Binary files /dev/null and b/static/img/embedded-wallets/banners/flutter-solana.png differ diff --git a/static/img/embedded-wallets/banners/flutter.png b/static/img/embedded-wallets/banners/flutter.png new file mode 100644 index 00000000000..89edb938ee9 Binary files /dev/null and b/static/img/embedded-wallets/banners/flutter.png differ diff --git a/static/img/embedded-wallets/banners/google.png b/static/img/embedded-wallets/banners/google.png new file mode 100644 index 00000000000..be8b9bf636c Binary files /dev/null and b/static/img/embedded-wallets/banners/google.png differ diff --git a/static/img/embedded-wallets/banners/harmony.png b/static/img/embedded-wallets/banners/harmony.png new file mode 100644 index 00000000000..f830cfa2f5d Binary files /dev/null and b/static/img/embedded-wallets/banners/harmony.png differ diff --git a/static/img/embedded-wallets/banners/hedera.png b/static/img/embedded-wallets/banners/hedera.png new file mode 100644 index 00000000000..b73dde6d816 Binary files /dev/null and b/static/img/embedded-wallets/banners/hedera.png differ diff --git a/static/img/embedded-wallets/banners/immutablex.png b/static/img/embedded-wallets/banners/immutablex.png new file mode 100644 index 00000000000..2f529d2a54a Binary files /dev/null and b/static/img/embedded-wallets/banners/immutablex.png differ diff --git a/static/img/embedded-wallets/banners/ios-auth0.png b/static/img/embedded-wallets/banners/ios-auth0.png new file mode 100644 index 00000000000..2610ec884a8 Binary files /dev/null and b/static/img/embedded-wallets/banners/ios-auth0.png differ diff --git a/static/img/embedded-wallets/banners/ios-firebase.png b/static/img/embedded-wallets/banners/ios-firebase.png new file mode 100644 index 00000000000..2425288be5d Binary files /dev/null and b/static/img/embedded-wallets/banners/ios-firebase.png differ diff --git a/static/img/embedded-wallets/banners/ios-solana.png b/static/img/embedded-wallets/banners/ios-solana.png new file mode 100644 index 00000000000..d1cb450e2a5 Binary files /dev/null and b/static/img/embedded-wallets/banners/ios-solana.png differ diff --git a/static/img/embedded-wallets/banners/ios-swift.png b/static/img/embedded-wallets/banners/ios-swift.png new file mode 100644 index 00000000000..1292fcebd7a Binary files /dev/null and b/static/img/embedded-wallets/banners/ios-swift.png differ diff --git a/static/img/embedded-wallets/banners/jwt.png b/static/img/embedded-wallets/banners/jwt.png new file mode 100644 index 00000000000..139058a8e8e Binary files /dev/null and b/static/img/embedded-wallets/banners/jwt.png differ diff --git a/static/img/embedded-wallets/banners/kinto.png b/static/img/embedded-wallets/banners/kinto.png new file mode 100644 index 00000000000..ef394225055 Binary files /dev/null and b/static/img/embedded-wallets/banners/kinto.png differ diff --git a/static/img/embedded-wallets/banners/klaytn.png b/static/img/embedded-wallets/banners/klaytn.png new file mode 100644 index 00000000000..fff2d5a82b5 Binary files /dev/null and b/static/img/embedded-wallets/banners/klaytn.png differ diff --git a/static/img/embedded-wallets/banners/linea.png b/static/img/embedded-wallets/banners/linea.png new file mode 100644 index 00000000000..4d02016649b Binary files /dev/null and b/static/img/embedded-wallets/banners/linea.png differ diff --git a/static/img/embedded-wallets/banners/manta.png b/static/img/embedded-wallets/banners/manta.png new file mode 100644 index 00000000000..41c89b2b43a Binary files /dev/null and b/static/img/embedded-wallets/banners/manta.png differ diff --git a/static/img/embedded-wallets/banners/metis.png b/static/img/embedded-wallets/banners/metis.png new file mode 100644 index 00000000000..00fadf035bf Binary files /dev/null and b/static/img/embedded-wallets/banners/metis.png differ diff --git a/static/img/embedded-wallets/banners/mint.png b/static/img/embedded-wallets/banners/mint.png new file mode 100644 index 00000000000..914e248f4e7 Binary files /dev/null and b/static/img/embedded-wallets/banners/mint.png differ diff --git a/static/img/embedded-wallets/banners/moonbeam.png b/static/img/embedded-wallets/banners/moonbeam.png new file mode 100644 index 00000000000..abc31395ee8 Binary files /dev/null and b/static/img/embedded-wallets/banners/moonbeam.png differ diff --git a/static/img/embedded-wallets/banners/moonriver.png b/static/img/embedded-wallets/banners/moonriver.png new file mode 100644 index 00000000000..37ebec8f14e Binary files /dev/null and b/static/img/embedded-wallets/banners/moonriver.png differ diff --git a/static/img/embedded-wallets/banners/morph.png b/static/img/embedded-wallets/banners/morph.png new file mode 100644 index 00000000000..188d4d9d766 Binary files /dev/null and b/static/img/embedded-wallets/banners/morph.png differ diff --git a/static/img/embedded-wallets/banners/multichain.png b/static/img/embedded-wallets/banners/multichain.png new file mode 100644 index 00000000000..cf30f94aa0c Binary files /dev/null and b/static/img/embedded-wallets/banners/multichain.png differ diff --git a/static/img/embedded-wallets/banners/near.png b/static/img/embedded-wallets/banners/near.png new file mode 100644 index 00000000000..08d55c15199 Binary files /dev/null and b/static/img/embedded-wallets/banners/near.png differ diff --git a/static/img/embedded-wallets/banners/next.js.png b/static/img/embedded-wallets/banners/next.js.png new file mode 100644 index 00000000000..e18a955fc2f Binary files /dev/null and b/static/img/embedded-wallets/banners/next.js.png differ diff --git a/static/img/embedded-wallets/banners/node-firebase.png b/static/img/embedded-wallets/banners/node-firebase.png new file mode 100644 index 00000000000..2fdd111574f Binary files /dev/null and b/static/img/embedded-wallets/banners/node-firebase.png differ diff --git a/static/img/embedded-wallets/banners/node-solana.png b/static/img/embedded-wallets/banners/node-solana.png new file mode 100644 index 00000000000..c49d6e73e09 Binary files /dev/null and b/static/img/embedded-wallets/banners/node-solana.png differ diff --git a/static/img/embedded-wallets/banners/node.png b/static/img/embedded-wallets/banners/node.png new file mode 100644 index 00000000000..620275a6ead Binary files /dev/null and b/static/img/embedded-wallets/banners/node.png differ diff --git a/static/img/embedded-wallets/banners/optimism.png b/static/img/embedded-wallets/banners/optimism.png new file mode 100644 index 00000000000..79f54395425 Binary files /dev/null and b/static/img/embedded-wallets/banners/optimism.png differ diff --git a/static/img/embedded-wallets/banners/polkadot.png b/static/img/embedded-wallets/banners/polkadot.png new file mode 100644 index 00000000000..c01894c60e2 Binary files /dev/null and b/static/img/embedded-wallets/banners/polkadot.png differ diff --git a/static/img/embedded-wallets/banners/polygon.png b/static/img/embedded-wallets/banners/polygon.png new file mode 100644 index 00000000000..bed4fb5a482 Binary files /dev/null and b/static/img/embedded-wallets/banners/polygon.png differ diff --git a/static/img/embedded-wallets/banners/polymesh.png b/static/img/embedded-wallets/banners/polymesh.png new file mode 100644 index 00000000000..d8153c382f9 Binary files /dev/null and b/static/img/embedded-wallets/banners/polymesh.png differ diff --git a/static/img/embedded-wallets/banners/react-native.png b/static/img/embedded-wallets/banners/react-native.png new file mode 100644 index 00000000000..6e330d3f406 Binary files /dev/null and b/static/img/embedded-wallets/banners/react-native.png differ diff --git a/static/img/embedded-wallets/banners/react.png b/static/img/embedded-wallets/banners/react.png new file mode 100644 index 00000000000..5367f36ee9b Binary files /dev/null and b/static/img/embedded-wallets/banners/react.png differ diff --git a/static/img/embedded-wallets/banners/rootstock.png b/static/img/embedded-wallets/banners/rootstock.png new file mode 100644 index 00000000000..2183fe0b0a8 Binary files /dev/null and b/static/img/embedded-wallets/banners/rootstock.png differ diff --git a/static/img/embedded-wallets/banners/saakuru.png b/static/img/embedded-wallets/banners/saakuru.png new file mode 100644 index 00000000000..f8c0348f959 Binary files /dev/null and b/static/img/embedded-wallets/banners/saakuru.png differ diff --git a/static/img/embedded-wallets/banners/shardeum.png b/static/img/embedded-wallets/banners/shardeum.png new file mode 100644 index 00000000000..115631ac412 Binary files /dev/null and b/static/img/embedded-wallets/banners/shardeum.png differ diff --git a/static/img/embedded-wallets/banners/sign-protocol.png b/static/img/embedded-wallets/banners/sign-protocol.png new file mode 100644 index 00000000000..2c45a0ee0a6 Binary files /dev/null and b/static/img/embedded-wallets/banners/sign-protocol.png differ diff --git a/static/img/embedded-wallets/banners/skale.png b/static/img/embedded-wallets/banners/skale.png new file mode 100644 index 00000000000..005c6debd4a Binary files /dev/null and b/static/img/embedded-wallets/banners/skale.png differ diff --git a/static/img/embedded-wallets/banners/solana.png b/static/img/embedded-wallets/banners/solana.png new file mode 100644 index 00000000000..89ecb9a3fae Binary files /dev/null and b/static/img/embedded-wallets/banners/solana.png differ diff --git a/static/img/embedded-wallets/banners/soneium.png b/static/img/embedded-wallets/banners/soneium.png new file mode 100644 index 00000000000..0db1e28ecde Binary files /dev/null and b/static/img/embedded-wallets/banners/soneium.png differ diff --git a/static/img/embedded-wallets/banners/songbird.png b/static/img/embedded-wallets/banners/songbird.png new file mode 100644 index 00000000000..ce4c8ae418c Binary files /dev/null and b/static/img/embedded-wallets/banners/songbird.png differ diff --git a/static/img/embedded-wallets/banners/starkex.png b/static/img/embedded-wallets/banners/starkex.png new file mode 100644 index 00000000000..f6f5e4434db Binary files /dev/null and b/static/img/embedded-wallets/banners/starkex.png differ diff --git a/static/img/embedded-wallets/banners/starknet.png b/static/img/embedded-wallets/banners/starknet.png new file mode 100644 index 00000000000..c0861aa0b05 Binary files /dev/null and b/static/img/embedded-wallets/banners/starknet.png differ diff --git a/static/img/embedded-wallets/banners/sui.png b/static/img/embedded-wallets/banners/sui.png new file mode 100644 index 00000000000..d5077ab05a6 Binary files /dev/null and b/static/img/embedded-wallets/banners/sui.png differ diff --git a/static/img/embedded-wallets/banners/tezos.png b/static/img/embedded-wallets/banners/tezos.png new file mode 100644 index 00000000000..48062b2549e Binary files /dev/null and b/static/img/embedded-wallets/banners/tezos.png differ diff --git a/static/img/embedded-wallets/banners/ton.png b/static/img/embedded-wallets/banners/ton.png new file mode 100644 index 00000000000..155e10c0e0f Binary files /dev/null and b/static/img/embedded-wallets/banners/ton.png differ diff --git a/static/img/embedded-wallets/banners/tron.png b/static/img/embedded-wallets/banners/tron.png new file mode 100644 index 00000000000..99a063bfcf0 Binary files /dev/null and b/static/img/embedded-wallets/banners/tron.png differ diff --git a/static/img/embedded-wallets/banners/twitch.png b/static/img/embedded-wallets/banners/twitch.png new file mode 100644 index 00000000000..d92fe5f2a69 Binary files /dev/null and b/static/img/embedded-wallets/banners/twitch.png differ diff --git a/static/img/embedded-wallets/banners/unichain.png b/static/img/embedded-wallets/banners/unichain.png new file mode 100644 index 00000000000..07d5a4e92b8 Binary files /dev/null and b/static/img/embedded-wallets/banners/unichain.png differ diff --git a/static/img/embedded-wallets/banners/unity-auth0.png b/static/img/embedded-wallets/banners/unity-auth0.png new file mode 100644 index 00000000000..604458d3499 Binary files /dev/null and b/static/img/embedded-wallets/banners/unity-auth0.png differ diff --git a/static/img/embedded-wallets/banners/unity.png b/static/img/embedded-wallets/banners/unity.png new file mode 100644 index 00000000000..d2254f68633 Binary files /dev/null and b/static/img/embedded-wallets/banners/unity.png differ diff --git a/static/img/embedded-wallets/banners/unreal-auth0.png b/static/img/embedded-wallets/banners/unreal-auth0.png new file mode 100644 index 00000000000..0f429b868db Binary files /dev/null and b/static/img/embedded-wallets/banners/unreal-auth0.png differ diff --git a/static/img/embedded-wallets/banners/unreal-google.png b/static/img/embedded-wallets/banners/unreal-google.png new file mode 100644 index 00000000000..8d88f0fa11a Binary files /dev/null and b/static/img/embedded-wallets/banners/unreal-google.png differ diff --git a/static/img/embedded-wallets/banners/unreal.png b/static/img/embedded-wallets/banners/unreal.png new file mode 100644 index 00000000000..23c7ad5a14c Binary files /dev/null and b/static/img/embedded-wallets/banners/unreal.png differ diff --git a/static/img/embedded-wallets/banners/vue.png b/static/img/embedded-wallets/banners/vue.png new file mode 100644 index 00000000000..df58818de98 Binary files /dev/null and b/static/img/embedded-wallets/banners/vue.png differ diff --git a/static/img/embedded-wallets/banners/worldcoin.png b/static/img/embedded-wallets/banners/worldcoin.png new file mode 100644 index 00000000000..5caa1580cff Binary files /dev/null and b/static/img/embedded-wallets/banners/worldcoin.png differ diff --git a/static/img/embedded-wallets/banners/xdc.png b/static/img/embedded-wallets/banners/xdc.png new file mode 100644 index 00000000000..cb4bf2a06bf Binary files /dev/null and b/static/img/embedded-wallets/banners/xdc.png differ diff --git a/static/img/embedded-wallets/banners/xmtp.png b/static/img/embedded-wallets/banners/xmtp.png new file mode 100644 index 00000000000..046d6f93b7b Binary files /dev/null and b/static/img/embedded-wallets/banners/xmtp.png differ diff --git a/static/img/embedded-wallets/banners/xrpl.png b/static/img/embedded-wallets/banners/xrpl.png new file mode 100644 index 00000000000..0ccafa0d974 Binary files /dev/null and b/static/img/embedded-wallets/banners/xrpl.png differ diff --git a/static/img/embedded-wallets/banners/zetachain.png b/static/img/embedded-wallets/banners/zetachain.png new file mode 100644 index 00000000000..d227be60c39 Binary files /dev/null and b/static/img/embedded-wallets/banners/zetachain.png differ diff --git a/static/img/embedded-wallets/banners/zilliqa.png b/static/img/embedded-wallets/banners/zilliqa.png new file mode 100644 index 00000000000..c958322a592 Binary files /dev/null and b/static/img/embedded-wallets/banners/zilliqa.png differ diff --git a/static/img/embedded-wallets/banners/zircuit.png b/static/img/embedded-wallets/banners/zircuit.png new file mode 100644 index 00000000000..3f03aca282f Binary files /dev/null and b/static/img/embedded-wallets/banners/zircuit.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/add-custom-chain.png b/static/img/embedded-wallets/dev-dashboard/add-custom-chain.png new file mode 100644 index 00000000000..02e917261ed Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/add-custom-chain.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/auth0-connection.png b/static/img/embedded-wallets/dev-dashboard/auth0-connection.png new file mode 100644 index 00000000000..fbc16793cad Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/auth0-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/authentication-custom-connections.png b/static/img/embedded-wallets/dev-dashboard/authentication-custom-connections.png new file mode 100644 index 00000000000..41fb6d53247 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/authentication-custom-connections.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/authentication-social-connections.png b/static/img/embedded-wallets/dev-dashboard/authentication-social-connections.png new file mode 100644 index 00000000000..dc2dcbdf32e Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/authentication-social-connections.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/aws-cognito-connection.png b/static/img/embedded-wallets/dev-dashboard/aws-cognito-connection.png new file mode 100644 index 00000000000..a515b29fdc2 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/aws-cognito-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/chains-and-networks.png b/static/img/embedded-wallets/dev-dashboard/chains-and-networks.png new file mode 100644 index 00000000000..3a0d0951696 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/chains-and-networks.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/client-id.png b/static/img/embedded-wallets/dev-dashboard/client-id.png new file mode 100644 index 00000000000..113f735092e Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/client-id.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/create-new-project.png b/static/img/embedded-wallets/dev-dashboard/create-new-project.png new file mode 100644 index 00000000000..56527b8128a Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/create-new-project.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/custom-connection.png b/static/img/embedded-wallets/dev-dashboard/custom-connection.png new file mode 100644 index 00000000000..a9f23124376 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/custom-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/customization-branding.png b/static/img/embedded-wallets/dev-dashboard/customization-branding.png new file mode 100644 index 00000000000..da7087c4f2b Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/customization-branding.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/customization-login-modal.png b/static/img/embedded-wallets/dev-dashboard/customization-login-modal.png new file mode 100644 index 00000000000..58085da6c71 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/customization-login-modal.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/dashboard-analytics.png b/static/img/embedded-wallets/dev-dashboard/dashboard-analytics.png new file mode 100644 index 00000000000..b628d08b252 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/dashboard-analytics.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/discord-connection.png b/static/img/embedded-wallets/dev-dashboard/discord-connection.png new file mode 100644 index 00000000000..c71651b6e27 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/discord-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/email-passwordless-add-connection.png b/static/img/embedded-wallets/dev-dashboard/email-passwordless-add-connection.png new file mode 100644 index 00000000000..016d345d41d Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/email-passwordless-add-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/email-passwordless-onboarding.png b/static/img/embedded-wallets/dev-dashboard/email-passwordless-onboarding.png new file mode 100644 index 00000000000..6c6d1ddf3aa Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/email-passwordless-onboarding.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/email-passwordless-toggle.png b/static/img/embedded-wallets/dev-dashboard/email-passwordless-toggle.png new file mode 100644 index 00000000000..6123948ed7f Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/email-passwordless-toggle.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/external-wallets-select-wallets.png b/static/img/embedded-wallets/dev-dashboard/external-wallets-select-wallets.png new file mode 100644 index 00000000000..8a7a2b6b7d3 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/external-wallets-select-wallets.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/external-wallets-toggle.png b/static/img/embedded-wallets/dev-dashboard/external-wallets-toggle.png new file mode 100644 index 00000000000..6123948ed7f Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/external-wallets-toggle.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/facebook-connection.png b/static/img/embedded-wallets/dev-dashboard/facebook-connection.png new file mode 100644 index 00000000000..15f6c008194 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/facebook-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/firebase-connection.png b/static/img/embedded-wallets/dev-dashboard/firebase-connection.png new file mode 100644 index 00000000000..40b7c556299 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/firebase-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/google-connection.png b/static/img/embedded-wallets/dev-dashboard/google-connection.png new file mode 100644 index 00000000000..5432a318c53 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/google-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/group-connections.png b/static/img/embedded-wallets/dev-dashboard/group-connections.png new file mode 100644 index 00000000000..15f6c4b761b Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/group-connections.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/project-settings-advanced.png b/static/img/embedded-wallets/dev-dashboard/project-settings-advanced.png new file mode 100644 index 00000000000..22a38db5b2d Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/project-settings-advanced.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/project-settings-domain.png b/static/img/embedded-wallets/dev-dashboard/project-settings-domain.png new file mode 100644 index 00000000000..82d28a79065 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/project-settings-domain.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/project-settings-general.png b/static/img/embedded-wallets/dev-dashboard/project-settings-general.png new file mode 100644 index 00000000000..bf65d5ee023 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/project-settings-general.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/smart-account/configure-paymaster.png b/static/img/embedded-wallets/dev-dashboard/smart-account/configure-paymaster.png new file mode 100644 index 00000000000..9b5a8d4da07 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/smart-account/configure-paymaster.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/smart-account/enable-smart-account.png b/static/img/embedded-wallets/dev-dashboard/smart-account/enable-smart-account.png new file mode 100644 index 00000000000..fb4cc6df55b Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/smart-account/enable-smart-account.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/sms-otp-add-connection.png b/static/img/embedded-wallets/dev-dashboard/sms-otp-add-connection.png new file mode 100644 index 00000000000..bb391e27120 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/sms-otp-add-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/sms-otp-onboarding.png b/static/img/embedded-wallets/dev-dashboard/sms-otp-onboarding.png new file mode 100644 index 00000000000..6c6d1ddf3aa Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/sms-otp-onboarding.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/sms-otp-toggle.png b/static/img/embedded-wallets/dev-dashboard/sms-otp-toggle.png new file mode 100644 index 00000000000..6123948ed7f Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/sms-otp-toggle.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/test-accounts-settings.png b/static/img/embedded-wallets/dev-dashboard/test-accounts-settings.png new file mode 100644 index 00000000000..22a38db5b2d Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/test-accounts-settings.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/twitch-connection.png b/static/img/embedded-wallets/dev-dashboard/twitch-connection.png new file mode 100644 index 00000000000..052b13d3566 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/twitch-connection.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/wallet-configuration.png b/static/img/embedded-wallets/dev-dashboard/wallet-configuration.png new file mode 100644 index 00000000000..e2c15094401 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/wallet-configuration.png differ diff --git a/static/img/embedded-wallets/dev-dashboard/wallet-funding.png b/static/img/embedded-wallets/dev-dashboard/wallet-funding.png new file mode 100644 index 00000000000..dd753d4be45 Binary files /dev/null and b/static/img/embedded-wallets/dev-dashboard/wallet-funding.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/key-management-dark.png b/static/img/embedded-wallets/flow-diagrams/key-management-dark.png new file mode 100644 index 00000000000..7b92616feec Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/key-management-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/key-management-light.png b/static/img/embedded-wallets/flow-diagrams/key-management-light.png new file mode 100644 index 00000000000..280b0f52309 Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/key-management-light.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png new file mode 100644 index 00000000000..42acd90c294 Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png new file mode 100644 index 00000000000..ae27b7aa059 Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/pnp-core-kit-flow-light.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png new file mode 100644 index 00000000000..055f057271a Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-dark.png differ diff --git a/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png new file mode 100644 index 00000000000..0bd4a269f16 Binary files /dev/null and b/static/img/embedded-wallets/flow-diagrams/tkey-mpc-flow-light.png differ diff --git a/static/img/embedded-wallets/infrastructure/expanding-shares-sss-flow.png b/static/img/embedded-wallets/infrastructure/expanding-shares-sss-flow.png new file mode 100644 index 00000000000..dce6feb3aa3 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/expanding-shares-sss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/expanding-shares-tss-flow.png b/static/img/embedded-wallets/infrastructure/expanding-shares-tss-flow.png new file mode 100644 index 00000000000..11fbd37b57c Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/expanding-shares-tss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/key-initialisation-sss-flow.png b/static/img/embedded-wallets/infrastructure/key-initialisation-sss-flow.png new file mode 100644 index 00000000000..d1abb80d819 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/key-initialisation-sss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/key-initialisation-tss-flow.png b/static/img/embedded-wallets/infrastructure/key-initialisation-tss-flow.png new file mode 100644 index 00000000000..101b0cb21a8 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/key-initialisation-tss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/key-reconstruction-sss-flow.png b/static/img/embedded-wallets/infrastructure/key-reconstruction-sss-flow.png new file mode 100644 index 00000000000..2a94ace7cee Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/key-reconstruction-sss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/key-usage-tss-flow.png b/static/img/embedded-wallets/infrastructure/key-usage-tss-flow.png new file mode 100644 index 00000000000..769aad58ae3 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/key-usage-tss-flow.png differ diff --git a/static/img/embedded-wallets/infrastructure/node-architecture.png b/static/img/embedded-wallets/infrastructure/node-architecture.png new file mode 100644 index 00000000000..e3074c3b988 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/node-architecture.png differ diff --git a/static/img/embedded-wallets/infrastructure/share-splitting.png b/static/img/embedded-wallets/infrastructure/share-splitting.png new file mode 100644 index 00000000000..42ce15950c1 Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/share-splitting.png differ diff --git a/static/img/embedded-wallets/infrastructure/sss-architecture-flow.png b/static/img/embedded-wallets/infrastructure/sss-architecture-flow.png new file mode 100644 index 00000000000..83a2c52988d Binary files /dev/null and b/static/img/embedded-wallets/infrastructure/sss-architecture-flow.png differ diff --git a/static/img/embedded-wallets/mfa/mfa-options.gif b/static/img/embedded-wallets/mfa/mfa-options.gif new file mode 100644 index 00000000000..e8cd5e620d0 Binary files /dev/null and b/static/img/embedded-wallets/mfa/mfa-options.gif differ diff --git a/static/img/embedded-wallets/unreal/auth0-login-config.png b/static/img/embedded-wallets/unreal/auth0-login-config.png new file mode 100644 index 00000000000..2fdd3f98d06 Binary files /dev/null and b/static/img/embedded-wallets/unreal/auth0-login-config.png differ diff --git a/static/img/embedded-wallets/unreal/email-passwordless.png b/static/img/embedded-wallets/unreal/email-passwordless.png new file mode 100644 index 00000000000..6844a4cde3a Binary files /dev/null and b/static/img/embedded-wallets/unreal/email-passwordless.png differ diff --git a/static/img/embedded-wallets/unreal/extraloginoption-auth0.png b/static/img/embedded-wallets/unreal/extraloginoption-auth0.png new file mode 100644 index 00000000000..65796b9de78 Binary files /dev/null and b/static/img/embedded-wallets/unreal/extraloginoption-auth0.png differ diff --git a/static/img/embedded-wallets/unreal/fb-custom-auth.png b/static/img/embedded-wallets/unreal/fb-custom-auth.png new file mode 100644 index 00000000000..27a5b05ef0c Binary files /dev/null and b/static/img/embedded-wallets/unreal/fb-custom-auth.png differ diff --git a/static/img/embedded-wallets/unreal/google-custom-auth.png b/static/img/embedded-wallets/unreal/google-custom-auth.png new file mode 100644 index 00000000000..047d9bde3f3 Binary files /dev/null and b/static/img/embedded-wallets/unreal/google-custom-auth.png differ diff --git a/static/img/embedded-wallets/unreal/mfa.png b/static/img/embedded-wallets/unreal/mfa.png new file mode 100644 index 00000000000..02ba31c88c8 Binary files /dev/null and b/static/img/embedded-wallets/unreal/mfa.png differ diff --git a/static/img/embedded-wallets/unreal/provider-options.png b/static/img/embedded-wallets/unreal/provider-options.png new file mode 100644 index 00000000000..2ec575782ae Binary files /dev/null and b/static/img/embedded-wallets/unreal/provider-options.png differ diff --git a/static/img/embedded-wallets/unreal/unreal-mfa-settings.png b/static/img/embedded-wallets/unreal/unreal-mfa-settings.png new file mode 100644 index 00000000000..e0f27a2bfd0 Binary files /dev/null and b/static/img/embedded-wallets/unreal/unreal-mfa-settings.png differ diff --git a/static/img/embedded-wallets/unreal/unreal-whitelable-data.png b/static/img/embedded-wallets/unreal/unreal-whitelable-data.png new file mode 100644 index 00000000000..3402de7e0b3 Binary files /dev/null and b/static/img/embedded-wallets/unreal/unreal-whitelable-data.png differ diff --git a/static/img/embedded-wallets/wallet-services/mobile-request-method.png b/static/img/embedded-wallets/wallet-services/mobile-request-method.png new file mode 100644 index 00000000000..70bd396d06a Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/mobile-request-method.png differ diff --git a/static/img/embedded-wallets/wallet-services/mobile-wallet-services.png b/static/img/embedded-wallets/wallet-services/mobile-wallet-services.png new file mode 100644 index 00000000000..566605390d6 Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/mobile-wallet-services.png differ diff --git a/static/img/embedded-wallets/wallet-services/topup/topup-coverage.png b/static/img/embedded-wallets/wallet-services/topup/topup-coverage.png new file mode 100644 index 00000000000..8f6a7253bcc Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/topup/topup-coverage.png differ diff --git a/static/img/embedded-wallets/wallet-services/topup/topup-providers.png b/static/img/embedded-wallets/wallet-services/topup/topup-providers.png new file mode 100644 index 00000000000..928febfed20 Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/topup/topup-providers.png differ diff --git a/static/img/embedded-wallets/wallet-services/wallet-services.png b/static/img/embedded-wallets/wallet-services/wallet-services.png new file mode 100644 index 00000000000..50e9be582cd Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/wallet-services.png differ diff --git a/static/img/embedded-wallets/wallet-services/ws-funding-add-funds.png b/static/img/embedded-wallets/wallet-services/ws-funding-add-funds.png new file mode 100644 index 00000000000..9dec6152dbf Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/ws-funding-add-funds.png differ diff --git a/static/img/embedded-wallets/wallet-services/ws-funding-card.png b/static/img/embedded-wallets/wallet-services/ws-funding-card.png new file mode 100644 index 00000000000..a056526eb84 Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/ws-funding-card.png differ diff --git a/static/img/embedded-wallets/wallet-services/ws-funding-qr.png b/static/img/embedded-wallets/wallet-services/ws-funding-qr.png new file mode 100644 index 00000000000..3b5e5ab7f33 Binary files /dev/null and b/static/img/embedded-wallets/wallet-services/ws-funding-qr.png differ diff --git a/static/img/embedded-wallets/wallet-user-flow-comparison.svg b/static/img/embedded-wallets/wallet-user-flow-comparison.svg new file mode 100644 index 00000000000..34bd6f8f9b1 --- /dev/null +++ b/static/img/embedded-wallets/wallet-user-flow-comparison.svg @@ -0,0 +1,133 @@ + + + Traditional standalone wallet versus Embedded Wallets end-user steps + + Six numbered steps for a traditional standalone wallet compared to three steps for Embedded Wallets, + with a vertical divider between the columns. + + + + + + + + + + + Traditional standalone wallet + Embedded Wallets + + + + + + 1 + + Download and install the wallet + extension or mobile app. + + + 2 + Create a new wallet + + 3 + Store the 12-24 word seed phrase + + 4 + Connect the dapp and the wallet + + 5 + + Sign the wallet request to approve + the connection + + + 6 + Ready to receive wallet requests + + + 1 + + Sign in using the preferred provider + (Google, Facebook, etc.) + + + 2 + Approve the sign-in request + + 3 + Ready to receive wallet requests + + + diff --git a/static/img/embedded-wallets/whitelabel/modal/branding.png b/static/img/embedded-wallets/whitelabel/modal/branding.png new file mode 100644 index 00000000000..a48744b0349 Binary files /dev/null and b/static/img/embedded-wallets/whitelabel/modal/branding.png differ diff --git a/static/img/favicons/apple-touch-icon.png b/static/img/favicons/apple-touch-icon.png new file mode 100644 index 00000000000..c09d545d415 Binary files /dev/null and b/static/img/favicons/apple-touch-icon.png differ diff --git a/static/img/favicons/favicon-96x96.png b/static/img/favicons/favicon-96x96.png new file mode 100644 index 00000000000..3df3df1d4ff Binary files /dev/null and b/static/img/favicons/favicon-96x96.png differ diff --git a/static/img/favicons/web-app-manifest-192x192.png b/static/img/favicons/web-app-manifest-192x192.png new file mode 100644 index 00000000000..dcb70cffa76 Binary files /dev/null and b/static/img/favicons/web-app-manifest-192x192.png differ diff --git a/static/img/favicons/web-app-manifest-512x512.png b/static/img/favicons/web-app-manifest-512x512.png new file mode 100644 index 00000000000..5fb1f861e6d Binary files /dev/null and b/static/img/favicons/web-app-manifest-512x512.png differ diff --git a/static/img/icons/ETH.svg b/static/img/icons/ETH.svg new file mode 100644 index 00000000000..3f51caee4b8 --- /dev/null +++ b/static/img/icons/ETH.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/accessible.svg b/static/img/icons/accessible.svg new file mode 100644 index 00000000000..6cc97c30867 --- /dev/null +++ b/static/img/icons/accessible.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/app-store-2.svg b/static/img/icons/app-store-2.svg new file mode 100644 index 00000000000..c428a2f40f6 --- /dev/null +++ b/static/img/icons/app-store-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/app-store-logo.svg b/static/img/icons/app-store-logo.svg new file mode 100644 index 00000000000..490c266f7a1 --- /dev/null +++ b/static/img/icons/app-store-logo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/app-store.svg b/static/img/icons/app-store.svg new file mode 100644 index 00000000000..2793687e4f7 --- /dev/null +++ b/static/img/icons/app-store.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/apple-logo.svg b/static/img/icons/apple-logo.svg new file mode 100644 index 00000000000..172c8f305d6 --- /dev/null +++ b/static/img/icons/apple-logo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/arrow-down.svg b/static/img/icons/arrow-down.svg new file mode 100644 index 00000000000..ba46d73bb01 --- /dev/null +++ b/static/img/icons/arrow-down.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/arrow-left.svg b/static/img/icons/arrow-left.svg new file mode 100644 index 00000000000..6e0363bdd36 --- /dev/null +++ b/static/img/icons/arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/arrow-right.svg b/static/img/icons/arrow-right.svg new file mode 100644 index 00000000000..69bebf5c0be --- /dev/null +++ b/static/img/icons/arrow-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/bank.svg b/static/img/icons/bank.svg new file mode 100644 index 00000000000..75799f1f244 --- /dev/null +++ b/static/img/icons/bank.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/brave.svg b/static/img/icons/brave.svg new file mode 100644 index 00000000000..f3113e8fe9c --- /dev/null +++ b/static/img/icons/brave.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/bridge.svg b/static/img/icons/bridge.svg new file mode 100644 index 00000000000..57113859117 --- /dev/null +++ b/static/img/icons/bridge.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/icons/buy-crypto.svg b/static/img/icons/buy-crypto.svg new file mode 100644 index 00000000000..5c66f43b98c --- /dev/null +++ b/static/img/icons/buy-crypto.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/img/icons/calendar.svg b/static/img/icons/calendar.svg new file mode 100644 index 00000000000..a007084d2df --- /dev/null +++ b/static/img/icons/calendar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/card.svg b/static/img/icons/card.svg new file mode 100644 index 00000000000..47101c85ebf --- /dev/null +++ b/static/img/icons/card.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/icons/chat.svg b/static/img/icons/chat.svg new file mode 100644 index 00000000000..34f2bc839e4 --- /dev/null +++ b/static/img/icons/chat.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/check-circle.svg b/static/img/icons/check-circle.svg new file mode 100644 index 00000000000..2588cd00efe --- /dev/null +++ b/static/img/icons/check-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/check.svg b/static/img/icons/check.svg new file mode 100644 index 00000000000..1ee3601d3fe --- /dev/null +++ b/static/img/icons/check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/chevron-down-bold.svg b/static/img/icons/chevron-down-bold.svg new file mode 100644 index 00000000000..e22667c5fa4 --- /dev/null +++ b/static/img/icons/chevron-down-bold.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/chevron-down.svg b/static/img/icons/chevron-down.svg new file mode 100644 index 00000000000..2c3a6d1cd57 --- /dev/null +++ b/static/img/icons/chevron-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/chevron-mob-nav.svg b/static/img/icons/chevron-mob-nav.svg new file mode 100644 index 00000000000..ca46a16b299 --- /dev/null +++ b/static/img/icons/chevron-mob-nav.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/chevron.svg b/static/img/icons/chevron.svg new file mode 100644 index 00000000000..62ac4ec4c3d --- /dev/null +++ b/static/img/icons/chevron.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/chrome.svg b/static/img/icons/chrome.svg new file mode 100644 index 00000000000..81963f2d81d --- /dev/null +++ b/static/img/icons/chrome.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/static/img/icons/clear-icon.svg b/static/img/icons/clear-icon.svg index 26ec032bb1c..cdad67ff9c5 100644 --- a/static/img/icons/clear-icon.svg +++ b/static/img/icons/clear-icon.svg @@ -1,3 +1,3 @@ - + diff --git a/static/img/icons/clock.svg b/static/img/icons/clock.svg new file mode 100644 index 00000000000..fd18525705a --- /dev/null +++ b/static/img/icons/clock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/close.svg b/static/img/icons/close.svg new file mode 100644 index 00000000000..3fc3cccbbec --- /dev/null +++ b/static/img/icons/close.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/command.svg b/static/img/icons/command.svg new file mode 100644 index 00000000000..0e6f68d815b --- /dev/null +++ b/static/img/icons/command.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/community.svg b/static/img/icons/community.svg new file mode 100644 index 00000000000..54425a57af4 --- /dev/null +++ b/static/img/icons/community.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/compass.svg b/static/img/icons/compass.svg new file mode 100644 index 00000000000..08ba1882afd --- /dev/null +++ b/static/img/icons/compass.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/controls.svg b/static/img/icons/controls.svg new file mode 100644 index 00000000000..9ef45cfd3df --- /dev/null +++ b/static/img/icons/controls.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/copy.svg b/static/img/icons/copy.svg new file mode 100644 index 00000000000..2d89d38e23b --- /dev/null +++ b/static/img/icons/copy.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/cross.svg b/static/img/icons/cross.svg new file mode 100644 index 00000000000..5484218525c --- /dev/null +++ b/static/img/icons/cross.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/dark-mode.svg b/static/img/icons/dark-mode.svg new file mode 100644 index 00000000000..65d5fe3ecf5 --- /dev/null +++ b/static/img/icons/dark-mode.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/dashboard.svg b/static/img/icons/dashboard.svg new file mode 100644 index 00000000000..87a7905e2d3 --- /dev/null +++ b/static/img/icons/dashboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/discord.svg b/static/img/icons/discord.svg new file mode 100644 index 00000000000..6f8b987ca2a --- /dev/null +++ b/static/img/icons/discord.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/document.svg b/static/img/icons/document.svg new file mode 100644 index 00000000000..52d98122dff --- /dev/null +++ b/static/img/icons/document.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/download.svg b/static/img/icons/download.svg new file mode 100644 index 00000000000..fcca54b41fc --- /dev/null +++ b/static/img/icons/download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/dropdown.svg b/static/img/icons/dropdown.svg new file mode 100644 index 00000000000..d4a95346eed --- /dev/null +++ b/static/img/icons/dropdown.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/edge.svg b/static/img/icons/edge.svg new file mode 100644 index 00000000000..bbfa75e545b --- /dev/null +++ b/static/img/icons/edge.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/explore.svg b/static/img/icons/explore.svg new file mode 100644 index 00000000000..d36a3864e69 --- /dev/null +++ b/static/img/icons/explore.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/icons/external-arrow.svg b/static/img/icons/external-arrow.svg new file mode 100644 index 00000000000..f0ba4c209ec --- /dev/null +++ b/static/img/icons/external-arrow.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/static/img/icons/firefox.svg b/static/img/icons/firefox.svg new file mode 100644 index 00000000000..03aadabe5f4 --- /dev/null +++ b/static/img/icons/firefox.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/gas.svg b/static/img/icons/gas.svg new file mode 100644 index 00000000000..b4dcd88e69d --- /dev/null +++ b/static/img/icons/gas.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/github.svg b/static/img/icons/github.svg new file mode 100644 index 00000000000..044ef1e0695 --- /dev/null +++ b/static/img/icons/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/globe.svg b/static/img/icons/globe.svg new file mode 100644 index 00000000000..6b9045eab0e --- /dev/null +++ b/static/img/icons/globe.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/home.svg b/static/img/icons/home.svg new file mode 100644 index 00000000000..76abd58079c --- /dev/null +++ b/static/img/icons/home.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/info.svg b/static/img/icons/info.svg new file mode 100644 index 00000000000..b92140e7aa5 --- /dev/null +++ b/static/img/icons/info.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/instagram.svg b/static/img/icons/instagram.svg new file mode 100644 index 00000000000..ca8bb8582ac --- /dev/null +++ b/static/img/icons/instagram.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/label-shape.svg b/static/img/icons/label-shape.svg new file mode 100644 index 00000000000..b4b15b9025b --- /dev/null +++ b/static/img/icons/label-shape.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/light-mode.svg b/static/img/icons/light-mode.svg new file mode 100644 index 00000000000..b822c5addc2 --- /dev/null +++ b/static/img/icons/light-mode.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/linkedin.svg b/static/img/icons/linkedin.svg new file mode 100644 index 00000000000..46d4340a373 --- /dev/null +++ b/static/img/icons/linkedin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/location.svg b/static/img/icons/location.svg new file mode 100644 index 00000000000..bc738730767 --- /dev/null +++ b/static/img/icons/location.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/lock.svg b/static/img/icons/lock.svg new file mode 100644 index 00000000000..928c538ddcd --- /dev/null +++ b/static/img/icons/lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/low-cost.svg b/static/img/icons/low-cost.svg new file mode 100644 index 00000000000..5a5a9ec3782 --- /dev/null +++ b/static/img/icons/low-cost.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/static/img/icons/mask.svg b/static/img/icons/mask.svg new file mode 100644 index 00000000000..88a704b5437 --- /dev/null +++ b/static/img/icons/mask.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/message.svg b/static/img/icons/message.svg new file mode 100644 index 00000000000..87cd5db901c --- /dev/null +++ b/static/img/icons/message.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/minus-icon.svg b/static/img/icons/minus-icon.svg index d0149ee598f..a9463d3be54 100644 --- a/static/img/icons/minus-icon.svg +++ b/static/img/icons/minus-icon.svg @@ -1,3 +1,3 @@ - + diff --git a/static/img/icons/minus.svg b/static/img/icons/minus.svg new file mode 100644 index 00000000000..0d47ec9b2d8 --- /dev/null +++ b/static/img/icons/minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/mobile-menu.svg b/static/img/icons/mobile-menu.svg new file mode 100644 index 00000000000..cda37166677 --- /dev/null +++ b/static/img/icons/mobile-menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/multichain.svg b/static/img/icons/multichain.svg new file mode 100644 index 00000000000..9b8a63acefe --- /dev/null +++ b/static/img/icons/multichain.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/img/icons/opera.svg b/static/img/icons/opera.svg new file mode 100644 index 00000000000..36fcfe9bfa9 --- /dev/null +++ b/static/img/icons/opera.svg @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/play-logo.svg b/static/img/icons/play-logo.svg new file mode 100644 index 00000000000..0aa5045402d --- /dev/null +++ b/static/img/icons/play-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/icons/play-store-logo.svg b/static/img/icons/play-store-logo.svg new file mode 100644 index 00000000000..aa9c4699b9e --- /dev/null +++ b/static/img/icons/play-store-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/play-store.svg b/static/img/icons/play-store.svg new file mode 100644 index 00000000000..f20f1297856 --- /dev/null +++ b/static/img/icons/play-store.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/play.svg b/static/img/icons/play.svg new file mode 100644 index 00000000000..078ffc621df --- /dev/null +++ b/static/img/icons/play.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/plus-circle.svg b/static/img/icons/plus-circle.svg new file mode 100644 index 00000000000..53a95d00e86 --- /dev/null +++ b/static/img/icons/plus-circle.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/img/icons/plus-icon.svg b/static/img/icons/plus-icon.svg index a1b01bb2bb1..f52ba4df122 100644 --- a/static/img/icons/plus-icon.svg +++ b/static/img/icons/plus-icon.svg @@ -1,3 +1,3 @@ - + diff --git a/static/img/icons/plus.svg b/static/img/icons/plus.svg new file mode 100644 index 00000000000..1e228bd1dc0 --- /dev/null +++ b/static/img/icons/plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/portfolio.svg b/static/img/icons/portfolio.svg new file mode 100644 index 00000000000..ddb83d24f06 --- /dev/null +++ b/static/img/icons/portfolio.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/icons/quotation-mark.svg b/static/img/icons/quotation-mark.svg new file mode 100644 index 00000000000..d685e6977e0 --- /dev/null +++ b/static/img/icons/quotation-mark.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/reddit.svg b/static/img/icons/reddit.svg new file mode 100644 index 00000000000..d1fe20af288 --- /dev/null +++ b/static/img/icons/reddit.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/icons/refresh.svg b/static/img/icons/refresh.svg new file mode 100644 index 00000000000..dbdff966553 --- /dev/null +++ b/static/img/icons/refresh.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/reset-icon.svg b/static/img/icons/reset-icon.svg index 96712d471a5..c4a863baa29 100644 --- a/static/img/icons/reset-icon.svg +++ b/static/img/icons/reset-icon.svg @@ -1,3 +1,3 @@ - + diff --git a/static/img/icons/search.svg b/static/img/icons/search.svg new file mode 100644 index 00000000000..13e297f1e5d --- /dev/null +++ b/static/img/icons/search.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/icons/sell-crypto.svg b/static/img/icons/sell-crypto.svg new file mode 100644 index 00000000000..228d1c8b329 --- /dev/null +++ b/static/img/icons/sell-crypto.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/img/icons/send-and-receive.svg b/static/img/icons/send-and-receive.svg new file mode 100644 index 00000000000..5adbc779dbc --- /dev/null +++ b/static/img/icons/send-and-receive.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/share.svg b/static/img/icons/share.svg new file mode 100644 index 00000000000..a184f8d93c3 --- /dev/null +++ b/static/img/icons/share.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/shield.svg b/static/img/icons/shield.svg new file mode 100644 index 00000000000..b7c82a22bf9 --- /dev/null +++ b/static/img/icons/shield.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/spinner.svg b/static/img/icons/spinner.svg new file mode 100644 index 00000000000..4257c15b9e4 --- /dev/null +++ b/static/img/icons/spinner.svg @@ -0,0 +1,9 @@ + + + + diff --git a/static/img/icons/stake.svg b/static/img/icons/stake.svg new file mode 100644 index 00000000000..39a4e702df3 --- /dev/null +++ b/static/img/icons/stake.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/img/icons/star.svg b/static/img/icons/star.svg new file mode 100644 index 00000000000..27bfb50227f --- /dev/null +++ b/static/img/icons/star.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/submit-icon.svg b/static/img/icons/submit-icon.svg new file mode 100644 index 00000000000..027eb7f6ccc --- /dev/null +++ b/static/img/icons/submit-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/static/img/icons/swap.svg b/static/img/icons/swap.svg new file mode 100644 index 00000000000..649f2bcd99b --- /dev/null +++ b/static/img/icons/swap.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/telegram.svg b/static/img/icons/telegram.svg new file mode 100644 index 00000000000..20bba56e7dd --- /dev/null +++ b/static/img/icons/telegram.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/tiktok.svg b/static/img/icons/tiktok.svg new file mode 100644 index 00000000000..a96ea78fd58 --- /dev/null +++ b/static/img/icons/tiktok.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/transcript.svg b/static/img/icons/transcript.svg new file mode 100644 index 00000000000..ffc69647d7d --- /dev/null +++ b/static/img/icons/transcript.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/user.svg b/static/img/icons/user.svg new file mode 100644 index 00000000000..34a37dd1ae2 --- /dev/null +++ b/static/img/icons/user.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/wallet.svg b/static/img/icons/wallet.svg new file mode 100644 index 00000000000..7aa01f05323 --- /dev/null +++ b/static/img/icons/wallet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/img/icons/warpcast.svg b/static/img/icons/warpcast.svg new file mode 100644 index 00000000000..35c2c2c6021 --- /dev/null +++ b/static/img/icons/warpcast.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/x.svg b/static/img/icons/x.svg new file mode 100644 index 00000000000..08c6806bca2 --- /dev/null +++ b/static/img/icons/x.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/youtube.svg b/static/img/icons/youtube.svg new file mode 100644 index 00000000000..f03e4d1d814 --- /dev/null +++ b/static/img/icons/youtube.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/logo-hemi.svg b/static/img/logos/logo-hemi.svg new file mode 100644 index 00000000000..f3f8a7fd337 --- /dev/null +++ b/static/img/logos/logo-hemi.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/static/img/logos/logo-hyperevm.svg b/static/img/logos/logo-hyperevm.svg new file mode 100644 index 00000000000..c9eb0bd0975 --- /dev/null +++ b/static/img/logos/logo-hyperevm.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/logo-monad.svg b/static/img/logos/logo-monad.svg new file mode 100644 index 00000000000..5700dc202d5 --- /dev/null +++ b/static/img/logos/logo-monad.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/logo-scroll.svg b/static/img/logos/logo-scroll.svg new file mode 100644 index 00000000000..527e2897596 --- /dev/null +++ b/static/img/logos/logo-scroll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/logos/logo-sei.svg b/static/img/logos/logo-sei.svg new file mode 100644 index 00000000000..54c8da2678b --- /dev/null +++ b/static/img/logos/logo-sei.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/logos/logo-solana.svg b/static/img/logos/logo-solana.svg new file mode 100644 index 00000000000..ed6f34d95f7 --- /dev/null +++ b/static/img/logos/logo-solana.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/img/logos/logo-swellchain.png b/static/img/logos/logo-swellchain.png new file mode 100644 index 00000000000..9fb16cb16bc Binary files /dev/null and b/static/img/logos/logo-swellchain.png differ diff --git a/static/img/logos/logo-unichain.svg b/static/img/logos/logo-unichain.svg new file mode 100644 index 00000000000..9f68f51e9c6 --- /dev/null +++ b/static/img/logos/logo-unichain.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/logos/logo_megaeth.svg b/static/img/logos/logo_megaeth.svg new file mode 100644 index 00000000000..70ba077248d --- /dev/null +++ b/static/img/logos/logo_megaeth.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/img/logos/mascot-default.svg b/static/img/logos/mascot-default.svg new file mode 100644 index 00000000000..c9b619a9d0c --- /dev/null +++ b/static/img/logos/mascot-default.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/logos/mascot-developer.svg b/static/img/logos/mascot-developer.svg new file mode 100644 index 00000000000..43dbb22cf51 --- /dev/null +++ b/static/img/logos/mascot-developer.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/logos/mascot-footer.svg b/static/img/logos/mascot-footer.svg new file mode 100644 index 00000000000..317592ad5ac --- /dev/null +++ b/static/img/logos/mascot-footer.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/logos/mascot-institution.svg b/static/img/logos/mascot-institution.svg new file mode 100644 index 00000000000..8d75667ae37 --- /dev/null +++ b/static/img/logos/mascot-institution.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/logos/third-party/0x.svg b/static/img/logos/third-party/0x.svg new file mode 100644 index 00000000000..b3d90517632 --- /dev/null +++ b/static/img/logos/third-party/0x.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/logos/third-party/1inch.svg b/static/img/logos/third-party/1inch.svg new file mode 100644 index 00000000000..fb4b45c6aff --- /dev/null +++ b/static/img/logos/third-party/1inch.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/logos/third-party/ach-network.svg b/static/img/logos/third-party/ach-network.svg new file mode 100644 index 00000000000..b476ee4c5ed --- /dev/null +++ b/static/img/logos/third-party/ach-network.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/ach-transfer.svg b/static/img/logos/third-party/ach-transfer.svg new file mode 100644 index 00000000000..d87cff6071d --- /dev/null +++ b/static/img/logos/third-party/ach-transfer.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/agoric.svg b/static/img/logos/third-party/agoric.svg new file mode 100644 index 00000000000..583cda9f6f6 --- /dev/null +++ b/static/img/logos/third-party/agoric.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/airswap.svg b/static/img/logos/third-party/airswap.svg new file mode 100644 index 00000000000..f47ed22d726 --- /dev/null +++ b/static/img/logos/third-party/airswap.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/img/logos/third-party/android.svg b/static/img/logos/third-party/android.svg new file mode 100644 index 00000000000..407dba39802 --- /dev/null +++ b/static/img/logos/third-party/android.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/logos/third-party/apple-pay.svg b/static/img/logos/third-party/apple-pay.svg new file mode 100644 index 00000000000..3a413ffdf2f --- /dev/null +++ b/static/img/logos/third-party/apple-pay.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/arbitrum.svg b/static/img/logos/third-party/arbitrum.svg new file mode 100644 index 00000000000..872eb6d98c9 --- /dev/null +++ b/static/img/logos/third-party/arbitrum.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/avalanche.svg b/static/img/logos/third-party/avalanche.svg new file mode 100644 index 00000000000..6d326ff5e65 --- /dev/null +++ b/static/img/logos/third-party/avalanche.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/img/logos/third-party/bank-transfer.svg b/static/img/logos/third-party/bank-transfer.svg new file mode 100644 index 00000000000..41f93756698 --- /dev/null +++ b/static/img/logos/third-party/bank-transfer.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/logos/third-party/banxa.svg b/static/img/logos/third-party/banxa.svg new file mode 100644 index 00000000000..5256e1c4d3c --- /dev/null +++ b/static/img/logos/third-party/banxa.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/logos/third-party/base.svg b/static/img/logos/third-party/base.svg new file mode 100644 index 00000000000..85b442afbf5 --- /dev/null +++ b/static/img/logos/third-party/base.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/logos/third-party/bnb-chain.svg b/static/img/logos/third-party/bnb-chain.svg new file mode 100644 index 00000000000..bc3c5120d8d --- /dev/null +++ b/static/img/logos/third-party/bnb-chain.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/img/logos/third-party/cactus-custody.svg b/static/img/logos/third-party/cactus-custody.svg new file mode 100644 index 00000000000..9c6cbdd562f --- /dev/null +++ b/static/img/logos/third-party/cactus-custody.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/card.svg b/static/img/logos/third-party/card.svg new file mode 100644 index 00000000000..3a6a80415a6 --- /dev/null +++ b/static/img/logos/third-party/card.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/img/logos/third-party/cashapp-alt.svg b/static/img/logos/third-party/cashapp-alt.svg new file mode 100644 index 00000000000..42052bba044 --- /dev/null +++ b/static/img/logos/third-party/cashapp-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/cashapp.svg b/static/img/logos/third-party/cashapp.svg new file mode 100644 index 00000000000..36d3a996372 --- /dev/null +++ b/static/img/logos/third-party/cashapp.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/coinbase.svg b/static/img/logos/third-party/coinbase.svg new file mode 100644 index 00000000000..77a90a81d57 --- /dev/null +++ b/static/img/logos/third-party/coinbase.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/connect.svg b/static/img/logos/third-party/connect.svg new file mode 100644 index 00000000000..13439b874f6 --- /dev/null +++ b/static/img/logos/third-party/connect.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/curve.svg b/static/img/logos/third-party/curve.svg new file mode 100644 index 00000000000..b9fa8ed1162 --- /dev/null +++ b/static/img/logos/third-party/curve.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/ethereum.svg b/static/img/logos/third-party/ethereum.svg new file mode 100644 index 00000000000..3e6fc0c6d80 --- /dev/null +++ b/static/img/logos/third-party/ethereum.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/fireblocks.svg b/static/img/logos/third-party/fireblocks.svg new file mode 100644 index 00000000000..945e412e669 --- /dev/null +++ b/static/img/logos/third-party/fireblocks.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/google-chrome.svg b/static/img/logos/third-party/google-chrome.svg new file mode 100644 index 00000000000..f3c0ba2423b --- /dev/null +++ b/static/img/logos/third-party/google-chrome.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/google-pay.svg b/static/img/logos/third-party/google-pay.svg new file mode 100644 index 00000000000..8c6f6f84cf5 --- /dev/null +++ b/static/img/logos/third-party/google-pay.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/ios.svg b/static/img/logos/third-party/ios.svg new file mode 100644 index 00000000000..34f6a932249 --- /dev/null +++ b/static/img/logos/third-party/ios.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/javascript.svg b/static/img/logos/third-party/javascript.svg new file mode 100644 index 00000000000..872c42623b6 --- /dev/null +++ b/static/img/logos/third-party/javascript.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/liminal.svg b/static/img/logos/third-party/liminal.svg new file mode 100644 index 00000000000..05d6c828648 --- /dev/null +++ b/static/img/logos/third-party/liminal.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/linea.svg b/static/img/logos/third-party/linea.svg new file mode 100644 index 00000000000..02b02c01bb8 --- /dev/null +++ b/static/img/logos/third-party/linea.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/logos/third-party/mercuryo.svg b/static/img/logos/third-party/mercuryo.svg new file mode 100644 index 00000000000..31bed8c5e17 --- /dev/null +++ b/static/img/logos/third-party/mercuryo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/metamask-mark.svg b/static/img/logos/third-party/metamask-mark.svg new file mode 100644 index 00000000000..c15304d7777 --- /dev/null +++ b/static/img/logos/third-party/metamask-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/moonpay-mark.svg b/static/img/logos/third-party/moonpay-mark.svg new file mode 100644 index 00000000000..f6dcb1c7076 --- /dev/null +++ b/static/img/logos/third-party/moonpay-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/moonpay.svg b/static/img/logos/third-party/moonpay.svg new file mode 100644 index 00000000000..1b18346e169 --- /dev/null +++ b/static/img/logos/third-party/moonpay.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/logos/third-party/nodejs.svg b/static/img/logos/third-party/nodejs.svg new file mode 100644 index 00000000000..b5f62a424aa --- /dev/null +++ b/static/img/logos/third-party/nodejs.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/onramp.svg b/static/img/logos/third-party/onramp.svg new file mode 100644 index 00000000000..9612849e5db --- /dev/null +++ b/static/img/logos/third-party/onramp.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/open-ocean.svg b/static/img/logos/third-party/open-ocean.svg new file mode 100644 index 00000000000..6d0881765b0 --- /dev/null +++ b/static/img/logos/third-party/open-ocean.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/optimism.svg b/static/img/logos/third-party/optimism.svg new file mode 100644 index 00000000000..a043cf12649 --- /dev/null +++ b/static/img/logos/third-party/optimism.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/logos/third-party/paypal.svg b/static/img/logos/third-party/paypal.svg new file mode 100644 index 00000000000..203092b3da6 --- /dev/null +++ b/static/img/logos/third-party/paypal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/img/logos/third-party/polygon.svg b/static/img/logos/third-party/polygon.svg new file mode 100644 index 00000000000..a86b9baa4c8 --- /dev/null +++ b/static/img/logos/third-party/polygon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/logos/third-party/ramp.svg b/static/img/logos/third-party/ramp.svg new file mode 100644 index 00000000000..be8cf977449 --- /dev/null +++ b/static/img/logos/third-party/ramp.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/react.svg b/static/img/logos/third-party/react.svg new file mode 100644 index 00000000000..e52429d9d7b --- /dev/null +++ b/static/img/logos/third-party/react.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/revolut.svg b/static/img/logos/third-party/revolut.svg new file mode 100644 index 00000000000..b2e3b5dd86c --- /dev/null +++ b/static/img/logos/third-party/revolut.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/safe.svg b/static/img/logos/third-party/safe.svg new file mode 100644 index 00000000000..33e7055b7cb --- /dev/null +++ b/static/img/logos/third-party/safe.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/safeheron.svg b/static/img/logos/third-party/safeheron.svg new file mode 100644 index 00000000000..3a56535946a --- /dev/null +++ b/static/img/logos/third-party/safeheron.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/sardine.svg b/static/img/logos/third-party/sardine.svg new file mode 100644 index 00000000000..24ccf228dd9 --- /dev/null +++ b/static/img/logos/third-party/sardine.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/stripe.svg b/static/img/logos/third-party/stripe.svg new file mode 100644 index 00000000000..233da86550b --- /dev/null +++ b/static/img/logos/third-party/stripe.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/transak-mark.svg b/static/img/logos/third-party/transak-mark.svg new file mode 100644 index 00000000000..91ef42e43ec --- /dev/null +++ b/static/img/logos/third-party/transak-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/transak.svg b/static/img/logos/third-party/transak.svg new file mode 100644 index 00000000000..4cbacb138cf --- /dev/null +++ b/static/img/logos/third-party/transak.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/un.svg b/static/img/logos/third-party/un.svg new file mode 100644 index 00000000000..a5ad7b877b7 --- /dev/null +++ b/static/img/logos/third-party/un.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/uniswap.svg b/static/img/logos/third-party/uniswap.svg new file mode 100644 index 00000000000..b968fdb828a --- /dev/null +++ b/static/img/logos/third-party/uniswap.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/unity.svg b/static/img/logos/third-party/unity.svg new file mode 100644 index 00000000000..9052ad41ed7 --- /dev/null +++ b/static/img/logos/third-party/unity.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/third-party/wagmi.svg b/static/img/logos/third-party/wagmi.svg new file mode 100644 index 00000000000..60b7f5dfd32 --- /dev/null +++ b/static/img/logos/third-party/wagmi.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/wallet-guard.svg b/static/img/logos/third-party/wallet-guard.svg new file mode 100644 index 00000000000..656a3113931 --- /dev/null +++ b/static/img/logos/third-party/wallet-guard.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/web3-modal.svg b/static/img/logos/third-party/web3-modal.svg new file mode 100644 index 00000000000..175260eebe0 --- /dev/null +++ b/static/img/logos/third-party/web3-modal.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/logos/third-party/wire-transfer.svg b/static/img/logos/third-party/wire-transfer.svg new file mode 100644 index 00000000000..23b7793c7fd --- /dev/null +++ b/static/img/logos/third-party/wire-transfer.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/img/logos/third-party/zksync.svg b/static/img/logos/third-party/zksync.svg new file mode 100644 index 00000000000..5c1de42b660 --- /dev/null +++ b/static/img/logos/third-party/zksync.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logos/wordmark-default.svg b/static/img/logos/wordmark-default.svg new file mode 100644 index 00000000000..153187d4c3c --- /dev/null +++ b/static/img/logos/wordmark-default.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/logos/wordmark-stacked.svg b/static/img/logos/wordmark-stacked.svg new file mode 100644 index 00000000000..153187d4c3c --- /dev/null +++ b/static/img/logos/wordmark-stacked.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/metamask-fox.svg b/static/img/metamask-fox.svg index a6cffef03d8..42c7e1ec1c8 100644 --- a/static/img/metamask-fox.svg +++ b/static/img/metamask-fox.svg @@ -1 +1,12 @@ - \ No newline at end of file + + + + + + + + + + + + diff --git a/static/img/metamask-logo-dark.svg b/static/img/metamask-logo-dark.svg index 6c9364e36bd..cad79612215 100644 --- a/static/img/metamask-logo-dark.svg +++ b/static/img/metamask-logo-dark.svg @@ -1,39 +1,3 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/static/img/metamask-logo.svg b/static/img/metamask-logo.svg index 56cee2778f1..c1a5d132e45 100644 --- a/static/img/metamask-logo.svg +++ b/static/img/metamask-logo.svg @@ -1,39 +1,3 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/static/img/metamaskog.jpeg b/static/img/metamaskog.jpeg deleted file mode 100644 index c1ab2dfab6d..00000000000 Binary files a/static/img/metamaskog.jpeg and /dev/null differ diff --git a/static/img/metamaskog.jpg b/static/img/metamaskog.jpg new file mode 100644 index 00000000000..aceb0024bf8 Binary files /dev/null and b/static/img/metamaskog.jpg differ diff --git a/static/img/nft-minting.svg b/static/img/nft-minting.svg new file mode 100644 index 00000000000..b03fb012116 --- /dev/null +++ b/static/img/nft-minting.svg @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/quickstartog.jpg b/static/img/quickstartog.jpg new file mode 100644 index 00000000000..cfeffdfeb23 Binary files /dev/null and b/static/img/quickstartog.jpg differ diff --git a/static/img/shapes/hero/shape.svg b/static/img/shapes/hero/shape.svg new file mode 100644 index 00000000000..2d88f1159b0 --- /dev/null +++ b/static/img/shapes/hero/shape.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/img/shapes/intro-cards/shape.svg b/static/img/shapes/intro-cards/shape.svg new file mode 100644 index 00000000000..381e7928540 --- /dev/null +++ b/static/img/shapes/intro-cards/shape.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/img/tutorials/android-wallet-preview.png b/static/img/tutorials/android-wallet-preview.png new file mode 100644 index 00000000000..6363e17513a Binary files /dev/null and b/static/img/tutorials/android-wallet-preview.png differ diff --git a/static/img/tutorials/flutter-wallet-preview.png b/static/img/tutorials/flutter-wallet-preview.png new file mode 100644 index 00000000000..93b4331780d Binary files /dev/null and b/static/img/tutorials/flutter-wallet-preview.png differ diff --git a/static/img/tutorials/graph-6-final.png b/static/img/tutorials/graph-6-final.png new file mode 100644 index 00000000000..94fa43f5402 Binary files /dev/null and b/static/img/tutorials/graph-6-final.png differ diff --git a/static/img/tutorials/login-key-assignments.png b/static/img/tutorials/login-key-assignments.png new file mode 100644 index 00000000000..300332daf08 Binary files /dev/null and b/static/img/tutorials/login-key-assignments.png differ diff --git a/static/img/tutorials/sdk-7702-check-txn-status.png b/static/img/tutorials/sdk-7702-check-txn-status.png new file mode 100644 index 00000000000..34a1dcc6fae Binary files /dev/null and b/static/img/tutorials/sdk-7702-check-txn-status.png differ diff --git a/static/img/tutorials/sdk-7702-connected.png b/static/img/tutorials/sdk-7702-connected.png new file mode 100644 index 00000000000..49db725e0d8 Binary files /dev/null and b/static/img/tutorials/sdk-7702-connected.png differ diff --git a/static/img/tutorials/sdk-7702-disconnected.png b/static/img/tutorials/sdk-7702-disconnected.png new file mode 100644 index 00000000000..09185fa0cf0 Binary files /dev/null and b/static/img/tutorials/sdk-7702-disconnected.png differ diff --git a/static/img/tutorials/sdk-7702-initial.png b/static/img/tutorials/sdk-7702-initial.png new file mode 100644 index 00000000000..40548c96cf5 Binary files /dev/null and b/static/img/tutorials/sdk-7702-initial.png differ diff --git a/static/img/tutorials/sdk-7702-send-batch-txns.png b/static/img/tutorials/sdk-7702-send-batch-txns.png new file mode 100644 index 00000000000..c68131f8c65 Binary files /dev/null and b/static/img/tutorials/sdk-7702-send-batch-txns.png differ diff --git a/static/img/tutorials/sdk-7702-successful-txn.png b/static/img/tutorials/sdk-7702-successful-txn.png new file mode 100644 index 00000000000..6cfaf2c1f57 Binary files /dev/null and b/static/img/tutorials/sdk-7702-successful-txn.png differ diff --git a/static/img/tutorials/sdk-7702-upgrade-eoa.png b/static/img/tutorials/sdk-7702-upgrade-eoa.png new file mode 100644 index 00000000000..fecd1633829 Binary files /dev/null and b/static/img/tutorials/sdk-7702-upgrade-eoa.png differ diff --git a/static/img/tutorials/sdk-ai-agent-get-balance.png b/static/img/tutorials/sdk-ai-agent-get-balance.png new file mode 100644 index 00000000000..1a51ea83be2 Binary files /dev/null and b/static/img/tutorials/sdk-ai-agent-get-balance.png differ diff --git a/static/img/tutorials/sdk-ai-agent-txn-not-sent.png b/static/img/tutorials/sdk-ai-agent-txn-not-sent.png new file mode 100644 index 00000000000..993dc724d30 Binary files /dev/null and b/static/img/tutorials/sdk-ai-agent-txn-not-sent.png differ diff --git a/static/img/tutorials/sdk-ai-agent-txn-sent.png b/static/img/tutorials/sdk-ai-agent-txn-sent.png new file mode 100644 index 00000000000..bcd4bd660b9 Binary files /dev/null and b/static/img/tutorials/sdk-ai-agent-txn-sent.png differ diff --git a/static/img/tutorials/sdk-ai-agent.png b/static/img/tutorials/sdk-ai-agent.png new file mode 100644 index 00000000000..85cd4bcec17 Binary files /dev/null and b/static/img/tutorials/sdk-ai-agent.png differ diff --git a/static/img/tutorials/telegram-mini-app-flow-diagram.png b/static/img/tutorials/telegram-mini-app-flow-diagram.png new file mode 100644 index 00000000000..c3eca4ec4b1 Binary files /dev/null and b/static/img/tutorials/telegram-mini-app-flow-diagram.png differ diff --git a/static/img/tutorials/tutorials-banners/android-wallet.png b/static/img/tutorials/tutorials-banners/android-wallet.png new file mode 100644 index 00000000000..9c2f6e3a858 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/android-wallet.png differ diff --git a/static/img/tutorials/tutorials-banners/create-custom-caveat-enforcer.png b/static/img/tutorials/tutorials-banners/create-custom-caveat-enforcer.png new file mode 100644 index 00000000000..8339adc8112 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/create-custom-caveat-enforcer.png differ diff --git a/static/img/tutorials/tutorials-banners/create-invite-link.png b/static/img/tutorials/tutorials-banners/create-invite-link.png new file mode 100644 index 00000000000..1edfd47bdc7 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/create-invite-link.png differ diff --git a/static/img/tutorials/tutorials-banners/create-wallet-ai-agent.png b/static/img/tutorials/tutorials-banners/create-wallet-ai-agent.png new file mode 100644 index 00000000000..3a39a2bc059 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/create-wallet-ai-agent.png differ diff --git a/static/img/tutorials/tutorials-banners/design-server-wallets.png b/static/img/tutorials/tutorials-banners/design-server-wallets.png new file mode 100644 index 00000000000..71a70ce0737 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/design-server-wallets.png differ diff --git a/static/img/tutorials/tutorials-banners/erc20-paymaster.png b/static/img/tutorials/tutorials-banners/erc20-paymaster.png new file mode 100644 index 00000000000..f2d00e4e0ab Binary files /dev/null and b/static/img/tutorials/tutorials-banners/erc20-paymaster.png differ diff --git a/static/img/tutorials/tutorials-banners/flutter-wallet.png b/static/img/tutorials/tutorials-banners/flutter-wallet.png new file mode 100644 index 00000000000..739ac27a806 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/flutter-wallet.png differ diff --git a/static/img/tutorials/tutorials-banners/gasless-transaction.png b/static/img/tutorials/tutorials-banners/gasless-transaction.png new file mode 100644 index 00000000000..32a4e69f934 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/gasless-transaction.png differ diff --git a/static/img/tutorials/tutorials-banners/integrate-sns.png b/static/img/tutorials/tutorials-banners/integrate-sns.png new file mode 100644 index 00000000000..e0d5563db2c Binary files /dev/null and b/static/img/tutorials/tutorials-banners/integrate-sns.png differ diff --git a/static/img/tutorials/tutorials-banners/integrate-solana-pay.png b/static/img/tutorials/tutorials-banners/integrate-solana-pay.png new file mode 100644 index 00000000000..e516b2e55d9 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/integrate-solana-pay.png differ diff --git a/static/img/tutorials/tutorials-banners/multi.png b/static/img/tutorials/tutorials-banners/multi.png new file mode 100644 index 00000000000..6870b807a29 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/multi.png differ diff --git a/static/img/tutorials/tutorials-banners/telegram-miniapp-client.png b/static/img/tutorials/tutorials-banners/telegram-miniapp-client.png new file mode 100644 index 00000000000..bdb76715167 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/telegram-miniapp-client.png differ diff --git a/static/img/tutorials/tutorials-banners/upgrade-eoa-to-smart-account.png b/static/img/tutorials/tutorials-banners/upgrade-eoa-to-smart-account.png new file mode 100644 index 00000000000..68497cb25fd Binary files /dev/null and b/static/img/tutorials/tutorials-banners/upgrade-eoa-to-smart-account.png differ diff --git a/static/img/tutorials/tutorials-banners/use-erc20-paymaster.png b/static/img/tutorials/tutorials-banners/use-erc20-paymaster.png new file mode 100644 index 00000000000..b304e35d1f7 Binary files /dev/null and b/static/img/tutorials/tutorials-banners/use-erc20-paymaster.png differ diff --git a/static/img/tutorials/tutorials-banners/use-passkey-as-backup-signer.png b/static/img/tutorials/tutorials-banners/use-passkey-as-backup-signer.png new file mode 100644 index 00000000000..273ed1facaf Binary files /dev/null and b/static/img/tutorials/tutorials-banners/use-passkey-as-backup-signer.png differ diff --git a/static/img/tutorials/web3auth-pnp-working.png b/static/img/tutorials/web3auth-pnp-working.png new file mode 100644 index 00000000000..3e176b9997c Binary files /dev/null and b/static/img/tutorials/web3auth-pnp-working.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-dark.png b/static/img/tutorials/whitelabel-web3auth-openlogin-dark.png new file mode 100644 index 00000000000..a40560a1f8b Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-dark.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-language.png b/static/img/tutorials/whitelabel-web3auth-openlogin-language.png new file mode 100644 index 00000000000..426fc0de5db Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-language.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-light.png b/static/img/tutorials/whitelabel-web3auth-openlogin-light.png new file mode 100644 index 00000000000..392248a469e Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-light.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-logo-dark.png b/static/img/tutorials/whitelabel-web3auth-openlogin-logo-dark.png new file mode 100644 index 00000000000..0d49346cf9d Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-logo-dark.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-logo-light.png b/static/img/tutorials/whitelabel-web3auth-openlogin-logo-light.png new file mode 100644 index 00000000000..ddbc74e7d5f Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-logo-light.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-theme1.png b/static/img/tutorials/whitelabel-web3auth-openlogin-theme1.png new file mode 100644 index 00000000000..dfe46479560 Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-theme1.png differ diff --git a/static/img/tutorials/whitelabel-web3auth-openlogin-theme2.png b/static/img/tutorials/whitelabel-web3auth-openlogin-theme2.png new file mode 100644 index 00000000000..6ef3e7f32eb Binary files /dev/null and b/static/img/tutorials/whitelabel-web3auth-openlogin-theme2.png differ diff --git a/static/img/tutorialsog.jpg b/static/img/tutorialsog.jpg new file mode 100644 index 00000000000..58abbc0fa23 Binary files /dev/null and b/static/img/tutorialsog.jpg differ diff --git a/static/img/wallet-discovery.png b/static/img/wallet-discovery.png new file mode 100644 index 00000000000..d1db110e355 Binary files /dev/null and b/static/img/wallet-discovery.png differ diff --git a/static/js/code-focus.js b/static/js/code-focus.js new file mode 100644 index 00000000000..300bc348469 --- /dev/null +++ b/static/js/code-focus.js @@ -0,0 +1,18 @@ +document.addEventListener('DOMContentLoaded', function () { + const observer = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + const codeBlocks = document.querySelectorAll('code') + + codeBlocks.forEach(function (codeBlock) { + const hasCodeFocus = codeBlock.querySelector('.code-focus') !== null + + if (hasCodeFocus) { + codeBlock.classList.add('blurred-code') + } + }) + }) + }) + + // Start observing the document for additions to the DOM + observer.observe(document.body, { childList: true, subtree: true }) +}) diff --git a/static/js/feedback-script.js b/static/js/feedback-script.js deleted file mode 100644 index 695901ed7c4..00000000000 --- a/static/js/feedback-script.js +++ /dev/null @@ -1,3 +0,0 @@ - -window.lightningjs||function(n){var e="lightningjs";function t(e,t){var r,i,a,o,d,c;return t&&(t+=(/\?/.test(t)?"&":"?")+"lv=1"),n[e]||(r=window,i=document,a=e,o=i.location.protocol,d="load",c=0,function(){n[a]=function(){var t=arguments,i=this,o=++c,d=i&&i!=r&&i.id||0;function s(){return s.id=o,n[a].apply(s,arguments)}return(e.s=e.s||[]).push([o,d,t]),s.then=function(n,t,r){var i=e.fh[o]=e.fh[o]||[],a=e.eh[o]=e.eh[o]||[],d=e.ph[o]=e.ph[o]||[];return n&&i.push(n),t&&a.push(t),r&&d.push(r),s},s};var e=n[a]._={};function s(){e.P(d),e.w=1,n[a]("_load")}e.fh={},e.eh={},e.ph={},e.l=t?t.replace(/^\/\//,("https:"==o?o:"http:")+"//"):t,e.p={0:+new Date},e.P=function(n){e.p[n]=new Date-e.p[0]},e.w&&s(),r.addEventListener?r.addEventListener(d,s,!1):r.attachEvent("onload",s);var l=function(){function n(){return["<",o,"><",t,"><",r,' src="',e.l,'">"].join("")}var t="body",r="script",o="html",d=i[t];if(!d)return setTimeout(l,100);e.P(1);var c,s=i.createElement("div"),h=s.appendChild(i.createElement("div")),u=i.createElement("iframe");s.style.display="none",d.insertBefore(s,d.firstChild).id="lightningjs-"+a,u.frameBorder="0",u.id="lightningjs-frame-"+a,/MSIE[ ]+6/.test(navigator.userAgent)&&(u.src="javascript:false"),u.allowTransparency="true",h.appendChild(u);try{u.contentWindow.document.open()}catch(n){e.domain=i.domain,c="javascript:var d=document.open();d.domain='"+i.domain+"';",u.src=c+"void(0);"}try{var p=u.contentWindow.document;p.write(n()),p.close()}catch(e){u.src=c+'d.write("'+n().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}e.P(2)};e.l&&l()}()),n[e].lv="1",n[e]}var r=window.lightningjs=t(e);r.require=t,r.modules=n}({});window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/f157d4305b77.js"); - \ No newline at end of file diff --git a/static/js/fix-trailing-slash.js b/static/js/fix-trailing-slash.js new file mode 100644 index 00000000000..c76f4061366 --- /dev/null +++ b/static/js/fix-trailing-slash.js @@ -0,0 +1,12 @@ +if ( + window && + window.location && + window.location.pathname.endsWith('/') && + window.location.pathname !== '/' +) { + // Preserve query parameters and hash when removing trailing slash + const newPath = window.location.pathname.substr(0, window.location.pathname.length - 1) + const search = window.location.search || '' + const hash = window.location.hash || '' + window.history.replaceState('', '', newPath + search + hash) +} diff --git a/static/js/getfeedback.js b/static/js/getfeedback.js deleted file mode 100644 index 0db90a5597e..00000000000 --- a/static/js/getfeedback.js +++ /dev/null @@ -1,64 +0,0 @@ -/* eslint-disable */ -window.usabilla || - (function () { - var a = window, - d = a.document, - c = {}, - f = d.createElement("div"), - h = !1, - a = (a.usabilla = function () { - (c.a = c.a || []).push(arguments); - }); - a._ = c; - c.ids = {}; - f.style.display = "none"; - (function () { - if (!d.body) return setTimeout(arguments.callee, 100); - d.body.insertBefore(f, d.body.firstChild).id = "usabilla"; - h = !0; - })(); - a.load = function (a, g, k) { - if (!c.ids[g]) { - var e = (c.ids = {}); - e.url = "//" + a + "/" + g + ".js?s1"; - e.config = k; - setTimeout(function () { - if (!h) return setTimeout(arguments.callee, 100); - var b = d.createElement("iframe"), - a; - b.id = "usabilla-" + g; - /MSIE[ ]+6/.test(navigator.userAgent) && (b.src = "javascript:false"); - f.appendChild(b); - try { - b.contentWindow.document.open(); - } catch (c) { - (e.domain = d.domain), - (a = - "javascript:var d=document.open();d.domain='" + - e.domain + - "';"), - (b.src = a + "void(0);"); - } - try { - var l = b.contentWindow.document; - l.write( - [ - "", - ].join("") - ); - l.close(); - } catch (m) { - b.src = - a + - 'd.write("' + - loaderHtml().replace(/"/g, String.fromCharCode(92) + '"') + - '");d.close();'; - } - b.contentWindow.config = k; - b.contentWindow.SCRIPT_ID = g; - }, 0); - } - }; - })(); diff --git a/static/llms.txt b/static/llms.txt new file mode 100644 index 00000000000..b60f1dfd187 --- /dev/null +++ b/static/llms.txt @@ -0,0 +1,61 @@ +# MetaMask developer documentation + +> MetaMask is the leading self-custodial cryptocurrency wallet and Web3 gateway, enabling developers to build dapps that connect to the MetaMask browser extension and mobile app across EVM and Solana ecosystems. + +These links contain LLM-readable files following the llmstxt.org standard, for each product section: + +## MetaMask Connect + +- [MetaMask Connect documentation links](https://docs.metamask.io/llms-metamask-connect.txt): Documentation links for MetaMask Connect — the SDK for dapp-to-wallet connections across desktop, mobile, and native apps with multichain support for EVM and Solana. +- [MetaMask Connect full documentation](https://docs.metamask.io/llms-metamask-connect-full.txt): Complete documentation for MetaMask Connect. + +## Embedded Wallets + +- [Embedded Wallets documentation links](https://docs.metamask.io/llms-embedded-wallets.txt): Documentation links for Embedded Wallets. +- [Embedded Wallets SDKs full documentation](https://docs.metamask.io/llms-embedded-wallets-sdk-full.txt): Complete documentation for Embedded Wallets SDKs (React, Vue, JS, Node, Android, iOS, React Native, Flutter, Unity, Unreal). +- [Embedded Wallets EVM chain connections full documentation](https://docs.metamask.io/llms-embedded-wallets-evm-full.txt): Complete documentation for connecting Embedded Wallets to EVM-compatible chains. +- [Embedded Wallets non-EVM chain connections full documentation](https://docs.metamask.io/llms-embedded-wallets-non-evm-full.txt): Complete documentation for connecting Embedded Wallets to Solana and other non-EVM chains. +- [Embedded Wallets platform features full documentation](https://docs.metamask.io/llms-embedded-wallets-platform-full.txt): Complete documentation for Embedded Wallets authentication, features, dashboard, infrastructure, and troubleshooting. + +## Smart Accounts Kit + +- [Smart Accounts Kit documentation links](https://docs.metamask.io/llms-smart-accounts-kit.txt): Documentation links for Smart Accounts Kit. +- [Smart Accounts Kit full documentation](https://docs.metamask.io/llms-smart-accounts-kit-full.txt): Complete documentation for Smart Accounts Kit. + +## Agent Wallet + +- [Agent Wallet documentation links](https://docs.metamask.io/llms-agent-wallet.txt): Documentation links for MetaMask Agent Wallet — the mm CLI for programmatic wallet access with mandatory security. +- [Agent Wallet full documentation](https://docs.metamask.io/llms-agent-wallet-full.txt): Complete documentation for MetaMask Agent Wallet. + +## Services + +- [Services documentation links](https://docs.metamask.io/llms-services.txt): Documentation links for MetaMask services. +- [Services full documentation](https://docs.metamask.io/llms-services-full.txt): Complete documentation for MetaMask services. + +## Developer Dashboard + +- [Developer Dashboard documentation links](https://docs.metamask.io/llms-dashboard.txt): Documentation links for MetaMask Developer dashboard. +- [Developer Dashboard full documentation](https://docs.metamask.io/llms-dashboard-full.txt): Complete documentation for MetaMask Developer dashboard. + +## Snaps + +- [Snaps documentation links](https://docs.metamask.io/llms-snaps.txt): Documentation links for Snaps. +- [Snaps full documentation](https://docs.metamask.io/llms-snaps-full.txt): Complete documentation for Snaps. + +## Tutorials + +- [Tutorials documentation links](https://docs.metamask.io/llms-tutorials.txt): Documentation links for MetaMask tutorials. +- [Tutorials full documentation](https://docs.metamask.io/llms-tutorials-full.txt): Complete documentation for MetaMask tutorials. + +## Complete page index + +These auto-generated indexes are produced from the live sitemap at build time and list every documentation page in each product section. They guarantee complete coverage of `https://docs.metamask.io/sitemap.xml` and are the canonical entry point for agents that need the full catalog. + +- [All MetaMask Connect pages](https://docs.metamask.io/llms-all-metamask-connect.txt): Complete sitemap-derived index of every MetaMask Connect page. +- [All Embedded Wallets pages](https://docs.metamask.io/llms-all-embedded-wallets.txt): Complete sitemap-derived index of every Embedded Wallets page. +- [All Smart Accounts Kit pages](https://docs.metamask.io/llms-all-smart-accounts-kit.txt): Complete sitemap-derived index of every Smart Accounts Kit page. +- [All Services pages](https://docs.metamask.io/llms-all-services.txt): Complete sitemap-derived index of every Services page (including JSON-RPC reference). +- [All Snaps pages](https://docs.metamask.io/llms-all-snaps.txt): Complete sitemap-derived index of every Snaps page. +- [All Developer dashboard pages](https://docs.metamask.io/llms-all-dashboard.txt): Complete sitemap-derived index of every Developer dashboard page. +- [All Tutorials pages](https://docs.metamask.io/llms-all-tutorials.txt): Complete sitemap-derived index of every tutorials page. +- [All other documentation pages](https://docs.metamask.io/llms-all-misc.txt): Complete sitemap-derived index of pages outside the main product sections. diff --git a/static/logos/logo-100thieves-dark.png b/static/logos/logo-100thieves-dark.png new file mode 100644 index 00000000000..222c60f31a7 Binary files /dev/null and b/static/logos/logo-100thieves-dark.png differ diff --git a/static/logos/logo-100thieves-light.png b/static/logos/logo-100thieves-light.png new file mode 100644 index 00000000000..788eb6b4609 Binary files /dev/null and b/static/logos/logo-100thieves-light.png differ diff --git a/static/logos/logo-5ire.png b/static/logos/logo-5ire.png new file mode 100644 index 00000000000..1a38d768481 Binary files /dev/null and b/static/logos/logo-5ire.png differ diff --git a/static/logos/logo-aleph-zero.png b/static/logos/logo-aleph-zero.png new file mode 100644 index 00000000000..dd2d2371f8a Binary files /dev/null and b/static/logos/logo-aleph-zero.png differ diff --git a/static/logos/logo-algorand.png b/static/logos/logo-algorand.png new file mode 100644 index 00000000000..a2b12588245 Binary files /dev/null and b/static/logos/logo-algorand.png differ diff --git a/static/logos/logo-ancient8.png b/static/logos/logo-ancient8.png new file mode 100644 index 00000000000..0db07a81e59 Binary files /dev/null and b/static/logos/logo-ancient8.png differ diff --git a/static/logos/logo-android.png b/static/logos/logo-android.png new file mode 100644 index 00000000000..9d9090cc4fb Binary files /dev/null and b/static/logos/logo-android.png differ diff --git a/static/logos/logo-apple.png b/static/logos/logo-apple.png new file mode 100644 index 00000000000..c39fc9fff06 Binary files /dev/null and b/static/logos/logo-apple.png differ diff --git a/static/logos/logo-aptos.png b/static/logos/logo-aptos.png new file mode 100644 index 00000000000..cdc663a17c1 Binary files /dev/null and b/static/logos/logo-aptos.png differ diff --git a/static/logos/logo-arbitrum.png b/static/logos/logo-arbitrum.png new file mode 100644 index 00000000000..8f0e04391d3 Binary files /dev/null and b/static/logos/logo-arbitrum.png differ diff --git a/static/logos/logo-astar-zkevm.png b/static/logos/logo-astar-zkevm.png new file mode 100644 index 00000000000..2aaad685f65 Binary files /dev/null and b/static/logos/logo-astar-zkevm.png differ diff --git a/static/logos/logo-auth0.png b/static/logos/logo-auth0.png new file mode 100644 index 00000000000..96f84bcabce Binary files /dev/null and b/static/logos/logo-auth0.png differ diff --git a/static/logos/logo-avalanche.png b/static/logos/logo-avalanche.png new file mode 100644 index 00000000000..d7ee1c8ce85 Binary files /dev/null and b/static/logos/logo-avalanche.png differ diff --git a/static/logos/logo-aws-cognito.png b/static/logos/logo-aws-cognito.png new file mode 100644 index 00000000000..25366d860b5 Binary files /dev/null and b/static/logos/logo-aws-cognito.png differ diff --git a/static/logos/logo-base.png b/static/logos/logo-base.png new file mode 100644 index 00000000000..0ab99e786a1 Binary files /dev/null and b/static/logos/logo-base.png differ diff --git a/static/logos/logo-binance.png b/static/logos/logo-binance.png new file mode 100644 index 00000000000..05b2e9f4414 Binary files /dev/null and b/static/logos/logo-binance.png differ diff --git a/static/logos/logo-bitcoin.png b/static/logos/logo-bitcoin.png new file mode 100644 index 00000000000..9be674f628f Binary files /dev/null and b/static/logos/logo-bitcoin.png differ diff --git a/static/logos/logo-bitkub.png b/static/logos/logo-bitkub.png new file mode 100644 index 00000000000..109b387d650 Binary files /dev/null and b/static/logos/logo-bitkub.png differ diff --git a/static/logos/logo-bnb.png b/static/logos/logo-bnb.png new file mode 100644 index 00000000000..42b6ea58893 Binary files /dev/null and b/static/logos/logo-bnb.png differ diff --git a/static/logos/logo-celo.png b/static/logos/logo-celo.png new file mode 100644 index 00000000000..7763d50f072 Binary files /dev/null and b/static/logos/logo-celo.png differ diff --git a/static/logos/logo-chiliz.png b/static/logos/logo-chiliz.png new file mode 100644 index 00000000000..b9923a875f7 Binary files /dev/null and b/static/logos/logo-chiliz.png differ diff --git a/static/logos/logo-cosmos.png b/static/logos/logo-cosmos.png new file mode 100644 index 00000000000..2d46c1bb9c4 Binary files /dev/null and b/static/logos/logo-cosmos.png differ diff --git a/static/logos/logo-cronos.png b/static/logos/logo-cronos.png new file mode 100644 index 00000000000..22d7650e616 Binary files /dev/null and b/static/logos/logo-cronos.png differ diff --git a/static/logos/logo-discord.png b/static/logos/logo-discord.png new file mode 100644 index 00000000000..cbda636ebd5 Binary files /dev/null and b/static/logos/logo-discord.png differ diff --git a/static/logos/logo-email-passwordless.png b/static/logos/logo-email-passwordless.png new file mode 100644 index 00000000000..7cfac37df0c Binary files /dev/null and b/static/logos/logo-email-passwordless.png differ diff --git a/static/logos/logo-ethereum.png b/static/logos/logo-ethereum.png new file mode 100644 index 00000000000..e34ef4d334d Binary files /dev/null and b/static/logos/logo-ethereum.png differ diff --git a/static/logos/logo-external-wallet.svg b/static/logos/logo-external-wallet.svg new file mode 100644 index 00000000000..0969c8e8cfa --- /dev/null +++ b/static/logos/logo-external-wallet.svg @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/static/logos/logo-facebook.png b/static/logos/logo-facebook.png new file mode 100644 index 00000000000..1cde237c0cc Binary files /dev/null and b/static/logos/logo-facebook.png differ diff --git a/static/logos/logo-farcaster.png b/static/logos/logo-farcaster.png new file mode 100644 index 00000000000..a9d0426d846 Binary files /dev/null and b/static/logos/logo-farcaster.png differ diff --git a/static/logos/logo-fhenix.png b/static/logos/logo-fhenix.png new file mode 100644 index 00000000000..17f9b3c4983 Binary files /dev/null and b/static/logos/logo-fhenix.png differ diff --git a/static/logos/logo-firebase.png b/static/logos/logo-firebase.png new file mode 100644 index 00000000000..4cfb7da30d9 Binary files /dev/null and b/static/logos/logo-firebase.png differ diff --git a/static/logos/logo-flare.png b/static/logos/logo-flare.png new file mode 100644 index 00000000000..2992d18385f Binary files /dev/null and b/static/logos/logo-flare.png differ diff --git a/static/logos/logo-flow.svg b/static/logos/logo-flow.svg new file mode 100644 index 00000000000..6210f9a1b8a --- /dev/null +++ b/static/logos/logo-flow.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/logos/logo-flutter.png b/static/logos/logo-flutter.png new file mode 100644 index 00000000000..e0086c0abd7 Binary files /dev/null and b/static/logos/logo-flutter.png differ diff --git a/static/logos/logo-github.png b/static/logos/logo-github.png new file mode 100644 index 00000000000..1034c9ce5b1 Binary files /dev/null and b/static/logos/logo-github.png differ diff --git a/static/logos/logo-google.png b/static/logos/logo-google.png new file mode 100644 index 00000000000..524dd5d1a18 Binary files /dev/null and b/static/logos/logo-google.png differ diff --git a/static/logos/logo-group-connections.png b/static/logos/logo-group-connections.png new file mode 100644 index 00000000000..551f10aeabf Binary files /dev/null and b/static/logos/logo-group-connections.png differ diff --git a/static/logos/logo-harmony.png b/static/logos/logo-harmony.png new file mode 100644 index 00000000000..62122408ca6 Binary files /dev/null and b/static/logos/logo-harmony.png differ diff --git a/static/logos/logo-hedera.png b/static/logos/logo-hedera.png new file mode 100644 index 00000000000..18e25c5738a Binary files /dev/null and b/static/logos/logo-hedera.png differ diff --git a/static/logos/logo-immutablex.png b/static/logos/logo-immutablex.png new file mode 100644 index 00000000000..5f158042890 Binary files /dev/null and b/static/logos/logo-immutablex.png differ diff --git a/static/logos/logo-js.png b/static/logos/logo-js.png new file mode 100644 index 00000000000..e2058c07eba Binary files /dev/null and b/static/logos/logo-js.png differ diff --git a/static/logos/logo-jwt.png b/static/logos/logo-jwt.png new file mode 100644 index 00000000000..8d05287bf8a Binary files /dev/null and b/static/logos/logo-jwt.png differ diff --git a/static/logos/logo-kakao.png b/static/logos/logo-kakao.png new file mode 100644 index 00000000000..b66c2f035e7 Binary files /dev/null and b/static/logos/logo-kakao.png differ diff --git a/static/logos/logo-kash.png b/static/logos/logo-kash.png new file mode 100644 index 00000000000..d71b56b93e7 Binary files /dev/null and b/static/logos/logo-kash.png differ diff --git a/static/logos/logo-keplr.png b/static/logos/logo-keplr.png new file mode 100644 index 00000000000..ccfaa823dbe Binary files /dev/null and b/static/logos/logo-keplr.png differ diff --git a/static/logos/logo-kinto.png b/static/logos/logo-kinto.png new file mode 100644 index 00000000000..0610778210d Binary files /dev/null and b/static/logos/logo-kinto.png differ diff --git a/static/logos/logo-klaytn.png b/static/logos/logo-klaytn.png new file mode 100644 index 00000000000..4113afb69b9 Binary files /dev/null and b/static/logos/logo-klaytn.png differ diff --git a/static/logos/logo-line.png b/static/logos/logo-line.png new file mode 100644 index 00000000000..ee8057fa285 Binary files /dev/null and b/static/logos/logo-line.png differ diff --git a/static/logos/logo-linea.png b/static/logos/logo-linea.png new file mode 100644 index 00000000000..0af3a012921 Binary files /dev/null and b/static/logos/logo-linea.png differ diff --git a/static/logos/logo-linkedin.png b/static/logos/logo-linkedin.png new file mode 100644 index 00000000000..79bdb4cbb39 Binary files /dev/null and b/static/logos/logo-linkedin.png differ diff --git a/static/logos/logo-manta.png b/static/logos/logo-manta.png new file mode 100644 index 00000000000..953c1ee2e64 Binary files /dev/null and b/static/logos/logo-manta.png differ diff --git a/static/logos/logo-metis.png b/static/logos/logo-metis.png new file mode 100644 index 00000000000..b85f0a365aa Binary files /dev/null and b/static/logos/logo-metis.png differ diff --git a/static/logos/logo-mint.png b/static/logos/logo-mint.png new file mode 100644 index 00000000000..813d4c4c793 Binary files /dev/null and b/static/logos/logo-mint.png differ diff --git a/static/logos/logo-moonbeam.png b/static/logos/logo-moonbeam.png new file mode 100644 index 00000000000..869743b84fd Binary files /dev/null and b/static/logos/logo-moonbeam.png differ diff --git a/static/logos/logo-moonriver.png b/static/logos/logo-moonriver.png new file mode 100644 index 00000000000..7d3f4b44cb8 Binary files /dev/null and b/static/logos/logo-moonriver.png differ diff --git a/static/logos/logo-morph.png b/static/logos/logo-morph.png new file mode 100644 index 00000000000..70a6077899e Binary files /dev/null and b/static/logos/logo-morph.png differ diff --git a/static/logos/logo-near.png b/static/logos/logo-near.png new file mode 100644 index 00000000000..d4288b59d6d Binary files /dev/null and b/static/logos/logo-near.png differ diff --git a/static/logos/logo-neon.png b/static/logos/logo-neon.png new file mode 100644 index 00000000000..bf86ede97ca Binary files /dev/null and b/static/logos/logo-neon.png differ diff --git a/static/logos/logo-nibiru.png b/static/logos/logo-nibiru.png new file mode 100644 index 00000000000..d1c3642c818 Binary files /dev/null and b/static/logos/logo-nibiru.png differ diff --git a/static/logos/logo-nodejs.png b/static/logos/logo-nodejs.png new file mode 100644 index 00000000000..b8fd4f9bb24 Binary files /dev/null and b/static/logos/logo-nodejs.png differ diff --git a/static/logos/logo-optimism.png b/static/logos/logo-optimism.png new file mode 100644 index 00000000000..208fc81b42f Binary files /dev/null and b/static/logos/logo-optimism.png differ diff --git a/static/logos/logo-polkadot.png b/static/logos/logo-polkadot.png new file mode 100644 index 00000000000..54d828d6bb4 Binary files /dev/null and b/static/logos/logo-polkadot.png differ diff --git a/static/logos/logo-polygon.png b/static/logos/logo-polygon.png new file mode 100644 index 00000000000..7da41f28067 Binary files /dev/null and b/static/logos/logo-polygon.png differ diff --git a/static/logos/logo-polymesh.png b/static/logos/logo-polymesh.png new file mode 100644 index 00000000000..f2206cf4dd1 Binary files /dev/null and b/static/logos/logo-polymesh.png differ diff --git a/static/logos/logo-question-mark.svg b/static/logos/logo-question-mark.svg new file mode 100644 index 00000000000..07312e713d7 --- /dev/null +++ b/static/logos/logo-question-mark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/logos/logo-react.png b/static/logos/logo-react.png new file mode 100644 index 00000000000..59e652c9294 Binary files /dev/null and b/static/logos/logo-react.png differ diff --git a/static/logos/logo-reddit.png b/static/logos/logo-reddit.png new file mode 100644 index 00000000000..de5ed68fb45 Binary files /dev/null and b/static/logos/logo-reddit.png differ diff --git a/static/logos/logo-rootstock.png b/static/logos/logo-rootstock.png new file mode 100644 index 00000000000..80e44d0ffae Binary files /dev/null and b/static/logos/logo-rootstock.png differ diff --git a/static/logos/logo-saakuru.png b/static/logos/logo-saakuru.png new file mode 100644 index 00000000000..d3fcc115253 Binary files /dev/null and b/static/logos/logo-saakuru.png differ diff --git a/static/logos/logo-shardeum.png b/static/logos/logo-shardeum.png new file mode 100644 index 00000000000..17a1e73ebaf Binary files /dev/null and b/static/logos/logo-shardeum.png differ diff --git a/static/logos/logo-skale.png b/static/logos/logo-skale.png new file mode 100644 index 00000000000..960063081ac Binary files /dev/null and b/static/logos/logo-skale.png differ diff --git a/static/logos/logo-skyweaver-dark.png b/static/logos/logo-skyweaver-dark.png new file mode 100644 index 00000000000..b18ac9ed352 Binary files /dev/null and b/static/logos/logo-skyweaver-dark.png differ diff --git a/static/logos/logo-skyweaver-light.png b/static/logos/logo-skyweaver-light.png new file mode 100644 index 00000000000..6bc1cc2b2fe Binary files /dev/null and b/static/logos/logo-skyweaver-light.png differ diff --git a/static/logos/logo-sms-passwordless.png b/static/logos/logo-sms-passwordless.png new file mode 100644 index 00000000000..2d25ddd06a0 Binary files /dev/null and b/static/logos/logo-sms-passwordless.png differ diff --git a/static/logos/logo-solana.png b/static/logos/logo-solana.png new file mode 100644 index 00000000000..52ee754540f Binary files /dev/null and b/static/logos/logo-solana.png differ diff --git a/static/logos/logo-soneium.png b/static/logos/logo-soneium.png new file mode 100644 index 00000000000..ae467ad35d5 Binary files /dev/null and b/static/logos/logo-soneium.png differ diff --git a/static/logos/logo-songbird.png b/static/logos/logo-songbird.png new file mode 100644 index 00000000000..88098509895 Binary files /dev/null and b/static/logos/logo-songbird.png differ diff --git a/static/logos/logo-starkex.png b/static/logos/logo-starkex.png new file mode 100644 index 00000000000..5f64695846f Binary files /dev/null and b/static/logos/logo-starkex.png differ diff --git a/static/logos/logo-starknet.png b/static/logos/logo-starknet.png new file mode 100644 index 00000000000..094182bcba7 Binary files /dev/null and b/static/logos/logo-starknet.png differ diff --git a/static/logos/logo-sui.png b/static/logos/logo-sui.png new file mode 100644 index 00000000000..974db57eec5 Binary files /dev/null and b/static/logos/logo-sui.png differ diff --git a/static/logos/logo-tezos.png b/static/logos/logo-tezos.png new file mode 100644 index 00000000000..c21c7e217e8 Binary files /dev/null and b/static/logos/logo-tezos.png differ diff --git a/static/logos/logo-ton.png b/static/logos/logo-ton.png new file mode 100644 index 00000000000..90f9968cccf Binary files /dev/null and b/static/logos/logo-ton.png differ diff --git a/static/logos/logo-tron.png b/static/logos/logo-tron.png new file mode 100644 index 00000000000..8bd7214e366 Binary files /dev/null and b/static/logos/logo-tron.png differ diff --git a/static/logos/logo-twitch.png b/static/logos/logo-twitch.png new file mode 100644 index 00000000000..3186d1c0956 Binary files /dev/null and b/static/logos/logo-twitch.png differ diff --git a/static/logos/logo-twitter.png b/static/logos/logo-twitter.png new file mode 100644 index 00000000000..432a3aa39fa Binary files /dev/null and b/static/logos/logo-twitter.png differ diff --git a/static/logos/logo-unichain.png b/static/logos/logo-unichain.png new file mode 100644 index 00000000000..174932ec760 Binary files /dev/null and b/static/logos/logo-unichain.png differ diff --git a/static/logos/logo-unity.png b/static/logos/logo-unity.png new file mode 100644 index 00000000000..4860edc32f3 Binary files /dev/null and b/static/logos/logo-unity.png differ diff --git a/static/logos/logo-unreal.png b/static/logos/logo-unreal.png new file mode 100644 index 00000000000..030d5d030fd Binary files /dev/null and b/static/logos/logo-unreal.png differ diff --git a/static/logos/logo-vue.png b/static/logos/logo-vue.png new file mode 100644 index 00000000000..095fd45f740 Binary files /dev/null and b/static/logos/logo-vue.png differ diff --git a/static/logos/logo-wechat.png b/static/logos/logo-wechat.png new file mode 100644 index 00000000000..0d8507dbd47 Binary files /dev/null and b/static/logos/logo-wechat.png differ diff --git a/static/logos/logo-xdc.png b/static/logos/logo-xdc.png new file mode 100644 index 00000000000..87498a3c718 Binary files /dev/null and b/static/logos/logo-xdc.png differ diff --git a/static/logos/logo-xpla.png b/static/logos/logo-xpla.png new file mode 100644 index 00000000000..288b34b14a3 Binary files /dev/null and b/static/logos/logo-xpla.png differ diff --git a/static/logos/logo-xrpl.png b/static/logos/logo-xrpl.png new file mode 100644 index 00000000000..cac2fdfed05 Binary files /dev/null and b/static/logos/logo-xrpl.png differ diff --git a/static/logos/logo-zetachain.png b/static/logos/logo-zetachain.png new file mode 100644 index 00000000000..ff9498eb260 Binary files /dev/null and b/static/logos/logo-zetachain.png differ diff --git a/static/logos/logo-zilliqa.png b/static/logos/logo-zilliqa.png new file mode 100644 index 00000000000..f9a7667e627 Binary files /dev/null and b/static/logos/logo-zilliqa.png differ diff --git a/static/logos/logo-zircuit.png b/static/logos/logo-zircuit.png new file mode 100644 index 00000000000..13662b2ef1a Binary files /dev/null and b/static/logos/logo-zircuit.png differ diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 00000000000..c22e14fbb7c --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +Allow: / +Content-Signal: search=yes, ai-input=yes, ai-train=yes + +Sitemap: https://docs.metamask.io/sitemap.xml diff --git a/static/sdk-connect-extension.mp4 b/static/sdk-connect-extension.mp4 new file mode 100644 index 00000000000..73fb190fd98 Binary files /dev/null and b/static/sdk-connect-extension.mp4 differ diff --git a/static/sdk-connect-mobile.mp4 b/static/sdk-connect-mobile.mp4 new file mode 100644 index 00000000000..759e98555f2 Binary files /dev/null and b/static/sdk-connect-mobile.mp4 differ diff --git a/tsconfig.json b/tsconfig.json index 7b5a836e23f..a86af1f2b36 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,18 +2,16 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@docusaurus/tsconfig", "compilerOptions": { - "rootDir": "./src", + "rootDir": ".", "baseUrl": ".", "paths": { "@site/*": ["./*"], "@theme/*": ["./node_modules/@docusaurus/theme-classic"], - "launchdarkly": [ - "./node_modules/launchdarkly-js-client-sdk/dist/ldclient.es.js" - ], + "launchdarkly": ["./node_modules/launchdarkly-js-client-sdk/dist/ldclient.es.js"], "sentry-plugin": ["./node_modules/@sentry/browser/build/npm/esm/index.js"] }, - "types": ["docusaurus-plugin-sass"] + "types": ["docusaurus-plugin-sass", "node"] }, - "include": ["src/globals.d.ts", "./src/**/*"], + "include": ["src/globals.d.ts", "./src/**/*", "middleware.ts"], "exclude": ["node_modules"] } diff --git a/vercel.json b/vercel.json index f196573e0ed..f850a1ea4d5 100644 --- a/vercel.json +++ b/vercel.json @@ -1,367 +1,404 @@ { - "cleanUrls": true, + "cleanUrls": false, "trailingSlash": true, + "headers": [ + { + "source": "/(.*)\\.md", + "headers": [ + { + "key": "Content-Type", + "value": "text/markdown; charset=utf-8" + }, + { + "key": "Cache-Control", + "value": "public, max-age=300, s-maxage=3600" + } + ] + }, + { + "source": "/(llms.*)\\.txt", + "headers": [ + { + "key": "Content-Type", + "value": "text/markdown; charset=utf-8" + } + ] + }, + { + "source": "/", + "headers": [ + { + "key": "Link", + "value": "; rel=\"service-doc\", ; rel=\"alternate\"; type=\"text/markdown\"" + } + ] + }, + { + "source": "/", + "has": [ + { + "type": "header", + "key": "accept", + "value": ".*text/markdown.*" + } + ], + "headers": [ + { + "key": "Content-Type", + "value": "text/markdown; charset=utf-8" + } + ] + } + ], "redirects": [ { - "source": "/guide/", - "destination": "/wallet/" - }, - { - "source": "/guide/common-terms/", - "destination": "/wallet/" - }, - { - "source": "/guide/contributors/", - "destination": "/wallet/" - }, - { - "source": "/guide/create-dapp/", - "destination": "/wallet/" - }, - { - "source": "/guide/getting-started/", - "destination": "/wallet/" + "source": "/whats-new/", + "destination": "/" }, { - "source": "/wallet/category/get-started/", - "destination": "/wallet/" + "source": "/blog/", + "destination": "/" }, { - "source": "/wallet/how-to/get-started-building/", - "destination": "/wallet/" + "source": "/search/", + "destination": "/" }, { - "source": "/guide/metamask-extension-provider/", - "destination": "/wallet/connect/" + "source": "/developer-tools/", + "destination": "/developer-tools/dashboard/" }, { - "source": "/wallet/quickstart/javascript/", - "destination": "/wallet/connect/" + "source": "/developer-tools/dashboard/how-to/project-sharing/", + "destination": "/developer-tools/dashboard/" }, { - "source": "/wallet/quickstart/react/", - "destination": "/wallet/connect/" + "source": "/wallet/how-to/connect/access-accounts/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/wallet/quickstart/other-platforms/", - "destination": "/wallet/connect/" + "source": "/wallet/get-started/access-accounts/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/wallet/how-to/discover-multiple-wallets/", - "destination": "/wallet/connect/" + "source": "/wallet/how-to/manage-networks/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/detect-wallet/", - "destination": "/wallet/connect/" + "source": "/wallet/get-started/detect-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/detect-wallet/multiple-wallets/", - "destination": "/wallet/connect/" + "source": "/wallet/how-to/connect/detect-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/access-provider/", - "destination": "/wallet/connect/" + "source": "/wallet/how-to/detect-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/use-3rd-party-integrations/", - "destination": "/wallet/connect/" + "source": "/wallet/how-to/add-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/use-sdk/3rd-party-libraries/", - "destination": "/wallet/connect/" + "source": "/guide/signing-data/", + "destination": "/metamask-connect/evm/guides/sign-data/" }, { - "source": "/wallet/how-to/connect/set-up-sdk/:path*/", - "destination": "/wallet/connect/metamask-sdk/:path*/" + "source": "/wallet/how-to/sign-data/connect-and-sign/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/wallet/how-to/use-sdk/:path*/", - "destination": "/wallet/connect/metamask-sdk/:path*/" + "source": "/wallet/how-to/use-siwe/", + "destination": "/metamask-connect/evm/guides/sign-data/siwe/" }, { - "source": "/wallet/concepts/sdk/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/guide/sending-transactions/", + "destination": "/metamask-connect/evm/guides/send-transactions/" }, { - "source": "/guide/mobile-getting-started/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/wallet/how-to/batch-json-rpc-requests/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/batch-requests/" }, { - "source": "/guide/site-compatibility-checklist/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/wallet/how-to/display/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/display-tokens/" }, { - "source": "/guide/mobile-best-practices/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/guide/registering-your-token/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/display-tokens/" }, { - "source": "/wallet/how-to/use-mobile/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/wallet/how-to/register-token/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/display-tokens/" }, { - "source": "/wallet/how-to/integrate-with-mobile/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/guide/registering-function-names/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/sdk/", - "destination": "/wallet/connect/metamask-sdk/" + "source": "/wallet/how-to/register-method-names/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/wallet/how-to/use-sdk/javascript/react-native/", - "destination": "/wallet/connect/metamask-sdk/mobile/react-native/" + "source": "/guide/defining-your-icon/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/wallet/how-to/use-sdk/3rd-party-libraries/wagmi/", - "destination": "/wallet/connect/3rd-party-libraries/wagmi/" + "source": "/wallet/how-to/set-icon/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/wallet/how-to/use-3rd-party-integrations/web3-onboard/", - "destination": "/wallet/connect/3rd-party-libraries/web3-onboard/" + "source": "/wallet/how-to/interact-with-smart-contracts/:path*/", + "destination": "/metamask-connect/evm/guides/interact-with-contracts/" }, { - "source": "/wallet/how-to/use-sdk/3rd-party-libraries/web3-onboard/", - "destination": "/wallet/connect/3rd-party-libraries/web3-onboard/" + "source": "/wallet/get-started/run-development-network/", + "destination": "/metamask-connect/evm/guides/best-practices/run-devnet/" }, { - "source": "/wallet/category/how-to/", - "destination": "/wallet/how-to/" + "source": "/wallet/how-to/get-started-building/run-devnet/", + "destination": "/metamask-connect/evm/guides/best-practices/run-devnet/" }, { - "source": "/guide/accessing-accounts/", - "destination": "/wallet/how-to/access-accounts/" + "source": "/guide/initializing-dapps/", + "destination": "/metamask-connect/evm/guides/interact-with-contracts/" }, { - "source": "/wallet/how-to/access-accounts/", - "destination": "/wallet/how-to/access-accounts/" + "source": "/wallet/how-to/interact-with-smart-contracts/", + "destination": "/metamask-connect/evm/guides/interact-with-contracts/" }, { - "source": "/wallet/get-started/access-accounts/", - "destination": "/wallet/how-to/access-accounts/" + "source": "/wallet/reference/sdk-js-options/", + "destination": "/metamask-connect/evm/reference/methods/" }, { - "source": "/wallet/get-started/detect-network/", - "destination": "/wallet/how-to/manage-networks/detect-network/" + "source": "/metamask-connect/reference/sdk-options/", + "destination": "/metamask-connect/evm/reference/methods/" }, { - "source": "/wallet/how-to/connect/detect-network/", - "destination": "/wallet/how-to/manage-networks/detect-network/" + "source": "/wallet/reference/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/wallet/how-to/detect-network/", - "destination": "/wallet/how-to/manage-networks/detect-network/" - }, - { - "source": "/wallet/how-to/add-network/", - "destination": "/wallet/how-to/manage-networks/add-network/" + "source": "/wallet/category/reference/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/guide/signing-data/", - "destination": "/wallet/how-to/sign-data/" + "source": "/guide/ethereum-provider/", + "destination": "/metamask-connect/evm/reference/provider-api/" }, { - "source": "/wallet/how-to/use-sdk/javascript/connect-and-sign/", - "destination": "/wallet/how-to/sign-data/connect-and-sign/" + "source": "/guide/ethereum-provider.html", + "destination": "/metamask-connect/evm/reference/provider-api/" }, { - "source": "/wallet/how-to/use-siwe/", - "destination": "/wallet/how-to/sign-data/siwe/" + "source": "/wallet/reference/json-rpc-api/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/guide/sending-transactions/", - "destination": "/wallet/how-to/send-transactions/" + "source": "/guide/rpc-api/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/wallet/how-to/use-3rd-party-integrations/js-infura-api/", - "destination": "/wallet/how-to/make-read-only-requests/" + "source": "/wallet/reference/rpc-api/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/wallet/how-to/use-sdk/javascript/make-read-only-requests/", - "destination": "/wallet/how-to/make-read-only-requests/" + "source": "/wallet/reference/(eth_.*)", + "destination": "/metamask-connect/evm/reference/json-rpc-api/$1/" }, { - "source": "/wallet/how-to/use-sdk/javascript/batch-json-rpc-requests/", - "destination": "/wallet/how-to/batch-json-rpc-requests/" + "source": "/wallet/reference/(wallet_.*)", + "destination": "/metamask-connect/evm/reference/json-rpc-api/$1/" }, { - "source": "/guide/registering-your-token/", - "destination": "/wallet/how-to/display/tokens/" + "source": "/wallet/reference/(personal_.*)", + "destination": "/metamask-connect/evm/reference/json-rpc-api/$1/" }, { - "source": "/wallet/how-to/register-token/", - "destination": "/wallet/how-to/display/tokens/" + "source": "/wallet/reference/(web3_.*)", + "destination": "/metamask-connect/evm/reference/json-rpc-api/$1/" }, { - "source": "/guide/registering-function-names/", - "destination": "/wallet/how-to/display/method-names/" + "source": "/metamask-connect/guides/advanced/connect-and-sign/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/wallet/how-to/register-method-names/", - "destination": "/wallet/how-to/display/method-names/" + "source": "/metamask-connect/guides/advanced/batch-requests/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/batch-requests/" }, { - "source": "/guide/defining-your-icon/", - "destination": "/wallet/how-to/display/icon/" + "source": "/metamask-connect/guides/advanced/production-readiness/", + "destination": "/metamask-connect/evm/guides/best-practices/production-readiness/" }, { - "source": "/wallet/how-to/set-icon/", - "destination": "/wallet/how-to/display/icon/" + "source": "/metamask-connect/connect/javascript-wagmi/", + "destination": "/metamask-connect/evm/quickstart/wagmi/" }, { - "source": "/wallet/how-to/use-sdk/javascript/display-custom-modals/", - "destination": "/wallet/how-to/display/custom-modals/" + "source": "/metamask-connect/connect/javascript/", + "destination": "/metamask-connect/evm/quickstart/javascript/" }, { - "source": "/wallet/how-to/request-permissions/", - "destination": "/wallet/how-to/manage-permissions/" + "source": "/metamask-connect/connect/react-native/", + "destination": "/metamask-connect/evm/quickstart/react-native/" }, { - "source": "/wallet/how-to/use-3rd-party-integrations/unity-infura/", - "destination": "/wallet/how-to/use-unity-sdk/infura/" + "source": "/metamask-connect/guides/authenticate-users/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/wallet/how-to/use-sdk/gaming/unity/infura/", - "destination": "/wallet/how-to/use-unity-sdk/infura/" + "source": "/metamask-connect/guides/manage-networks/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/interact-with-smart-contracts/unity/:path*/", - "destination": "/wallet/how-to/use-unity-sdk/smart-contracts/:path*/" + "source": "/metamask-connect/guides/handle-transactions/", + "destination": "/metamask-connect/evm/guides/send-transactions/" }, { - "source": "/wallet/how-to/use-sdk/gaming/unity/smart-contracts/:path*/", - "destination": "/wallet/how-to/use-unity-sdk/smart-contracts/:path*/" + "source": "/metamask-connect/guides/interact-with-contracts/", + "destination": "/metamask-connect/evm/guides/interact-with-contracts/" }, { - "source": "/wallet/how-to/use-3rd-party-integrations/unity-dweb/", - "destination": "/wallet/how-to/use-unity-sdk/dweb/" + "source": "/metamask-connect/guides/use-deeplinks/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/use-deeplinks/" }, { - "source": "/wallet/how-to/use-sdk/gaming/unity/dweb/", - "destination": "/wallet/how-to/use-unity-sdk/dweb/" + "source": "/metamask-connect/guides/batch-requests/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/batch-requests/" }, { - "source": "/guide/onboarding-library/", - "destination": "/wallet/how-to/onboard-users/" + "source": "/metamask-connect/guides/production-readiness/", + "destination": "/metamask-connect/evm/guides/best-practices/production-readiness/" }, { - "source": "/wallet/how-to/use-onboarding-library/", - "destination": "/wallet/how-to/onboard-users/" + "source": "/metamask-connect/solana/guides/send-legacy-transaction/", + "destination": "/metamask-connect/solana/guides/send-transactions/legacy/" }, { - "source": "/wallet/get-started/run-development-network/", - "destination": "/wallet/how-to/run-devnet/" + "source": "/metamask-connect/solana/guides/send-versioned-transaction/", + "destination": "/metamask-connect/solana/guides/send-transactions/versioned/" }, { - "source": "/wallet/how-to/get-started-building/run-devnet/", - "destination": "/wallet/how-to/run-devnet/" + "source": "/metamask-connect/solana/guides/batch-transactions/", + "destination": "/metamask-connect/solana/guides/send-transactions/batch/" }, { - "source": "/wallet/how-to/get-started-building/secure-dapp/", - "destination": "/wallet/how-to/secure-dapp/" + "source": "/wallet/how-to/connect-extension/", + "destination": "/metamask-connect/evm/" }, { - "source": "/wallet/category/concepts/", - "destination": "/wallet/concepts/" + "source": "/wallet/how-to/access-accounts/", + "destination": "/metamask-connect/evm/guides/manage-user-accounts/" }, { - "source": "/guide/provider-migration/", - "destination": "/wallet/concepts/wallet-api/" + "source": "/wallet/how-to/manage-networks/detect-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/concepts/provider-api/", - "destination": "/wallet/concepts/wallet-api/" + "source": "/wallet/how-to/manage-networks/add-network/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/concepts/rpc-api/", - "destination": "/wallet/concepts/wallet-api/" + "source": "/wallet/how-to/manage-networks/use-multichain/", + "destination": "/metamask-connect/evm/guides/manage-networks/" }, { - "source": "/wallet/how-to/migrate-api/", - "destination": "/wallet/concepts/wallet-api/" + "source": "/wallet/how-to/sign-data/", + "destination": "/metamask-connect/evm/guides/sign-data/" }, { - "source": "/wallet/concepts/apis/", - "destination": "/wallet/concepts/wallet-api/" + "source": "/wallet/how-to/sign-data/siwe/", + "destination": "/metamask-connect/evm/guides/sign-data/siwe/" }, { - "source": "/wallet/concepts/sdk/connections/", - "destination": "/wallet/concepts/sdk-connections/" + "source": "/wallet/how-to/send-transactions/", + "destination": "/metamask-connect/evm/guides/send-transactions/" }, { - "source": "/wallet/concepts/sdk/android/", - "destination": "/wallet/concepts/android-sdk/" + "source": "/wallet/how-to/send-transactions/send-batch-transactions/", + "destination": "/metamask-connect/evm/guides/send-transactions/batch-transactions/" }, { - "source": "/guide/initializing-dapps/", - "destination": "/wallet/concepts/smart-contracts/" + "source": "/wallet/how-to/display/tokens/", + "destination": "/metamask-connect/evm/guides/metamask-exclusive/display-tokens/" }, { - "source": "/wallet/how-to/interact-with-smart-contracts/", - "destination": "/wallet/concepts/smart-contracts/" + "source": "/wallet/how-to/display/method-names/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/wallet/category/tutorials/", - "destination": "/wallet/tutorials/" + "source": "/wallet/how-to/display/icon/", + "destination": "/metamask-connect/evm/guides/best-practices/display/" }, { - "source": "/wallet/how-to/set-up-dev-environment/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/wallet/how-to/use-non-evm-networks/solana/", + "destination": "/metamask-connect/solana/" }, { - "source": "/wallet/get-started/set-up-dev-environment/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/wallet/how-to/run-devnet/", + "destination": "/metamask-connect/evm/guides/best-practices/run-devnet/" }, { - "source": "/wallet/how-to/get-started-building/set-up-dev-environment/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/metamask-connect/connect/javascript-dynamic/", + "destination": "/metamask-connect/evm/quickstart/dynamic/" }, { - "source": "/wallet/get-started/detect-metamask/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/metamask-connect/connect/javascript-web3auth/", + "destination": "/metamask-connect/evm/quickstart/web3auth/" }, { - "source": "/wallet/how-to/detect-metamask/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/wallet/concepts/signing-methods/", + "destination": "/metamask-connect/evm/guides/sign-data/" }, { - "source": "/wallet/how-to/detect-wallet/metamask/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/wallet/concepts/smart-contracts/", + "destination": "/metamask-connect/evm/guides/interact-with-contracts/" }, { - "source": "/wallet/how-to/connect/detect-metamask/", - "destination": "/wallet/tutorials/javascript-dapp-simple/" + "source": "/metamask-connect/reference/supported-platforms/", + "destination": "/metamask-connect/supported-platforms/" }, { - "source": "/wallet/tutorials/simple-react-dapp/", - "destination": "/wallet/tutorials/react-dapp-local-state/" + "source": "/metamask-connect/reference/sdk-methods/", + "destination": "/metamask-connect/evm/reference/methods/" }, { - "source": "/wallet/category/reference/", - "destination": "/wallet/reference/" + "source": "/wallet/reference/provider-api/", + "destination": "/metamask-connect/evm/reference/provider-api/" }, { - "source": "/guide/ethereum-provider/", - "destination": "/wallet/reference/provider-api/" + "source": "/wallet/reference/multichain-api/", + "destination": "/metamask-connect/multichain/reference/api/" }, { - "source": "/guide/rpc-api/", - "destination": "/wallet/reference/json-rpc-api/" + "source": "/wallet/reference/json-rpc-methods/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { - "source": "/wallet/reference/rpc-api/", - "destination": "/wallet/reference/json-rpc-api/" + "source": "/wallet/reference/json-rpc-methods/:path*/", + "destination": "/metamask-connect/evm/reference/json-rpc-api/" }, { "source": "/guide/snaps/", "destination": "/snaps/" }, + { + "source": "/snaps/get-started/", + "destination": "/snaps/get-started/install-flask/" + }, { "source": "/snaps/category/get-started/", - "destination": "/snaps/get-started/" + "destination": "/snaps/get-started/install-flask/" }, { "source": "/snaps/get-started/install-snaps/", "destination": "/snaps/get-started/install-flask/" }, + { + "source": "/snaps/learn/", + "destination": "/snaps/learn/about-snaps/" + }, { "source": "/guide/snaps-concepts/", "destination": "/snaps/learn/about-snaps/" @@ -402,13 +439,17 @@ "source": "/snaps/concepts/files/", "destination": "/snaps/learn/about-snaps/files/" }, + { + "source": "/snaps/learn/tutorials/", + "destination": "/snaps/learn/tutorials/gas-estimation/" + }, { "source": "/snaps/category/tutorials/", - "destination": "/snaps/learn/tutorials/" + "destination": "/snaps/learn/tutorials/gas-estimation/" }, { "source": "/snaps/tutorials/", - "destination": "/snaps/learn/tutorials/" + "destination": "/snaps/learn/tutorials/gas-estimation/" }, { "source": "/snaps/tutorials/gas-estimation/", @@ -418,6 +459,10 @@ "source": "/snaps/tutorials/transaction-insights/", "destination": "/snaps/learn/tutorials/transaction-insights/" }, + { + "source": "/snaps/learn/best-practices/", + "destination": "/snaps/learn/best-practices/design-guidelines/" + }, { "source": "/snaps/concepts/design-guidelines/", "destination": "/snaps/learn/best-practices/design-guidelines/" @@ -438,9 +483,17 @@ "source": "/snaps/reference/resources/", "destination": "/snaps/learn/resources/" }, + { + "source": "/snaps/how-to/", + "destination": "/snaps/how-to/request-permissions/" + }, { "source": "/snaps/category/how-to/", - "destination": "/snaps/how-to/" + "destination": "/snaps/how-to/request-permissions/" + }, + { + "source": "/snaps/features/", + "destination": "/snaps/features/cron-jobs/" }, { "source": "/snaps/how-to/use-custom-ui/", @@ -486,10 +539,6 @@ "source": "/guide/snaps-development-guide/", "destination": "/snaps/how-to/debug-a-snap/common-issues/" }, - { - "source": "/guide/snaps-development-guide/", - "destination": "/snaps/how-to/publish-a-snap/" - }, { "source": "/snaps/how-to/develop-a-snap/", "destination": "/snaps/how-to/publish-a-snap/" @@ -502,9 +551,13 @@ "source": "/snaps/how-to/use-3rd-party-snaps/", "destination": "/snaps/how-to/connect-to-a-snap/" }, + { + "source": "/snaps/reference/", + "destination": "/snaps/reference/snaps-api/" + }, { "source": "/snaps/category/reference/", - "destination": "/snaps/reference/" + "destination": "/snaps/reference/snaps-api/" }, { "source": "/guide/snaps-rpc-api/", @@ -522,6 +575,58 @@ "source": "/snaps/reference/exports/", "destination": "/snaps/reference/entry-points/" }, + { + "source": "/snaps/reference/cli/subcommands/", + "destination": "/snaps/reference/cli/" + }, + { + "source": "/snaps/reference/cli/options/", + "destination": "/snaps/reference/config-options/" + }, + { + "source": "/snaps/tags/", + "destination": "/snaps/" + }, + { + "source": "/snaps/tags/keyring-api/", + "destination": "/snaps/features/custom-evm-accounts/" + }, + { + "source": "/services/get-started/", + "destination": "/services/get-started/infura/" + }, + { + "source": "/services/how-to/", + "destination": "/services/how-to/avoid-rate-limiting/" + }, + { + "source": "/services/how-to/use-ipfs/access-ipfs-content/", + "destination": "/services/how-to/use-ipfs/access-ipfs-content/dedicated-gateways/" + }, + { + "source": "/services/concepts/", + "destination": "/services/concepts/failover-protection/" + }, + { + "source": "/services/tutorials/", + "destination": "/services/tutorials/ethereum/authenticate-with-jwt/" + }, + { + "source": "/services/tutorials/ethereum/", + "destination": "/services/tutorials/ethereum/authenticate-with-jwt/" + }, + { + "source": "/services/tutorials/layer-2-networks/deploy-an-nft-smart-contract-on-palm/", + "destination": "/services/" + }, + { + "source": "/services/tutorials/layer-2-networks/", + "destination": "/services/tutorials/layer-2-networks/send-a-transaction/" + }, + { + "source": "/services/reference/", + "destination": "/services/reference/arbitrum/" + }, { "source": "/services/gas-api/", "destination": "/services/reference/gas-api/" @@ -549,6 +654,369 @@ { "source": "/services/gas-api/api-reference/busythreshold/", "destination": "/services/reference/gas-api/api-reference/busythreshold/" + }, + { + "source": "/services/reference/:path*/json-rpc-methods/eth_sign/", + "destination": "/services/get-started/infura/" + }, + { + "source": "/services/reference/:path*/json-rpc-methods/eth_sendtransaction/", + "destination": "/services/get-started/infura/" + }, + { + "source": "/services/reference/swellchain/", + "destination": "/services/reference/" + }, + { + "source": "/services/reference/swellchain/:path*/", + "destination": "/services/reference/" + }, + { + "source": "/services/reference/:path*/json-rpc-methods/eth_coinbase/", + "destination": "/services/get-started/infura/" + }, + { + "source": "/developer-tools/faucet/sepolia/", + "destination": "/developer-tools/faucet/" + }, + { + "source": "/services/api/learn/pricing/", + "destination": "/services/get-started/pricing/credit-cost/" + }, + { + "source": "/services/reference/:path*/eth_newpendingtransactionfilter/", + "destination": "/services/reference/:path*/" + }, + { + "source": "/services/reference/ethereum/how-to/secure-a-project/project-secret/", + "destination": "/developer-tools/dashboard/how-to/secure-an-api/api-key-secret/" + }, + { + "source": "/services/reference/ipfs/how-to/:path*/", + "destination": "/services/how-to/use-ipfs/:path*/" + }, + { + "source": "/delegation-toolkit/:path*/", + "destination": "/smart-accounts-kit/" + }, + { + "source": "/smart-accounts-kit/get-started/use-with-openclaw/", + "destination": "/smart-accounts-kit/get-started/use-skills/" + }, + { + "source": "/developer-tools/dashboard/how-to/", + "destination": "/developer-tools/dashboard/" + }, + { + "source": "/developer-tools/dashboard/how-to/secure-an-api/", + "destination": "/developer-tools/dashboard/how-to/secure-an-api/api-key-secret/" + }, + { + "source": "/embedded-wallets/connect-blockchain/custom-chains/", + "destination": "/embedded-wallets/connect-blockchain/other/" + }, + { + "source": "/embedded-wallets/connect-blockchain/evm/:path*/web/", + "destination": "/embedded-wallets/connect-blockchain/evm/:path*/" + }, + { + "source": "/embedded-wallets/connect-blockchain/xrpl/", + "destination": "/embedded-wallets/connect-blockchain/" + }, + { + "source": "/embedded-wallets/dashboard/whitelist/", + "destination": "/embedded-wallets/dashboard/allowlist/" + }, + { + "source": "/embedded-wallets/how-it-works/", + "destination": "/embedded-wallets/" + }, + { + "source": "/guide/", + "destination": "/metamask-connect/" + }, + { + "source": "/guide/:path*/", + "destination": "/metamask-connect/" + }, + { + "source": "/wallet/", + "destination": "/metamask-connect/" + }, + { + "source": "/wallet/:path*/", + "destination": "/metamask-connect/" + }, + { + "source": "/llms-wallet.txt", + "destination": "/llms-metamask-connect.txt" + }, + { + "source": "/llms-wallet-full.txt", + "destination": "/llms-metamask-connect-full.txt" + }, + { + "source": "/sdk/", + "destination": "/metamask-connect/" + }, + { + "source": "/sdk/:path*/", + "destination": "/metamask-connect/" + }, + { + "source": "/embedded-wallets/sdk/ios/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/ios/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/usage/getEd25519PrivKey/", + "destination": "/embedded-wallets/sdk/ios/usage/get-ed25519-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/usage/getPrivKey/", + "destination": "/embedded-wallets/sdk/ios/usage/get-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/ios/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/usage/launchWalletServices/", + "destination": "/embedded-wallets/sdk/ios/usage/launch-wallet-services/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/usage/manageMFA/", + "destination": "/embedded-wallets/sdk/ios/usage/manage-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/android/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/getEd25519PrivKey/", + "destination": "/embedded-wallets/sdk/android/usage/get-ed25519-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/getPrivKey/", + "destination": "/embedded-wallets/sdk/android/usage/get-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/android/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/launchWalletServices/", + "destination": "/embedded-wallets/sdk/android/usage/launch-wallet-services/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/usage/manageMFA/", + "destination": "/embedded-wallets/sdk/android/usage/manage-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/flutter/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/getEd25519PrivKey/", + "destination": "/embedded-wallets/sdk/flutter/usage/get-ed25519-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/getPrivKey/", + "destination": "/embedded-wallets/sdk/flutter/usage/get-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/flutter/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/launchWalletServices/", + "destination": "/embedded-wallets/sdk/flutter/usage/launch-wallet-services/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/usage/manageMFA/", + "destination": "/embedded-wallets/sdk/flutter/usage/manage-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/react-native/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/usage/launchWalletServices/", + "destination": "/embedded-wallets/sdk/react-native/usage/launch-wallet-services/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/usage/ed25519Key/", + "destination": "/embedded-wallets/sdk/react-native/usage/ed25519-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/usage/privKey/", + "destination": "/embedded-wallets/sdk/react-native/usage/private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/usage/userInfo/", + "destination": "/embedded-wallets/sdk/react-native/usage/user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unity/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/unity/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unity/usage/getEd25519PrivKey/", + "destination": "/embedded-wallets/sdk/unity/usage/get-ed25519-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unity/usage/getPrivKey/", + "destination": "/embedded-wallets/sdk/unity/usage/get-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unity/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/unity/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unity/usage/launchWalletServices/", + "destination": "/embedded-wallets/sdk/unity/usage/launch-wallet-services/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unreal/usage/getEd25519PrivKey/", + "destination": "/embedded-wallets/sdk/unreal/usage/get-ed25519-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unreal/usage/getPrivKey/", + "destination": "/embedded-wallets/sdk/unreal/usage/get-private-key/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/unreal/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/unreal/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/enableMFA/", + "destination": "/embedded-wallets/sdk/js/usage/enable-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/getUserInfo/", + "destination": "/embedded-wallets/sdk/js/usage/get-user-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/manageMFA/", + "destination": "/embedded-wallets/sdk/js/usage/manage-mfa/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/getIdentityToken/", + "destination": "/embedded-wallets/sdk/js/usage/get-auth-token-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/get-identity-token/", + "destination": "/embedded-wallets/sdk/js/usage/get-auth-token-info/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react/hooks/useIdentityToken/", + "destination": "/embedded-wallets/sdk/react/hooks/useAuthTokenInfo/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/vue/composables/useIdentityToken/", + "destination": "/embedded-wallets/sdk/vue/composables/useAuthTokenInfo/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/showCheckout/", + "destination": "/embedded-wallets/sdk/js/usage/show-checkout/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/showSwap/", + "destination": "/embedded-wallets/sdk/js/usage/show-swap/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/showWalletConnectScanner/", + "destination": "/embedded-wallets/sdk/js/usage/show-wallet-connect-scanner/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/showWalletUI/", + "destination": "/embedded-wallets/sdk/js/usage/show-wallet-ui/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/usage/switchChain/", + "destination": "/embedded-wallets/sdk/js/usage/switch-chain/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/js/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/web/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/web/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/vue/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/web/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/android/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/android/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/ios/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/ios/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/react-native/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/react-native/", + "permanent": true + }, + { + "source": "/embedded-wallets/sdk/flutter/migration-guides/:path*", + "destination": "/embedded-wallets/migration-guides/flutter/", + "permanent": true + }, + { + "source": "/agent-wallet/get-started/quickstart/", + "destination": "/agent-wallet/quickstart/", + "permanent": true } ] } diff --git a/wallet-sidebar.js b/wallet-sidebar.js deleted file mode 100644 index c9ec32985d9..00000000000 --- a/wallet-sidebar.js +++ /dev/null @@ -1,109 +0,0 @@ -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebar = { - walletSidebar: [ - "index", - { - type: "category", - label: "Connect to MetaMask", - link: { type: "doc", id: "connect/index" }, - items: [ - { - type: "category", - label: "MetaMask SDK", - link: { type: "doc", id: "connect/metamask-sdk/index" }, - items: [ - { - type: "category", - label: "JavaScript", - link: { type: "doc", id: "connect/metamask-sdk/javascript/index" }, - items: [ - { - type: "category", - label: "React", - link: { type: "doc", id: "connect/metamask-sdk/javascript/react/index" }, - items: [ - "connect/metamask-sdk/javascript/react/react-ui", - ], - }, - "connect/metamask-sdk/javascript/pure-js", - "connect/metamask-sdk/javascript/other-web-frameworks", - "connect/metamask-sdk/javascript/nodejs", - "connect/metamask-sdk/javascript/electron", - ], - }, - { - type: "category", - label: "Mobile", - link: { type: "doc", id: "connect/metamask-sdk/mobile/index" }, - items: [ - "connect/metamask-sdk/mobile/ios", - "connect/metamask-sdk/mobile/android", - "connect/metamask-sdk/mobile/react-native", - ], - }, - { - type: "category", - label: "Gaming", - link: { type: "doc", id: "connect/metamask-sdk/gaming/index" }, - items: [ - "connect/metamask-sdk/gaming/unity", - ], - }, - ], - }, - { - type: "category", - label: "Third-party libraries", - items: [{ type: "autogenerated", dirName: "connect/3rd-party-libraries" }], - }, - { - type: "doc", - id: "connect/wallet-api", - }, - ], - collapsed: false, - }, - { - type: "category", - label: "How to", - link: { type: "generated-index", slug: "/how-to" }, - items: [{ type: "autogenerated", dirName: "how-to" }], - }, - { - type: "category", - label: "Concepts", - link: { type: "generated-index", slug: "/concepts" }, - items: [{ type: "autogenerated", dirName: "concepts" }], - }, - { - type: "category", - label: "Tutorials", - link: { type: "generated-index", slug: "/tutorials" }, - items: [{ type: "autogenerated", dirName: "tutorials" }], - }, - { - type: "category", - label: "Reference", - link: { type: "generated-index", slug: "/reference" }, - items: [ - { - type: "doc", - id: "reference/sdk-js-options", - }, - { - type: "doc", - id: "reference/sdk-unity-api", - }, - { - type: "doc", - id: "reference/provider-api", - }, - ], - collapsed: false, - }, - ], -}; - -module.exports = sidebar; diff --git a/wallet/assets/add-network.png b/wallet/assets/add-network.png deleted file mode 100644 index 8db142eee96..00000000000 Binary files a/wallet/assets/add-network.png and /dev/null differ diff --git a/wallet/assets/contract-abi-converter-dialog.png b/wallet/assets/contract-abi-converter-dialog.png deleted file mode 100644 index 521b9001072..00000000000 Binary files a/wallet/assets/contract-abi-converter-dialog.png and /dev/null differ diff --git a/wallet/assets/custom-modal.gif b/wallet/assets/custom-modal.gif deleted file mode 100644 index 8ebabc4b4e9..00000000000 Binary files a/wallet/assets/custom-modal.gif and /dev/null differ diff --git a/wallet/assets/personal_sign.png b/wallet/assets/personal_sign.png deleted file mode 100644 index 38687051fa9..00000000000 Binary files a/wallet/assets/personal_sign.png and /dev/null differ diff --git a/wallet/assets/react-tutorial-01-final.png b/wallet/assets/react-tutorial-01-final.png deleted file mode 100644 index 75bb508fb93..00000000000 Binary files a/wallet/assets/react-tutorial-01-final.png and /dev/null differ diff --git a/wallet/assets/react-tutorial-01-start.png b/wallet/assets/react-tutorial-01-start.png deleted file mode 100644 index 875737acefc..00000000000 Binary files a/wallet/assets/react-tutorial-01-start.png and /dev/null differ diff --git a/wallet/assets/request-permissions-2.png b/wallet/assets/request-permissions-2.png deleted file mode 100644 index 38b5c918027..00000000000 Binary files a/wallet/assets/request-permissions-2.png and /dev/null differ diff --git a/wallet/assets/request-permissions.png b/wallet/assets/request-permissions.png deleted file mode 100644 index e8e43d6132c..00000000000 Binary files a/wallet/assets/request-permissions.png and /dev/null differ diff --git a/wallet/assets/sdk-android-architecture.png b/wallet/assets/sdk-android-architecture.png deleted file mode 100644 index ac3a0c86764..00000000000 Binary files a/wallet/assets/sdk-android-architecture.png and /dev/null differ diff --git a/wallet/assets/sdk-android-communication.png b/wallet/assets/sdk-android-communication.png deleted file mode 100644 index 4ee909859cb..00000000000 Binary files a/wallet/assets/sdk-android-communication.png and /dev/null differ diff --git a/wallet/assets/sdk-clear-connections.png b/wallet/assets/sdk-clear-connections.png deleted file mode 100644 index 4fb204117ea..00000000000 Binary files a/wallet/assets/sdk-clear-connections.png and /dev/null differ diff --git a/wallet/assets/signTypedData.png b/wallet/assets/signTypedData.png deleted file mode 100644 index 09cb166fda2..00000000000 Binary files a/wallet/assets/signTypedData.png and /dev/null differ diff --git a/wallet/assets/siwe-bad-domain-2.png b/wallet/assets/siwe-bad-domain-2.png deleted file mode 100644 index ef4a46e5e88..00000000000 Binary files a/wallet/assets/siwe-bad-domain-2.png and /dev/null differ diff --git a/wallet/assets/siwe-bad-domain.png b/wallet/assets/siwe-bad-domain.png deleted file mode 100644 index 445dd352611..00000000000 Binary files a/wallet/assets/siwe-bad-domain.png and /dev/null differ diff --git a/wallet/assets/siwe.png b/wallet/assets/siwe.png deleted file mode 100644 index 0113aaa5587..00000000000 Binary files a/wallet/assets/siwe.png and /dev/null differ diff --git a/wallet/assets/switch-network.png b/wallet/assets/switch-network.png deleted file mode 100644 index 6a6cd2bcbaa..00000000000 Binary files a/wallet/assets/switch-network.png and /dev/null differ diff --git a/wallet/assets/tutorials/beginner-tutorial/account.png b/wallet/assets/tutorials/beginner-tutorial/account.png deleted file mode 100644 index a6589971524..00000000000 Binary files a/wallet/assets/tutorials/beginner-tutorial/account.png and /dev/null differ diff --git a/wallet/assets/tutorials/beginner-tutorial/connect.png b/wallet/assets/tutorials/beginner-tutorial/connect.png deleted file mode 100644 index 7111896a909..00000000000 Binary files a/wallet/assets/tutorials/beginner-tutorial/connect.png and /dev/null differ diff --git a/wallet/assets/tutorials/beginner-tutorial/enable-button.png b/wallet/assets/tutorials/beginner-tutorial/enable-button.png deleted file mode 100644 index a48dc0d5a61..00000000000 Binary files a/wallet/assets/tutorials/beginner-tutorial/enable-button.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-01.png b/wallet/assets/tutorials/react-dapp/pt1-01.png deleted file mode 100644 index b669103db17..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-01.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-02.png b/wallet/assets/tutorials/react-dapp/pt1-02.png deleted file mode 100644 index 7b4352972ff..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-02.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-03.png b/wallet/assets/tutorials/react-dapp/pt1-03.png deleted file mode 100644 index c6a5dda6f41..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-03.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-04.png b/wallet/assets/tutorials/react-dapp/pt1-04.png deleted file mode 100644 index fa6f5f19e7e..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-04.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-05.png b/wallet/assets/tutorials/react-dapp/pt1-05.png deleted file mode 100644 index 2bb0644e42a..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-05.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-06.png b/wallet/assets/tutorials/react-dapp/pt1-06.png deleted file mode 100644 index e19fcc8f63f..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-06.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-07.png b/wallet/assets/tutorials/react-dapp/pt1-07.png deleted file mode 100644 index 2bc7f78e81b..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-07.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-08.png b/wallet/assets/tutorials/react-dapp/pt1-08.png deleted file mode 100644 index fde92ff5a47..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-08.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-09.png b/wallet/assets/tutorials/react-dapp/pt1-09.png deleted file mode 100644 index 44563214d49..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-09.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt1-10.png b/wallet/assets/tutorials/react-dapp/pt1-10.png deleted file mode 100644 index 2ba0fa979a2..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt1-10.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt2-01.png b/wallet/assets/tutorials/react-dapp/pt2-01.png deleted file mode 100644 index 7f03bfe49e2..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt2-01.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt2-02.png b/wallet/assets/tutorials/react-dapp/pt2-02.png deleted file mode 100644 index 2bbfcd49b81..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt2-02.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt2-03.png b/wallet/assets/tutorials/react-dapp/pt2-03.png deleted file mode 100644 index d475d4a263a..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt2-03.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt2-04.png b/wallet/assets/tutorials/react-dapp/pt2-04.png deleted file mode 100644 index 34b31327b7a..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt2-04.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/pt2-05.png b/wallet/assets/tutorials/react-dapp/pt2-05.png deleted file mode 100644 index e8551d0b2b1..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/pt2-05.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/react-tutorial-02-final-preview.png b/wallet/assets/tutorials/react-dapp/react-tutorial-02-final-preview.png deleted file mode 100644 index ed0f5c2c343..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/react-tutorial-02-final-preview.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/react-tutorial-02-selected-wallet.png b/wallet/assets/tutorials/react-dapp/react-tutorial-02-selected-wallet.png deleted file mode 100644 index c505559bb8b..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/react-tutorial-02-selected-wallet.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-error.png b/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-error.png deleted file mode 100644 index faef95049c4..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-error.png and /dev/null differ diff --git a/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-list.png b/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-list.png deleted file mode 100644 index f88e4b88bfa..00000000000 Binary files a/wallet/assets/tutorials/react-dapp/react-tutorial-02-wallet-list.png and /dev/null differ diff --git a/wallet/assets/unity-empty-template.png b/wallet/assets/unity-empty-template.png deleted file mode 100644 index 6ed04976126..00000000000 Binary files a/wallet/assets/unity-empty-template.png and /dev/null differ diff --git a/wallet/assets/unity-example-template.png b/wallet/assets/unity-example-template.png deleted file mode 100644 index ef3da48013a..00000000000 Binary files a/wallet/assets/unity-example-template.png and /dev/null differ diff --git a/wallet/assets/unity-infura.png b/wallet/assets/unity-infura.png deleted file mode 100644 index ead13eaca7a..00000000000 Binary files a/wallet/assets/unity-infura.png and /dev/null differ diff --git a/wallet/assets/wagmi-errors.png b/wallet/assets/wagmi-errors.png deleted file mode 100644 index 5a8ae372fc4..00000000000 Binary files a/wallet/assets/wagmi-errors.png and /dev/null differ diff --git a/wallet/concepts/android-sdk.md b/wallet/concepts/android-sdk.md deleted file mode 100644 index dfa007802a1..00000000000 --- a/wallet/concepts/android-sdk.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -sidebar_position: 4 -description: Learn about the Android SDK architecture. -tags: - - Android SDK ---- - -# Android SDK architecture - -The Android version of [MetaMask SDK](../connect/metamask-sdk/mobile/android.md) enables your users to easily connect with their -MetaMask Mobile wallet. -The [architecture](#architecture) and [connection flow](#connection-flow) of -the Android SDK differs from the other SDK platforms. - -:::tip Get started -- Get started by [setting up the SDK in your Android dapp](../connect/metamask-sdk/mobile/android.md). -- See the [example Android dapp](https://github.com/MetaMask/metamask-android-sdk/tree/main/app) in - the Android SDK GitHub repository for advanced use cases. -::: - -## Architecture - -The following diagram outlines the high-level architecture of the Android SDK: - -![Android SDK architecture diagram](../assets/sdk-android-architecture.png) - -The MetaMask Android SDK consists of two components: - -- **The client SDK**, imported in the dapp -- **The server SDK**, an Android Native Module embedded in the MetaMask React Native wallet - -The client SDK communicates with the server SDK using -[Interprocess communication (IPC)](https://developer.android.com/guide/components/processes-and-threads#IPC). -The JSON-RPC calls are implemented using the -[Android Interface Definition Language (AIDL)](https://developer.android.com/develop/background-work/services/aidl). -Communication over IPC is encrypted using elliptic curve integrated encryption scheme (ECIES). - -Within MetaMask, the wallet (written in React Native) communicates with the Native Module (written -in Kotlin) using different mechanisms depending on the direction of communication: - -- **Native Module → React Native** - The Native Module broadcasts messages as events that the wallet - listens to and handles upon receipt. -- **React Native → Native Module** - The wallet calls the Native Module using the `NativeModules` API, - which enables React Native code to call native Kotlin primitives. - -## Connection flow - -The following diagram outlines the communication flow between the Android client SDK and server SDK: - -![Android SDK communication diagram](../assets/sdk-android-communication.png) - -The flow is as follows: - -1. The dapp, with the SDK installed, initiates communication when a user connects to MetaMask. - The dapp deeplinks to MetaMask, and MetaMask sets up the Android Native Module to receive client requests. -2. The dapp generates an ECIES public/private key pair. - The dapp and MetaMask exchange public keys over IPC. -3. The dapp and MetaMask perform end-to-end encrypted JSON-RPC calls. diff --git a/wallet/concepts/architecture.md b/wallet/concepts/architecture.md deleted file mode 100644 index 779fc668e90..00000000000 --- a/wallet/concepts/architecture.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -sidebar_position: 1 -description: See the high-level web3 architecture. ---- - -# Architecture - -The following diagram outlines the high-level architecture of the MetaMask web3 stack. - -![Architecture diagram](../assets/web3-architecture.png) - -Using [MetaMask SDK](../connect//metamask-sdk/index.md), dapps built on multiple platforms can connect to their users' Ethereum -accounts through the MetaMask browser extension and MetaMask Mobile. -Dapps can send [Wallet API](wallet-api.md) requests to the users' MetaMask wallet clients. -MetaMask then responds to these requests directly or uses [Infura](https://www.infura.io/) (or -another user-configured node provider) when the call requires access to information on a blockchain network. diff --git a/wallet/concepts/convenience-libraries.md b/wallet/concepts/convenience-libraries.md deleted file mode 100644 index 2c61606db16..00000000000 --- a/wallet/concepts/convenience-libraries.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -description: Learn about convenience libraries. -sidebar_position: 5 ---- - -# Convenience libraries - -Various convenience libraries exist for dapp developers. -Some of them simplify the creation of specific user interface elements, some entirely manage the -user account onboarding, and others give you a variety of methods for interacting with smart -contracts, for a variety of API preferences (for example, promises, callbacks, and strong types). - -The [MetaMask Ethereum provider API](wallet-api.md#ethereum-provider-api) is very simple, and wraps -[Ethereum JSON-RPC](wallet-api.md#json-rpc-api) formatted messages, which is why -some developers use a convenience library for interacting with the provider, such as -[Ethers](https://www.npmjs.com/package/ethers) or [web3.js](https://www.npmjs.com/package/web3). -You can refer to those tools' documentation to use them. - -You can [use MetaMask SDK](../connect/metamask-sdk/index.md), which provides a reliable, secure, and -seamless connection from your dapp to MetaMask. -It onboards users smoothly from multiple dapp platforms using the MetaMask browser extension or -MetaMask Mobile, and your dapp can call any [Wallet API](wallet-api.md) methods with the SDK installed. - -You can also [use Web3-Onboard with MetaMask SDK](../connect/3rd-party-libraries/web3-onboard.md) -in your JavaScript dapp. diff --git a/wallet/concepts/sdk-connections.md b/wallet/concepts/sdk-connections.md deleted file mode 100644 index afa339b16e2..00000000000 --- a/wallet/concepts/sdk-connections.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: SDK connections -description: Learn about how a dapp with the SDK installed connects to MetaMask. -tags: - - JavaScript SDK - - iOS SDK - - Android SDK - - Unity SDK ---- - -# MetaMask SDK connections - -This page provides details on how a dapp with [MetaMask SDK](../connect/metamask-sdk/index.md) installed connects to a -user's MetaMask wallet. - -## Initial connection flow - -The following flowchart outlines the initial connection flow between a dapp and MetaMask: - -

    - -```mermaid -flowchart TD - A{{Dapp platform?}} - A -->|Desktop| C(Show modal) --> D{{Connect via?}} - D -->|Extension| E{{Extension installed?}} - E -->|No| F(Chrome store) --> G(Connect via extension) - E -->|Yes| G - D -->|MM Mobile| H{{MM Mobile installed?}} - H -->|Yes| J - H -->|No| I(App store) --> J(Connect via MM Mobile) - A -->|Mobile| K(Deeplink to MM Mobile) --> H -``` - -

    - -The path first depends on whether the dapp is on a desktop or mobile platform: - -- If the dapp is on a desktop platform (for example, a desktop web dapp), the dapp shows a modal - asking the user to select if they want to connect to MetaMask using the browser extension or - MetaMask Mobile. - - - If the user selects extension: - - If the extension is not installed, the user is taken to the Chrome extension store to - install it. - - If the extension is installed, the user connects to their MetaMask extension. - - If the user selects MetaMask Mobile: - - If MetaMask Mobile is not installed, the user is taken to the app store to install it. - - If MetaMask Mobile is installed, [an encrypted connection from the dapp to MetaMask - Mobile](#metamask-mobile-connection) is established. - - :::note - The choice between the extension and MetaMask Mobile persists until the user or dapp disconnects. - At that point, the dapp displays the modal again. - ::: - -- If the dapp is on a mobile platform (for example, a mobile web dapp or mobile dapp), the dapp - deeplinks to MetaMask Mobile. - - - If MetaMask Mobile is not installed, the user is taken to the app store to install it. - - If MetaMask Mobile is installed, [an encrypted connection from the dapp to MetaMask - Mobile](#metamask-mobile-connection) is established. - -## MetaMask Mobile connection - -The SDK uses elliptic curve integrated encryption scheme (ECIES) to communicate with MetaMask Mobile. -The following sequence diagram outlines how a dapp establishes an encrypted connection with MetaMask Mobile: - -```mermaid -%%{ - init: { - 'sequence': { - 'actorMargin': 100, - 'width': 250, - 'noteMargin': 15 - } - } -}%% - -sequenceDiagram - autonumber - participant Dapp as Dapp (MetaMask SDK) - participant Socket as Socket.io server - participant MMM as MetaMask Mobile - - Dapp->>Dapp: Generate a Socket.io room ID and ECIES key pair - Dapp->>Socket: Connect using Socket.io room ID - Dapp->>MMM: Send deeplink containing Socket.io room ID and ECIES public key - MMM->>Socket: Connect using Socket.io room ID - MMM->>MMM: Generate an ECIES key pair - MMM->>Dapp: Send ECIES public key using the Socket.io channel - - note over Dapp, MMM: The dapp and MetaMask Mobile generate a shared secret using their own private key and the other party's public key. All further communication is encrypted and decrypted using the shared secret. - loop - Dapp->>MMM: Send encrypted message - MMM->>Dapp: Send encrypted message - end -``` - -The flow is as follows: - -1. The dapp generates a UUID v4 ([Socket.io](https://socket.io/) room ID) and ECIES key pair. -2. The dapp connects to the Socket.io server using the room ID. -3. The dapp sends a deeplink to MetaMask Mobile (either directly, if on mobile, or through a QR - code, if on desktop) containing its ECIES public key and the Socket.io room ID. -4. MetaMask Mobile opens the QR code or deeplink and connects to the Socket.io server using the room ID. -5. MetaMask Mobile generates an ECIES key pair. -6. MetaMask Mobile sends its ECIES public key to the dapp using the Socket.io channel, and the two - parties generate a shared secret. -7. The dapp and MetaMask Mobile establish an encrypted connection to send JSON-RPC API methods. - -:::note -For all platforms except Android, the SDK uses a Socket.io server to help establish the encrypted connection. -The [Android SDK](android.md) uses direct local communication. -::: - -## Connection status - -The connection between the SDK and MetaMask Mobile can [pause](#paused-connections) and -[clear](#cleared-connections). -You can also [close connections manually](#close-connections-manually). - -### Paused connections - -Connections pause after MetaMask Mobile is in background (minimized) for 20 seconds. -This is to accommodate OS restrictions. - -When a connection pauses, all traffic to MetaMask Mobile pauses, and the SDK doesn't produce any -response until the user opens MetaMask Mobile again. -The SDK automatically deeplinks to MetaMask Mobile, so connections resume automatically. -If MetaMask Mobile is paused and the user completely closes MetaMask Mobile, the connection remains -paused and resumes when the user opens it again. - -Because of this, polling data from MetaMask Mobile may not work for long periods of time. - -:::info known issue -When MetaMask Mobile is running in the background, the connection may pause and fail to resume properly when the user reopens MetaMask. -The user must return to your dapp so the request is re-sent. -The SDK team is working on this issue, and is researching decentralized communication solutions that -hold state such as [Waku](https://waku.org/). -::: - -### Cleared connections - -Connections clear if the user closes or refreshes your dapp, since MetaMask doesn't persist -connections on the dapp side. -This is for simplicity and security purposes. - -If the user completely closes MetaMask Mobile without [pausing the connection](#paused-connections) -first, MetaMask infers that the user isn't using the wallet and closes the connection. - -### Close connections manually - -To close connections manually from MetaMask Mobile, go to **Settings > Experimental**, and select -**Clear MetaMask SDK connections**. diff --git a/wallet/concepts/signing-methods.md b/wallet/concepts/signing-methods.md deleted file mode 100644 index 9a8820aafdc..00000000000 --- a/wallet/concepts/signing-methods.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: Learn about the RPC methods for signing transactions in MetaMask. -sidebar_position: 6 ---- - -# Signing methods - -This page describes the signing RPC methods in MetaMask. -Learn how to [use the recommended signing methods](../how-to/sign-data/index.md). - -### `eth_signTypedData_v4` - -[`eth_signTypedData_v4`](/wallet/reference/eth_signtypeddata_v4) -is: - -- Cheap to verify on chain. -- Human-readable. -- Protected against phishing signatures. - -If onchain verifiability cost is a high priority, -[use `eth_signTypedData_v4`](../how-to/sign-data/index.md#use-eth_signtypeddata_v4). - -### `personal_sign` - -[`personal_sign`](/wallet/reference/personal_sign): - -- Displays human-readable text when UTF-8 encoded, making it a popular choice for site logins - (for example, [Sign-In with Ethereum](../how-to/sign-data/siwe.md)). -- Is protected against phishing signatures. - -The text prefix of `personal_sign` makes signatures expensive to verify on-chain. -If onchain verifiability cost is not a priority, you can -[use `personal_sign`](../how-to/sign-data/index.md#use-personal_sign). - -## Deprecated signing methods - -:::caution important -`eth_sign`, `eth_signTypedData_v1`, and `eth_signTypedData_v3` are deprecated. -Use `eth_signTypedData_v4` or `personal_sign`. -::: - -### `eth_sign` - -`eth_sign` allows signing an arbitrary hash, which means an attacker can use it to request users to -sign transactions or any other data. -Using `eth_sign` is a dangerous phishing risk. - -To enhance user security, MetaMask no longer supports using `eth_sign`. -Use [`eth_signTypedData_v4`](#eth_signtypeddata_v4) or [`personal_sign`](#personal_sign) instead. - -:::note -See [MIP-3](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-3.md) for -more information about the discontinuation of `eth_sign`. -::: - -### `eth_signTypedData_v1` and `eth_signTypedData_v3` - -`eth_signTypedData` was introduced by [EIP-712](https://eips.ethereum.org/EIPS/eip-712). -The EIP-712 specification changed several times resulting in multiple versions -of `eth_signTypedData`. - -The earlier versions are: - -- `eth_signTypedData_v1` – The same as `eth_signTypedData`. - Read the - [introductory blog post to this method](https://medium.com/metamask/scaling-web3-with-signtypeddata-91d6efc8b290). -- `eth_signTypedData_v3` – A highly used version of the EIP-712 specification. - Read the - [introductory blog post to this method](https://medium.com/metamask/eip712-is-coming-what-to-expect-and-how-to-use-it-bb92fd1a7a26). - -The missing `v2` represents an intermediary design that the Cipher browser implemented. - -All early versions of this method lack later security improvements. -Use the latest version, [`eth_signTypedData_v4`](#eth_signtypeddata_v4). diff --git a/wallet/concepts/smart-contracts.md b/wallet/concepts/smart-contracts.md deleted file mode 100644 index 5b891787f9e..00000000000 --- a/wallet/concepts/smart-contracts.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -description: Learn about interacting with smart contracts. -sidebar_position: 8 ---- - -# Smart contracts - -This is a high-level overview of interacting with smart contracts. -You can also see how to -[interact with smart contracts from your Unity game](../how-to/use-unity-sdk/smart-contracts/index.md). - -To interact with a smart contract, your dapp needs the following information: - -- [Contract network](#contract-network) -- [Contract address](#contract-address) -- [Contract ABI](#contract-abi) -- [Contract bytecode](#contract-bytecode) -- [Contract source code](#contract-source-code) - -## Contract network - -If you're not connected to the right network, you can't send transactions to your contract. -Many dapp developers deploy their contract to a testnet first, in order to avoid potentially -disastrous fees if something goes wrong during development and testing on Mainnet. - -Regardless of which network you deploy your final dapp on, your users must be able to access it. -Use the [`wallet_switchEthereumChain`](/wallet/reference/wallet_switchethereumchain) and -[`wallet_addEthereumChain`](/wallet/reference/wallet_addethereumchain) RPC methods to prompt -the user to add a chain that you suggest, and switch to it using a confirmation dialogue. - -## Contract address - -Every account in Ethereum has an address, whether it's an external key-pair account or a smart contract. -For any smart contract library to communicate with your contracts, a smart contract must know the exact address. - -Read about -[how to find a token contact address](https://metamask.zendesk.com/hc/en-us/articles/360059683451-How-to-view-or-add-custom-token-contract-address). - -## Contract ABI - -In Ethereum, the [ABI specification](https://solidity.readthedocs.io/en/develop/abi-spec.html) is a -way to encode the interface of a smart contract that's comprehensible to your user interface. -The ABI is an array of method-describing objects, and when you feed this and the address into a -contract-abstraction library, the ABI tells those libraries about what methods to provide, and -how to compose transactions to call those methods. - -Example libraries include the following: - -- [Ethers](https://www.npmjs.com/package/ethers) -- [web3.js](https://www.npmjs.com/package/web3) -- [ethjs](https://www.npmjs.com/package/ethjs) -- [Hardhat](https://hardhat.org/) - -## Contract bytecode - -If your dapp publishes a new pre-compiled smart contract, it might need to include some bytecode. -You don't know the contract address in advance; you must publish the contract, watch for the -transaction to be processed, and then extract the final contract's address from the completed transaction. - -If you publish a contract from bytecode, you still need an [ABI](#contract-abi) to interact with it. -The bytecode doesn't describe how to interact with the final contract. - -## Contract source code - -If your dapp allows users to edit smart contract source code and compile it, similar to -[Remix](https://remix.ethereum.org/), you can import a whole compiler. -You derive your bytecode and ABI from that source code, and eventually derive the contract's address -from the completed transaction, where that bytecode is published. diff --git a/wallet/concepts/wallet-api.md b/wallet/concepts/wallet-api.md deleted file mode 100644 index 0ee0f0a7d6b..00000000000 --- a/wallet/concepts/wallet-api.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -sidebar_position: 2 -description: Learn about the MetaMask Ethereum provider API. ---- - -# About the Wallet API - -MetaMask's Wallet API consists of an [Ethereum provider API](#ethereum-provider-api), which wraps -a [JSON-RPC API](#json-rpc-api). - -:::tip API documentation -The API methods are documented in the following references: - -- [Ethereum provider API reference](../reference/provider-api.md) -- [JSON-RPC API reference](/wallet/reference/json-rpc-api) - ::: - -## Ethereum provider API - -MetaMask injects a global JavaScript API into websites visited by its users using the -`window.ethereum` provider object. -This API is specified by [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193), and it allows dapps to -request users' EVM accounts, read data from blockchains the user is connected to, suggest -that the user sign messages and transactions, and more. - -:::info Note -MetaMask supports [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963), which introduces an -alternative wallet detection mechanism to the `window.ethereum` injected provider. -This alternative mechanism enables dapps to support [wallet interoperability](wallet-interoperability.md) -by discovering multiple injected wallet providers in a user's browser. -We recommend [using this mechanism to connect to MetaMask](../connect/index.md). - -You can access the provider API using the selected EIP-6963 provider object. -Throughout this documentation, we refer to the selected provider using `provider`. -::: - -The MetaMask Ethereum provider API contains the following: - -- [Properties](../reference/provider-api.md#properties) - The provider contains a property that - detects if a user has MetaMask installed. -- [Methods](../reference/provider-api.md#methods) - The provider contains methods that dapps can call. - The [`request()`](../reference/provider-api.md#request) - provider method wraps the [JSON-RPC API](#json-rpc-api); dapps can use this - provider method to call any RPC method. -- [Events](../reference/provider-api.md#events) - The provider emits events that dapps can listen to. - -View the [provider API reference](../reference/provider-api.md) for all the provider properties, -methods, and events. - -## JSON-RPC API - -MetaMask uses the [`request()`](../reference/provider-api.md#request) -method of the [provider API](#ethereum-provider-api) to wrap a JSON-RPC API. -The JSON-RPC API contains standard Ethereum JSON-RPC API methods and MetaMask-specific methods. - -The RPC methods are documented in the interactive [JSON-RPC API reference](/wallet/reference/json-rpc-api). - -:::note -All RPC method requests can return errors. -Make sure to handle errors for every call to -[`request()`](../reference/provider-api.md#request). -::: - -The RPC methods are divided into the following: - -- [Restricted methods](#restricted-methods) - Require user consent for actions that impact assets or data (for example, initiating a transaction). -- [Unrestricted methods](#unrestricted-methods) - Allow dapps to perform basic actions without permission (for example, retrieving a public address). - -### Restricted methods - -MetaMask implements permissions based on [EIP-2255](https://eips.ethereum.org/EIPS/eip-2255) to enhance security for when users interact with dapps. -This requires that dapps obtain user consent before accessing certain features. -Under the hood, permissions are plain, JSON-compatible objects, with fields that are mostly used -internally by MetaMask. - -Restricted methods are methods that cannot be called unless you have permission to do so using -[`wallet_requestPermissions`](/wallet/reference/wallet_requestpermissions) or -[`wallet_requestSnaps`](/snaps/reference/wallet-api-for-snaps/#wallet_requestsnaps). - -The following methods are restricted: - -- [`eth_accounts`](/wallet/reference/eth_accounts) - Gaining permission requires calling `wallet_requestPermissions`. - Granting permission for `eth_accounts` also grants permissions for the following methods: - - - [`eth_sendTransaction`](/wallet/reference/eth_sendTransaction) - - [`personal_sign`](/wallet/reference/personal_sign) - - [`eth_signTypedData_v4`](/wallet/reference/eth_signTypedData_v4) - :::caution important - To access accounts, we recommend using [`eth_requestAccounts`](/wallet/reference/eth_requestAccounts), - which automatically asks for permission to use `eth_accounts` by calling `wallet_requestPermissions` internally. - See [how to access a user's accounts](../how-to/access-accounts.md) for more information. - ::: - -- [`wallet_snap`](/snaps/reference/wallet-api-for-snaps/#wallet_snap) - Gaining permission requires - calling `wallet_requestSnap`. - -- [`wallet_invokeSnap`](/snaps/reference/wallet-api-for-snaps/#wallet_invokesnap) - Gaining - permission requires calling `wallet_requestSnap`. - -### Unrestricted methods - -Unrestricted methods do not require requesting permission to call them, but they might require confirmation by the -user (for example, [`wallet_addEthereumChain`](/wallet/reference/wallet_addethereumchain)). diff --git a/wallet/concepts/wallet-interoperability.md b/wallet/concepts/wallet-interoperability.md deleted file mode 100644 index 66acb0adb01..00000000000 --- a/wallet/concepts/wallet-interoperability.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -description: Learn about wallet interoperability. -sidebar_position: 7 ---- - -# Wallet interoperability - -A web dapp can integrate with multiple installed browser wallets simultaneously by adding support for -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963), which introduces an alternative wallet detection -mechanism to the [`window.ethereum`](wallet-api.md#ethereum-provider-api) injected provider. -This mechanism is enabled by using the standardized interfaces defined by EIP-6963. - -:::info Why EIP-6963? -[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) standardizes the interface for wallet providers, -but it results in conflicts when users have multiple wallets installed, due to how the provider -object is injected. -This can cause issues with wallet discovery, user onboarding, and connecting. -The wallet discovery mechanism introduced by EIP-6963 solves these issues. -::: - -The following is a demo of the user experience of detecting multiple wallets, showing the data -provided from each installed wallet: - -

    - -

    - -You can [connect to MetaMask using EIP-6963](../connect/wallet-api.md) and see the -[EIP-6963 Vite React + TypeScript demo](https://github.com/MetaMask/vite-react-ts-eip-6963/tree/main) -for more information. - -## EIP-6963 interfaces - -Wallets that support EIP-6963 implement and expose the following standardized interfaces. -When [connecting to MetaMask using EIP-6963](../connect/wallet-api.md), it's important to review -and understand these interfaces. - -### Provider info - -The [`EIP6963ProviderInfo`](https://eips.ethereum.org/EIPS/eip-6963#provider-info) interface -represents the assets needed to display a wallet: - -- `uuid` - The wallet ID ([UUIDv4](https://www.rfc-editor.org/rfc/rfc4122)). -- `name` - A human-readable name of the wallet. -- `icon` - A [URI](https://www.rfc-editor.org/rfc/rfc3986) pointing to an icon of the wallet. -- `rdns` - The wallet's domain name. - -### Provider detail - -The [`EIP6963ProviderDetail`](https://eips.ethereum.org/EIPS/eip-6963#provider-detail) interface -represents additional metadata about the wallet: - -- `info` - The [`EIP6963ProviderInfo`](#provider-info). -- `provider` - The `EIP1193Provider` defined by [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193). - -### Announce and request events - -The [`EIP6963AnnounceProviderEvent`](https://eips.ethereum.org/EIPS/eip-6963#announce-and-request-events) -interface announces an event dispatched by the wallet: - -```typescript -interface EIP6963AnnounceProviderEvent extends CustomEvent { - type: "eip6963:announceProvider" - detail: EIP6963ProviderDetail -} -``` - -The [`EIP6963RequestProviderEvent`](https://eips.ethereum.org/EIPS/eip-6963#announce-and-request-events) -interface requests an event dispatched by a dapp: - -```typescript -interface EIP6963RequestProviderEvent extends Event { - type: "eip6963:requestProvider" -} -``` - -## Third-party library support - -The following third-party libraries support EIP-6963: - -- [Wagmi 2+](https://wagmi.sh) -- [Web3Modal 3+](https://docs.walletconnect.com/web3modal/about) -- [MIPD Store](https://github.com/wevm/mipd) -- [RainbowKit](https://www.rainbowkit.com/) - -### MIPD Store - -The [MIPD Store](https://github.com/wevm/mipd) stores the wallet providers and enables you to -subscribe to the store and retrieve the providers. -Unlike [Wagmi](https://wagmi.sh) and [Web3-Onboard](https://onboard.blocknative.com/), which are -libraries that provide components and connectors for multiple wallets and depend on MetaMask SDK for -integration, the MIPD Store is a utility library that makes it easier to work with EIP-6963 and -supports TypeScript types. - -## MetaMask SDK support - -:::note -MetaMask SDK does not support connecting to non-MetaMask wallets via EIP-6963. -If you intend to support discovery of other wallets, we recommend using other methods of adding -EIP-6963 support such as [Wagmi 2+](https://wagmi.sh). -::: - -The [MetaMask JavaScript SDK](../connect/metamask-sdk/javascript/index.md) automatically checks -for the presence of the MetaMask extension via EIP-6963. -This eliminates the need for manual configuration or detection methods, simplifying the initial -setup process for both developers and users. - -By adhering to the standards set by EIP-6963, the SDK unambiguously identifies and connects to -MetaMask, resolving potential conflicts that might arise with other wallet extensions, ensuring a -more stable and reliable interaction for users. - -The SDK is also being integrated into [Wagmi 2+](https://wagmi.sh/), which supports EIP-6963. -The SDK on its own supports connecting _only_ to MetaMask via EIP-6963, so if you intend to support -discovery of other wallets, we recommend using other methods of adding EIP-6963 support, such as -Wagmi 2+. - -## Wallet support - -The EIP-6963 alternative discovery mechanism works for wallets that have implemented support for EIP-6963. -This includes MetaMask, Coinbase, Trust Wallet, OKX, and other major wallets. -See the [list of wallets that support EIP-6963](https://github.com/WalletConnect/EIP6963/blob/master/src/utils/constants.ts). - -## Backwards compatibility - -Dapps that do not support EIP-6963 can still -[detect MetaMask using the `window.ethereum` provider](../tutorials/javascript-dapp-simple.md). -However, we recommend adding support to improve the user experience for multiple installed wallets. -Read more about [EIP-6963 backwards compatibility](https://eips.ethereum.org/EIPS/eip-6963#backwards-compatibility). diff --git a/wallet/connect/3rd-party-libraries/wagmi.md b/wallet/connect/3rd-party-libraries/wagmi.md deleted file mode 100644 index e72c38b9da1..00000000000 --- a/wallet/connect/3rd-party-libraries/wagmi.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -description: Integrate MetaMask SDK with Wagmi in your JavaScript dapp. -sidebar_position: 1 -sidebar_label: Wagmi -tags: - - JavaScript SDK ---- - -# Connect to MetaMask using Wagmi - -[Wagmi](https://wagmi.sh/) is a powerful and efficient React Hooks library designed to streamline -dapp development by simplifying Ethereum interactions. - -You can integrate MetaMask SDK into your dapp alongside Wagmi, -using the MetaMask connector with Wagmi, to enable your users to seamlessly and securely connect to -the MetaMask browser extension and MetaMask Mobile. - -## Prerequisites - -- Ensure you have a basic understanding of Ethereum smart contracts and React Hooks. -- Set up a project with [Wagmi](https://wagmi.sh/react/getting-started). -- Create an Infura API key and allowlist to [make read-only requests](../../how-to/make-read-only-requests.md). - -## Steps - -### 1. Configure MetaMask SDK - -In your Wagmi project, configure MetaMask SDK with the proper [SDK options](../../reference/sdk-js-options.md). - -```javascript -const MetaMaskOptions = { - dappMetadata: { - name: "Example Wagmi dapp", - }, - infuraAPIKey: "YOUR-API-KEY", - // Other options. -} -``` - -#### Dapp metadata - -Specify the [`dappMetadata`](../../reference/sdk-js-options.md#dappmetadata) option to help -identify your dapp within the MetaMask ecosystem. -This option is required when configuring the MetaMask connector with Wagmi. - -#### Infura API key - -We recommend specifying the [`infuraAPIKey`](../../reference/sdk-js-options.md#infuraapikey) -option to [make read-only requests](../../how-to/make-read-only-requests.md) using the Infura API. -Read more about the [benefits of using the Infura API with Wagmi](#benefits-of-using-the-infura-api-with-wagmi). - -#### Universal links - -We recommend using universal links instead of deeplinks to avoid issues on iOS. -Thus, do not enable the [`useDeeplink`](../../reference/sdk-js-options.md#usedeeplink) option. -Using universal links ensures a smoother transition for users accessing your dapp from mobile -devices, providing a better user experience compared to traditional deeplinking methods. - -### 2. Configure Wagmi with the MetaMask connector - -Configure Wagmi to include MetaMask as a connector and specify the Ethereum chains your dapp will support. -Use the `MetaMaskOptions` you created in the previous step when adding the `metaMask` connector. -For example: - -```javascript -import { createConfig, http } from "wagmi" -import { mainnet, sepolia } from "wagmi/chains" -import { metaMask } from "wagmi/connectors" - -const MetaMaskOptions = { - dappMetadata: { - name: "Example Wagmi dapp", - }, - infuraAPIKey: "YOUR-API-KEY", - // Other options. -} - -export const config = createConfig({ - chains: [mainnet, sepolia], - connectors: [ - metaMask(MetaMaskOptions), - // Other connectors - ], - transports: { - [mainnet.id]: http(), - [sepolia.id]: http(), - }, -}) -``` - -### 3. Implement contract interaction using `usePrepareContractWrite` - -Due to a known issue in Safari where a 500ms timeout can interrupt smart contract interactions, we -recommend using the [`usePrepareContractWrite`](https://1.x.wagmi.sh/react/prepare-hooks/usePrepareContractWrite) -hook from Wagmi. -This approach ensures smooth transactions by preparing the contract write operation ahead of the -actual execution. - -```javascript -import { usePrepareContractWrite, useContractWrite } from "wagmi" - -const { config } = usePrepareContractWrite({ - address: "0xContractAddress", - abi: contractABI, - functionName: "functionToCall", - args: [arg1, arg2], -}) - -const { write } = useContractWrite(config) - -write() -``` - -## Benefits of using the Infura API with Wagmi - -Read-only requests are blockchain requests that do not require user wallet interaction. -Mobile dapps can lose their continuous connection with MetaMask, causing read-only requests to fail. - -These are some errors that might occur in mobile environments: - -![Wagmi errors](../../assets/wagmi-errors.png) - -To overcome this limitation in mobile dapps that rely on a continuous connection with MetaMask, -use the Infura API to make read-only requests. -You can do this by [configuring the SDK with an Infura API key](#2-configure-wagmi-with-the-metamask-connector). -This approach offloads the read operations to Infura's nodes, reducing the load on your own -infrastructure and ensuring high availability and reliability, independent of the user's wallet connection. - -By using the Infura API, you can ensure: - -- **Uninterrupted access:** Continuous network access for read-only requests, regardless of MetaMask's state. - -- **Enhanced stability:** Stabilized dapp functionality by relying on Infura's robust infrastructure - rather than the mobile environment's variable connectivity and background processing constraints. - -In summary, using the Infura API compensates for Wagmi's lack of mobile optimization by providing a -stable network backend for read-only operations. diff --git a/wallet/connect/3rd-party-libraries/web3-onboard.md b/wallet/connect/3rd-party-libraries/web3-onboard.md deleted file mode 100644 index 0025f4ab449..00000000000 --- a/wallet/connect/3rd-party-libraries/web3-onboard.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -description: Integrate MetaMask SDK with Web3-Onboard in your JavaScript dapp. -sidebar_position: 2 -sidebar_label: Web3-Onboard -tags: - - JavaScript SDK ---- - -# Connect to MetaMask using Web3-Onboard - -[Web3-Onboard](https://onboard.blocknative.com/) is a JavaScript library that simplifies the process -of onboarding users into dapps. -It provides a smooth user interface, a variety of wallet integrations, and is highly customizable to -meet the needs of your dapp. - -You can integrate MetaMask SDK into your dapp alongside Web3-Onboard, -using the Web3-Onboard MetaMask module, to enable your users to seamlessly and securely connect to -the MetaMask browser extension and MetaMask Mobile. - -## Prerequisites - -Set up a project with [Web3-Onboard](https://onboard.blocknative.com/docs/getting-started/installation). - -## Steps - -### 1. Install the module - -Install the Web3-Onboard MetaMask module into your dapp: - -```bash -npm i @web3-onboard/metamask -``` - -### 2. Import the module - -In your project script, add the following to import the module: - -```javascript -import metamaskSDK from "@web3-onboard/metamask" -``` - -### 3. Instantiate the module - -Instantiate the module using any [JavaScript SDK options](../../reference/sdk-js-options.md), for -example, [`dappMetadata`](../../reference/sdk-js-options.md#dappmetadata): - -```javascript -const metamaskSDKWallet = metamaskSDK({ - options: { - extensionOnly: false, - dappMetadata: { - name: "Example Web3-Onboard Dapp", - }, - }, -}) -``` - -### 4. Use the module - -Use the module as follows: - -```javascript -const onboard = Onboard({ - // Other Onboard options. - wallets: [ - metamaskSDKWallet, - // Other wallets. - ], -}) - -const connectedWallets = await onboard.connectWallet() -console.log(connectedWallets) -``` - -## Example - -For an example of using Web3-Onboard with MetaMask SDK, see the -[example dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/with-web3onboard) -in the JavaScript SDK GitHub repository. -See the [`App.tsx`](https://github.com/MetaMask/metamask-sdk/blob/main/packages/examples/with-web3onboard/src/App.tsx) -file for more details on implementing the integration in a React dapp. diff --git a/wallet/connect/index.md b/wallet/connect/index.md deleted file mode 100644 index 2ac814bad76..00000000000 --- a/wallet/connect/index.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -description: Connect to MetaMask using various options. ---- - -# Connect to MetaMask - -You can connect your dapp to MetaMask using one of the following methods: - -- [MetaMask SDK](metamask-sdk/index.md) -- Third-party libraries with SDK support, such as [Wagmi](3rd-party-libraries/wagmi.md) or - [Web3-Onboard](3rd-party-libraries/web3-onboard.md) -- The [Wallet API](wallet-api.md) directly - -The following table compares the supported features of each connection option: - -| Feature | MetaMask SDK | Third-party libraries with SDK | Wallet API only | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------:|:------------------------------:|:---------------:| -| Connect from a web dapp to the MetaMask extension | ✓ | ✓ | ✓ | -| Connect from a web dapp, desktop, mobile, and gaming dapps to MetaMask Mobile | ✓ | ✓ | | -| Use [EIP-6963](../concepts/wallet-interoperability.md) to connect to MetaMask without conflict | ✓ | ✓ | ✓ | -| Compatible with other [EIP-6963](../concepts/wallet-interoperability.md) wallets | | ✓ | ✓ | -| Custom RPC methods such as [`connectAndSign`](../how-to/sign-data/connect-and-sign.md), [custom modals](../how-to/display/custom-modals.md), [read-only requests](../how-to/make-read-only-requests.md) using Infura API, and [RPC request batching](../how-to/batch-json-rpc-requests.md) | ✓ | ✓ | | - -## MetaMask SDK - -MetaMask SDK enables a reliable, secure, and seamless connection between your dapp and the MetaMask -browser extension or MetaMask Mobile. -You can call any Wallet API method from a dapp with the SDK installed, and you can integrate the SDK -into existing projects without modifying existing Wallet API calls. - -Key features include: - -- **Multi-platform support** – Connect from web, desktop, mobile, and gaming platforms. -- **Seamless mobile integration** – Use QR codes or deeplinks to establish persistent connections - with MetaMask Mobile. -- **EIP-6963 detection** – Automatically detect MetaMask without conflicting with other installed wallets. -- **RPC request batching** – Improve efficiency by batching multiple requests into a single call. - -Get started using [MetaMask SDK](metamask-sdk/index.md). - -## Third-party libraries - -MetaMask SDK integrates seamlessly with libraries like Wagmi and Web3-Onboard, simplifying wallet -connections and supporting multiple wallets. -These libraries streamline connection logic and offer additional features for managing wallets. - -:::note Trade-offs when using third-party libraries: -- Reduced control over specific MetaMask features. -- Potential inconsistencies across different wallets due to multi-wallet support. -::: - -Get started with [Wagmi](3rd-party-libraries/wagmi.md) or -[Web3-Onboard](3rd-party-libraries/web3-onboard.md). - -## Wallet API - -The Wallet API consists of an [Ethereum Provider API](../reference/provider-api.md) and a -[JSON-RPC API](/wallet/reference/json-rpc-api), which allow you to interact with users' EVM accounts -in MetaMask. -For most dapps, we recommend integrating with MetaMask using the SDK or third-party libraries in -conjunction with the Wallet API, to take advantage of the SDK's benefits. -However, you can also connect to the MetaMask extension directly using the Wallet API. - -Get started with the [Wallet API](wallet-api.md). diff --git a/wallet/connect/metamask-sdk/gaming/index.md b/wallet/connect/metamask-sdk/gaming/index.md deleted file mode 100644 index e05f192972f..00000000000 --- a/wallet/connect/metamask-sdk/gaming/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -sidebar_label: Gaming -sidebar_position: 3 -description: Set up the SDK in your gaming dapp. -tags: - - Unity SDK ---- - -# Use MetaMask SDK with gaming dapps - -Import MetaMask SDK into your gaming dapp to enable your users -to easily connect with their MetaMask Mobile wallet. -See the instructions for the following gaming platforms: - -- [Unity](unity.md) diff --git a/wallet/connect/metamask-sdk/gaming/unity.md b/wallet/connect/metamask-sdk/gaming/unity.md deleted file mode 100644 index 5dcda1b3550..00000000000 --- a/wallet/connect/metamask-sdk/gaming/unity.md +++ /dev/null @@ -1,269 +0,0 @@ ---- -sidebar_label: Unity -sidebar_position: 1 -description: Set up the SDK in your Unity game. -tags: - - Unity SDK ---- - -import YoutubeEmbed from "@site/src/components/YoutubeEmbed"; - -# Use MetaMask SDK with Unity - -Import MetaMask SDK into your -[Unity](https://assetstore.unity.com/packages/decentralization/infrastructure/metamask-246786) game -to enable users to easily connect to their MetaMask Mobile wallet. -The MetaMask Unity SDK supports macOS, Windows, Linux, iOS, Android, and WebGL. - -## Video demo - -The following video demonstrates how to install and use the MetaMask Unity SDK. - - - -## Steps - -### 1. Configure build settings - -To build the SDK, configure the following settings in your Unity editor according to your -development platform: - -- iOS: - - Go to **Build Settings > Build Options** and set **Enable Bitcode** to **NO**. -- Android: - - Go to the **Assets** dropdown menu and select **External Dependency Manager > Android - Resolver > Resolve**. - - Go to **Build Settings > Player Settings** and set **Minimum API level** to **Android 7.0 - 'Nougat'** (API level 24). -- WebGL: - - Go to **Build Settings > Player Settings**, switch to the **Resolution & Presentation Tab**, and - select **MetaMask**. - -For all platforms, also set the **Scripting Backend** in **Player Settings** to **IL2CPP**, and set -**IL2CPP Code Generation** in **Build Settings** to **Faster (smaller) builds**. - -### 2. Install the Unity SDK - -Download the -[MetaMask SDK for Unity](https://assetstore.unity.com/packages/decentralization/infrastructure/metamask-246786) -from the Unity Asset Store. - -In your Unity editor, go to the menu > **Package Manager**. -Select **My Assets**, **MetaMask Unity SDK**, and **Install**. -You should see the MetaMask SDK package listed in the project packages and be able to interface -with it and its examples in the scene. - -You also need to install [TextMeshPro](https://docs.unity3d.com/Manual/com.unity.textmeshpro.html). -If you don't have TextMeshPro installed, the Unity editor automatically prompts you to install it. - -
    - -Unity SDK package structure -

    - -| File or directory | Contents | -| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | -| `Documentation` | Documentation and link to online documentation | -| `Editor` | Editor-only code such as Setup GUI windows, data persistence for SDK settings | -| `Plugins` | Plugins needed by the package (the ECIES Platform runtime libraries and core SDK Codebase) | -| `Runtime` | Main scripts for the SDK that are environment-agnostic, including the C# scripts that provide the base implementation of the SDK | -| `Samples` | Test application scene that can be used as a referral for your project, including modal popups and dynamic UI scaling | -| `LICENSE.md` | Package license | -| `Third Party Notices.md` | Third party notices | - -

    - -
    - -When new versions of the Unity SDK are released, [update the Unity SDK in your project](#update-the-unity-sdk). - -### 3. Initialize MetaMask - -The main class you interface with is called `MetaMaskWallet`. -It handles the connection to the user's wallet, as well as processing the requests to it using a -socket.io implementation. - -To use it inside Unity, you must attach the component called `MetaMaskUnity` to a game object within -the editor. -This component is a singleton and you can use its `Instance` property to access the wallet instance. -You first must initialize by doing one of the following: - -- Manually call `Initialize()`: - - ```csharp - MetaMaskUnity.Instance.Initialize(); - ``` - -- Check **Initialize On Start** on the component within the editor. - -This initializes the wallet instance, making it accessible from `MetaMaskUnity.Instance.Wallet`. -You can now make calls to the user's wallet using [provider API methods](../../../reference/provider-api.md). - -### 4. Connect to MetaMask - -Once the wallet is prepared and initialized, you can connect to MetaMask. -Call the `Connect()` method on the wallet instance as follows: - -```csharp -var wallet = MetaMaskUnity.Instance.Wallet; -wallet.Connect(); -``` - -You can also subscribe to the `OnWalletConnected` callback on the wallet instance to be notified -once the wallet is connected: - -```csharp -wallet.WalletConnected += OnWalletConnected; - -void OnWalletConnected(object sender, EventArgs e) { - Debug.Log("Wallet is connected"); -} -``` - -You can also use the `Connect()` method from `MetaMaskUnity` that delegates the call to the wallet -instance: - -```csharp -MetaMaskUnity.Instance.Connect(); -``` - -There are a variety of sample buttons included inside the package that call this method when clicked. -These are provided as a convenience to get started quickly with your project. -Once the connection request is made, a QR code is generated, and based on the transport you're using -(`Unity UI` by default), either a new Canvas that contains the QR code is spawned or the -`MetaMaskUnityUIQRImage` generates the QR code when the connection is requested. - -If you want to use the latter, add an instance of the `MetaMaskUnityUIQRImage` component to the -scene with its fields provided. -The transport field is also required if you want to use it isolated from the canvas that is spawned -by the transport, then it generates the QR code for you. - -:::info Connect and sign -You can also [use the `connectAndSign` method](../../../how-to/use-unity-sdk/connect-and-sign.md) to -connect to MetaMask and sign data in a single interaction. -::: - -### 5. Use MetaMask - -Once the wallet is authorized, you can make requests to it. -The wallet is authorized when the buttons become interactable or the `WalletAuthorized` event is fired: - -```csharp -var wallet = MetaMaskUnity.Instance.Wallet; -wallet.WalletAuthorized += OnWalletAuthorized; - -void OnWalletAuthorized(object sender, EventArgs e) { - Debug.Log("Wallet is authorized"); -} -``` - -You can call any [JSON-RPC API method](/wallet/reference/json-rpc-api) using `wallet.Request(myRequest)`. -The following is a sample transaction request: - -```csharp -var wallet = MetaMaskUnity.Instance.Wallet; -var transactionParams = new MetaMaskTransaction -{ - To = "0xd0059fB234f15dFA9371a7B45c09d451a2dd2B5a", - From = MetaMaskUnity.Instance.Wallet.SelectedAddress, - Value = "0x0" -}; - -var request = new MetaMaskEthereumRequest -{ - Method = "eth_sendTransaction", - Parameters = new MetaMaskTransaction[] { transactionParams } -}; -await wallet.Request(request); -``` - -:::note -See the [Unity SDK API reference](../../../reference/sdk-unity-api.md) for an overview of the -API methods from the most important classes. -::: - -### 6. Configure MetaMask - -You can customize the default configuration or create your own configuration. - -Edit the default configuration by doing one of the following: - -- Navigate to the **Window > MetaMask > Setup** menu item. -- Open the `MetaMaskConfig` asset in the project window. - -Edit the fields and save the changes. - -Create a new configuration by right-clicking on the project window and navigating to -**MetaMask > Config**. -Name the new configuration and use it when initializing the `MetaMaskUnity` instance. - -## Update the Unity SDK - -Update your project's version of the MetaMask Unity SDK to ensure that your project uses the latest -SDK functionalities and improvements. -To update the SDK to the latest version available on the Unity Asset Store: - -1. Update and import the latest package using the Unity Package Manager. -2. Go to **Tools > MetaMask > Install in Unity**. -3. Select the **Already Installed** button. - This updates the SDK in your project. - -Alternatively, you can delete the existing MetaMask folder in your project and re-import it from the -Package Manager or Asset Store. - -## FAQS - -
    - -I can't find the SDK installation option. - -If you don't see the option to [install the SDK](#2-install-the-sdk-for-unity) in your Unity menu, -ensure you're on the latest Unity version and that you have no red errors printed in your console. -This option not appearing is typically due to incorrect editor initialization, which you can -usually resolve by restarting the editor or updating your Unity version. - -
    - -
    - -On iOS, why does a popup appear when using a deeplink? - -When deeplinking, a background service is created to facilitate the communication layer between the -Unity game and MetaMask. -On iOS, background services expire after a certain amount of time. -A notification pops up to let you know the socket connection has expired. - -
    - -
    - -What does the external dependency manager do? - -The Unity Jar Resolver is an external dependency manager specifically for Unity projects that use -external libraries. -It helps manage the dependencies between Unity and external libraries, which can sometimes be -complicated due to differences between the two environments. -This tool is particularly useful for MetaMask SDK, since Android and iOS need a variety of native -libraries to facilitate deeplinking and the persistent socket connection. - -
    - -
    - -Does the SDK increase my compilation time? - -No. -If you notice an increased compilation time, it might be related to the ILL2CP pipeline, which can -take longer to build at compile time. -The SDK is filled with precompiled libraries to save on runtime compilation. - -
    - -## Next steps - -Once you have the MetaMask Unity SDK set up, you can: - -- [Connect and sign in Unity.](../../../how-to/use-unity-sdk/connect-and-sign.md) -- [Set up Infura in Unity.](../../../how-to/use-unity-sdk/infura.md) -- [Interact with smart contracts in Unity.](../../../how-to/use-unity-sdk/smart-contracts/index.md) -- [Enable human-readable addresses in Unity using Decentraweb.](../../../how-to/use-unity-sdk/dweb.md) diff --git a/wallet/connect/metamask-sdk/index.md b/wallet/connect/metamask-sdk/index.md deleted file mode 100644 index f3280469cc6..00000000000 --- a/wallet/connect/metamask-sdk/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -sidebar_position: 1 -description: Use the SDK in your dapp. -tags: - - JavaScript SDK - - iOS SDK - - Android SDK - - Unity SDK ---- - -# Connect using MetaMask SDK - -MetaMask SDK enables a reliable, secure, and seamless connection between your dapp and the MetaMask -browser extension or MetaMask Mobile, providing cross-platform compatibility with a consistent user experience. -Key features include: - -- **Multi-platform support** – Connect from web, desktop, mobile, and gaming platforms. -- **Seamless mobile integration** – Use QR codes or deeplinks to establish persistent connections - with MetaMask Mobile. -- **EIP-6963 detection** – Automatically detect MetaMask without conflicting with other installed wallets. -- **RPC request batching** – Improve efficiency by batching multiple requests into a single call. - -Get started with the SDK on the following platforms: - -
    - -
    -
    -

    📱 Mobile

    -
    -
    - -
    -
    -
    -
    -

    🎮 Gaming

    -
    -
    - -
    -
    -
    -
    -
    -

    ↔️ Third-party libraries

    -
    -
    - -
    -
    diff --git a/wallet/connect/metamask-sdk/javascript/electron.md b/wallet/connect/metamask-sdk/javascript/electron.md deleted file mode 100644 index 47815e25ec1..00000000000 --- a/wallet/connect/metamask-sdk/javascript/electron.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -sidebar_label: Electron -sidebar_position: 5 -description: Set up the SDK in your Electron dapp. -tags: - - JavaScript SDK ---- - -# Use MetaMask SDK with Electron - -Import MetaMask SDK into your Electron dapp to enable your users -to easily connect to the MetaMask browser extension and MetaMask Mobile. - -On the frontend, see the instructions to [use the SDK with React](react/index.md). -On the backend, see the instructions to [use the SDK with Node.js](nodejs.md). - -## Example - -See the [example Electron dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/electronjs) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/javascript/index.md b/wallet/connect/metamask-sdk/javascript/index.md deleted file mode 100644 index ea86a5ce266..00000000000 --- a/wallet/connect/metamask-sdk/javascript/index.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -sidebar_label: JavaScript -sidebar_position: 1 -description: Set up the SDK in your JavaScript dapp. -tags: - - JavaScript SDK ---- - -# Use MetaMask SDK with JavaScript - -Import MetaMask SDK into your JavaScript dapp to enable your -users to easily connect to the MetaMask browser extension and MetaMask Mobile. -The following instructions work for web dapps based on standard JavaScript. -You can also see instructions for the following JavaScript-based platforms: - -- [React](react/index.md) - - [React UI](react/react-ui.md) -- [Pure JavaScript](pure-js.md) -- [Other web frameworks](other-web-frameworks.md) -- [Node.js](nodejs.md) -- [Electron](electron.md) - -## Prerequisites - -- A JavaScript project set up -- [MetaMask Mobile](https://github.com/MetaMask/metamask-mobile) version 5.8.1 or later -- [Yarn](https://yarnpkg.com/getting-started/install) or - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - -## Steps - -### 1. Install the SDK - -In your project directory, install the SDK using Yarn or npm: - -```bash -yarn add @metamask/sdk -``` - -or - -```bash -npm i @metamask/sdk -``` - -### 2. Import the SDK - -In your project script, add the following to import the SDK: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk" -``` - -### 3. Instantiate the SDK - -Instantiate the SDK using any [options](../../../reference/sdk-js-options.md): - -```javascript title="index.js" -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "JavaScript example dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options. -}) - -// You can also access via window.ethereum. -const ethereum = MMSDK.getProvider() -``` - -- Use [`dappMetadata`](../../../reference/sdk-js-options.md#dappmetadata) to display information - about your dapp in the MetaMask connection modal. -- Use [`infuraAPIKey`](../../../reference/sdk-js-options.md#infuraapikey) to - [make read-only RPC requests](../../../how-to/make-read-only-requests.md) from your dapp. -- Use [`modals`](../../../reference/sdk-js-options.md#modals) to [customize the logic and UI of - the displayed modals](../../../how-to/display/custom-modals.md). - -### 4. Use the SDK - -Use the SDK by calling any [provider API methods](../../../reference/provider-api.md). -Always call [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) using -[`request()`](../../../reference/provider-api.md#request) first, since it -prompts the installation or connection popup to appear. - -```javascript -ethereum.request({ method: "eth_requestAccounts", params: [] }) -``` - -You can also call the SDK's [`connectAndSign`](../../../how-to/sign-data/connect-and-sign.md) method, and -[batch multiple JSON-RPC requests](../../../how-to/batch-json-rpc-requests.md) using the `metamask_batch` method. - -## Example - -You can copy the full JavaScript example to get started: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk" - -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "Example JavaScript Dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options. -}) - -// You can also access via window.ethereum. -const ethereum = MMSDK.getProvider() - -ethereum.request({ method: "eth_requestAccounts", params: [] }) -``` - -See the [example JavaScript dapps](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/javascript/nodejs.md b/wallet/connect/metamask-sdk/javascript/nodejs.md deleted file mode 100644 index fe257b3e0a4..00000000000 --- a/wallet/connect/metamask-sdk/javascript/nodejs.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -sidebar_label: Node.js -sidebar_position: 4 -description: Set up the SDK in your Node.js dapp. -tags: - - JavaScript SDK ---- - -# Use MetaMask SDK with Node.js - -Import MetaMask SDK into your Node.js dapp to enable your users -to easily connect to the MetaMask browser extension and MetaMask Mobile. -The SDK for Node.js has the [same prerequisites](index.md#prerequisites) as for standard JavaScript. - -## Steps - -### 1. Install the SDK - -In your project directory, install the SDK using Yarn or npm: - -```bash -yarn add @metamask/sdk -``` - -or - -```bash -npm i @metamask/sdk -``` - -### 2. Import the SDK - -In your project script, add the following to import the SDK: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk" -``` - -### 3. Instantiate the SDK - -Instantiate the SDK using any [options](../../../reference/sdk-js-options.md): - -```javascript title="index.js" -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "Example Node.js Dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options. -}) - -// You can also access via window.ethereum -const ethereum = MMSDK.getProvider() -``` - -- Use [`dappMetadata`](../../../reference/sdk-js-options.md#dappmetadata) to display information - about your dapp in the MetaMask connection modal. -- Use [`infuraAPIKey`](../../../reference/sdk-js-options.md#infuraapikey) to - [make read-only RPC requests](../../../how-to/make-read-only-requests.md) from your dapp. -- Use [`modals`](../../../reference/sdk-js-options.md#modals) to [customize the logic and UI of - the displayed modals](../../../how-to/display/custom-modals.md). - -### 4. Use the SDK - -Use the SDK by calling any [provider API methods](../../../reference/provider-api.md). -Always call [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) using -[`request()`](../../../reference/provider-api.md#request) first, since it -prompts the installation or connection popup to appear. - -```javascript -ethereum.request({ method: "eth_requestAccounts", params: [] }) -``` - -You can also call the SDK's [`connectAndSign`](../../../how-to/sign-data/connect-and-sign.md) method, and -[batch multiple JSON-RPC requests](../../../how-to/batch-json-rpc-requests.md) using the `metamask_batch` method. - -## Example - -You can copy the full Node.js example to get started: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk" - -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "Example Node.js Dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options. -}) - -// You can also access via window.ethereum -const ethereum = MMSDK.getProvider() - -ethereum.request({ method: "eth_requestAccounts", params: [] }) -``` - -See the [example Node.js dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/nodejs) -in the JavaScript SDK GitHub repository for advanced use cases. diff --git a/wallet/connect/metamask-sdk/javascript/other-web-frameworks.md b/wallet/connect/metamask-sdk/javascript/other-web-frameworks.md deleted file mode 100644 index 35b6ef3dfd2..00000000000 --- a/wallet/connect/metamask-sdk/javascript/other-web-frameworks.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -sidebar_label: Other web frameworks -sidebar_position: 3 -description: Set up the SDK in other web frameworks. -tags: - - JavaScript SDK ---- - -# Use MetaMask SDK with other web frameworks - -Import MetaMask SDK into your web dapp to enable your users to -easily connect to the MetaMask browser extension and MetaMask Mobile. -The SDK for other web frameworks has the [same prerequisites](index.md#prerequisites) as for -standard JavaScript. - -## Steps - -### 1. Install the SDK - -In your project directory, install the SDK using Yarn or npm: - -```bash -yarn add @metamask/sdk -``` - -or - -```bash -npm i @metamask/sdk -``` - -### 2. Import the SDK - -In your project script, add the following to import the SDK: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk" -``` - -### 3. Instantiate the SDK - -Instantiate the SDK using any [options](../../../reference/sdk-js-options.md): - -```javascript title="index.js" -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "Example JavaScript Dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options -}); - -// You can also access via window.ethereum -const ethereum = MMSDK.getProvider(); -``` - -- Use [`dappMetadata`](../../../reference/sdk-js-options.md#dappmetadata) to display information - about your dapp in the MetaMask connection modal. -- Use [`infuraAPIKey`](../../../reference/sdk-js-options.md#infuraapikey) to - [make read-only RPC requests](../../../how-to/make-read-only-requests.md) from your dapp. -- Use [`modals`](../../../reference/sdk-js-options.md#modals) to [customize the logic and UI of - the displayed modals](../../../how-to/display/custom-modals.md). - -### 4. Use the SDK - -Use the SDK by calling any [provider API methods](../../../reference/provider-api.md). -Always call [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) using -[`request()`](../../../reference/provider-api.md#request) first, since it -prompts the installation or connection popup to appear. - -```javascript -ethereum.request({ method: "eth_requestAccounts", params: [] }) -``` - -You can also call the SDK's [`connectAndSign`](../../../how-to/sign-data/connect-and-sign.md) method, and -[batch multiple JSON-RPC requests](../../../how-to/batch-json-rpc-requests.md) using the `metamask_batch` method. - -## Example - -You can copy the full JavaScript example to get started: - -```javascript title="index.js" -import { MetaMaskSDK } from "@metamask/sdk"; - -const MMSDK = new MetaMaskSDK({ - dappMetadata: { - name: "Example JavaScript Dapp", - url: window.location.href, - }, - infuraAPIKey: process.env.INFURA_API_KEY, - // Other options -}); - -// You can also access via window.ethereum -const ethereum = MMSDK.getProvider(); - -ethereum.request({ method: "eth_requestAccounts", params: [] }); -``` - -See the [example JavaScript dapps](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/javascript/pure-js.md b/wallet/connect/metamask-sdk/javascript/pure-js.md deleted file mode 100644 index 2e4679e8c8b..00000000000 --- a/wallet/connect/metamask-sdk/javascript/pure-js.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -sidebar_label: Pure JavaScript -sidebar_position: 2 -description: Set up the SDK in your Pure JavaScript dapp. -tags: - - JavaScript SDK ---- - -# Use MetaMask SDK with pure JavaScript - -Import MetaMask SDK into your pure JavaScript dapp to enable -your users to easily connect to the MetaMask browser extension and MetaMask Mobile. -The SDK for pure JavaScript has the [same prerequisites](index.md#prerequisites) as for standard JavaScript. - -To import, instantiate, and use the SDK, you can insert a script in the head section of your website: - -```html title="index.html" - - ... - - - ... - -``` - -You can configure the SDK using any [options](../../../reference/sdk-js-options.md): - -- Use [`dappMetadata`](../../../reference/sdk-js-options.md#dappmetadata) to display information - about your dapp in the MetaMask connection modal. -- Use [`infuraAPIKey`](../../../reference/sdk-js-options.md#infuraapikey) to - [make read-only RPC requests](../../../how-to/make-read-only-requests.md) from your dapp. -- Use [`modals`](../../../reference/sdk-js-options.md#modals) to [customize the logic and UI of - the displayed modals](../../../how-to/display/custom-modals.md). - -You can call any [provider API methods](../../../reference/provider-api.md) using the SDK. -Always call [`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) using -[`request()`](../../../reference/provider-api.md#request) first, since it prompts the installation -or connection popup to appear. - -You can also call the SDK's [`connectAndSign`](../../../how-to/sign-data/connect-and-sign.md) method, and -[batch multiple JSON-RPC requests](../../../how-to/batch-json-rpc-requests.md) using the `metamask_batch` method. - -## Example - -See the [example pure JavaScript dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/pure-javascript) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/javascript/react/index.md b/wallet/connect/metamask-sdk/javascript/react/index.md deleted file mode 100644 index 58b0b0b3a70..00000000000 --- a/wallet/connect/metamask-sdk/javascript/react/index.md +++ /dev/null @@ -1,248 +0,0 @@ ---- -sidebar_label: React -sidebar_position: 1 -description: Set up the SDK in your React dapp. -tags: - - JavaScript SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use MetaMask SDK with React - -Import MetaMask SDK into your React dapp to enable your users to -easily connect to the MetaMask browser extension and MetaMask Mobile. -The SDK for React has the [same prerequisites](../index.md#prerequisites) as for standard JavaScript. - -:::info React UI -This page provides instructions for using the standard `@metamask/sdk-react` package. -Alternatively, you can use the [`@metamask/sdk-react-ui`](react-ui.md) package to easily use -[wagmi](https://wagmi.sh/) hooks and a pre-styled UI button component for connecting to MetaMask. -::: - -## Steps - -### 1. Install the SDK - -In your project directory, install the SDK using Yarn or npm: - -```bash -yarn add @metamask/sdk-react -``` - -or - -```bash -npm i @metamask/sdk-react -``` - -### 2. Import the SDK - -In your project script, add the following to import the SDK: - -```typescript title="index.tsx" -import { MetaMaskProvider } from "@metamask/sdk-react" -``` - -### 3. Wrap your project with `MetaMaskProvider` - -Wrap your root component in a `MetaMaskProvider`. -For example: - -```typescript title="index.tsx" -import React from "react"; -import ReactDOM from "react-dom/client"; -import App from "./App"; -import { MetaMaskProvider } from "@metamask/sdk-react"; - -const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement -); - -root.render( - - - - - -); -``` - -When initializing `MetaMaskProvider`, set `debug` to `true` to activate debug mode. -For the full list of options you can set for `sdkOptions`, see the -[JavaScript SDK options reference](../../../../reference/sdk-js-options.md). -Important options include: - -- [`dappMetadata`](../../../../reference/sdk-js-options.md#dappmetadata) - Use this to display information - about your dapp in the MetaMask connection modal. -- [`infuraAPIKey`](../../../../reference/sdk-js-options.md#infuraapikey) - Use this to - [make read-only RPC requests](../../../../how-to/make-read-only-requests.md) from your dapp. -- [`modals`](../../../../reference/sdk-js-options.md#modals) - Use this to [customize the logic and UI of - the displayed modals](../../../../how-to/display/custom-modals.md). - -### 4. Use the SDK - -Use the SDK by using the `useSDK` hook in your React components. -For example: - -```typescript title="App.tsx" -import { useSDK } from "@metamask/sdk-react"; -import React, { useState } from "react"; - -export const App = () => { - const [account, setAccount] = useState(); - const { sdk, connected, connecting, provider, chainId } = useSDK(); - - const connect = async () => { - try { - const accounts = await sdk?.connect(); - setAccount(accounts?.[0]); - } catch (err) { - console.warn("failed to connect..", err); - } - }; - - return ( -
    - - {connected && ( -
    - <> - {chainId && `Connected chain: ${chainId}`} -

    - {account && `Connected account: ${account}`} - -
    - )} -
    - ); -}; -``` - -
    -useSDK return values -

    - -- `sdk`: Main SDK object that facilitates connection and actions related to MetaMask. -- `connected`: Boolean value indicating if the dapp is connected to MetaMask. -- `connecting`: Boolean value indicating if a connection is in process. -- `provider`: The provider object which can be used for lower-level interactions with the Ethereum blockchain. -- `chainId`: Currently connected blockchain's chain ID. - -

    -
    - -The `connect` method initiates a connection to MetaMask and returns an array of connected accounts. - -You can also [use the `connectAndSign` method](../../../../how-to/sign-data/connect-and-sign.md) to -connect to MetaMask and sign data in a single interaction: - -```js -const connectAndSign = async () => { - try { - const signResult = await sdk?.connectAndSign({ - msg: "Connect + Sign message", - }) - setResponse(signResult) - } catch (err) { - console.warn("failed to connect..", err) - } -} -``` - -You can also [batch multiple JSON-RPC requests](../../../../how-to/batch-json-rpc-requests.md) using the -`metamask_batch` method. - -## Example - -You can copy the full React example to get started: - - - - -```javascript title="index.tsx" -import React from "react"; -import ReactDOM from "react-dom/client"; -import App from "./App"; -import { MetaMaskProvider } from "@metamask/sdk-react"; - -const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement -); - -root.render( - - - - - -); -``` - - - - -```javascript title="App.tsx" -import { useSDK } from "@metamask/sdk-react"; -import React from "react"; - -export const App = () => { - const [account, setAccount] = useState(); - const { sdk, connected, connecting, provider, chainId } = useSDK(); - - const connect = async () => { - try { - const accounts = await sdk?.connect(); - setAccount(accounts?.[0]); - } catch (err) { - console.warn("failed to connect..", err); - } - }; - - return ( -
    - - {connected && ( -
    - <> - {chainId && "Connected chain: ${chainId}"} -

    - {account && "Connected account: ${account}"} - -
    - )} -
    - ); -}; -``` - -
    -
    - -See the [example React dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/create-react-app) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/javascript/react/react-ui.md b/wallet/connect/metamask-sdk/javascript/react/react-ui.md deleted file mode 100644 index 4f881bc3725..00000000000 --- a/wallet/connect/metamask-sdk/javascript/react/react-ui.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -sidebar_label: React UI -sidebar_position: 1 -description: Set up the SDK in your React dapp using the React UI package. -tags: - - JavaScript SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use MetaMask SDK with React UI - -Import MetaMask SDK into your React dapp to enable your -users to easily connect to the MetaMask browser extension and MetaMask Mobile. -The `@metamask/sdk-react-ui` package not only exports hooks from [`@metamask/sdk-react`](index.md), -but also provides wrappers around [wagmi](https://wagmi.sh/) hooks and a basic UI button component -for connecting to MetaMask. - -By combining the functions of `@metamask/sdk-react` and `@metamask/sdk-react-ui`, you can use both -the core functionality and the pre-styled UI components to streamline the integration of MetaMask -into your React dapp. - -The SDK for React has the [same prerequisites](../index.md#prerequisites) as for standard JavaScript. - -## Steps - -### 1. Install the SDK - -In your project directory, install the SDK using Yarn or npm: - -```bash -yarn add @metamask/sdk-react-ui -``` - -or - -```bash -npm i @metamask/sdk-react-ui -``` - -### 2. Import the SDK - -In your project script, add the following to import the SDK: - -```javascript title="index.js" -import { MetaMaskUIProvider } from "@metamask/sdk-react-ui" -``` - -### 3. Wrap your project with `MetaMaskUIProvider` - -Wrap your root component in a `MetaMaskUIProvider`. -For example: - -```js title="index.js" -import React from "react"; -import ReactDOM from "react-dom/client"; -import App from "./App"; -import { MetaMaskUIProvider } from "@metamask/sdk-react-ui"; - -const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement -); - -root.render( - - - - - -); -``` - -For the full list of options you can set for `sdkOptions`, see the -[JavaScript SDK options reference](../../../../reference/sdk-js-options.md). -Important options include: - -- [`dappMetadata`](../../../../reference/sdk-js-options.md#dappmetadata) - Use this to display information - about your dapp in the MetaMask connection modal. -- [`infuraAPIKey`](../../../../reference/sdk-js-options.md#infuraapikey) - Use this to - [make read-only RPC requests](../../../../how-to/make-read-only-requests.md) from your dapp. -- [`modals`](../../../../reference/sdk-js-options.md#modals) - Use this to [customize the logic and UI of - the displayed modals](../../../../how-to/display/custom-modals.md). - -### 4. Use the SDK - -Use the SDK by using the `useSDK` hook in your React components. -See the [instructions for `@metamask/sdk-react`](index.md#4-use-the-sdk). - -### 5. Use the `MetaMaskButton` component - -The `@metamask/sdk-react-ui` package provides a pre-styled button, `MetaMaskButton`, to initiate a -connection to MetaMask. -You can use it as follows: - -```js title="App.js" -import { MetaMaskButton } from "@metamask/sdk-react-ui" -import React, { useState } from "react" - -export const App = () => { - return ( -
    - -
    - ) -} -``` - -
    -MetaMaskButton properties -

    - -- `theme`: Set to `light` or `dark` to adapt to your dapp's theme. -- `color`: The color of the button. Accepts any valid CSS color string. - -

    -
    - -## Example - -You can copy the full React UI example to get started: - - - - -```javascript title="index.js" -import React from "react"; -import ReactDOM from "react-dom/client"; -import App from "./App"; -import { MetaMaskUIProvider } from "@metamask/sdk-react-ui"; - -const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement -); - -root.render( - - - - - -); -``` - - - - -```javascript title="App.js" -import { - MetaMaskButton, - useAccount, - useSDK, - useSignMessage, -} from "@metamask/sdk-react-ui" -import "./App.css" - -function AppReady() { - const { - data: signData, - isError: isSignError, - isLoading: isSignLoading, - isSuccess: isSignSuccess, - signMessage, - } = useSignMessage({ - message: "gm wagmi frens", - }) - - const { isConnected } = useAccount() - - return ( -
    -
    - - {isConnected && ( - <> -
    - - {isSignSuccess &&
    Signature: {signData}
    } - {isSignError &&
    Error signing message
    } -
    - - )} -
    -
    - ) -} - -function App() { - const { ready } = useSDK() - - if (!ready) { - return
    Loading...
    - } - - return -} - -export default App -``` - -
    -
    - -See the [example React UI dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/react-metamask-button) -in the JavaScript SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/mobile/android.md b/wallet/connect/metamask-sdk/mobile/android.md deleted file mode 100644 index 020af297571..00000000000 --- a/wallet/connect/metamask-sdk/mobile/android.md +++ /dev/null @@ -1,408 +0,0 @@ ---- -sidebar_label: Android -sidebar_position: 2 -toc_max_heading_level: 4 -description: Set up the SDK in your Android dapp. -tags: - - Android SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use MetaMask SDK with Android - -Import MetaMask SDK into your native Android dapp to enable -your users to easily connect with their MetaMask Mobile wallet. - -:::tip See also -- [Android SDK architecture](../../../concepts/android-sdk.md) -::: - -## Prerequisites - -- MetaMask Mobile version 7.6.0 or later installed on your target device (that is, a physical - device or emulator). - You can install MetaMask Mobile from [Google Play](https://play.google.com/store/apps/details?id=io.metamask), - or clone and compile MetaMask Mobile from [source](https://github.com/MetaMask/metamask-mobile) - and build to your target device. - -- Android SDK version 23 or later. - -## Steps - -### 1. Install the SDK - -To add the SDK from Maven Central as a dependency to your project, in your `app/build.gradle` file, -add the following entry to the `dependencies` block: - -```gradle title="build.gradle" -dependencies { - implementation "io.metamask.androidsdk:metamask-android-sdk" -} -``` - -Then, sync your project with the Gradle settings. -Once the syncing completes, you can set up the rest of your project. - -### 2. Import the SDK - -Import the SDK by adding the following line to the top of your project file: - -```kotlin -import io.metamask.androidsdk.Ethereum -``` - -### 3. Connect your dapp - -The SDK supports callbacks using the `Ethereum` provider object, and coroutines using the -`EthereumFlow` provider object. -You can connect your dapp to MetaMask in one of two ways: - -1. [Use the `Ethereum` or `EthereumFlow` provider object directly](#31-use-the-provider-object-directly). - We recommend using this method in a pure model layer. -2. [Use a ViewModel](#32-use-a-viewmodel) that injects the `Ethereum` or `EthereumFlow` provider object. - We recommend using this method at the app level, because it provides a single instance that - survives configuration changes and can be shared across all views. - -:::note Logging -By default, MetaMask logs three SDK events: `connection_request`, `connected`, and `disconnected`. -This allows MetaMask to monitor any SDK connection issues. -To disable this, set `ethereum.enableDebug = false`. -::: - -#### 3.1. Use the provider object directly - -Use the `Ethereum` provider object (for callbacks) or the `EthereumFlow` provider object (for -coroutines) to connect your dapp to MetaMask. -Add the following code to your project file: - - - - -```kotlin -@AndroidEntryPoint -class SomeModel(context: Context) { - - val dappMetadata = DappMetadata("Droid Dapp", "https://www.droiddapp.io") - - // To use the Infura API to make read-only requests, specify your Infura API key using the - // infuraAPIKey option in SDKOptions. - val infuraAPIKey = "1234567890" - - // To use your own node (for example, with Hardhat) to make read-only requests, specify your - // node's chain ID and RPC URL using the readonlyRPCMap option in SDKOptions. - val readonlyRPCMap = mapOf("0x1" to "hptts://www.testrpc.com") - - // Use callbacks. - val ethereum = Ethereum(context, dappMetadata, SDKOptions(infuraAPIKey, readonlyRPCMap)) - - // This is the same as calling eth_requestAccounts. - ethereum.connect() { result -> - when (result) { - is Result.Error -> { - Logger.log("Ethereum connection error: ${result.error.message}") - } - is Result.Success.Item -> { - Logger.log("Ethereum connection result: ${result.value}") - } - } - } -} -``` - - - - -```kotlin -@AndroidEntryPoint -class SomeModel(context: Context) { - - val dappMetadata = DappMetadata("Droid Dapp", "https://www.droiddapp.io") - - // To use the Infura API to make read-only requests, specify your Infura API key using the - // infuraAPIKey option in SDKOptions. - val infuraAPIKey = "1234567890" - - // To use your own node (for example, with Hardhat) to make read-only requests, specify your - // node's chain ID and RPC URL using the readonlyRPCMap option in SDKOptions. - val readonlyRPCMap = mapOf("0x1" to "hptts://www.testrpc.com") - - // Use coroutines. - val coroutineScope = rememberCoroutineScope() - - // This is the same as calling eth_requestAccounts. - coroutineScope.launch { - when (val result = ethereum.connect()) { - is Result.Error -> { - Logger.log("Ethereum connection error: ${result.error.message}") - } - is Result.Success.Item -> { - Logger.log("Ethereum connection result: ${result.value}") - } - } - } -} -``` - - - - -As an alternative to calling the `connect()` method, you can -[call convenience methods](#5-optional-call-convenience-methods) to connect to MetaMask and make a -request in a single RPC request. - -#### 3.2. Use a ViewModel - -To connect your dapp to MetaMask using a ViewModel, create a ViewModel that injects the -`Ethereum` provider object (for callbacks) or the `EthereumFlow` provider object (for coroutines). -Add wrapper functions for each Ethereum method you wish to call. - -You can use a dependency manager such as [Hilt](https://developer.android.com/training/dependency-injection/hilt-android) -to initialize the ViewModel and maintain its state across configuration changes. -If you use Hilt, your setup might look like the following: - - - - -```kotlin title="EthereumViewModel.kt" -@HiltViewModel -class EthereumViewModel @Inject constructor( - private val ethereum: Ethereum -): ViewModel() { - - val ethereumState = MediatorLiveData().apply { - addSource(ethereum.ethereumState) { newEthereumState -> - value = newEthereumState - } - } - - // Wrapper function to connect the dapp. - fun connect(callback: ((Result) -> Unit)?) { - ethereum.connect(callback) - } - - // Wrapper function call all RPC methods. - fun sendRequest(request: EthereumRequest, callback: ((Result) -> Unit)?) { - ethereum.sendRequest(request, callback) - } -} -``` - - - - -```kotlin title="EthereumFlowViewModel.kt" -@HiltViewModel -class EthereumFlowViewModel @Inject constructor( - private val ethereum: EthereumFlowWrapper -): ViewModel() { - - val ethereumFlow: Flow get() = ethereum.ethereumState - - // Wrapper function to connect the dapp. - suspend fun connect(): Result { - return ethereum.connect() - } - - // Wrapper function call all RPC methods. - suspend fun sendRequest(request: EthereumRequest): Result { - return ethereum.sendRequest(request) - } -} -``` - - - - -To use the ViewModel, add the following code to your project file: - -```kotlin -val ethereumViewModel: EthereumFlowViewModel by viewModels() - -// This is the same as calling eth_requestAccounts. -ethereumViewModel.connect() -``` - -As an alternative to calling the `connect()` method, you can -[call convenience methods](#5-optional-call-convenience-methods) to connect to MetaMask and make a -request in a single RPC request. - -:::info -See the example dapp's -[`EthereumViewModel.kt`](https://github.com/MetaMask/metamask-android-sdk/blob/main/app/src/main/java/com/metamask/dapp/EthereumViewModel.kt) -and -[`EthereumFlowViewModel.kt`](https://github.com/MetaMask/metamask-android-sdk/blob/main/app/src/main/java/com/metamask/dapp/EthereumFlowViewModel.kt) -files for more information. -::: - -### 4. Call methods - -You can now call any [JSON-RPC API method](/wallet/reference/json-rpc-api) using -`ethereum.sendRequest()`. -The SDK also provides [convenience methods](#5-optional-call-convenience-methods) for common RPC -requests so you don't have to manually construct requests. - -The following examples use coroutines. - -#### Example: Get account balance - -The following example gets the user's account balance by calling -[`eth_getBalance`](/wallet/reference/eth_getBalance). -This is a [read-only request](../../../how-to/make-read-only-requests.md), which uses the Infura API -if an `infuraAPIKey` is provided in the `SDKOptions`. -We recommend using the Infura API to provide a seamless user experience. - -```kotlin -val balance = ethereum.getEthBalance(ethereum.selectedAddress, "latest") - -when (balance) { - is Result.Success.Item -> { - Logger.log("Ethereum account balance: ${result.value}") - balance = result.value - } - is Result.Error -> { - Logger.log("Ethereum request balance error: ${result.error.message}") - } -} -``` - -#### Example: Sign message - -The following example requests the user sign a message by calling -[`eth_signTypedData_v4`](/wallet/reference/eth_signTypedData_v4). - -```kotlin -val message = "{\"domain\":{\"chainId\":\"${ethereum.chainId}\",\"name\":\"Ether Mail\",\"verifyingContract\":\"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC\",\"version\":\"1\"},\"message\":{\"contents\":\"Hello, Busa!\",\"from\":{\"name\":\"Kinno\",\"wallets\":[\"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826\",\"0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF\"]},\"to\":[{\"name\":\"Busa\",\"wallets\":[\"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB\",\"0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57\",\"0xB0B0b0b0b0b0B000000000000000000000000000\"]}]},\"primaryType\":\"Mail\",\"types\":{\"EIP712Domain\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"chainId\",\"type\":\"uint256\"},{\"name\":\"verifyingContract\",\"type\":\"address\"}],\"Group\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"members\",\"type\":\"Person[]\"}],\"Mail\":[{\"name\":\"from\",\"type\":\"Person\"},{\"name\":\"to\",\"type\":\"Person[]\"},{\"name\":\"contents\",\"type\":\"string\"}],\"Person\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"wallets\",\"type\":\"address[]\"}]}}" -val address = ethereum.selectedAddress - -when (val result = ethereum.ethSignTypedDataV4(message, address)) { - is Result.Error -> { - Logger.log("Ethereum sign error: ${result.error.message}") - } - is Result.Success.Item -> { - Logger.log("Ethereum sign result: ${result.value}") - } -} -``` - -#### Example: Batch requests - -The following example requests the user to sign multiple messages at once by -[batching multiple requests](../../../how-to/batch-json-rpc-requests.md) that call -[`personal_sign`](/wallet/reference/personal_sign). - -```kotlin -val ethereumRequest1 = EthereumRequest( - method = EthereumMethod.PERSONAL_SIGN.value, - params = listOf(address, "hello world") -) - -val ethereumRequest2 = EthereumRequest( - method = EthereumMethod.PERSONAL_SIGN.value, - params = listOf(address, "second message") -) - -when (val result = ethereum.sendRequestBatch(listOf(ethereumRequest1, ethereumRequest2))) { - is Result.Error -> { - Logger.log("Ethereum batch sign error: ${result.error.message}") - } - is Result.Success.Items -> { - Logger.log("Ethereum batch sign result: ${result.value}") - } -} -``` - -#### Example: Send transaction - -The following example sends a transaction by calling -[`eth_sendTransaction`](/wallet/reference/eth_sendTransaction). - -```kotlin -val from = ethereum.selectedAddress -val to = "0x0000000000000000000000000000000000000000" -val value = "0x8ac7230489e80000" - -when (val result = ethereum.sendTransaction(from, to, value)) { - is Result.Success.Item -> { - Logger.log("Ethereum transaction result: ${result.value}") - balance = result.value - } - is Result.Error -> { - // Handle error. - } -} -``` - -#### Example: Switch chain - -The following example switches to a new Ethereum chain by calling -[`wallet_switchEthereumChain`](/wallet/reference/wallet_switchethereumchain). - -```kotlin -when(val result = ethereum.switchEthereumChain(chainId)) { - is Result.Success.Item -> { - // Successfully switched to chainId. - } - is Result.Error -> { - // Handle error. - } -} -``` - -### 5. (Optional) Call convenience methods - -The SDK provides the following convenience methods to simplify connecting to MetaMask and calling -common RPC methods. -These examples use coroutines. - -#### Example: Connect and request - -The following example uses the `connectWith` convenience method to connect to MetaMask and call -[`eth_sendTransaction`](/wallet/reference/eth_sendTransaction) in one RPC request. - -```kotlin -val params: Map = mutableMapOf( - "from" to "", // This will be populated with the selected address once connected. - "to" to "0x0000000000000000000000000000000000000000", - "value" to "0x8ac7230489e80000" -) - -val sendTransactionRequest = EthereumRequest( - method = EthereumMethod.ETH_SEND_TRANSACTION.value, - params = listOf(params) -) - -when (val result = ethereum.connectWith(sendTransactionRequest)) { - is Result.Error -> { - // Handle error. - } - is Result.Success.Item -> { - // Transaction hash ${result.value} - } -} -``` - -#### Example: Connect and sign - -The following example uses the `connectSign` convenience method to connect to MetaMask and call -[`personal_sign`](/wallet/reference/personal_sign) in one RPC request. -You do not need to construct the `personal_sign` request, you only need to provide the message to sign. - -```kotlin -val message = "This is the message to sign." - -when (val result = ethereum.connectSign(message)) { - is Result.Error -> { - Logger.log("Ethereum connectSign error: ${result.error.message}") - } - is Result.Success.Item -> { - Logger.log("Ethereum connectSign result: ${result.value}") - } -} -``` - -## Example - -See the [example Android dapp](https://github.com/MetaMask/metamask-android-sdk/tree/main/app) in -the Android SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/mobile/index.md b/wallet/connect/metamask-sdk/mobile/index.md deleted file mode 100644 index fbfcea820d5..00000000000 --- a/wallet/connect/metamask-sdk/mobile/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -sidebar_label: Mobile -sidebar_position: 2 -description: Set up the SDK in your mobile dapp. -tags: - - iOS SDK - - Android SDK ---- - -# Use MetaMask SDK with mobile dapps - -Import MetaMask SDK into your mobile dapp to enable your users -to easily connect with their MetaMask Mobile wallet. -See the instructions for the following mobile platforms: - -- [iOS](ios.md) -- [Android](android.md) -- [React Native](react-native.md) diff --git a/wallet/connect/metamask-sdk/mobile/ios.md b/wallet/connect/metamask-sdk/mobile/ios.md deleted file mode 100644 index bbeb30e9098..00000000000 --- a/wallet/connect/metamask-sdk/mobile/ios.md +++ /dev/null @@ -1,235 +0,0 @@ ---- -sidebar_label: iOS -sidebar_position: 1 -toc_max_heading_level: 4 -description: Set up the SDK in your iOS dapp. -tags: - - iOS SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use MetaMask SDK with iOS - -Import MetaMask SDK into your native iOS dapp to enable your -users to easily connect with their MetaMask Mobile wallet. - -## Prerequisites - -- MetaMask Mobile version 7.6.0 or later installed on your target device (that is, a physical device - or emulator). - You can install MetaMask Mobile from the [App Store](https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) - or clone and compile MetaMask Mobile from [source](https://github.com/MetaMask/metamask-mobile) - and build to your target device. - -- iOS version 14 or later. - The SDK supports `ios-arm64` (iOS devices) and `ios-arm64-simulator` (M1 chip simulators). - It currently doesn't support `ios-ax86_64-simulator` (Intel chip simulators). - -## Steps - -### 1. Install the SDK - - - - -To add the SDK as a CocoaPods dependency to your project, add the following entry to our Podfile: - -```text -pod "metamask-ios-sdk" -``` - -Run the following command: - -```bash -pod install -``` - - - - -To add the SDK as a Swift Package Manager (SPM) package to your project, in Xcode, select -**File > Swift Packages > Add Package Dependency**. -Enter the URL of the MetaMask iOS SDK repository: `https://github.com/MetaMask/metamask-ios-sdk`. - -Alternatively, you can add the URL directly in your project's package file: - -```swift -dependencies: [ - .package( - url: "https://github.com/MetaMask/metamask-ios-sdk", - from: "0.3.0" - ) -] -``` - - - - -### 2. Import the SDK - -Import the SDK by adding the following line to the top of your project file: - -```swift -import metamask_ios_sdk -``` - -### 3. Connect your dapp - -Connect your dapp to MetaMask by adding the following code to your project file: - -```swift -let appMetadata = AppMetadata(name: "Dub Dapp", url: "https://dubdapp.com") - -@ObservedObject var metamaskSDK = MetaMaskSDK.shared(appMetadata) - -metamaskSDK.connect() -``` - -By default, MetaMask logs three SDK events: `connectionRequest`, `connected`, and `disconnected`. -This allows MetaMask to monitor any SDK connection issues. -To disable this, set `MetaMaskSDK.shared.enableDebug = false` or `ethereum.enableDebug = false`. - -### 4. Call methods - -You can now call any [JSON-RPC API method](/wallet/reference/json-rpc-api) using `metamaskSDK.request()`. - -#### Example: Get chain ID - -The following example gets the user's chain ID by calling -[`eth_chainId`](/wallet/reference/eth_chainId). - -```swift -let chainIdRequest = EthereumRequest(method: .ethChainId) -let chainId = await metamaskSDK.request(chainIdRequest) -``` - -#### Example: Get account balance - -The following example gets the user's account balance by calling -[`eth_getBalance`](/wallet/reference/eth_getBalance). - -```swift -// Create parameters. -let account = metamaskSDK.account - -let parameters: [String] = [ - // Account to check for balance. - account, - // "latest", "earliest", or "pending" (optional) - "latest" -] - -// Create request. -let getBalanceRequest = EthereumRequest( - method: .ethGetBalance, - params: parameters -) - -// Make request. -let accountBalance = await metamaskSDK.request(getBalanceRequest) -``` - -#### Example: Send transaction - -The following example sends a transaction by calling -[`eth_sendTransaction`](/wallet/reference/eth_sendTransaction). - - - - -If your request parameters make up a simple dictionary of string key-value pairs, you can use the -dictionary directly. -Note that `Any` or even `AnyHashable` types aren't supported, since the type must be explicitly known. - -```swift -// Create parameters. -let account = metamaskSDK.account - -let parameters: [String: String] = [ - // Receiver address. - "to": "0x...", - // Sender address. - "from": account, - // Amount to send. - "value": "0x..." -] - -// Create request. -let transactionRequest = EthereumRequest( - method: .ethSendTransaction, - // eth_sendTransaction expects an array parameters object. - params: [parameters] -) - -// Make a transaction request. -let transactionResult = await metamaskSDK.request(transactionRequest) -``` - - - - -For more complex parameter representations, define and use a struct that conforms to `CodableData`, -that is, a struct that implements the following requirement: - -``` -func socketRepresentation() -> NetworkData -``` - -The type can then be represented as a socket packet. - -```swift -struct Transaction: CodableData { - let to: String - let from: String - let value: String - let data: String? - - init(to: String, from: String, value: String, data: String? = nil) { - self.to = to - self.from = from - self.value = value - self.data = data - } - - func socketRepresentation() -> NetworkData { - [ - "to": to, - "from": from, - "value": value, - "data": data - ] - } -} - -// Create parameters. -let account = metamaskSDK.account - -let transaction = Transaction( - // Receiver address. - to: "0x...", - // Sender address. - from: account, - // Amount. - value: "0x..." -) - -// Create request. -let transactionRequest = EthereumRequest( - method: .ethSendTransaction, - // eth_sendTransaction expects an array parameters object. - params: [transaction] -) - -// Make a transaction request. -let result = await metamaskSDK.request(transactionRequest) -``` - - - - -## Example - -See the [example iOS dapp](https://github.com/MetaMask/metamask-ios-sdk/tree/main/Example) in the -iOS SDK GitHub repository for more information. diff --git a/wallet/connect/metamask-sdk/mobile/react-native.md b/wallet/connect/metamask-sdk/mobile/react-native.md deleted file mode 100644 index 2ad17cf723e..00000000000 --- a/wallet/connect/metamask-sdk/mobile/react-native.md +++ /dev/null @@ -1,236 +0,0 @@ ---- -sidebar_label: React Native -sidebar_position: 3 -description: Set up the SDK in your React Native dapp. -tags: - - JavaScript SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use MetaMask SDK with React Native - -Import MetaMask SDK into your React Native or Expo dapp to -enable your users to easily connect to the MetaMask browser extension and MetaMask Mobile. - -## Prerequisites - -- [MetaMask Mobile](https://github.com/MetaMask/metamask-mobile) version 5.8.1 or later -- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - -## Steps - -### 1. Create a new project - -Create a new React Native or Expo project using the following commands: - - - - -```bash -npx react-native@latest init MyProject -``` - - - - -```bash -npx create-expo-app devexpo --template -``` - - - - -### 2. Install the SDK - -Install the SDK and its dependencies using the following commands: - - - - -```bash -npm install eciesjs @metamask/sdk-react ethers@5.7.2 @react-native-async-storage/async-storage node-libs-react-native react-native-background-timer react-native-randombytes react-native-url-polyfill react-native-get-random-values -``` - - - - -```bash -npx expo install expo-crypto @metamask/sdk-react ethers@5.7.2 @react-native-async-storage/async-storage node-libs-expo react-native-background-timer react-native-randombytes react-native-url-polyfill react-native-get-random-values@1.8.0 -``` - - - - -### 3. Update the configuration file - -If you're using Expo, run the following command to create a default Metro configuration file: - -```bash -npx expo customize metro.config.js -``` - -In React Native or Expo, update the default Metro configuration file to the following: - - - - -```javascript title="metro.config.js" -const { getDefaultConfig, mergeConfig } = require("@react-native/metro-config") - -const defaultConfig = getDefaultConfig(__dirname) - -const config = { - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, - resolver: { - extraNodeModules: { - ...require("node-libs-react-native"), - }, - }, -} - -module.exports = mergeConfig(defaultConfig, config) -``` - - - - -```javascript title="metro.config.js" -const config = getDefaultConfig(__dirname) - -config.resolver.extraNodeModules = { - ...require("node-libs-expo"), -} - -config.transformer.getTransformOptions = async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, -}) - -module.exports = config -``` - - - - -### 4. Add import statements - -Add the following import statements to the React Native or Expo entry file: - - - - -```javascript title="index.js or App.tsx" -import "node-libs-react-native/globals" -import "react-native-url-polyfill/auto" -import "react-native-get-random-values" -``` - - - - -```javascript title="App.tsx" -import "node-libs-expo/globals" -import "react-native-url-polyfill/auto" -import "react-native-get-random-values" -``` - - - - -### 5. Prebuild the project - -If you're using Expo, prebuild the project using the following command: - -```bash -npx expo prebuild -``` - -React Native doesn't require prebuilding. - -### 6. Run the project - -Run the React Native or Expo project on Android or iOS using the following commands: - - - - -```bash -npx react-native run-android -npx react-native run-ios -``` - - - - -```bash -npx expo run:android -npx expo run:ios -``` - - - - -### 7. Use the SDK - -Initialize and use the SDK in your React Native or Expo project using the `useSDK` hook. -The following code snippets demonstrate how to use the hook. - -Import the hook: - -```javascript -import { useSDK } from "@metamask/sdk-react" -``` - -Initialize the SDK in your main component: - -```javascript -const { connect, disconnect, account, chainId, ethereum } = useSDK() -``` - -Connect to MetaMask: - -```javascript -const connectWallet = async () => { - try { - await connect() - } catch (error) { - console.error("Failed to connect wallet:", error) - } -} -``` - -Handle your dapp's state: - -```javascript -useEffect(() => { - // Use the account and chainId returned by useSDK. - if (account && chainId) { - // Handle account and network changes. - } -}, [account, chainId]) -``` - -Disconnect from MetaMask: - -```javascript -const disconnectWallet = async () => { - await disconnect() -} -``` - -## Examples - -See the [example React Native dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/reactNativeDemo) -and the [example Expo dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/expo-demo) -in the JavaScript SDK GitHub repository for more detailed implementations. diff --git a/wallet/connect/wallet-api.md b/wallet/connect/wallet-api.md deleted file mode 100644 index d7f0174f284..00000000000 --- a/wallet/connect/wallet-api.md +++ /dev/null @@ -1,451 +0,0 @@ ---- -description: Connect to MetaMask using the Wallet API and EIP-6963. -sidebar_label: Wallet API -toc_max_heading_level: 4 ---- - -# Connect to MetaMask using the Wallet API - -You can connect your dapp to users' MetaMask wallets by detecting MetaMask in their browsers and -connecting to their accounts. -This page provides instructions for connecting to MetaMask using the wallet detection mechanism -introduced by [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963). -This approach allows you to detect multiple installed wallets and connect to them without conflicts. - -:::info -Learn more about EIP-6963 in [Wallet interoperability](../concepts/wallet-interoperability.md). -::: - -:::tip -To connect to MetaMask without using EIP-6963, see the [Create a simple dapp](../tutorials/javascript-dapp-simple.md) tutorial. -::: - -You can connect to MetaMask [using third-party libraries](#connect-to-metamask-using-third-party-libraries) -or [directly using Vite](#connect-to-metamask-directly-using-vite). - -## Connect to MetaMask using third-party libraries - -You can connect to MetaMask using the following third-party libraries that support EIP-6963: - -- [Wagmi 2+](https://wagmi.sh) -- [Web3Modal 3+](https://docs.walletconnect.com/web3modal/about) -- [MIPD Store](https://github.com/wevm/mipd) -- [RainbowKit](https://www.rainbowkit.com) -- [Web3-Onboard](https://onboard.blocknative.com) -- [ConnectKit](https://docs.family.co/connectkit) - -## Connect to MetaMask directly using Vite - -To connect to MetaMask directly, we recommend implementing support for EIP-6963 using the -[Vite](https://vitejs.dev/) build tool with [vanilla TypeScript](#vanilla-typescript) or -[React TypeScript](#react-typescript). - -### Vanilla TypeScript - -Follow these steps for creating a vanilla TypeScript project to connect to MetaMask: - -#### 1. Create a project - -[Create a Vite project](https://v3.vitejs.dev/guide/#scaffolding-your-first-vite-project) using the -template for vanilla TypeScript: - -```bash -npm create vite@latest vanilla-ts-6963 -- --template vanilla-ts -``` - -#### 2. Set up the project - -In your Vite project, update `src/vite-env.d.ts` with the -[EIP-6963 interfaces](../concepts/wallet-interoperability.md#eip-6963-interfaces): - -```typescript title="vite-env.d.ts" -/// - -interface EIP6963ProviderInfo { - rdns: string - uuid: string - name: string - icon: string -} - -interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo - provider: EIP1193Provider -} - -type EIP6963AnnounceProviderEvent = { - detail: { - info: EIP6963ProviderInfo - provider: Readonly - } -} - -interface EIP1193Provider { - isStatus?: boolean - host?: string - path?: string - sendAsync?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - send?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - request: (request: { - method: string - params?: Array - }) => Promise -} -``` - -:::note -In addition to the EIP-6963 interfaces, you need a `EIP1193Provider` interface (defined by -[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193)), which is the foundational structure for -Ethereum wallet providers, and represents the essential properties and methods for interacting with -MetaMask and other Ethereum wallets in JavaScript. -::: - -#### 3. Update `main.ts` - -Update `src/main.ts` with the following code: - -```typescript title="main.ts" -import "./style.css" -import { listProviders } from "./providers.ts" - -document.querySelector("#app")!.innerHTML = ` -
    -
    -
    -` - -listProviders(document.querySelector("#providerButtons")!) -``` - -The `querySelector` finds and returns the first HTML element that matches the CSS selector `app`, -and sets its `innerHTML`. -You need to include a basic HTML structure with an inner `div` to inject a list of buttons, each -representing a detected wallet provider. - -You'll create the `listProviders` function in the next step, and pass an argument which represents -the `div` element. - -#### 4. Connect to wallets - -Create a file `src/providers.ts` with the following code: - -```ts title="providers.ts" -declare global { - interface WindowEventMap { - "eip6963:announceProvider": CustomEvent - } -} - -// Connect to the selected provider using eth_requestAccounts. -const connectWithProvider = async ( - wallet: EIP6963AnnounceProviderEvent["detail"] -) => { - try { - await wallet.provider.request({ method: "eth_requestAccounts" }) - } catch (error) { - console.error("Failed to connect to provider:", error) - } -} - -// Display detected providers as connect buttons. -export function listProviders(element: HTMLDivElement) { - window.addEventListener( - "eip6963:announceProvider", - (event: EIP6963AnnounceProviderEvent) => { - const button = document.createElement("button") - - button.innerHTML = ` - ${event.detail.info.name} -
    ${event.detail.info.name}
    - ` - - // Call connectWithProvider when a user selects the button. - button.onclick = () => connectWithProvider(event.detail) - element.appendChild(button) - } - ) - - // Notify event listeners and other parts of the dapp that a provider is requested. - window.dispatchEvent(new Event("eip6963:requestProvider")) -} -``` - -The `connectWithProvider` function connects the user to the selected provider using -[`eth_requestAccounts`](/wallet/reference/eth_requestaccounts). -The `wallet` object is passed as an argument to the function, indicating the argument type. - -The `listProviders` function uses a simplified approach. -Instead of mapping and joining an entire block of HTML, it directly passes the `event.detail` object -to the `connectWithProvider` function when a provider is announced. - -#### 5. View the project - -Run the following command to view and test the Vite project in your browser: - -```bash -npm run dev -``` - -#### Example - -See the [vanilla TypeScript example](https://github.com/MetaMask/vite-vanilla-ts-eip-6963) for more information. -You can clone the repository and run the example locally using `npm i && npm run dev`. - -### React TypeScript - -Follow these steps for creating a React TypeScript project to connect to MetaMask: - -#### 1. Create a project - -[Create a Vite project](https://v3.vitejs.dev/guide/#scaffolding-your-first-vite-project) using the -template for React TypeScript: - -```bash -npm create vite@latest react-ts-6963 -- --template react-ts -``` - -#### 2. Set up the project - -In your Vite project, update `src/vite-env.d.ts` with the -[EIP-6963 interfaces](../concepts/wallet-interoperability.md#eip-6963-interfaces): - -```typescript title="vite-env.d.ts" -/// - -interface EIP6963ProviderInfo { - rdns: string - uuid: string - name: string - icon: string -} - -interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo - provider: EIP1193Provider -} - -type EIP6963AnnounceProviderEvent = { - detail: { - info: EIP6963ProviderInfo - provider: Readonly - } -} - -interface EIP1193Provider { - isStatus?: boolean - host?: string - path?: string - sendAsync?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - send?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - request: (request: { - method: string - params?: Array - }) => Promise -} -``` - -:::note -In addition to the EIP-6963 interfaces, you need a `EIP1193Provider` interface (defined by -[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193)), which is the foundational structure for -Ethereum wallet providers, and represents the essential properties and methods for interacting with -MetaMask and other Ethereum wallets in JavaScript. -::: - -#### 3. Update `App.tsx` - -Update `src/App.tsx` with the following code: - -```ts title="App.tsx" -import "./App.css" -import { DiscoverWalletProviders } from "./components/DiscoverWalletProviders" - -function App() { - return ( - - ) -} - -export default App -``` - -This code renders the `DiscoverWalletProviders` component that you'll create in the next step, which -contains the logic for detecting and connecting to wallet providers. - -#### 4. Detect and connect to wallets - -In the `src/components` directory, create a component `DiscoverWalletProviders.tsx` with the -following code: - -```ts title="DiscoverWalletProviders.tsx" -import { useState } from "react" -import { useSyncProviders } from "../hooks/useSyncProviders" -import { formatAddress } from "~/utils" - -export const DiscoverWalletProviders = () => { - const [selectedWallet, setSelectedWallet] = useState() - const [userAccount, setUserAccount] = useState("") - const providers = useSyncProviders() - - // Connect to the selected provider using eth_requestAccounts. - const handleConnect = async (providerWithInfo: EIP6963ProviderDetail) => { - try { - const accounts = await providerWithInfo.provider.request({ - method: "eth_requestAccounts" - }) - - setSelectedWallet(providerWithInfo) - setUserAccount(accounts?.[0]) - } catch (error) { - console.error(error) - } - } - - // Display detected providers as connect buttons. - return ( - <> -

    Wallets Detected:

    -
    - { - providers.length > 0 ? providers?.map((provider: EIP6963ProviderDetail) => ( - - )) : -
    - No Announced Wallet Providers -
    - } -
    -
    -

    {userAccount ? "" : "No "}Wallet Selected

    - {userAccount && -
    -
    - {selectedWallet.info.name} -
    {selectedWallet.info.name}
    -
    ({formatAddress(userAccount)})
    -
    -
    - } - - ) -} -``` - -In this code: - -- `selectedWallet` is a state variable that holds the user's most recently selected wallet. -- `userAccount` is a state variable that holds the user's connected wallet's address. -- `useSyncProviders` is a custom hook that returns the providers array (wallets installed in the browser). - -The `handleConnect` function takes a `providerWithInfo`, which is an `EIP6963ProviderDetail` object. -That object is used to request the user's accounts from the provider using -[`eth_requestAccounts`](/wallet/reference/eth_requestaccounts). - -If the request succeeds, the `selectedWallet` and `userAccount` local state variables are set. - -Then, the component maps over the providers array and renders a button for each detected provider. - -Finally, if the `userAccount` state variable is not empty, the selected wallet icon, name, and -address are displayed. - -#### 5. Add React hooks - -Create a `src/hooks` directory and add a `store.ts` file with the following code: - -```ts title="hooks/store.ts" -declare global { - interface WindowEventMap { - "eip6963:announceProvider": CustomEvent - } -} - -// An array to store the detected wallet providers. -let providers: EIP6963ProviderDetail[] = [] - -export const store = { - value: () => providers, - subscribe: (callback: () => void) => { - function onAnnouncement(event: EIP6963AnnounceProviderEvent) { - if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) - return - providers = [...providers, event.detail] - callback() - } - - // Listen for eip6963:announceProvider and call onAnnouncement when the event is triggered. - window.addEventListener("eip6963:announceProvider", onAnnouncement) - - // Dispatch the event, which triggers the event listener in the MetaMask wallet. - window.dispatchEvent(new Event("eip6963:requestProvider")) - - // Return a function that removes the event listern. - return () => - window.removeEventListener("eip6963:announceProvider", onAnnouncement) - }, -} -``` - -Also, add a file `useSyncProviders.ts` with the following code to the `hooks` directory: - -```ts title="hooks/useSyncProviders.ts" -import { useSyncExternalStore } from "react" -import { store } from "./store" - -export const useSyncProviders = () => - useSyncExternalStore(store.subscribe, store.value, store.value) -``` - -This hook allows you to subscribe to MetaMask events, read updated values, and update components. -It uses the `store.value` and `store.subscribe` methods defined in the `store.ts` hook. - -#### 6. Create utility functions - -Create a `src/utils` directory and add a file `index.ts` with the following code: - -```ts title="index.ts" -export const formatBalance = (rawBalance: string) => { - const balance = (parseInt(rawBalance) / 1000000000000000000).toFixed(2) - return balance -} - -export const formatChainAsNum = (chainIdHex: string) => { - const chainIdNum = parseInt(chainIdHex) - return chainIdNum -} - -export const formatAddress = (addr: string) => { - const upperAfterLastTwo = addr.slice(0, 2) + addr.slice(2) - return `${upperAfterLastTwo.substring(0, 5)}...${upperAfterLastTwo.substring(39)}` -} -``` - -This is a good place to store utility functions that you might need to reuse throughout your dapp. -This example only uses the `formatAddress` function, but the others might be useful for other applications. - -#### Example - -See the [React TypeScript example](https://github.com/MetaMask/vite-react-ts-eip-6963) for more information. -You can clone the repository and run the example locally using `npm i && npm run dev`. - -### Next steps - -After connecting to MetaMask directly, you can: - -- [Detect, add, and switch networks](../how-to/manage-networks). -- [Send transactions](../how-to/send-transactions.md). -- [Sign data](../how-to/sign-data/index.md). -- [Display tokens, contract methods, and icons in MetaMask](../how-to/display). diff --git a/wallet/how-to/access-accounts.md b/wallet/how-to/access-accounts.md deleted file mode 100644 index a629501f41f..00000000000 --- a/wallet/how-to/access-accounts.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -description: Access a user's accounts and handle changed accounts. -sidebar_position: 1 ---- - -# Access a user's accounts - -User accounts are used in a variety of contexts in Ethereum, including as identifiers and for -[signing transactions](sign-data/index.md). -To request a signature from a user or have a user approve a transaction, your dapp can -access the user's accounts using the -[`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) RPC method. - -:::info note -`eth_requestAccounts` internally calls [`wallet_requestPermissions`](/wallet/reference/wallet_requestPermissions) -to [request permission](manage-permissions.md) to call the restricted -[`eth_accounts`](/wallet/reference/eth_accounts) method. -::: - -When accessing a user's accounts: - -- **Only** initiate a connection request in response to direct user action, such as - selecting a [connect button](#create-a-connect-button). -- **Always** disable the connect button while the connection request is pending. -- **Never** initiate a connection request on page load. - -## Create a connect button - -:::caution Important -This section describes how to create a single connect button. -When connecting to multiple wallets, use the [Connect to MetaMask](../get-started/wallet-api.md) guide to create -multiple connect buttons. -::: - -We recommend providing a button to allow users to connect MetaMask to your dapp. -Selecting this button should call `eth_requestAccounts` to access the user's accounts. - -For example, the following JavaScript code accesses the user's accounts when they select a connect -button: - -```javascript title="index.js" -// You should only attempt to request the user's account in response to user interaction, such as -// selecting a button. Otherwise, you pop-up spam the user like it's 1999. If you fail to retrieve -// the user's account, you should encourage the user to initiate the attempt. -const ethereumButton = document.querySelector(".enableEthereumButton") -const showAccount = document.querySelector(".showAccount") - -ethereumButton.addEventListener("click", () => { - getAccount() -}) - -// While awaiting the call to eth_requestAccounts, you should disable any buttons the user can -// select to initiate the request. MetaMask rejects any additional requests while the first is still -// pending. -async function getAccount() { - const accounts = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_requestAccounts" }) - .catch((err) => { - if (err.code === 4001) { - // EIP-1193 userRejectedRequest error. - // If this happens, the user rejected the connection request. - console.log("Please connect to MetaMask.") - } else { - console.error(err) - } - }) - const account = accounts[0] - showAccount.innerHTML = account -} -``` - -The following HTML code displays the button and the current account: - -```html title="index.html" - - -

    Account:

    -``` - -## Handle accounts - -Use the [`eth_accounts`](/wallet/reference/eth_accounts) -RPC method to handle user accounts. -Listen to the [`accountsChanged`](../reference/provider-api.md#accountschanged) provider event to -be notified when the user changes accounts. - -The following code handles user accounts and detects when the user changes accounts: - -```javascript title="index.js" -let currentAccount = null -provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_accounts" }) - .then(handleAccountsChanged) - .catch((err) => { - // Some unexpected error. - // For backwards compatibility reasons, if no accounts are available, eth_accounts returns an - // empty array. - console.error(err) - }) - -// Note that this event is emitted on page load. If the array of accounts is non-empty, you're -// already connected. -provider // Or window.ethereum if you don't support EIP-6963. - .on("accountsChanged", handleAccountsChanged) - -// eth_accounts always returns an array. -function handleAccountsChanged(accounts) { - if (accounts.length === 0) { - // MetaMask is locked or the user has not connected any accounts. - console.log("Please connect to MetaMask.") - } else if (accounts[0] !== currentAccount) { - // Reload your interface with accounts[0]. - currentAccount = accounts[0] - // Update the account displayed (see the HTML for the connect button) - showAccount.innerHTML = currentAccount - } -} -``` - -:::note -`eth_accounts` now returns the full list of accounts for which the user has permitted access to. -Previously, `eth_accounts` returned at most one account in the `accounts` array. -The first account in the array will always be considered the user's "selected" account. -::: - -## Disconnect a user's accounts - -Since `eth_requestAccounts` internally calls `wallet_requestPermissions` for permission to call -`eth_accounts`, you can use [`wallet_revokePermissions`](/wallet/reference/wallet_revokePermissions) -to revoke this permission, revoking your dapp's access to the user's accounts. - -This is useful as a method for users to log out (or disconnect) from your dapp. -You can then use [`wallet_getPermissions`](/wallet/reference/wallet_getPermissions) to determine -whether the user is connected or disconnected to your dapp. - -See [how to revoke permissions](manage-permissions.md#revoke-permissions-example) for an example. diff --git a/wallet/how-to/batch-json-rpc-requests.md b/wallet/how-to/batch-json-rpc-requests.md deleted file mode 100644 index 7b22de6aeee..00000000000 --- a/wallet/how-to/batch-json-rpc-requests.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -description: Batch multiple JSON-RPC requests using MetaMask SDK. -sidebar_position: 6 -tags: - - JavaScript SDK ---- - -# Batch JSON-RPC requests - -You can batch multiple JSON-RPC requests using [MetaMask SDK](../connect/metamask-sdk/index.md). - -The SDK's `metamask_batch` method enables you to batch multiple JSON-RPC requests in a single call, -providing a streamlined approach for dapps to interact with EVM networks, and enabling complex -sequences of actions. -This method enhances performance, usability, and efficiency by reducing the number of network calls -made to MetaMask. - -Use cases include: - -- **Batching multiple signatures** - Send multiple signing requests in one batch. - -- **Switching networks** - Switch the EVM network, perform an action such as sending a transaction, - and switch back, all in one batch. - -- **Mixed transactions and signatures** - Combine transaction sending and signing requests in one batch. - -`metamask_batch` opens up additional possibilities for sophisticated transaction flows in dapps, -enhancing the user experience and operational efficiency. - -## Prerequisites - -[Set up MetaMask SDK](../connect/metamask-sdk/javascript/index.md) in your JavaScript dapp. - -## Use the `metamask_batch` method - -`metamask_batch` takes an array of JSON-RPC requests (`ChainRPC[]`) as its parameter. - -Each request in the batch is independent. -The user receives a prompt for each action within the batch, allowing them to approve or reject -individual requests. -If any request is rejected, the entire batch fails and an error is returned, ensuring integrity in -transactional operations. - -The method returns an array of results corresponding to each request. - -### React / Next.js / React Native example - -The following is an example of using `metamask_batch` to batch -[`personal_sign`](/wallet/reference/personal_sign) and -[`eth_sendTransaction`](/wallet/reference/eth_sendtransaction) in React, Next.js, or React Native/Expo: - -```javascript title="index.js" -import { metamask_batch } from "metamask-sdk" - -function MyComponent() { - const handleBatchRequest = async () => { - const batchRequests = [ - { method: "personal_sign", params: ["message", "address"] }, - { - method: "eth_sendTransaction", - params: [ - { - /* Transaction parameters */ - }, - ], - }, - ] - - try { - const results = await metamask_batch(batchRequests) - console.log(results) // Process results. - } catch (error) { - console.error("Batch request failed", error) - } - } - - return -} -``` - -### Vue.js example - -The following is an example of using `metamask_batch` to batch -[`personal_sign`](/wallet/reference/personal_sign) and -[`eth_sendTransaction`](/wallet/reference/eth_sendtransaction) in Vue.js: - -```javascript title="App.vue" - -``` - -### Best practices - -Follow these guidelines when using `metamask_batch`: - -- **Ensure each request in the batch is properly formatted** according to the JSON-RPC specifications. - -- **Handle errors gracefully**, especially when a batch request is partially approved. - -- **Test batch operations thoroughly** to ensure consistent behavior across different networks and accounts. - -- **Be aware of the dependencies between chained requests.** - Avoid creating a dependency where the outcome of one request directly influences the context or - validity of a subsequent request within the same batch. - For example, avoid chaining a [`wallet_switchEthereumChain`](/wallet/reference/wallet_switchethereumchain) - request with [`eth_signTypedData_v4`](/wallet/reference/eth_signtypeddata_v4), because - `eth_signTypedData_v4` relies on the current chain ID, which would be altered by `wallet_switchEthereumChain`. - This approach ensures that each request in the batch operates independently and maintains its - integrity, regardless of changes introduced by preceding requests in the batch. diff --git a/wallet/how-to/display/_category_.json b/wallet/how-to/display/_category_.json deleted file mode 100644 index 18a9beba55f..00000000000 --- a/wallet/how-to/display/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "Display in MetaMask", - "position": 7, - "link": { - "type": "generated-index", - "slug": "how-to/display", - "description": "You can display a variety of components on a user's MetaMask interface." - } -} diff --git a/wallet/how-to/display/custom-modals.md b/wallet/how-to/display/custom-modals.md deleted file mode 100644 index bf534114ce9..00000000000 --- a/wallet/how-to/display/custom-modals.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -description: Display custom modals using the JavaScript SDK. -sidebar_position: 4 -tags: - - JavaScript SDK ---- - -# Display custom modals - -You can use [MetaMask SDK](../../connect/metamask-sdk/index.md) to display custom MetaMask modals. - -When integrating a web dapp with MetaMask, you can enhance the user experience by customizing the -logic and user interface of the displayed modals, which initiate user interactions such as prompting -the user to install MetaMask. -This page describes how to create a custom modal in React, but you can adapt the implementation to -other web frameworks such as Vue.js or pure HTML/JavaScript. - -## Prerequisites - -MetaMask SDK set up in your JavaScript dapp. -This example uses the [MetaMask React SDK](../../connect/metamask-sdk/javascript/react/index.md). - -## Steps - -### 1. Create a custom modal component - -Create a custom modal component that aligns with your dapp's design and functionality requirements. - -```javascript title="App.js" -import React from "react" - -const CustomModal = ({ onClose }) => ( -
    - -
    -) - -export default CustomModal -``` - -### 2. Implement custom modal logic - -When initializing [`MetaMaskProvider`](../../connect/metamask-sdk/javascript/react/index.md#3-wrap-your-project-with-metamaskprovider), -use the [`modals`](../../reference/sdk-js-options.md#modals) SDK option to set up custom behavior -for scenarios such as when MetaMask isn't installed. -For example: - -```javascript title="index.js" -import { MetaMaskProvider } from "@metamask/sdk-react" -import CustomModal from "./CustomModal" -import ReactDOM from "react-dom" - -const App = () => ( - { - let modalContainer = null - - return { - mount: () => { - modalContainer = document.createElement("div") - document.body.appendChild(modalContainer) - - ReactDOM.render( - { - ReactDOM.unmountComponentAtNode(modalContainer) - modalContainer.remove() - }} - />, - modalContainer - ) - }, - unmount: () => { - if (modalContainer) { - ReactDOM.unmountComponentAtNode(modalContainer) - modalContainer.remove() - } - }, - } - }, - }, - }} - > - {/* Other components */} - -) - -export default App -``` - -### 3. Test your custom modal - -Test your dapp to ensure the custom modal operates as intended, especially in scenarios such as when -MetaMask isn't installed. - -

    - -![Custom modal gif](../../assets/custom-modal.gif) - -

    - -## Example - -See the [example React dapp with a custom modal -implementation](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/react-with-custom-modal). -This example can serve as a starting point for understanding the approach, which you can then adapt -to other web frameworks as needed. diff --git a/wallet/how-to/display/icon.md b/wallet/how-to/display/icon.md deleted file mode 100644 index e871c2ce623..00000000000 --- a/wallet/how-to/display/icon.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -description: Set an icon on MetaMask for your dapp. -sidebar_position: 3 ---- - -# Display a dapp icon - -When your dapp makes a login request to a MetaMask user, MetaMask may render a modal that displays -your dapp icon. - -MetaMask retrieves this icon using the HTML selector ` link[rel="shortcut icon"]`, so you can -follow the [favicon standard](https://en.wikipedia.org/wiki/Favicon) to customize your dapp icon. -Make sure to have a `link` tag within your dapp's `head` with `rel = "shortcut icon"`, as in the -following example. -The tag's `href` attribute is used for assigning the dapp icon. - -```html - - - -``` diff --git a/wallet/how-to/display/method-names.md b/wallet/how-to/display/method-names.md deleted file mode 100644 index 64d19f9d30a..00000000000 --- a/wallet/how-to/display/method-names.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -description: Register a contract's method names with users. -sidebar_position: 2 ---- - -# Display a contract's method names - -MetaMask uses the [Ethereum Signature Database](https://www.4byte.directory/) to display -method names on the confirmation screen. -For many common method names, such as token methods, this allows MetaMask to look up the method -names by their [method signature](https://solidity.readthedocs.io/en/v0.4.21/abi-spec.html). -However, sometimes you're using a method that isn't in that database, and MetaMask simply -displays **Contract Interaction** to the user. - -To register your contract's method names so they show in the MetaMask interface, -[submit each method's signature to the Ethereum Signature Database](https://www.4byte.directory/submit/). diff --git a/wallet/how-to/display/tokens.md b/wallet/how-to/display/tokens.md deleted file mode 100644 index 372cc22a2bc..00000000000 --- a/wallet/how-to/display/tokens.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -description: Register a token with users using wallet_watchAsset. -sidebar_position: 1 ---- - -# Display tokens - -When a user opens MetaMask, they're shown some major tokens by default. -However, to display most custom ERC-20 tokens, the user must [turn on token autodetection or add the token -manually](https://support.metamask.io/managing-my-tokens/custom-tokens/how-to-display-tokens-in-metamask/). -To display a user's NFTs, the user must [turn on NFT autodetection or add their NFTs -manually](https://support.metamask.io/nfts/nft-tokens-in-your-metamask-wallet/). - -Manually adding tokens involves the user interacting with contract addresses, and is error-prone. - -You can improve the security and experience of displaying your -[ERC-20 token](#display-an-erc-20-token) or users' [NFTs](#display-nfts) in MetaMask by using the -[`wallet_watchAsset`](/wallet/reference/wallet_watchasset) RPC method. -`wallet_watchAsset` provides a friendly interface that prompts users to register tokens to their -MetaMask wallet, without having to interact with contract addresses. - -:::tip -With `wallet_watchAsset`, you can prompt users to add their ERC-20 tokens and NFTs even when they -have token autodetection or NFT autodetection disabled. - -Also, token autodetection only detects ERC-20 tokens on -[certain networks](https://support.metamask.io/managing-my-tokens/custom-tokens/how-to-display-tokens-in-metamask/#enhanced-token-detection), -and NFT autodetection only detects NFTs on Ethereum Mainnet. -With `wallet_watchAsset`, users can add tokens from other networks. -::: - -:::caution Experimental feature -Using `wallet_watchAsset` to display NFTs is experimental and currently only available on the -extension (not on mobile). -::: - -## Display an ERC-20 token - -To prompt users to add an ERC-20 token, you can add something like the following to your project script: - -```javascript -const tokenAddress = "0xd00981105e61274c8a5cd5a88fe7e037d935b513" -const tokenSymbol = "TUT" -const tokenDecimals = 18 -const tokenImage = "http://placekitten.com/200/300" - -try { - // 'wasAdded' is a boolean. Like any RPC method, an error can be thrown. - const wasAdded = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_watchAsset", - params: { - type: "ERC20", - options: { - // The address of the token. - address: tokenAddress, - // A ticker symbol or shorthand, up to 5 characters. - symbol: tokenSymbol, - // The number of decimals in the token. - decimals: tokenDecimals, - // A string URL of the token logo. - image: tokenImage, - }, - }, - }) - - if (wasAdded) { - console.log("Thanks for your interest!") - } else { - console.log("Your loss!") - } -} catch (error) { - console.log(error) -} -``` - -:::note -If the chain ID of your token doesn't match the user's network, they can get unexpected results. -We recommend [detecting the user's network chain ID](../manage-networks/detect-network.md) and -[prompting them to switch chains](/wallet/reference/wallet_switchethereumchain), if necessary. -::: - -For more examples, the following are live web dapps that let you enter your token details and share -them using a simple web link: - -- [WatchToken](https://vittominacori.github.io/watch-token/create/) -- [Add Token dapp](https://metamask.github.io/Add-Token/#edit) - -## Display NFTs - -:::caution Experimental feature -Using `wallet_watchAsset` to display NFTs is experimental and currently only available on the -extension (not on mobile). -See [MIP-1](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-1.md) -and the [MIP proposal lifecycle](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/PROCESS-GUIDE.md#proposal-lifecycle) -for more information. -::: - -You can prompt users to add a single NFT or multiple NFTs using `wallet_watchAsset`. -The add NFT interfaces look like the following: - -
    -
    - NFT confirmation -
    -
    - Multiple NFTs confirmation -
    -
    - -### Display a single NFT - -To prompt users to add a single NFT, add something like the following to your project script. -`wallet_watchAsset` supports both ERC-721 and ERC-1155 NFT standards. - -```javascript -try { - // wasAdded is a boolean. Like any RPC method, an error can be thrown. - const wasAdded = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_watchAsset", - params: { - type: "ERC721", // Or "ERC1155". - options: { - // The address of the token. - address: "0x742d35Cc6634C0532925a3b844Bc454e4438f44e", - // ERC-721 or ERC-1155 token ID. - tokenId: "1", - }, - }, - }) - - if (wasAdded) { - console.log("User successfully added the token!") - } else { - console.log("User did not add the token.") - } -} catch (error) { - console.log(error) -} -``` - -### Display multiple NFTs - -To prompt users to add multiple NFTs, use `sendAsync()` instead of -`request()` to call `wallet_watchAsset`. -For example: - -```javascript -provider // Or window.ethereum if you don't support EIP-6963. - .sendAsync([{ - method: "wallet_watchAsset", - params: { - type: "ERC721", - options: { - address: contractAddress, - tokenId: 1, - }, - } - }, { - method: "wallet_watchAsset", - params: { - type: "ERC721", - options: { - address: contractAddress, - tokenId: 2, - }, - }, - }, - ... - ]) -``` diff --git a/wallet/how-to/make-read-only-requests.md b/wallet/how-to/make-read-only-requests.md deleted file mode 100644 index 10000214cb2..00000000000 --- a/wallet/how-to/make-read-only-requests.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -sidebar_position: 5 -description: Use Infura and custom nodes to make direct, read-only requests in your JavaScript dapp. -tags: - - JavaScript SDK ---- - -# Make read-only requests - -You can use the [Infura API](/services) from your dapp with -[MetaMask SDK](../connect/metamask-sdk/index.md) installed to make direct, read-only JSON-RPC requests. - -Direct, read-only JSON-RPC requests are blockchain requests that do not require user wallet interaction. -Your dapp can directly call most [JSON-RPC API methods](/wallet/reference/json-rpc-api), bypassing -user wallet authentication for read-only operations. - -:::note -Your dapp cannot directly call the following RPC methods, which require user wallet interaction: - -- `eth_requestAccounts` -- `eth_sendTransaction` -- `eth_signTransaction` -- `eth_sign` -- `eth_accounts` -- `personal_sign` -- `eth_signTypedData_v4` -- `wallet_watchAsset` -- `wallet_addEthereumChain` -- `wallet_switchEthereumChain` - ::: - -Configure your dapp to make read-only requests using the [Infura API](#use-the-infura-api), -[custom nodes](#use-custom-nodes), or [both](#use-the-infura-api-and-custom-nodes). - -## Prerequisites - -- An Infura API key. - Create one by following the first two steps in the - [Infura getting started guide](/services/get-started/infura). - -- [An allowlist configured for your API key.](/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist) - - :::caution important - Your API key, when used with the SDK, is vulnerable to exposure. - If someone inspects your dapp's code, they can potentially retrieve your API key and submit - requests to Infura, impersonating your account. - - Use [allowlists](/developer-tools/dashboard/how-to/secure-an-api/use-an-allowlist) - to protect against this vulnerability. - You can restrict interactions with your API key to specific addresses, origins, user agents, and request methods. - We recommend using all allowlist options to maximize the security of your API key and dapp. - ::: - -- [MetaMask SDK set up](../connect/metamask-sdk/javascript/index.md) in your JavaScript dapp. - -## Use the Infura API - -To use the Infura API to make read-only requests, specify your Infura API key using the -[`infuraAPIKey`](../reference/sdk-js-options.md#infuraapikey) option when instantiating the SDK -in your dapp. - -```javascript -infuraAPIKey: "YOUR-API-KEY" -``` - -## Use custom nodes - -To use your own node (for example, with [Hardhat](https://hardhat.org/)) to make read-only requests, -specify your node's chain ID and RPC URL using the -[`readonlyRPCMap`](../reference/sdk-js-options.md#readonlyrpcmap) option when instantiating the -SDK in your dapp. - -```javascript -readonlyRPCMap: { - "0x539": "http://localhost:8545", -} -``` - -In this example, chain ID `0x539` maps to the custom node's RPC URL. - -## Use the Infura API and custom nodes - -You can use both the Infura API and custom nodes to make read-only requests by specifying both the -[`infuraAPIKey`](../reference/sdk-js-options.md#infuraapikey) and -[`readonlyRPCMap`](../reference/sdk-js-options.md#readonlyrpcmap) options when instantiating the -SDK in your dapp. - -```javascript -sdkOptions={{ - infuraAPIKey: "YOUR-API-KEY", - readonlyRPCMap: { - "0x539": "http://localhost:8545", - }, - // Other options. -}} -``` - -`infuraAPIKey` provides access to various networks supported by Infura, and `readonlyRPCMap` -provides access to custom nodes. -The `readonlyRPCMap` values override Infura networks in case of a conflict. - -Refer to the SDK's -[default RPC URLs map](https://github.com/MetaMask/metamask-sdk/blob/dd9a3aaa1b5afa208cdb0d0768916d15b8638b25/packages/sdk/src/services/MetaMaskSDK/InitializerManager/setupInfuraProvider.ts#L12) -to see how Infura networks are configured by default. -By defining your own `readonlyRPCMap`, you can override these defaults or add support for other networks. - -## Example - -The following is an example of using both the Infura API and custom nodes with the SDK: - -```javascript -sdkOptions={{ - infuraAPIKey: "YOUR-API-KEY", - readonlyRPCMap: { - // Custom node. - "0x539": "http://localhost:8545", - // Override Infura Mainnet. - "0x1": "https://mainnet.infura.io/v3/YOUR-API-KEY", - }, - defaultReadOnlyChainId: "0x1", - // Other options. -}} -``` - -In this example, read-only requests to Mainnet (chain ID `0x1`) use the Infura API, while read-only -requests to the local testnet (chain ID `0x539`) use the custom node. -[`defaultReadOnlyChainId`](../reference/sdk-js-options.md#defaultreadonlychainid) enables making -read-only requests before the user connects to MetaMask, and specifies to make those requests to Mainnet. diff --git a/wallet/how-to/manage-networks/_category_.json b/wallet/how-to/manage-networks/_category_.json deleted file mode 100644 index 6f807ee2e30..00000000000 --- a/wallet/how-to/manage-networks/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "Manage networks", - "position": 2, - "link": { - "type": "generated-index", - "slug": "how-to/manage-networks", - "description": "You can detect, add, and switch networks in MetaMask." - } -} diff --git a/wallet/how-to/manage-networks/add-network.md b/wallet/how-to/manage-networks/add-network.md deleted file mode 100644 index 06daa7b7349..00000000000 --- a/wallet/how-to/manage-networks/add-network.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -description: Prompt a user to add or switch to an Ethereum network. -sidebar_position: 2 ---- - -# Add a network - -In some cases, such as when [interacting with smart contracts](../../concepts/smart-contracts.md), -your dapp must connect a user to a new network in MetaMask. -Instead of the user [adding a new network manually](https://support.metamask.io/hc/en-us/articles/360043227612-How-to-add-a-custom-network-RPC#h_01G63GGJ83DGDRCS2ZWXM37CV5), -which requires them to configure RPC URLs and chain IDs, your dapp can use the -[`wallet_addEthereumChain`](/wallet/reference/wallet_addethereumchain) and -[`wallet_switchEthereumChain`](/wallet/reference/wallet_switchethereumchain) RPC methods to prompt -the user to add a specific, pre-configured network to their MetaMask wallet. - -These methods are specified by [EIP-3085](https://eips.ethereum.org/EIPS/eip-3085) and -[EIP-3326](https://eips.ethereum.org/EIPS/eip-3326), and we recommend using them together. - -1. `wallet_addEthereumChain` creates a confirmation asking the user to add the specified network to MetaMask. -2. `wallet_switchEthereumChain` creates a confirmation asking the user to switch to the specified network. - -The confirmations look like the following: - -
    -
    - Add network confirmation -
    -
    - Switch network confirmation -
    -
    - -:::note - -To add a local development network such as [Hardhat](https://hardhat.org) to MetaMask, see [Run a development network](../run-devnet.md). - -::: - -## Example - -The following is an example of using `wallet_addEthereumChain` and `wallet_switchEthereumChain` to -prompt a user to add and switch to a new network: - -```javascript -try { - await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_switchEthereumChain", - params: [{ chainId: "0xf00" }], - }) -} catch (switchError) { - // This error code indicates that the chain has not been added to MetaMask. - if (switchError.code === 4902) { - try { - await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_addEthereumChain", - params: [ - { - chainId: "0xf00", - chainName: "...", - rpcUrls: ["https://..."] /* ... */, - }, - ], - }) - } catch (addError) { - // Handle "add" error. - } - } - // Handle other "switch" errors. -} -``` diff --git a/wallet/how-to/manage-networks/detect-network.md b/wallet/how-to/manage-networks/detect-network.md deleted file mode 100644 index 03873a7e896..00000000000 --- a/wallet/how-to/manage-networks/detect-network.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: Detect a user's network and network changes. -sidebar_position: 1 ---- - -# Detect a user's network - -It's important to keep track of the user's network chain ID because all RPC requests are submitted -to the currently connected network. - -Use the [`eth_chainId`](/wallet/reference/eth_chainId) -RPC method to detect the chain ID of the user's current network. -Listen to the [`chainChanged`](../../reference/provider-api.md#chainchanged) provider event to -detect when the user changes networks. - -For example, the following code detects a user's network and when the user changes networks: - -```javascript title="index.js" -const chainId = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_chainId" }) - -provider // Or window.ethereum if you don't support EIP-6963. - .on("chainChanged", handleChainChanged) - -function handleChainChanged(chainId) { - // We recommend reloading the page, unless you must do otherwise. - window.location.reload() -} -``` diff --git a/wallet/how-to/manage-permissions.md b/wallet/how-to/manage-permissions.md deleted file mode 100644 index 7a8fe7b75d1..00000000000 --- a/wallet/how-to/manage-permissions.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -description: Request and revoke permissions to call restricted methods. -sidebar_position: 8 ---- - -# Manage permissions - -To call a restricted RPC method, your dapp must request permission from the user using -the [`wallet_requestPermissions`](/wallet/reference/wallet_requestPermissions) RPC method. -You can get the user's current permissions using [`wallet_getPermissions`](/wallet/reference/wallet_getPermissions), -and revoke permissions previously granted to your dapp using -[`wallet_revokePermissions`](/wallet/reference/wallet_revokePermissions). -These methods are specified by [EIP-2255](https://eips.ethereum.org/EIPS/eip-2255) and -[MIP-2](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md). - -`wallet_requestPermissions` creates a confirmation asking the user to connect to an account and -allow the dapp to call the requested method. -The confirmation screen describes the functions and data the requested method can access. -For example, something like the following confirmation displays when you request permission to call -the restricted method [`eth_accounts`](/wallet/reference/eth_accounts): - -
    -
    - Request permissions confirmation 1 -
    -
    - Request permissions confirmation 2 -
    -
    - -:::info note -To access accounts, we recommend using [`eth_requestAccounts`](/wallet/reference/eth_requestAccounts), -which automatically asks for permission to use `eth_accounts` by calling `wallet_requestPermissions` -internally. -See [how to access a user's accounts](access-accounts.md) for more information. -Granting permission for `eth_accounts` also grants access to [`eth_sendTransaction`](/wallet/reference/eth_sendTransaction), [`personal_sign`](/wallet/reference/personal_sign), and [`eth_signTypedData_v4`](/wallet/reference/eth_signTypedData_v4). -::: - -## Request permissions example - -The following example uses `wallet_requestPermissions` to request permission from the user to call `eth_accounts`: - -```javascript -document.getElementById("requestPermissionsButton", requestPermissions) - -function requestPermissions() { - provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_requestPermissions", - params: [{ eth_accounts: {} }], - }) - .then((permissions) => { - const accountsPermission = permissions.find( - (permission) => permission.parentCapability === "eth_accounts" - ) - if (accountsPermission) { - console.log("eth_accounts permission successfully requested!") - } - }) - .catch((error) => { - if (error.code === 4001) { - // EIP-1193 userRejectedRequest error - console.log("Permissions needed to continue.") - } else { - console.error(error) - } - }) -} -``` - -## Revoke permissions example - -The following example uses `wallet_revokePermissions` to revoke the dapp's permission to call `eth_accounts`: - -```javascript -await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "wallet_revokePermissions", - params: [ - { - eth_accounts: {}, - }, - ], - }) -``` diff --git a/wallet/how-to/onboard-users.md b/wallet/how-to/onboard-users.md deleted file mode 100644 index c8c9dd37984..00000000000 --- a/wallet/how-to/onboard-users.md +++ /dev/null @@ -1,208 +0,0 @@ ---- -sidebar_label: Onboard users -description: Simplify the MetaMask onboarding experience for your users. -sidebar_position: 10 ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use the MetaMask onboarding library - -Sending users away from your dapp to install MetaMask presents challenges. -You must inform the user to return to your dapp and refresh their browser after the installation. -Your dapp detects the user's newly installed MetaMask extension only after that refresh. - -You can use MetaMask's [onboarding library](https://github.com/MetaMask/metamask-onboarding) to -improve and simplify the onboarding experience. -The library exposes an API to initiate the onboarding process. - -During the onboarding process, the library registers your dapp as the origin of the onboarding request. -MetaMask checks for this origin after the user completes the onboarding flow. -If it finds an origin, the final confirmation button of the MetaMask onboarding flow indicates that -the user will be redirected back to your dapp. - -:::tip -[MetaMask SDK](../connect/metamask-sdk/index.md) incorporates the functionality of the MetaMask onboarding library. -You don't need to set up the onboarding library if you use the SDK. -::: - -## Steps - -1. Install [@metamask/onboarding](https://github.com/MetaMask/metamask-onboarding). -1. Import the library or include it in your page: - - ```javascript - // As an ES6 module - import MetaMaskOnboarding from "@metamask/onboarding" - // Or as an ES5 module - const MetaMaskOnboarding = require("@metamask/onboarding") - ``` - - Alternatively, you can include the prebuilt ES5 bundle that ships with the library: - - ```html - - ``` - -1. Create a new instance of the onboarding library: - - ```javascript - const onboarding = new MetaMaskOnboarding() - ``` - -1. Start the onboarding process in response to a user event (for example, a button click): - - ```javascript - onboarding.startOnboarding() - ``` - -## Example - -The following are example ways to use the onboarding library in various frameworks: - - - - -```jsx -import MetaMaskOnboarding from "@metamask/onboarding" -import React from "react" - -const ONBOARD_TEXT = "Click here to install MetaMask!" -const CONNECT_TEXT = "Connect" -const CONNECTED_TEXT = "Connected" - -export function OnboardingButton() { - const [buttonText, setButtonText] = React.useState(ONBOARD_TEXT) - const [isDisabled, setDisabled] = React.useState(false) - const [accounts, setAccounts] = React.useState([]) - const onboarding = React.useRef() - - React.useEffect(() => { - if (!onboarding.current) { - onboarding.current = new MetaMaskOnboarding() - } - }, []) - - React.useEffect(() => { - if (MetaMaskOnboarding.isMetaMaskInstalled()) { - if (accounts.length > 0) { - setButtonText(CONNECTED_TEXT) - setDisabled(true) - onboarding.current.stopOnboarding() - } else { - setButtonText(CONNECT_TEXT) - setDisabled(false) - } - } - }, [accounts]) - - React.useEffect(() => { - function handleNewAccounts(newAccounts) { - setAccounts(newAccounts) - } - if (MetaMaskOnboarding.isMetaMaskInstalled()) { - provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_requestAccounts" }) - .then(handleNewAccounts) - provider // Or window.ethereum if you don't support EIP-6963. - .on("accountsChanged", handleNewAccounts) - return () => { - provider // Or window.ethereum if you don't support EIP-6963. - .removeListener("accountsChanged", handleNewAccounts) - } - } - }, []) - - const onClick = () => { - if (MetaMaskOnboarding.isMetaMaskInstalled()) { - provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_requestAccounts" }) - .then((newAccounts) => setAccounts(newAccounts)) - } else { - onboarding.current.startOnboarding() - } - } - return ( - - ) -} -``` - - - - -The onboarding library ships with MetaMask's TypeScript types. -Modify the React example as follows to get type safety: - -```jsx --const onboarding = React.useRef(); -+const onboarding = React.useRef(); -``` - -This gives you editor auto-completion for the methods exposed by the library, and -helpful documentation: - -![Editor Highlighting](https://user-images.githubusercontent.com/4448075/85584481-ccc7ec00-b604-11ea-9b74-49c76ee0bf22.png) - - - - -```html - - - - MetaMask Onboarding Example - - - -

    Sample Dapp

    - - - - - -``` - -
    -
    diff --git a/wallet/how-to/run-devnet.md b/wallet/how-to/run-devnet.md deleted file mode 100644 index 3bfcc6ca2db..00000000000 --- a/wallet/how-to/run-devnet.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -description: Configure and connect to a Ganache development network. -sidebar_position: 11 ---- - -# Run a development network - -You can run a personal Ethereum development network using [Hardhat](https://hardhat.org/hardhat-network/docs/overview#hardhat-network), -which allows you to develop a dapp in a secure test environment. - -:::note -When using a local development blockchain such as Hardhat Network or -[anvil](https://book.getfoundry.sh/anvil/#overview-of-anvil), your node must calculate gas to make -transactions on MetaMask. -::: - -## Connect to Hardhat Network - -Follow these steps to connect MetaMask to Hardhat Network. - -1. [Set up a Hardhat project.](https://hardhat.org/hardhat-runner/docs/guides/project-setup) - -2. Create a new - [MetaMask seed phrase]() - specifically for development. - - :::caution important - Your seed phrase controls all your accounts, so we recommend keeping at least one seed phrase for - development, separate from any used to store real value. - You can manage multiple seed phrases by using multiple browser profiles, each with its own - MetaMask installation. - ::: - -3. In your `hardhat.config.js` file, specify a - [`networks` configuration](https://hardhat.org/hardhat-runner/docs/config#networks-configuration) - with a `hardhat` network. - In this `networks.hardhat` configuration: - - - Specify your MetaMask seed phrase in the - [`accounts.mnemonic`](https://hardhat.org/hardhat-network/docs/reference#accounts) field. - - :::tip - Alternatively, to prevent committing your seed phrase, we recommend adding your seed phrase to a - [`.env` file](https://docs.infura.io/tutorials/developer-tools/javascript-dotenv) and using the - `process.env` global variable in `hardhat.config.js`. - ::: - - - Specify the [chain ID `1337`](https://hardhat.org/hardhat-network/docs/metamask-issue) in the - [`chainId`](https://hardhat.org/hardhat-network/docs/reference#chainid) field. - - For example: - - ```js title="hardhat.config.js" - module.exports = { - networks: { - hardhat: { - accounts: { - mnemonic: process.env.SEED_PHRASE, - }, - chainId: 1337, - }, - }, - } - ``` - - Hardhat automatically gives each of your first 20 accounts 10000 test ether (you can modify - these numbers in the [`accounts`](https://hardhat.org/hardhat-network/docs/reference#accounts) - configuration), which makes it easy to start development. - -4. Run `npx hardhat node` to run Hardhat Network and expose a JSON-RPC interface. - -5. You can now connect MetaMask to your Hardhat Network RPC URL, `http://127.0.0.1:8545/`. - In the MetaMask extension: - - 1. In the upper left corner, select the network you're currently connected to. - - 2. Select **Add network**. - - 3. Select **Add a network manually**. - - 4. Enter your Hardhat Network RPC URL, `http://127.0.0.1:8545/` (or `http://localhost:8545`). - - 5. Enter your Hardhat Network chain ID, `1337` (or `0x539` in hexadecimal format). - - :::tip - Alternatively, you can add Hardhat Network to MetaMask using - [`wallet_addEthereumChain`](/wallet/reference/wallet_addethereumchain/?AddEthereumChainParameter[rpcUrls][0]=http://127.0.0.1:8545&AddEthereumChainParameter[chainId]=0x539&AddEthereumChainParameter[chainName]=Hardhat&AddEthereumChainParameter[nativeCurrency][name]=testEth&AddEthereumChainParameter[nativeCurrency][symbol]=testEth&AddEthereumChainParameter[nativeCurrency][decimals]=18) - in the interactive API playground. - ::: - -## Reset your local nonce calculation - -If you restart your development network, you can accidentally confuse MetaMask -because it calculates the next [nonce](send-transactions.md#nonce) based on both the -network state _and_ the known sent transactions. - -To clear MetaMask's transaction queue and reset its nonce calculation, go to **Settings > Advanced** -and select **Reset account**. - -## Next steps - -Once you have your development environment set up and development network running, you can -[connect your dapp to MetaMask](/wallet/how-to/connect) by setting up MetaMask SDK, detecting -MetaMask, detecting a user's network, and accessing a user's accounts. - -For an end-to-end example, you can also follow the -[Create a simple React dapp](../tutorials/react-dapp-local-state.md) tutorial. diff --git a/wallet/how-to/secure-dapp.md b/wallet/how-to/secure-dapp.md deleted file mode 100644 index 7bb060adab2..00000000000 --- a/wallet/how-to/secure-dapp.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -description: Secure your dapp using HTTPS and CSP. -sidebar_position: 12 ---- - -# Secure your dapp - -We recommend implementing security controls, such as [HTTPS](#use-https) and -[Content Security Policy (CSP)](#use-content-security-policy), to improve the security of your dapp -and protect your users. - -:::caution -The following security advice isn't exhaustive. -::: - -## Use HTTPS - -HTTPS can protect your dapp against attackers who might try to eavesdrop or tamper the communication -channel between your dapp and your users. -HTTPS encrypts data transmitted between the web server and the user's browser, making it -difficult for attackers to intercept or modify the data. - -To secure your dapp using HTTPS, obtain an SSL/TLS certificate from a trusted certificate authority (CA). -For example, [Let's Encrypt](https://letsencrypt.org/) offers free SSL/TLS certificates. - -Install the certificate it on your web server. -If you're using a static website hosting service, it might have a default way to enable HTTPS on -your dapp. - -## Use Content Security Policy - -Content Security Policy (CSP) is a security feature that can protect your dapp against various -types of attacks, such as [cross-site scripting (XSS)](https://owasp.org/www-community/attacks/xss/) -and [clickjacking](https://owasp.org/www-community/attacks/Clickjacking). - -CSP defines a set of policies that the browser must follow when displaying the dapp. -See the full list of CSP directives that you can enable for your dapp in the -[MDN CSP reference documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy). - -### Use CSP with a server setup - -If you dapp uses a server setup, enable CSP by setting the `Content-Security-Policy` header in all -responses from your server. -For example, in Express.js, add the following middleware at the top of your server: - -```js -app.use((req, res, next) => { - res.setHeader( - "Content-Security-Policy", - "default-src 'self'; frame-ancestors 'none'" - ) - next() -}) -``` - -In a header, this looks like the following: - -``` -Content-Security-Policy: default-src 'self'; frame-ancestors 'none' -``` - -See [more examples](https://content-security-policy.com/examples/) of CSP in popular web frameworks -and languages. - -### Use CSP with a static site - -If your dapp uses a third party hosting provider, and you can't set a custom -`Content-Security-Policy` header in the server responses, you can enable CSP by using the -[`` HTML tag](https://content-security-policy.com/examples/meta/). - -Add this tag to the `head` section of an HTML file to instruct the browser on which CSP directives -should be followed. -For example: - -```html - - - -``` - -### Configure your CSP - -CSP configuration is specific to each dapp. -We recommend starting with the following secure and restrictive CSP: - -```text -default-src 'self'; frame-ancestors 'none' -``` - -- `default-src 'self'` - By default, your dapp's code can't load or connect to content from outside - your domain. -- `frame-ancestors 'none'` - Your dapp can't be embedded within the webpage of another domain (to - prevent [clickjacking attacks](https://owasp.org/www-community/attacks/Clickjacking)). - -From here, you can make adjustments as needed by your dapp to support the content you want to load. -For example, if your dapp loads images hosted on [OpenSea](https://opensea.io/), you can enable this -by adding `img-src 'opensea.io'` to your CSP: - -```text -default-src: 'self'; frame-ancestors 'none'; img-src: 'opensea.io' -``` - -For more information and common use cases for CSP, see the -[MDN CSP documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP). diff --git a/wallet/how-to/send-transactions.md b/wallet/how-to/send-transactions.md deleted file mode 100644 index ceabb4657ee..00000000000 --- a/wallet/how-to/send-transactions.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -description: Send transactions using eth_sendTransaction. -sidebar_position: 4 ---- - -# Send transactions - -You can send a transaction in MetaMask using the -[`eth_sendTransaction`](/wallet/reference/eth_sendTransaction) -RPC method. - -For example, the following JavaScript gets the user's accounts and sends a transaction when they -select each button: - -```javascript title="index.js" -const ethereumButton = document.querySelector(".enableEthereumButton"); -const sendEthButton = document.querySelector(".sendEthButton"); - -let accounts = []; - -// Send Ethereum to an address. -sendEthButton.addEventListener("click", () => { - provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "eth_sendTransaction", - // The following sends an EIP-1559 transaction. Legacy transactions are also supported. - params: [ - { - // The user's active address. - from: accounts[0], - // Required except during contract publications. - to: , - // Only required to send ether to the recipient from the initiating external account. - value: , - // Customizable by the user during MetaMask confirmation. - gasLimit: '0x5028', - // Customizable by the user during MetaMask confirmation. - maxPriorityFeePerGas: '0x3b9aca00', - // Customizable by the user during MetaMask confirmation. - maxFeePerGas: '0x2540be400', - }, - ], - }) - .then((txHash) => console.log(txHash)) - .catch((error) => console.error(error)); -}); - -ethereumButton.addEventListener("click", () => { - getAccount(); -}); - -async function getAccount() { - accounts = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ method: "eth_requestAccounts" }); -} -``` - -The following HTML displays the buttons: - -```html title="index.html" - - -``` - -## Transaction parameters - -### Nonce - -:::note -MetaMask ignores this field. -::: - -In Ethereum, every transaction has a nonce, so each transaction can only be processed by the -blockchain once. -To be a valid transaction, either: - -- The nonce must be `0`. -- A transaction with a nonce of the previous number, from the same account, must have been processed. - -This means that transactions are always processed in order for a given account. - -Nonces are easy to mess up, especially when a user is interacting with multiple applications with -pending transactions using the same account, potentially across multiple devices. -Because of this, MetaMask doesn't allow dapp developers to customize nonces. -Instead, MetaMask -[assists the user in managing their transaction queue themselves](https://metamask.zendesk.com/hc/en-us/articles/360015489251). - -### Gas price - -Gas price is an optional parameter, and best used on private blockchains. - -In Ethereum, every transaction specifies a price for the gas it consumes. -To maximize their profit, block producers pick pending transactions with higher gas prices first -when creating the next block. -This means that a high gas price usually causes your transaction to be processed faster, at the cost -of greater transaction fees. - -Some networks, such as Layer 2 networks, might have a constant gas price or no gas price. -So while you can ignore this parameter on MetaMask's default networks, you might include it when -your dapp knows more about the target network than MetaMask does. -On the default networks, MetaMask allows users to choose between slow, medium, and fast options for -their gas price. - -Read about [how to use advanced gas controls](https://metamask.zendesk.com/hc/en-us/articles/360022895972). - -### Gas limit - -Gas limit is an optional parameter, since MetaMask automatically calculates a reasonable gas price. - -### To - -The `to` parameter is a hex-encoded Ethereum address. -It's required for transactions with a recipient (all transactions except for contract creation). - -Contract creation occurs when there is no `to` value but there is a `data` value. - -### Value - -The `value` parameter is a hex-encoded value of the network's native currency to send. -On Mainnet, this is [ether](https://www.ethereum.org/eth), which is denominated in wei. - -These numbers are often far higher precision than native JavaScript numbers, and can cause -unpredictable behavior if not anticipated. -We recommend using [BN.js](https://github.com/indutny/bn.js/) when manipulating -values intended for Ethereum. - -### Data - -The `data` parameter is required for smart contract creation. - -This field is also used for specifying contract methods and their parameters. -See the [Solidity ABI spec](https://solidity.readthedocs.io/en/develop/abi-spec.html) for more -information on how the data is encoded. - -### Chain ID - -:::note -MetaMask ignores this field. -::: - -The chain ID is derived from the user's current selected network. -Use [`eth_chainId`](/wallet/reference/eth_chainid) to get the user's chain ID. -If you need the network version, use [`net_version`](https://ethereum.org/en/developers/docs/apis/json-rpc/#net_version). - -In the future, MetaMask might allow connecting to multiple networks at the same time, at which point -this parameter will become important, so it might be useful to be in the habit of including it now. diff --git a/wallet/how-to/sign-data/connect-and-sign.md b/wallet/how-to/sign-data/connect-and-sign.md deleted file mode 100644 index b43ec7d5dfe..00000000000 --- a/wallet/how-to/sign-data/connect-and-sign.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -description: Use MetaMask SDK to connect and sign in a single interaction. -sidebar_position: 1 -tags: - - JavaScript SDK - - iOS SDK ---- - -# Connect and sign - -You can connect to MetaMask and sign data in a single interaction from your JavaScript, iOS, -Android, or Unity dapp using [MetaMask SDK](../../connect/metamask-sdk/index.md). - -The SDK's `connectAndSign` method provides a streamlined approach for dapps to interact with MetaMask. -This method combines the [`eth_requestAccounts`] and [`personal_sign`] RPC methods, executing them sequentially. -`connectAndSign` takes one parameter, the message string to be signed, and passes the message and -the output of [`eth_requestAccounts`] directly to [`personal_sign`]. - -This method enhances dapp user experience, especially on mobile platforms, by allowing users to -connect to MetaMask and sign a message in a single interaction, requiring only one switch between -the mobile dapp and MetaMask Mobile. -This is useful for various purposes such as authentication and transaction verification. - -

    - -

    - -The following instructions describe how to connect and sign in JavaScript. -You can also see the [Unity instructions](../../how-to/use-unity-sdk/connect-and-sign.md). - -## Prerequisites - -- [MetaMask SDK set up](../../connect/metamask-sdk/javascript/index.md) in your JavaScript dapp. - -- MetaMask Mobile version 7.10 or later. - Your users must have an updated version of MetaMask Mobile for this feature to work correctly. - For older versions of MetaMask, this function may not work as expected. - -## Use the `connectAndSign` method - -Use the `connectAndSign` method as follows: - -```javascript -const connectAndSign = async () => { - try { - const signResult = await sdk?.connectAndSign({ - msg: "Connect + Sign message", - }) - setResponse(signResult) - } catch (err) { - console.warn("failed to connect..", err) - } -} -``` - -To invoke `connectAndSign`: - -1. Ensure the `MetaMaskSDK` instance (`sdk` in this context) is properly initialized and available. -2. Call `connectAndSign` with the message to be signed. -3. Handle the promise to process the response or catch any errors. - -## Examples - -The following is an example of using the `connectAndSign` method in a React dapp, integrating it -into a functional component: - -```javascript -import React, { useState } from "react" -import { useSDK } from "@metamask/sdk-react" - -function MyComponent() { - const { sdk } = useSDK() - const [signedMessage, setSignedMessage] = useState("") - - const handleConnectAndSign = async () => { - try { - const message = "Your message here" - const signature = await sdk.connectAndSign({ msg: message }) - setSignedMessage(signature) - } catch (error) { - console.error("Error in signing:", error) - } - } - - return ( -
    - - {signedMessage &&

    Signed Message: {signedMessage}

    } -
    - ) -} -``` - -For a comprehensive React example, see the -[`App.tsx`](https://github.com/MetaMask/metamask-sdk/blob/main/packages/examples/create-react-app/src/App.tsx) -file of the example React dapp. - -For examples of using the `connectAndSign` function in Next.js and Vue.js, see the -[example Next.js dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/nextjs-demo) -and [example Vue.js dapp](https://github.com/MetaMask/metamask-sdk/tree/main/packages/examples/vuejs) -in the JavaScript SDK GitHub repository. - - - -[`eth_requestAccounts`]: /wallet/reference/eth_requestAccounts -[`personal_sign`]: /wallet/reference/personal_sign diff --git a/wallet/how-to/sign-data/index.md b/wallet/how-to/sign-data/index.md deleted file mode 100644 index 8275a9d5c8d..00000000000 --- a/wallet/how-to/sign-data/index.md +++ /dev/null @@ -1,250 +0,0 @@ ---- -description: Sign data using eth_signTypedData_v4 and personal_sign. -sidebar_position: 3 ---- - -# Sign data - -You can use the following RPC methods to request cryptographic signatures from users: - -- [`eth_signTypedData_v4`](#use-eth_signtypeddata_v4) - Use this method to request the most human-readable - signatures that are efficient to process on-chain. - We recommend this for most use cases. -- [`personal_sign`](#use-personal_sign) - Use this method for the easiest way to request human-readable - signatures that don't need to be efficiently processed on-chain. - -:::caution -[`eth_sign`](../../concepts/signing-methods.md#eth_sign) is deprecated. -::: - -:::note -MetaMask supports signing transactions using Trezor and Ledger hardware wallets. -These wallets only support signing data using `personal_sign`. -If you can't log in to a dapp when using a Ledger or Trezor, the dapp might be requesting you to -sign data using an unsupported method, in which case we recommend using your standard MetaMask account. -::: - -## Use `eth_signTypedData_v4` - -[`eth_signTypedData_v4`](/wallet/reference/eth_signTypedData_v4) -provides the most human-readable signatures that are efficient to process on-chain. -It follows the [EIP-712](https://eips.ethereum.org/EIPS/eip-712) specification to allow users to sign -typed structured data that can be verified on-chain. -It renders the structured data as usefully as possible to the user (for example, displaying known -account names in place of addresses). - -

    - -![eth_signTypedData_v4](../../assets/signTypedData.png) - -

    - -An `eth_signTypedData_v4` payload uses a standard format of encoding structs, but has a different -format for the top-level struct that is signed, which includes some metadata about the verifying -contract to provide replay protection of these signatures between different contract instances. - -We recommend using [`eth-sig-util`](https://github.com/MetaMask/eth-sig-util) to generate and -validate signatures. -You can use [`eip712-codegen`](https://github.com/danfinlay/eip712-codegen#readme) to generate most -of the Solidity required to verify these signatures on-chain. -It currently doesn't generate the top-level struct verification code, so you must write that part manually. -See -[this example implementation](https://github.com/delegatable/delegatable-sol/blob/fb34bb259890417285f7185bc6500fb0ab8bf86f/contracts/Delegatable.sol#L80). - -:::caution -Since the top-level struct type's name and the `domain.name` are presented to the user prominently -in the confirmation, consider your contract name, the top-level struct name, and the struct keys to -be a user-facing security interface. -Ensure your contract is as readable as possible to the user. -::: - -### Example - -The following is an example of using `eth_signTypedData_v4` with MetaMask: - -```javascript title="index.js" -signTypedDataV4Button.addEventListener("click", async function (event) { - event.preventDefault() - - // eth_signTypedData_v4 parameters. All of these parameters affect the resulting signature. - const msgParams = JSON.stringify({ - domain: { - // This defines the network, in this case, Mainnet. - chainId: 1, - // Give a user-friendly name to the specific contract you're signing for. - name: "Ether Mail", - // Add a verifying contract to make sure you're establishing contracts with the proper entity. - verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", - // This identifies the latest version. - version: "1", - }, - - // This defines the message you're proposing the user to sign, is dapp-specific, and contains - // anything you want. There are no required fields. Be as explicit as possible when building out - // the message schema. - message: { - contents: "Hello, Bob!", - attachedMoneyInEth: 4.2, - from: { - name: "Cow", - wallets: [ - "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", - "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF", - ], - }, - to: [ - { - name: "Bob", - wallets: [ - "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB", - "0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57", - "0xB0B0b0b0b0b0B000000000000000000000000000", - ], - }, - ], - }, - // This refers to the keys of the following types object. - primaryType: "Mail", - types: { - // This refers to the domain the contract is hosted on. - EIP712Domain: [ - { name: "name", type: "string" }, - { name: "version", type: "string" }, - { name: "chainId", type: "uint256" }, - { name: "verifyingContract", type: "address" }, - ], - // Not an EIP712Domain definition. - Group: [ - { name: "name", type: "string" }, - { name: "members", type: "Person[]" }, - ], - // Refer to primaryType. - Mail: [ - { name: "from", type: "Person" }, - { name: "to", type: "Person[]" }, - { name: "contents", type: "string" }, - ], - // Not an EIP712Domain definition. - Person: [ - { name: "name", type: "string" }, - { name: "wallets", type: "address[]" }, - ], - }, - }) - - var from = await web3.eth.getAccounts() - - var params = [from[0], msgParams] - var method = "eth_signTypedData_v4" - - provider // Or window.ethereum if you don't support EIP-6963. - .sendAsync( - { - method, - params, - from: from[0], - }, - function (err, result) { - if (err) return console.dir(err) - if (result.error) { - alert(result.error.message) - } - if (result.error) return console.error("ERROR", result) - console.log("TYPED SIGNED:" + JSON.stringify(result.result)) - - const recovered = sigUtil.recoverTypedSignature_v4({ - data: JSON.parse(msgParams), - sig: result.result, - }) - - if ( - ethUtil.toChecksumAddress(recovered) === - ethUtil.toChecksumAddress(from) - ) { - alert("Successfully recovered signer as " + from) - } else { - alert( - "Failed to verify signer when comparing " + result + " to " + from - ) - } - } - ) -}) -``` - -The following HTML displays a sign button: - -```html title="index.html" -

    Sign typed data v4

    - -``` - -See the [live example](https://metamask.github.io/test-dapp/#signTypedDataV4) and -[test dapp source code](https://github.com/MetaMask/test-dapp) for more information. - -## Use `personal_sign` - -[`personal_sign`](/wallet/reference/personal_sign) is the -easiest way to request human-readable signatures that don't need to be efficiently processed on-chain. -It's often used for signature challenges that are authenticated on a web server, such as -[Sign-In with Ethereum](siwe.md). - -

    - -![personal_sign](../../assets/personal_sign.png) - -

    - -Some other signers implement `personal_sign` as `eth_sign`, because the Go Ethereum client changed -the behavior of their `eth_sign` method. -Because MetaMask supports existing applications, MetaMask implements both `personal_sign` and `eth_sign`. -You might need to check what method your supported signers use for a given implementation. - -:::caution important - -- Don't use this method to display binary data, because the user wouldn't be able to understand what - they're agreeing to. -- If using this method for a signature challenge, think about what would prevent a phisher from - reusing the same challenge and impersonating your site. - Add text referring to your domain, or the current time, so the user can easily verify if this - challenge is legitimate. - ::: - -### Example - -The following is an example of using `personal_sign` with MetaMask: - -```javascript title="index.js" -personalSignButton.addEventListener("click", async function (event) { - event.preventDefault() - const exampleMessage = "Example `personal_sign` message." - try { - const from = accounts[0] - // For historical reasons, you must submit the message to sign in hex-encoded UTF-8. - // This uses a Node.js-style buffer shim in the browser. - const msg = `0x${Buffer.from(exampleMessage, "utf8").toString("hex")}` - const sign = await ethereum.request({ - method: "personal_sign", - params: [msg, from], - }) - personalSignResult.innerHTML = sign - personalSignVerify.disabled = false - } catch (err) { - console.error(err) - personalSign.innerHTML = `Error: ${err.message}` - } -}) -``` - -The following HTML displays a sign button: - -```html title="index.html" -

    Personal sign

    - -``` - -`personal_sign` prepends the message with `\x19Ethereum Signed Message:\n` before -hashing and signing it. - -See the [live example](https://metamask.github.io/test-dapp/#personalSign) and -[test dapp source code](https://github.com/MetaMask/test-dapp) for more information. diff --git a/wallet/how-to/sign-data/siwe.md b/wallet/how-to/sign-data/siwe.md deleted file mode 100644 index 2d424140af6..00000000000 --- a/wallet/how-to/sign-data/siwe.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -description: Enable your users to sign in with Ethereum. -sidebar_position: 2 ---- - -# Sign in with Ethereum - -You can set up [Sign-In with Ethereum (SIWE)](https://docs.login.xyz/) to enable users to easily -sign in to your dapp by authenticating with their MetaMask wallet. - -MetaMask supports the SIWE standard message format as specified in [ERC-4361](https://eips.ethereum.org/EIPS/eip-4361). -When your dapp prompts a user to sign a message that follows the SIWE format, -MetaMask parses the message and gives the user a friendly interface prompting them to sign in to -your dapp: - -

    - Sign-in with Ethereum request -

    - -## Domain binding - -MetaMask supports domain binding with SIWE to help prevent phishing attacks. -When a site asks a user to sign a SIWE message, but the domain in the message doesn't match the site -the user is on, MetaMask displays a warning in the sign-in interface. -The user must explicitly select to proceed, accepting the risk of a phishing attack. - -:::caution important -MetaMask displays a prominent warning for mismatched domains, but does **not** block users from -bypassing the warning and accepting the sign-in request. -This is to not break existing dapps that may have use cases for mismatched domains. -::: - -
    -
    - Sign-in bad domain -
    -
    - Sign-in bad domain pop-up -
    -
    - -## Example - -The following is an example of setting up SIWE with MetaMask using -[`personal_sign`](/wallet/reference/personal_sign): - -```javascript title="index.js" -const siweSign = async (siweMessage) => { - try { - const from = accounts[0] - const msg = `0x${Buffer.from(siweMessage, "utf8").toString("hex")}` - const sign = await provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "personal_sign", - params: [msg, from], - }) - siweResult.innerHTML = sign - } catch (err) { - console.error(err) - siweResult.innerHTML = `Error: ${err.message}` - } -} - -siwe.onclick = async () => { - const domain = window.location.host - const from = accounts[0] - const siweMessage = `${domain} wants you to sign in with your Ethereum account:\n${from}\n\nI accept the MetaMask Terms of Service: https://community.metamask.io/tos\n\nURI: https://${domain}\nVersion: 1\nChain ID: 1\nNonce: 32891757\nIssued At: 2021-09-30T16:25:24.000Z` - siweSign(siweMessage) -} -``` - -The following HTML displays the SIWE button: - -```html title="index.html" -

    Sign-In with Ethereum

    - -

    Result:

    -``` - -See the [live example](https://metamask.github.io/test-dapp/#siwe) and -[test dapp source code](https://github.com/MetaMask/test-dapp) for more information. diff --git a/wallet/how-to/use-unity-sdk/connect-and-sign.md b/wallet/how-to/use-unity-sdk/connect-and-sign.md deleted file mode 100644 index a9c9999b4c6..00000000000 --- a/wallet/how-to/use-unity-sdk/connect-and-sign.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: Connect and sign -tags: - - Unity SDK ---- - -# Connect and sign in Unity - -You can [connect and sign](../sign-data/connect-and-sign.md) in a single interaction from your Unity game. - -## Prerequisites - -- [MetaMask SDK set up](../../connect/metamask-sdk/gaming/unity.md) in your Unity game. - -- MetaMask Mobile version 7.10 or later. - Your users must have an updated version of MetaMask Mobile for this feature to work correctly. - For older versions of MetaMask, this function may not work as expected. - -## Steps - -1. Open your Unity project with the SDK installed. - -2. In your script, create a new function named `ConnectAndSign`: - - ```csharp - public void ConnectAndSign() - { - MetaMaskUnity.Instance.ConnectAndSign("This is a test message"); - } - ``` - - Replace the test message with any string message you want to sign. - - :::caution important - Make sure you initialize [`MetaMaskUnity.Instance`](../../../../reference/sdk-unity-api.md#instance) - before using this function. - To do so, enable **Initialize On Awake** in the **MetaMask Unity** script inspector, or run - [`MetaMask.Instance.Initialize()`](../../../../reference/sdk-unity-api.md#initialize). - ::: - -3. Call the `ConnectAndSign` function whenever you want to establish a connection and sign a message. - For example, you can call this function when a button is clicked: - - ```csharp - public void OnButtonClick() - { - ConnectAndSign(); - } - ``` diff --git a/wallet/how-to/use-unity-sdk/dweb.md b/wallet/how-to/use-unity-sdk/dweb.md deleted file mode 100644 index 979e39ac734..00000000000 --- a/wallet/how-to/use-unity-sdk/dweb.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -sidebar_position: 4 -sidebar_label: Enable human-readable addresses -description: Integrate Decentraweb into your Unity game to enable human-readable addresses. -tags: - - Unity SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Enable human-readable addresses in Unity - -You can integrate the [Decentraweb](https://decentraweb.org/) name resolver into your Unity game -with MetaMask SDK installed. -Decentraweb maps human-readable names to machine-readable identifiers, such as Ethereum addresses. -Integrating Decentraweb into your game allows users to interact with addresses in a more user-friendly way. - -## Prerequisites - -[MetaMask SDK set up](../../connect/metamask-sdk/gaming/unity.md) in your Unity game. - -## Initialize the integration wrapper - -Use the `newDWebAPIWrapper()` method to configure and initialize a C# integration wrapper, which -acts as a bridge between the MetaMask Unity SDK and the Decentraweb name resolver API. -This method initializes the wrapper with necessary configuration parameters, including -authentication details required to interact with the Decentraweb name resolver API. - -```csharp -// Initialize the wrapper. -var apiWrapper = newDWebAPIWrapper(); -``` - -## Convert a name to an Ethereum address - -Use the `ResolveNameAsync(name)` method to convert a human-readable name to the corresponding -Ethereum address. - -The C# integration wrapper translates the request into a format that the Decentraweb name resolver -API can understand, and sends the translated request to the name resolver using a standard HTTP POST request. - -The name resolver processes the request and responds with the Ethereum address. - - - - -```csharp -// Initialize the wrapper. -var apiWrapper = newDWebAPIWrapper(); - -// Get the user's human-readable name. -var name = "user.dweb"; - -// Resolve the name to an Ethereum address. -var address = await apiWrapper.ResolveNameAsync(name); -``` - - - - -```json -{ - "success": true, - "result": "0xcB3E45F337Dd3Beeba98F5F9F9A16e9cD152cC86" -} -``` - - - - -## Convert an Ethereum address to a name - -Use the `GetNameAsync(address)` method to convert an Ethereum address to the corresponding -human-readable name. - -The C# integration wrapper translates the request into a format the Unity SDK can understand, and -sends the translated request to the SDK. - -The SDK processes the request and responds with the human-readable name. - - - - -```csharp -// Initialize the wrapper. -var apiWrapper = newDWebAPIWrapper(); - -// Get the user's address. -var address = "0xcB3E45F337Dd3Beeba98F5F9F9A16e9cD152cC86" - -// Resolve the address to a human-readable name. -var name = await apiWrapper.GetNameAsync(address) -``` - - - - -```json -{ - "success": true, - "result": { - "name": "lordsats", - "confirmed": true - } -} -``` - - - - -## Example - -The following is an example of using the Unity SDK Decentraweb integration to create a transaction: - -```csharp -public async Task FormTransactionAsync() -{ - // Initialize the wrapper. - var apiWrapper = new DWebAPIWrapper(); - - // Get the user's human-readable name. - var name = "user.dweb"; - - // Resolve the name to an Ethereum address. - var address = await apiWrapper.ResolveNameAsync(name); - - // Form the transaction. - var transaction = new Transaction - { - To = address, - Value = 1.0m, - Gas = 21000 - }; - - // The rest of the transaction formation code. -} -``` diff --git a/wallet/how-to/use-unity-sdk/index.md b/wallet/how-to/use-unity-sdk/index.md deleted file mode 100644 index 1d670c81576..00000000000 --- a/wallet/how-to/use-unity-sdk/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -sidebar_position: 9 -description: Use the Unity SDK. -tags: - - Unity SDK ---- - -# Use the Unity SDK - -See the guides in this section for using advanced features of the Unity SDK: - -- [Connect and sign in Unity.](connect-and-sign.md) -- [Set up Infura in Unity.](infura.md) -- [Interact with smart contracts in Unity.](smart-contracts/index.md) -- [Enable human-readable addresses in Unity using Decentraweb.](dweb.md) - -You can also see the guide to [set up MetaMask SDK in your Unity game](../../connect/metamask-sdk/gaming/). diff --git a/wallet/how-to/use-unity-sdk/infura.md b/wallet/how-to/use-unity-sdk/infura.md deleted file mode 100644 index 34752c7a354..00000000000 --- a/wallet/how-to/use-unity-sdk/infura.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -description: Set up MetaMask SDK with Infura in your Unity game. -sidebar_position: 2 -sidebar_label: Set up Infura -tags: - - Unity SDK ---- - -# Set up Infura in Unity - -You can set up MetaMask SDK with [Infura](https://docs.infura.io/) in -your Unity game. - -## Prerequisites - -- An Infura API key. - Create one by following the first two steps in the - [Infura getting started guide](https://docs.infura.io/getting-started). - -- [An allowlist configured for your API key.](https://docs.infura.io/networks/ethereum/how-to/secure-a-project/use-an-allowlist) - - :::caution important - Your API key, when used with the SDK, is vulnerable to exposure. - If someone inspects your dapp's code, they can potentially retrieve your API key and submit - requests to Infura, impersonating your account. - - Use [allowlists](https://docs.infura.io/networks/ethereum/how-to/secure-a-project/use-an-allowlist) - to protect against this vulnerability. - You can restrict interactions with your API key to specific addresses, origins, user agents, and request methods. - We recommend using all allowlist options to maximize the security of your API key and dapp. - ::: - -- [MetaMask SDK set up](../../connect/metamask-sdk/gaming/unity.md) in your Unity game. - -## Steps - -1. Open your Unity project with the SDK installed. - -2. Navigate to the game object in your scene (or the Prefab instance) that currently stores the - `MetaMask Unity` script. - In the `Demo` scene, this is the `MetaMaskUnitySDK` game object. - -3. Select the `MetaMaskUnitySDK` Prefab to view its properties in the **Inspector** window. - -4. In the **MetaMask Unity (Script)** section, enter your Infura API key into the **Infura Project - Id** field. - -

    - -![MetaMask Unity script](../../assets/unity-infura.png) - -

    - -5. Save your changes. - This automatically configures all RPC URLs that Infura supports. diff --git a/wallet/how-to/use-unity-sdk/smart-contracts/contract-factory.md b/wallet/how-to/use-unity-sdk/smart-contracts/contract-factory.md deleted file mode 100644 index c928d1c6742..00000000000 --- a/wallet/how-to/use-unity-sdk/smart-contracts/contract-factory.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -sidebar_position: 2 -description: Learn about the contract factory in Unity. -tags: - - Unity SDK ---- - -# Contract factory - -When [interacting with smart contracts in Unity](index.md), the contract factory is responsible for -creating the [contract proxy class](contract-proxy-class.md) with the given -[contract interface](contract-interface.md) type `T`. - -## Contract factory types - -### Impromptu contract factory - -The impromptu contract factory uses the `Impromptu` library to return a new instance of `Contract` -that behaves likes the given interface type `T`. -Since the contract is a dynamic object, all method invocations to the returned object of type `T` -are automatically routed to the `Contract` class. - -:::note -The impromptu contract factory is only supported on Mono or in a runtime that has the CLR. -The IL2CPP runtime does not support this factory. -Use the backed type contract factory if you need a more concrete type. -::: - -### Backed type contract factory - -The backed type contract factory uses a concrete `class` type that inherits the `Contract` class and -the given interface type `T`. -To use this factory, the given interface must declare the class attribute `BackedType` -that specifies which concrete `class` type must be used when creating a new `Contract` instance. -The declared `class` must inherit from the given interface type `T`. - -```csharp -[BackedType(typeof(ERC20Backing))] -public interface ERC20 : IContract -{ - [EvmMethodInfo(Name = "decimals", View = true)] - [return: EvmParameterInfo(Type = "uint8")] - Task Decimals(); - - // Define other interface methods. -} -``` - -Inside the backed `class`, you must override all interface methods and either invoke custom logic or -use the `Contract` class to automatically perform the correct logic based on the method data. -You can use `var method = System.Reflection.MethodBase.GetCurrentMethod();` to get the current -method being invoked, and then you can use `base.InvokeMethod(MethodInfo method, object[] args)` to -invoke the correct logic for the given `method` and `args`. - -```csharp -public class ERC20Backing : Contract, ERC20 -{ - public string Address - { - get => base.Address; - } - - [EvmMethodInfo(Name = "decimals", View = true)] - [return: EvmParameterInfo(Type = "uint8")] - public Task Decimals() - { - var method = System.Reflection.MethodBase.GetCurrentMethod(); - return (Task) InvokeMethod(method, new object[] { }); - } - - // Define other interface methods. -} -``` - -The [contract code generator](index.md#generate-contract-code) automatically generates a backing -`class` for each contract interface generated. - -This contract factory is useful for when you need more concrete definitions of the contract -interface type `T`. -This can be useful in runtimes where `dynamic` or `DynamicObject` are not available (IL2CPP). - -## Set the contract factory - -To set the current contract factory, you can use `Contract.ContractFactory`: - -```csharp -Contract.ContractFactory = new BackedTypeContractFactory(); -``` - -You don't need to do this, unless you create a custom contract factory. -We recommend just using the default contract factories for each runtime: - -- Mono runtime - [Impromptu contract factory](#impromptu-contract-factory) -- IL2CPP runtime - [Backed typed contract factory](#backed-type-contract-factory) diff --git a/wallet/how-to/use-unity-sdk/smart-contracts/contract-interface.md b/wallet/how-to/use-unity-sdk/smart-contracts/contract-interface.md deleted file mode 100644 index 2a7dc02c2a7..00000000000 --- a/wallet/how-to/use-unity-sdk/smart-contracts/contract-interface.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -sidebar_position: 1 -description: Learn about the contract interface in Unity. -tags: - - Unity SDK ---- - -# Contract interface - -When [interacting with smart contracts in Unity](index.md), the `IContract` interface defines an -interface of a given contract. -This interface includes all the functions of the contract, and an optional constructor function and -`Bytecode` field. - -You can use the [contract code generator](index.md#generate-contract-code) to generate a contract -interface given a contract ABI or Hardhat artifact JSON file. - -To manually create a new contract interface, define a new interface that inherits from `IContract`. -Optionally, declare the [`BackedType` attribute](contract-factory.md#backed-type-contract-factory). - -```csharp -#if UNITY_EDITOR || !ENABLE_MONO -[BackedType(typeof(ERC20Backing))] -#endif -public interface ERC20 : IContract -{ - // Declare functions. -} -``` - -## Declare contract functions - -To declare a `view` or `pure` function of the contract, first set the return type, the function name -(may differ from the actual name), and all parameters the function takes in a Task: - -```csharp -#if UNITY_EDITOR || !ENABLE_MONO -[BackedType(typeof(ERC20Backing))] -#endif -public interface ERC20 : IContract -{ - Task BalanceOf(EvmAddress account); -} -``` - -Once you have the function written, simply add the `EvmMethodInfo` at the top of the function to -declare the metadata about the contract function. -This includes the `Name` and whether it's a `View` function: - -```csharp -#if UNITY_EDITOR || !ENABLE_MONO -[BackedType(typeof(ERC20Backing))] -#endif -public interface ERC20 : IContract -{ - [EvmMethodInfo(Name = "balanceOf", View = true)] - Task BalanceOf(EvmAddress account); -} -``` - -To define the EVM type for a parameter, you can use the `EvmParameterInfo` attribute. -However, this usually isn't needed, because the `Contract` class automatically infers most common -types, such as `EvmAddress` to be `address` and `string` to be `string`. - -```csharp -#if UNITY_EDITOR || !ENABLE_MONO -[BackedType(typeof(ERC20Backing))] -#endif -public interface ERC20 : IContract -{ - [EvmMethodInfo(Name = "balanceOf", View = true)] - Task BalanceOf([EvmParameterInfo(Type = "address")] string account); -} -``` - -To define the EVM return type for the function, you can use `EvmParamterInfo` on the return type: - -```csharp -#if UNITY_EDITOR || !ENABLE_MONO -[BackedType(typeof(ERC20Backing))] -#endif -public interface ERC20 : IContract -{ - [EvmMethodInfo(Name = "balanceOf", View = true)] - Task BalanceOf(EvmAddress account); - - [EvmMethodInfo(Name = "decimals", View = true)] - [return: EvmParameterInfo(Type = "uint8")] - Task Decimals(); -} -``` - -### Use the `Task` return type - -We recommend always using `Task` as the return type when declaring contract functions, even if -the given [provider](contract-provider.md) does not use `Task`. -When you don't use `Task`, the `Contract` class is blocked until a response from the given -`Provider` is received. -This means if the `Provider` returns a Task of the request, the `Contract` class is blocked until -that Task completes, which may lead to a deadlock. - -### Define a contract constructor - -To define a constructor function, use the `EvmConstructorMethod` attribute at the top of the -function declaring the constructor. -The return type of the function must be the type of the interface, since a new instance of the -interface is returned by the `Contract` class. - -Also, do one of the following: - -- Declare a `static readonly string Bytecode` in the interface that has the bytecode. - - ```csharp - #if UNITY_EDITOR || !ENABLE_MONO - [BackedType(typeof(ERC20Backing))] - #endif - public interface ERC20 : IContract - { - public static readonly string Bytecode = "0x6080604052348015620000115760008...."; - - [EvmConstructorMethod] - Task DeployNew(String name_, String symbol_); - - [EvmMethodInfo(Name = "balanceOf", View = true)] - Task BalanceOf(EvmAddress account); - - [EvmMethodInfo(Name = "decimals", View = true)] - [return: EvmParameterInfo(Type = "uint8")] - Task Decimals(); - } - ``` - -- Set the `Bytecode` field in the `EvmConstructorMethod` attribute. - - ```csharp - #if UNITY_EDITOR || !ENABLE_MONO - [BackedType(typeof(ERC20Backing))] - #endif - public interface ERC20 : IContract - { - [EvmConstructorMethod(Bytecode = "0x608060405238....")] - Task DeployNew(String name_, String symbol_); - - [EvmMethodInfo(Name = "balanceOf", View = true)] - Task BalanceOf(EvmAddress account); - - [EvmMethodInfo(Name = "decimals", View = true)] - [return: EvmParameterInfo(Type = "uint8")] - Task Decimals(); - } - ``` - -By default, the [contract code generator](index.md#generate-contract-code) uses the second option. diff --git a/wallet/how-to/use-unity-sdk/smart-contracts/contract-provider.md b/wallet/how-to/use-unity-sdk/smart-contracts/contract-provider.md deleted file mode 100644 index 4172750e54f..00000000000 --- a/wallet/how-to/use-unity-sdk/smart-contracts/contract-provider.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -sidebar_position: 4 -description: Learn about the contract provider in Unity. -tags: - - Unity SDK ---- - -# Contract provider - -When [interacting with smart contracts in Unity](index.md), the provider is similar to a JavaScript -provider. -The provider is responsible for sending the request formed inside the -[contract proxy class](contract-proxy-class.md) to the blockchain RPC node and optionally decoding -the response. -If the provider doesn't decode the response, then it's considered an [`ILegacyProvider`](#ilegacyprovider). - -## `IProvider` - -The `IProvider` interface defines the following function: - -```csharp -Task Request(string method, object[] parameters = null); -``` - -This function must send a JSON-RPC request with the given method and parameters. -It must decode the JSON-RPC result response into the type `TR`. - -The `IProvider` must also define two additional properties: - -```csharp -// The current chain ID the provider is connected to. -long ChainId { get; } - -// The current address connected to the provider. -string ConnectedAddress { get; } -``` - -For backwards compatibility, the `ILegacyProvider` function is also defined: - -```csharp -object Request(string method, object[] parameters = null); -``` - -To easily support this function, use `Request`: - -```csharp -public object Request(string method, object[] parameters = null) -{ - return this.Request(method, parameters); -} -``` - -## `ILegacyProvider` - -The `ILegacyProvider` is an interface that declares an interface that does not support response decoding. -The `ILegacyProvider` interface defines the following function: - -```csharp -object Request(string method, object[] parameters = null); -``` - -This function must send a JSON-RPC request with the given method and parameters. -It should decode the response, but it's not required. -It may return any of the following: - -- The response as a JSON string -- The response as a JSON string, wrapped in a Task -- The response decoded into some object -- The response decoded into some object, wrapped in a Task - -If the function returns a JSON string, then the `Contract` class attempts to deserialize the JSON -string into the desired type. -If it returns any other object type, the `Contract` class attempts to convert to the desired type by -first serializing the object into JSON, then deserializing the JSON back into the desired type. -The desired type is defined in the [contract interface](contract-interface.md) used. - -The `ILegacyProvider` must also define two additional properties: - -```csharp -// The current chain ID the provider is connected to. -long ChainId { get; } - -// The current address connected to the provider. -string ConnectedAddress { get; } -``` diff --git a/wallet/how-to/use-unity-sdk/smart-contracts/contract-proxy-class.md b/wallet/how-to/use-unity-sdk/smart-contracts/contract-proxy-class.md deleted file mode 100644 index aafa9fe280a..00000000000 --- a/wallet/how-to/use-unity-sdk/smart-contracts/contract-proxy-class.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -sidebar_position: 3 -description: Learn about the contract proxy class in Unity. -tags: - - Unity SDK ---- - -# Contract proxy class - -When [interacting with smart contracts in Unity](index.md), the contract proxy class is responsible -for performing: - -- Transaction serialization -- Transaction execution -- Transaction result deserialization - -The contract proxy class is also responsible for invoking the [provider](contract-provider.md) and attempts -to support both asynchronous and synchronous provider objects. - -Since the proxy class is responsible for a lot, some parts of the class may be decoupled into their -own components. -For example, transaction serialization and deserialization is not very customizable and will likely -be moved into its own component to allow more extendability. - -:::caution important -The contract proxy class should be considered an internal and unstable API. -You should never need to inherit the `Contract` class, unless you're using the -[backed type contract factory](contract-factory.md#backed-type-contract-factory). -However, the [contract code generator](index.md#generate-contract-code) already generates these -classes for you. - -You only need to use `Contract.Attach(string address, IProvider provider)`. -::: diff --git a/wallet/how-to/use-unity-sdk/smart-contracts/index.md b/wallet/how-to/use-unity-sdk/smart-contracts/index.md deleted file mode 100644 index a47e7df8e3c..00000000000 --- a/wallet/how-to/use-unity-sdk/smart-contracts/index.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: Interact with smart contracts -description: Interact with smart contracts in your Unity game. -tags: - - Unity SDK ---- - -# Interact with smart contracts in Unity - -You can interact with smart contracts from your Unity game with MetaMask SDK installed. - -## Prerequisites - -- [MetaMask SDK set up](../../connect/metamask-sdk/gaming/unity.md) in your Unity game. -- A [contract ABI](../../../../../concepts/smart-contracts.md#contract-abi) JSON file or - [Hardhat artifact](https://hardhat.org/hardhat-runner/docs/advanced/artifacts#compilation-artifacts) - JSON file - -## Generate contract code - -You can use the MetaMask Unity contract code generator to generate -[contract interface](contract-interface.md) files. -The code generator automatically generates backed types for all contract interfaces to be used by -the [contract factory](contract-factory.md#backed-type-contract-factory). - -In your Unity editor, go to **Tools > MetaMask > Contract ABI Converter**. -A new dialog box opens: - -

    - -![dialog](../../../assets/contract-abi-converter-dialog.png) - -

    - -Paste your contract ABI JSON file or Hardhat artifact JSON file. -If you plan to deploy your contract, you must provide a Hardhat artifact, since this -has the required [contract bytecode](../../../../../concepts/smart-contracts.md#contract-bytecode) needed for deployment. - -You can also specify the `Root Namespace` for the generated contract code, with the default value being `Contracts`. Ensure that you include `using Contracts`; at the beginning of your scripts before using the generated code. - -Select **Convert**, which opens a save dialog box. Then, select a folder to save the generated code files to, somewhere inside the `Assets` folder. - -## Use the contract - -After generating the contract code, you can use the contract using the -`Contract.Attach(...)` function. - -This function takes a type `T` which must be the interface type of the contract to use. -This function returns that type `T`. - -You must provide the `address` string the contract should be loaded from, and the -[provider](contract-provider.md) to use to interact with the contract. -Usually, the provider is `MetaMaskUnity.Instance.Wallet`. - -The following is an example of using a contract: - -```csharp -public async void Start() -{ - var metaMask = MetaMaskUnity.Instance.Wallet; - var address = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; - - ERC20 usdc = Contract.Attach(address, metaMask); -} -``` - -Once you have an instance of your contract interface of type `T` (in this example, `ERC20`), you may -invoke any function inside the interface type. -For example: - -```csharp -public async void Start() -{ - // Setup... - - var balance = await usdc.BalanceOf(metaMask.SelectedAddress); - Debug.Log(balance); -} -``` - -### Use contract templates - -The MetaMask Unity SDK offers several contract templates that you can create and manage inside the -Unity editor. -These templates are scriptable objects, so you can configure them once inside the editor and use -them throughout your scripts. -These templates automatically perform the `Contract.Attach` function for you and automatically -switch contract addresses when the network changes. - -You can create a new template by going to **Assets > Create > MetaMask > Contract Templates** and -selecting one of the following: - -- **ERC20** -- **ERC721** -- **ERC1155** - -Before using the contract template, configure the contract address to use for each chain: - -

    - -![empty template](../../../assets/unity-empty-template.png) - -

    - -Select **+** to add a new address/chain pair. -When adding a new address, if you don't see your desired blockchain listed, you can modify the -`ScriptableContract.ChainId` enum to include your chain and chain ID. - -

    - -![full template](../../../assets/unity-example-template.png) - -

    - -Once configured, you can use this scriptable object as a variable inside your scripts. -The contract template has the same interface and usage as if you used `Contract.Attach`, but the -setup and network switching is done for you. - -## Advanced topics - -To learn more about and customize your contract interactions using the Unity SDK, see the following topics: - -- [Contract interface](contract-interface.md) -- [Contract factory](contract-factory.md) -- [Contract proxy class](contract-proxy-class.md) -- [Contract provider](contract-provider.md) diff --git a/wallet/index.md b/wallet/index.md deleted file mode 100644 index e718f2b5fc0..00000000000 --- a/wallet/index.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Introduction ---- - -# Integrate your dapp with the MetaMask wallet - -Integrate your dapp with MetaMask using **MetaMask SDK** and the **Wallet API**. -Use MetaMask SDK to create a seamless connection between your dapp and MetaMask across desktop and -mobile platforms. -Use the Wallet API to interact with users' EVM accounts in MetaMask. - -Get started by [connecting to MetaMask](connect/index.md). - -## Why use MetaMask SDK? - -**MetaMask SDK** enables a reliable, secure, and seamless connection between your dapp and the -MetaMask browser extension or MetaMask Mobile, providing cross-platform compatibility with a -consistent user experience. -Key benefits include: - -- **Multi-platform support** – Connect from web, desktop, mobile, and gaming platforms. -- **Seamless connections** – Minimize reconnections and improve user experience, especially on mobile. -- **Mobile-first optimization** – Enable faster wallet interactions with instant deeplinks and advanced features. -- **Enhanced functionality** – Use [RPC request batching](how-to/batch-json-rpc-requests.md), - [EIP-6963](/wallet/concepts/wallet-interoperability.md) for wallet discovery, and wallet security enhancements. - -The **Wallet API** allows you to interact with users' EVM accounts using standardized JSON-RPC calls. -While you can connect to the MetaMask extension directly using just the Wallet API, we recommend -using the SDK with the Wallet API to take advantage of the SDK's benefits. - -## Where do I start? - -See [**Connect to MetaMask**](connect/index.md) to learn about the different connection options, -and get started quickly. - -## Questions? - -For more support, connect with the MetaMask team and community on [Consensys Discord](https://discord.gg/consensys). - -:::note MetaMask user support -For MetaMask user support, visit the [MetaMask Help Center](https://support.metamask.io/). -::: diff --git a/wallet/reference/new-reference.mdx b/wallet/reference/new-reference.mdx deleted file mode 100644 index e46cf7086d0..00000000000 --- a/wallet/reference/new-reference.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "new-reference" -hide_title: true -hide_table_of_contents: true -sidebar_class_name: "hidden" ---- - -import ParserOpenRPC from "@site/src/components/ParserOpenRPC" -import { NETWORK_NAMES } from "@site/src/plugins/plugin-json-rpc" - - diff --git a/wallet/reference/provider-api.md b/wallet/reference/provider-api.md deleted file mode 100644 index 2b7f5fad3b0..00000000000 --- a/wallet/reference/provider-api.md +++ /dev/null @@ -1,332 +0,0 @@ ---- -description: See the MetaMask Ethereum provider API reference. -sidebar_position: 3 ---- - -# Ethereum provider API - -This page is a reference for the Ethereum provider API of MetaMask's [Wallet API](../concepts/wallet-api.md). -MetaMask injects the provider API into websites visited by its users using the `window.ethereum` provider object. -You can use the provider [properties](#properties), [methods](#methods), and [events](#events) in your dapp. - -:::info Note -MetaMask supports [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963), which introduces an -alternative wallet detection mechanism to the `window.ethereum` injected provider. -This alternative mechanism enables dapps to support [wallet interoperability](../concepts/wallet-interoperability.md) -by discovering multiple injected wallet providers in a user's browser. -We recommend [using this mechanism to connect to MetaMask](../connect/index.md). - -You can access the provider API using the selected EIP-6963 provider object. -Throughout this documentation, we refer to the selected provider using `provider`. -::: - -## Properties - -### `isMetaMask` - -This property is `true` if the user has MetaMask installed, and `false` otherwise. - -:::note -This property is non-standard. -Non-MetaMask providers may also set this property to `true`. -::: - -#### Example - -```typescript -provider.isMetaMask // Or window.ethereum.isMetaMask if you don't support EIP-6963. -``` - -## Methods - -### `isConnected()` - -Indicates whether the provider is connected to the current chain. -If the provider isn't connected, the page must be reloaded to re-establish the connection. -See the [`connect`](#connect) and [`disconnect`](#disconnect) events for more information. - -:::note -This method is unrelated to [accessing a user's accounts](../how-to/access-accounts.md). -In the provider interface, "connected" and "disconnected" refer to whether the provider can make RPC -requests to the current chain. -::: - -#### Parameters - -None. - -#### Returns - -`true` if the provider is connected to the current chain, `false` otherwise. - -#### Example - -```typescript -provider.isConnected() // Or window.ethereum.isConnected() if you don't support EIP-6963. -``` - -### `request()` - -This method is used to submit [JSON-RPC API requests](/wallet/reference/json-rpc-api) to Ethereum using MetaMask. - -#### Parameters - -An object containing: - -- `method`: `string` - The JSON-RPC API method name. -- `params`: `array` or `object` - (Optional) Parameters of the RPC method. - In practice, if a method has parameters, they're almost always of type `array`. - -#### Returns - -A promise that resolves to the result of the RPC method call. -If the request fails, the promise rejects with an [error](#errors). - -#### Example - -The following is an example of using `request()` to call -[`eth_sendTransaction`](/wallet/reference/eth_sendTransaction): - -```javascript -provider // Or window.ethereum if you don't support EIP-6963. - .request({ - method: "eth_sendTransaction", - params: [ - { - from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", - to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", - gas: "0x76c0", // 30400 - gasPrice: "0x9184e72a000", // 10000000000000 - value: "0x9184e72a", // 2441406250 - data: "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", - }, - ], - }) - .then((result) => { - // The result varies by RPC method. - // For example, this method returns a transaction hash hexadecimal string upon success. - }) - .catch((error) => { - // If the request fails, the Promise rejects with an error. - }) -``` - -### `_metamask.isUnlocked()` - -:::caution -This method is experimental. -Use it at your own risk. -::: - -Indicates if MetaMask is unlocked by the user. -MetaMask must be unlocked to perform any operation involving user accounts. -Note that this method doesn't indicate if the user has exposed any accounts to the caller. - -#### Parameters - -None. - -#### Returns - -A promise that resolves to `true` if MetaMask is unlocked by the user, and `false` otherwise. - -#### Example - -```typescript -provider._metamask.isUnlocked() // Or window.ethereum._metamask.isUnlocked() if you don't support EIP-6963. -``` - -## Events - -The MetaMask provider emits events using the Node.js -[`EventEmitter`](https://nodejs.org/api/events.html) API. -The following is an example of listening to the [`accountsChanged`](#accountschanged) event. - -You should [remove listeners](#remove-event-listeners) after you're done listening to an event (for example, on component -`unmount` in React). - -```javascript -function handleAccountsChanged(accounts) { - // Handle new accounts, or lack thereof. -} - -provider // Or window.ethereum if you don't support EIP-6963. - .on("accountsChanged", handleAccountsChanged) - -// Later - -provider // Or window.ethereum if you don't support EIP-6963. - .removeListener("accountsChanged", handleAccountsChanged) -``` - -### `accountsChanged` - -```typescript -provider // Or window.ethereum if you don't support EIP-6963. - .on("accountsChanged", handler: (accounts: Array) => void); -``` - -The provider emits this event when the return value of the -[`eth_accounts`](/wallet/reference/eth_accounts) RPC -method changes. -`eth_accounts` returns either an empty array, or an array that contains the addresses of the accounts -the caller is permitted to access with the most recently used account first. -Callers are identified by their URL origin, which means that all sites with the same origin share -the same permissions. - -This means that the provider emits `accountsChanged` when the user's exposed account address changes. -Listen to this event to [handle accounts](../how-to/access-accounts.md#handle-accounts). - -### `chainChanged` - -```typescript -provider // Or window.ethereum if you don't support EIP-6963. - .on("chainChanged", handler: (chainId: string) => void); -``` - -The provider emits this event when the currently connected chain changes. -Listen to this event to [detect a user's network](../how-to/manage-networks/detect-network.md). - -:::caution Important - -We strongly recommend reloading the page upon chain changes, unless you have a good reason not to: - -```typescript -provider // Or window.ethereum if you don't support EIP-6963. - .on("chainChanged", (chainId) => window.location.reload()) -``` - -::: - -### `connect` - -```typescript -interface ConnectInfo { - chainId: string; -} - -provider // Or window.ethereum if you don't support EIP-6963. - .on("connect", handler: (connectInfo: ConnectInfo) => void); -``` - -The provider emits this event when it's first able to submit RPC requests to a chain. -We recommend listening to this event and using the -[`isConnected()`](#isconnected) provider method to determine when -the provider is connected. - -### `disconnect` - -```typescript -provider // Or window.ethereum if you don't support EIP-6963. - .on("disconnect", handler: (error: ProviderRpcError) => void); -``` - -The provider emits this event if it becomes unable to submit RPC requests to a chain. -In general, this only happens due to network connectivity issues or some unforeseen error. - -When the provider emits this event, it doesn't accept new requests until the connection to the chain -is re-established, which requires reloading the page. -You can also use the [`isConnected()`](#isconnected) provider method -to determine if the provider is disconnected. - -### `message` - -```typescript -interface ProviderMessage { - type: string; - data: unknown; -} - -provider // Or window.ethereum if you don't support EIP-6963. - .on("message", handler: (message: ProviderMessage) => void); -``` - -The provider emits this event when it receives a message that the user should be notified of. -The `type` property identifies the kind of message. - -RPC subscription updates are a common use case for this event. -For example, if you create a subscription using -[`eth_subscribe`](/wallet/reference/eth_subscribe), each -subscription update is emitted as a `message` event with a `type` of `eth_subscription`. - -### Remove event listeners - -#### `removeListener` - -Use the `removeListener` method to remove specific event listeners from an `EventEmitter` object. -In the following example `removeListener` is used to remove the `connect` and `accountsChanged` events: - -```javascript -// Use window.ethereum instead of provider if EIP-6963 is not supported. - -// Add listeners -provider.on("_initialized", updateWalletAndAccounts) -provider.on("connect", updateWalletAndAccounts) -provider.on("accountsChanged", updateWallet) -provider.on("chainChanged", updateWalletAndAccounts) -provider.on("disconnect", disconnectWallet) - -// Remove individual listeners -provider.removeListener("connect", updateWalletAndAccounts) -provider.removeListener("accountsChanged", updateWallet) -``` - -The first argument of `removeListener` is the event name, and the second argument is -a reference to the function passed to `on` for the event. - -#### `removeAllListeners` - -You can use `removeAllListeners` to remove all listeners from the event emitter at once. This method is helpful when you need to clean up all listeners simultaneously. - -:::caution - -Use `removeAllListeners` with caution. -This method clears all event listeners associated with the emitter, not only the listeners set up by the application code. -Using this method can unexpectedly clear important event handlers, interfere with scripts, and make debugging more complex. -You can use the `removeListener` method to safely remove specific listeners. - -::: - -```javascript -// Use window.ethereum instead of provider if EIP-6963 is not supported. - -// Add listeners -provider.on("_initialized", updateWalletAndAccounts) -provider.on("connect", updateWalletAndAccounts) -provider.on("accountsChanged", updateWallet) -provider.on("chainChanged", updateWalletAndAccounts) -provider.on("disconnect", disconnectWallet) - -// Remove all listeners -provider.removeAllListeners() -``` - -In the provided code example, `removeAllListeners` is called to remove all event listeners attached to the `provider` object. This cleanup function deletes any event listeners that are no longer needed. - -## Errors - -All errors returned by the MetaMask provider follow this interface: - -```typescript -interface ProviderRpcError extends Error { - message: string - code: number - data?: unknown -} -``` - -The [`request()`](#request) provider method throws errors eagerly. -You can use the error `code` property to determine why the request failed. -Common codes and their meaning include: - -- `4001` - The request is rejected by the user. -- `-32602` - The parameters are invalid. -- `-32603` - Internal error. - -For the complete list of errors, see [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193#provider-errors) -and [EIP-1474](https://eips.ethereum.org/EIPS/eip-1474#error-codes). - -:::tip -The [`eth-rpc-errors`](https://npmjs.com/package/eth-rpc-errors) package implements all RPC errors -returned by the MetaMask provider, and can help you identify their meaning. -::: diff --git a/wallet/reference/sdk-js-options.md b/wallet/reference/sdk-js-options.md deleted file mode 100644 index b1fe245cf0b..00000000000 --- a/wallet/reference/sdk-js-options.md +++ /dev/null @@ -1,477 +0,0 @@ ---- -description: See the JavaScript SDK options reference. -sidebar_position: 1 -tags: - - JavaScript SDK ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# JavaScript SDK options - -The [JavaScript version of MetaMask SDK](../connect/metamask-sdk/javascript/index.md) takes the -following options. - -### `checkInstallationImmediately` - - - - -```javascript -checkInstallationImmediately: -``` - - - - -```javascript -checkInstallationImmediately: true -``` - - - - -Enables or disables immediately checking if MetaMask is installed on the user's browser. -If `true`, the SDK checks for installation upon page load and sends a connection request, prompting -the user to install MetaMask if it's not already installed. -If `false`, the SDK waits for the connect method to be called to check for installation. - -The default is `false`. - -### `checkInstallationOnAllCalls` - - - - -```javascript -checkInstallationOnAllCalls: -``` - - - - -```javascript -checkInstallationOnAllCalls: true -``` - - - - -Enables or disables checking if MetaMask is installed on the user's browser before each RPC request. -The default is `false`. - -### `communicationLayerPreference` - - - - -```javascript -communicationLayerPreference: -``` - - - - -```javascript -communicationLayerPreference: SOCKET -``` - - - - -The preferred communication layer to use. -The default and only option is `SOCKET` for [Socket.IO](https://socket.io/docs/v4/). - -### `communicationServerUrl` - - - - -```javascript -communicationServerUrl: -``` - - - - -```javascript -communicationServerUrl: "https://metamask-sdk-socket.metafi.codefi.network/" -``` - - - - -The URL of the communication server to use. -This option is mainly used for debugging and testing the SDK. - -### `dappMetadata` - - - - -```javascript -dappMetadata: { - name: , - url: , - base64Icon: , -} -``` - - - - -```javascript -dappMetadata: { - name: "My Dapp", - url: "https://mydapp.com", - base64Icon: "data:image/png;base64,...", -} -``` - - - - -Metadata about the dapp using the SDK. -The metadata options are: - -- `name` - Name of the dapp -- `url` - URL of the dapp -- `base64Icon` - A base64-encoded icon - -:::tip important -Setting `dappMetaData` creates a clear and trustworthy user experience when connecting your dapp to -MetaMask Mobile. -MetaMask Mobile displays this metadata in the connection modal to help users identify and verify the -connection request. -::: - -### `defaultReadOnlyChainId` - - - - -```javascript -defaultReadOnlyChainId: -``` - - - - -```javascript -defaultReadOnlyChainId: "0x1" -``` - - - - -Enables sending [read-only RPC requests](../how-to/make-read-only-requests.md) to -this chain ID before the user connects to MetaMask. -The value is automatically updated to the chain ID used in MetaMask once connected. - -### `enableDebug` - - - - -```javascript -enableDebug: -``` - - - - -```javascript -enableDebug: false -``` - - - - -Enables or disables sending anonymous analytics to MetaMask to help improve the SDK. -The default is `true`. - -### `extensionOnly` - - - - -```javascript -extensionOnly: -``` - - - - -```javascript -extensionOnly: true -``` - - - - -Enables or disables automatically using the MetaMask browser extension if it's detected. -The default is `false`. - -### `infuraAPIKey` - - - - -```javascript -infuraAPIKey: -``` - - - - -```javascript -infuraAPIKey: process.env.INFURA_API_KEY -``` - - - - -The [Infura API key](/developer-tools/dashboard/get-started/create-api) to -use for RPC requests. -Configure this option to [make read-only RPC requests from your dapp](../how-to/make-read-only-requests.md). - -:::caution important -Use [Infura allowlists](https://docs.infura.io/networks/ethereum/how-to/secure-a-project/use-an-allowlist) -to protect against other people submitting requests to your API key. -You can restrict interactions to specific addresses, origins, user agents, and request methods. -We recommend using all allowlist options to maximize the security of your API key and dapp. -::: - -### `modals` - - - - -```javascript -modals: -``` - - - - -```javascript -modals: { - onPendingModalDisconnect: () => { - // Custom logic for pending modal disconnect. - }, - install: (params) => { - // Custom install modal logic. - const { link, debug, installer, terminate, connectWithExtension } = params; - return { - mount: (link) => { /* Custom mount logic */ }, - unmount: (shouldTerminate) => { /* Custom unmount logic */ }, - }; - }, - otp: ({ debug, onDisconnect }) => { - // Custom OTP modal logic. - return { - mount: () => { /* Custom mount logic */ }, - updateOTPValue: (otpValue) => { /* Custom OTP value update logic */ }, - unmount: () => { /* Custom unmount logic */ }, - }; - }, -} -``` - - - - -An object that allows you to [customize the logic and UI of the displayed modals](../how-to/display/display-custom-modals.md). -This is useful if your dapp requires a custom way to handle connection and reconnection scenarios. - -### `openDeeplink` - - - - -```javascript -openDeeplink: -``` - - - - -```javascript -openDeeplink: (link: string) => { - if (canOpenLink) { - Linking.openURL(link); - } -} -``` - - - - -A function that is called to open a deeplink to the MetaMask Mobile app. - -### `preferDesktop` - - - - -```javascript -preferDesktop: -``` - - - - -```javascript -preferDesktop: true -``` - - - - -Enables or disables preferring the MetaMask browser extension over MetaMask Mobile. -The default is `false`. - -### `readonlyRPCMap` - - - - -```javascript -readonlyRPCMap: -``` - - - - -```javascript -readonlyRPCMap: { - "0x539": "http://localhost:8545", -} -``` - - - - -A map of RPC URLs to use for [read-only RPC requests](../how-to/make-read-only-requests.md). - -### `shouldShimWeb3` - - - - -```javascript -shouldShimWeb3: -``` - - - - -```javascript -shouldShimWeb3: false -``` - - - - -Enables or disables shimming the `window.web3` object with the Ethereum provider returned by the SDK -(useful for compatibility with older browsers). -The default is `true`. - -### `timer` - - - - -```javascript -timer: BackgroundTimer -``` - - - - -Used by React Native dapps to keep the dapp alive while using -[`react-native-background-timer`](https://github.com/ocetnik/react-native-background-timer). - -### `transports` - - - - -```javascript -transports: -``` - - - - -```javascript -transports: ["websocket", "polling"] -``` - - - - -Sets the preference on [Socket.IO](https://socket.io/docs/v4/) transports. - -### `ui` - - - - -```javascript -ui: { - installer: , - confirm: , -} -``` - - - - -Options for customizing the SDK UI. - -### `useDeeplink` - - - - -```javascript -useDeeplink: -``` - - - - -```javascript -useDeeplink: true -``` - - - - -Enables or disables using deeplinks to connect with MetaMask Mobile. -If `false`, the SDK uses universal links instead. -The default is `false`. - -### `wakeLockType` - - - - -```javascript -wakeLockType: -``` - - - - -```javascript -wakeLockType: Temporary -``` - - - - -The type of wake lock to use when the SDK is running in the background. -Options are `Disabled`, `Temporary`, and `UntilResponse`. diff --git a/wallet/reference/sdk-unity-api.md b/wallet/reference/sdk-unity-api.md deleted file mode 100644 index 47fff9654f2..00000000000 --- a/wallet/reference/sdk-unity-api.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -description: See the Unity SDK API reference. -sidebar_position: 2 -toc_max_heading_level: 4 -tags: - - Unity SDK ---- - -# Unity SDK API - -The following is an overview of the API methods used in the [Unity SDK](../connect/metamask-sdk/gaming/unity.md). - -### `MetaMaskUnity` - -This is a singleton class that you can use to access the `MetaMaskWallet` instance, which is -specific to Unity. - -#### `Instance` - -This is the singleton instance of the `MetaMaskUnity` class that is lazy-loaded when you access it -for the first time. - -#### `Initialize` - -This method initializes the `MetaMaskWallet` instance and makes it accessible via the `Wallet` property. -You can also pass extra options and parameters to it to customize the wallet instance: - -```csharp -// Initialize using default settings. -MetaMaskUnity.Instance.Initialize(); - -// Initialize using custom transport and socket provider. -var transport = new MyCustomTransport(); -var socketProvider = new MyCustomSocketProvider(); -MetaMaskUnity.Instance.Initialize(transport, socketProvider); - -// Initialize using custom config, transport and socket provider. -var config = myMetaMaskConfig; -var transport = new MyCustomTransport(); -var socketProvider = new MyCustomSocketProvider(); -MetaMaskUnity.Instance.Initialize(config, transport, socketProvider); -``` - -#### `SaveSession` - -This method saves the current session to persistent storage. -It is useful when you want to save the session and restore it later. -When the application starts, it automatically calls this method. -You can also manually call this method. - -#### `LoadSession` - -This method loads the session from persistent storage. -It is useful when you want to restore the session after the application quits. -When the application starts, it automatically calls this method. -You can also manually call this method. - -### `MetaMaskWallet` - -#### `Connect` - -This method connects to MetaMask. -It renders a generated QR code in the user interface for your users to scan with MetaMask Mobile. -After the user scans this QR code, a connection screen appears in MetaMask Mobile where the user can -approve the connection with your Unity game. - -#### `Disconnect` - -This method disconnects the user from the MetaMask session. - -#### `Request` - -This method sends a request to MetaMask. -You can use it to call any [provider API method](provider-api.md). diff --git a/wallet/tutorials/javascript-dapp-simple.md b/wallet/tutorials/javascript-dapp-simple.md deleted file mode 100644 index 9299393ddf6..00000000000 --- a/wallet/tutorials/javascript-dapp-simple.md +++ /dev/null @@ -1,334 +0,0 @@ ---- -description: Create a simple dapp to integrate with MetaMask. -sidebar_position: 3 ---- - -# Create a simple dapp - -This tutorial walks you through creating a simple JavaScript dapp and integrating it with MetaMask. -It demonstrates the basics of connecting to MetaMask: detecting the MetaMask provider, detecting the user's network, and accessing the user's accounts. - -:::caution Learning tutorial -This tutorial is for educational purposes and connects to MetaMask using the legacy provider object, `window.ethereum`, for the sake of simplicity. -For deployment in a production environment, we recommend [connecting to MetaMask using EIP-6963](../how-to/connect/index.md) instead. - -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) introduces an alternative wallet detection mechanism to the `window.ethereum` provider, and enables dapps to support [wallet interoperability](../concepts/wallet-interoperability.md). - -For a full end-to-end tutorial that can be used in production, see the -[Create a simple React dapp](../tutorials/react-dapp-local-state.md) tutorial. -::: - -## Prerequisites - -- [Node.js](https://nodejs.org/en/) version 20+ -- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) version 9+ -- A text editor of your choice, such as [VS Code](https://code.visualstudio.com/). -- [MetaMask](https://metamask.io/) installed in the browser of your choice on your development machine. - -## Steps - -### 1. Set up the project - -Create a new project using [Vite](https://vitejs.dev/guide/): - -```bash -npm create vite@latest simple-dapp -- --template vanilla -``` - -Change into your project directory: - -```bash -cd simple-dapp -``` - -Install the dependencies listed in the project's `package.json`: - -```bash -npm install -``` - -### 2. Create the dapp structure - -In your project directory, create a `main.js` file: - -```bash -touch main.js -``` - -In `main.js`, add the following: - -```js title="main.js" -import "./style.css" - -document.querySelector("#app").innerHTML = ` - -

    Account:

    ` -``` - -Update `index.html` to include the script: - -```html title="index.html" - - - - - - - Simple dapp - - -
    - - - -``` - -### 3. Detect MetaMask - -:::caution -The `@metamask/detect-provider` module is deprecated, and is only used here for educational purposes. -In production environments, we recommend [connecting to MetaMask using EIP-6963](../how-to/connect/index.md). -::: - -Install the `@metamask/detect-provider` module in your project directory: - -```bash -npm i @metamask/detect-provider -``` - -Create a `src` directory and create a new file `detect.js`: - -```bash -mkdir src && touch src/detect.js -``` - -In a text editor, add the following code to `src/detect.js` to detect the MetaMask provider using `@metamask/detect-provider`: - -```js title="detect.js" -import detectEthereumProvider from "@metamask/detect-provider" - -async function setup() { - const provider = await detectEthereumProvider() - - if (provider && provider === window.ethereum) { - console.log("MetaMask is available!") - startApp(provider) // Initialize your dapp with MetaMask. - } else { - console.log("Please install MetaMask!") - } -} - -function startApp(provider) { - if (provider !== window.ethereum) { - console.error("Do you have multiple wallets installed?") - } -} - -window.addEventListener("load", setup) -``` - -### 4. Detect a user's network - -[Detect the user's network](../how-to/manage-networks/detect-network.md) to ensure all RPC requests -are submitted to the currently connected network. -Add the following code to `src/detect.js`, which uses the [`eth_chainId`](/wallet/reference/eth_chainId) -RPC method to detect the chain ID of the user's current network, and listens to the -[`chainChanged`](/wallet/reference/provider-api/#chainchanged) provider event to detect when the -user changes networks: - -```js title="detect.js" -const chainId = await window.ethereum.request({ method: "eth_chainId" }) - -window.ethereum.on("chainChanged", handleChainChanged) - -function handleChainChanged(chainId) { - // We recommend reloading the page, unless you must do otherwise. - window.location.reload() -} -``` - -### 5. Access a user's accounts - -To interact with Ethereum on the user's behalf, such as sending transactions or requesting balances, -your dapp needs to [access the user's accounts](../how-to/connect/access-accounts.md) by calling -[`eth_requestAccounts`](/wallet/reference/eth_requestaccounts). - -Add the following code to `src/detect.js`, which creates a button to allow users to connect to -MetaMask from your dapp. -Selecting the button activates the call to `eth_requestAccounts`, allowing you to access the user's accounts. - -```jsx title="detect.js" -// You should only attempt to request the user's account in response to user interaction, such as -// selecting a button. Otherwise, you risk spamming the user. If you fail to retrieve -// the user's account, you should encourage the user to initiate the attempt. -const ethereumButton = document.querySelector(".enableEthereumButton") -const showAccount = document.querySelector(".showAccount") - -ethereumButton.addEventListener("click", () => { - getAccount() -}) - -// While awaiting the call to eth_requestAccounts, you should disable any buttons the user can -// select to initiate the request. MetaMask rejects any additional requests while the first is still -// pending. -async function getAccount() { - const accounts = await window.ethereum - .request({ method: "eth_requestAccounts" }) - .catch((err) => { - if (err.code === 4001) { - // EIP-1193 userRejectedRequest error. - // If this happens, the user rejected the connection request. - console.log("Please connect to MetaMask.") - } else { - console.error(err) - } - }) - const account = accounts[0] - showAccount.innerHTML = account -} -``` - -Update `index.html` with the following HTML code, which displays the button and the current account: - -```html title="index.html" - - - - - - - Simple dapp - - - - - - -

    Account:

    - - -``` - -Save your changes and run the following command in your project directory to start a local -development server: - -```bash -npm run dev -``` - -Navigate to the local server URL to view the live dapp. -Something like the following displays: - -

    -Enable button -

    - -When you select the **Enable Ethereum** button, you are prompted to connect to MetaMask. - -![Connect and access dapp](../assets/tutorials/beginner-tutorial/connect.png) - -After connecting, your connected account displays: - -

    -View account -

    - -## Example - -The following code samples contain the full simple dapp JavaScript and HTML code that this tutorial walks through. -You can copy the following full examples to get started quickly. - -### JavaScript - -```jsx title="detect.js" -/*****************************************/ -/* Detect the MetaMask Ethereum provider */ -/*****************************************/ - -import detectEthereumProvider from "@metamask/detect-provider" - -async function setup() { - const provider = await detectEthereumProvider() - - if (provider && provider === window.ethereum) { - console.log("MetaMask is available!") - startApp(provider) - } else { - console.log("Please install MetaMask!") - } -} - -function startApp(provider) { - if (provider !== window.ethereum) { - console.error("Do you have multiple wallets installed?") - } -} - -window.addEventListener("load", setup) - -/**********************************************************/ -/* Handle chain (network) and chainChanged (per EIP-1193) */ -/**********************************************************/ - -const chainId = await window.ethereum.request({ method: "eth_chainId" }) - -window.ethereum.on("chainChanged", handleChainChanged) - -function handleChainChanged(chainId) { - window.location.reload() -} - -/*********************************************/ -/* Access the user's accounts (per EIP-1102) */ -/*********************************************/ - -const ethereumButton = document.querySelector(".enableEthereumButton") -const showAccount = document.querySelector(".showAccount") - -ethereumButton.addEventListener("click", () => { - getAccount() -}) - -async function getAccount() { - const accounts = await window.ethereum - .request({ method: "eth_requestAccounts" }) - .catch((err) => { - if (err.code === 4001) { - console.log("Please connect to MetaMask.") - } else { - console.error(err) - } - }) - const account = accounts[0] - showAccount.innerHTML = account -} -``` - -### HTML - -```html title="index.html" - - - - - - - Simple dapp - - - - - -

    Account:

    - - -``` - -## Next steps - -You've successfully created a simple dapp and connected it to MetaMask using JavaScript, Vite, and the `window.ethereum` provider. -With this setup, your dapp can interact with MetaMask and allow users to securely access accounts and send transactions on the Ethereum blockchain. - -As a next step, you can create a [React dapp with local state](react-dapp-local-state.md). -This follow-up tutorial walks you through integrating a simple React dapp with MetaMask using a -single JSX component for managing local state, and the Vite build tool with React and TypeScript to create the dapp. diff --git a/wallet/tutorials/react-dapp-global-state.md b/wallet/tutorials/react-dapp-global-state.md deleted file mode 100644 index 72a6a7a4f19..00000000000 --- a/wallet/tutorials/react-dapp-global-state.md +++ /dev/null @@ -1,822 +0,0 @@ ---- -description: Create a multi-component React dapp with global state using EIP-6963. -toc_max_heading_level: 4 -sidebar_position: 2 ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Create a React dapp with global state - -This tutorial walks you through integrating a React dapp with MetaMask. -The dapp has multiple components and requires managing the state globally, which can be helpful for -real-world use cases. -You'll use the [Vite](https://v3.vitejs.dev/guide) build tool with React and TypeScript to create -the dapp. - -The final state of the dapp will look like the following: - -![React dapp with global state](../assets/tutorials/react-dapp/react-tutorial-02-final-preview.png) - -In this tutorial, you'll put the state into a [React -Context](https://react.dev/reference/react/useContext) component, creating a [global -state](https://react.dev/learn/reusing-logic-with-custom-hooks#custom-hooks-sharing-logic-between-components) -that allows other components and UI elements to benefit from its data and functions. -You'll use `localStorage` to persist the selected wallet, ensuring the last connected wallet state -remains intact even after a page refresh. - -This tutorial addresses the edge case where a browser wallet might be disabled or uninstalled -between refreshes or visits to the dapp. -You'll add a disconnect function to reset the state, and use -[`wallet_revokePermissions`](/wallet/reference/wallet_revokePermissions) to properly disconnect from MetaMask. - -:::info Project source code -You can view the [dapp source code on GitHub](https://github.com/MetaMask/vite-react-global-tutorial). -::: - -## Prerequisites - -- [Node.js](https://nodejs.org/) version 18+ -- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) version 9+ -- A text editor (for example, [VS Code](https://code.visualstudio.com/)) -- The [MetaMask extension](https://metamask.io/download) installed -- Basic knowledge of TypeScript, React, React Context, and React Hooks - -:::tip -We recommend following the [Create a React dapp with local state](react-dapp-local-state.md) -tutorial first, which introduces [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963). -The tutorial demonstrates how to iterate over all discovered providers, connect to the selected -wallet, and remember the selection within a single component. - -If you skip the tutorial, consider reviewing [wallet -interoperability](../concepts/wallet-interoperability.md) to understand how multiple injected wallet -providers work. -::: - -## Steps - -### 1. Set up the project - -This project introduces a new structure, independent of previous tutorials. -Instead of reusing code or states, this tutorial guides you through breaking down the -single-component structure into multiple components. - -Set up a new project using Vite, React, and TypeScript by running the following command: - -```bash -npm create vite@latest vite-react-global-state -- --template react-ts -``` - -Install the node module dependencies: - -```bash -cd vite-react-global-state && npm install -``` - -Launch the development server: - -```bash -npm run dev -``` - -This displays a `localhost` URL in your terminal, where you can view the dapp in your browser. - -:::note -If you use VS Code, you can run the command `code .` to open the project. -If the development server has stopped, you can run the command `npx vite` or `npm run dev` to -restart your project. -::: - -Open the project in your editor. -Create three directories, `src/components`, `src/hooks`, and `src/utils`, in the root of the project -using the following commands: - -```bash -mkdir src/components && mkdir src/hooks && mkdir src/utils -``` - -Create the following files in `src/components`, which will be used to create components for listing -installed wallets, displaying connected wallet information, and handling errors: - -- `WalletList.tsx` -- `WalletList.module.css` -- `SelectedWallet.tsx` -- `SelectedWallet.module.css` -- `WalletError.tsx` -- `WalletError.module.css` - -Create the following files in `src/hooks`: - -- `Eip6963Provider.tsx` -- `useEip6963Provider.tsx` - -Create the following file in `src/utils`: - -- `index.ts` - -#### 1.1. Style the components - -Add the following CSS code to `SelectedWallet.module.css`: - -```css title="SelectedWallet.module.css" -.selectedWallet { - display: flex; - flex-flow: row nowrap; - justify-content: flex-start; - - padding: 0.6em 1.2em; - margin-bottom: 0.5em; - - font-family: inherit; - font-size: 1em; - font-weight: 500; -} -.selectedWallet > img { - width: 2em; - height: 1.5em; - margin-right: 1em; -} - -.providers { - display: flex; - flex-flow: column wrap; - justify-content: center; - align-items: center; - align-content: center; - - padding: 0.6em 1.2em; -} -``` - -Add the following CSS code to `WalletError.module.css`: - -```css title="WalletError.module.css" -.walletError { - margin-top: 1em; - border-radius: 0.5em; - height: 36px; - padding: 16px; - color: #efefef; - background-color: transparent; - user-select: none; -} -``` - -Add the following CSS code to `WalletList.module.css`: - -```css title="WalletList.module.css" -.walletList { - display: flex; - flex-direction: column; - align-items: center; -} -``` - -Append the following code to the end of `src/index.css`: - -```css title="index.css" -/* Added CSS */ -:root { - text-align: left; -} - -hr { - margin-top: 2em; - height: 1px; -} - -button { - min-width: 12em; - display: flex; - flex-flow: row nowrap; - justify-content: flex-start; - - align-items: center; - border-radius: 0.5em; - margin-bottom: 0.5em; - border: 1px solid transparent; -} - -button > img { - width: 1.5em; - height: 1.5em; - margin-right: 1em; -} - -button:hover { - border-color: #75079d; -} - -button:first-child { - margin-top: 0.5em; -} -button:last-child { - margin-bottom: 0; -} -``` - -#### 1.2. Project structure - -You now have some basic global and component-level styling for your dapp. -The directory structure in the dapp's `/src` directory should look like the following: - -```text -├── src -│ ├── assets -│ ├── components -│ │ ├── SelectedWallet.module.css -│ │ ├── SelectedWallet.tsx -│ │ ├── WalletError.module.css -│ │ ├── WalletError.tsx -│ │ ├── WalletList.module.css -│ │ └── WalletList.tsx -│ ├── hooks -│ │ ├── WalletProvider.tsx -│ │ └── useWalletProvider.tsx -│ ├── utils -│ │ └── index.tsx -├── App.css -├── App.tsx -├── index.css -├── main.tsx -├── vite-env.d.ts -``` - -### 2. Import EIP-6963 interfaces - -The dapp will connect to MetaMask using the mechanism introduced by -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963). - -:::info Why EIP-6963? -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) introduces an alternative wallet detection -mechanism to the `window.ethereum` injected provider. -This alternative mechanism enables dapps to support -[wallet interoperability](../concepts/wallet-interoperability.md) by discovering multiple injected -wallet providers in a user's browser. -::: - -Update the Vite environment variable file, `src/vite-env.d.ts`, with the types and interfaces -needed for [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) and -[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193): - -```tsx title="vite-env.d.ts" -/// - -// Describes metadata related to a provider based on EIP-6963. -interface EIP6963ProviderInfo { - rdns: string - uuid: string - name: string - icon: string -} - -// Represents the structure of a provider based on EIP-1193. -interface EIP1193Provider { - isStatus?: boolean - host?: string - path?: string - sendAsync?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - send?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - request: (request: { - method: string - params?: Array - }) => Promise -} - -// Combines the provider's metadata with an actual provider object, creating a complete picture of a -// wallet provider at a glance. -interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo - provider: EIP1193Provider -} - -// Represents the structure of an event dispatched by a wallet to announce its presence based on EIP-6963. -type EIP6963AnnounceProviderEvent = { - detail: { - info: EIP6963ProviderInfo - provider: Readonly - } -} - -// An error object with optional properties, commonly encountered when handling eth_requestAccounts errors. -interface WalletError { - code?: string - message?: string -} -``` - -### 3. Build the context provider - -In this step, you'll create the React Context component, which wraps the dapp and provides all -components access to the state and functions required to modify the state and manage connections to -discovered wallets. - -Add the following code to `src/hooks/WalletProvider.tsx` to import the context, define the -type alias, and define the context interface for the EIP-6963 provider: - -```tsx title="WalletProvider.tsx" -import { - PropsWithChildren, - createContext, - useCallback, - useEffect, - useState, -} from "react" - -// Type alias for a record where the keys are wallet identifiers and the values are account -// addresses or null. -type SelectedAccountByWallet = Record - -// Context interface for the EIP-6963 provider. -interface WalletProviderContext { - wallets: Record // A list of wallets. - selectedWallet: EIP6963ProviderDetail | null // The selected wallet. - selectedAccount: string | null // The selected account address. - errorMessage: string | null // An error message. - connectWallet: (walletUuid: string) => Promise // Function to connect wallets. - disconnectWallet: () => void // Function to disconnect wallets. - clearError: () => void -} -``` - -Add the following code to `src/hooks/WalletProvider.tsx` to extend the global `WindowEventMap` -interface with the custom `eip6963:announceProvider` event: - -```tsx title="WalletProvider.tsx" -declare global { - interface WindowEventMap { - "eip6963:announceProvider": CustomEvent - } -} -``` - -Explicitly declaring the custom `eip6963:announceProvider` event prevents type errors, enables -proper type checking, and supports autocompletion in TypeScript. - -Add the following code to `src/hooks/WalletProvider.tsx` to create the React Context for the -EIP-6963 provider with the defined interface `WalletProviderContext`, and define the -`WalletProvider` component: - -```tsx title="WalletProvider.tsx" showLineNumbers {6-12,14} -export const WalletProviderContext = createContext(null) - -// The WalletProvider component wraps all other components in the dapp, providing them with the -// necessary data and functions related to wallets. -export const WalletProvider: React.FC = ({ children }) => { - const [wallets, setWallets] = useState>({}) - const [selectedWalletRdns, setSelectedWalletRdns] = useState(null) - const [selectedAccountByWalletRdns, setSelectedAccountByWalletRdns] = useState({}) - - const [errorMessage, setErrorMessage] = useState("") - const clearError = () => setErrorMessage("") - const setError = (error: string) => setErrorMessage(error) - - useEffect(() => { - const savedSelectedWalletRdns = localStorage.getItem("selectedWalletRdns") - const savedSelectedAccountByWalletRdns = localStorage.getItem("selectedAccountByWalletRdns") - - if (savedSelectedAccountByWalletRdns) { - setSelectedAccountByWalletRdns(JSON.parse(savedSelectedAccountByWalletRdns)) - } - - function onAnnouncement(event: EIP6963AnnounceProviderEvent){ - setWallets(currentWallets => ({ - ...currentWallets, - [event.detail.info.rdns]: event.detail - })) - - if (savedSelectedWalletRdns && event.detail.info.rdns === savedSelectedWalletRdns) { - setSelectedWalletRdns(savedSelectedWalletRdns) - } - } - - window.addEventListener("eip6963:announceProvider", onAnnouncement) - window.dispatchEvent(new Event("eip6963:requestProvider")) - - return () => window.removeEventListener("eip6963:announceProvider", onAnnouncement) - }, []) -``` - -In this code sample, lines 6–12 are state definitions: - -- `wallets` - State to hold detected wallets. -- `selectedWalletRdns` - State to hold the Reverse Domain Name System (RDNS) of the selected wallet. -- `selectedAccountByWalletRdns` - State to hold accounts associated with each wallet. -- `errorMessage` - State to hold the error message when a wallet throws an error on connection. -- `clearError` - Function to clear the state in `errorMessage`. -- `setError` - Function to set the state in `errorMessage`. - -Line 14 is the `useEffect` hook and it handles the following: - -- Local storage retrieval - On mount, it retrieves the saved selected wallet and accounts from local storage. -- Event listener - It adds an event listener for the custom `eip6963:announceProvider` event. -- State update - When the provider announces itself, it updates the state. -- Provider request - It dispatches an event to request existing providers. -- Cleanup - It removes the event listener on unmount. - -Add the following code to `src/hooks/WalletProvider.tsx` to connect a wallet and update the component's state: - -```tsx title="WalletProvider.tsx" -const connectWallet = useCallback( - async (walletRdns: string) => { - try { - const wallet = wallets[walletRdns] - const accounts = (await wallet.provider.request({ - method: "eth_requestAccounts", - })) as string[] - - if (accounts?.[0]) { - setSelectedWalletRdns(wallet.info.rdns) - setSelectedAccountByWalletRdns((currentAccounts) => ({ - ...currentAccounts, - [wallet.info.rdns]: accounts[0], - })) - - localStorage.setItem("selectedWalletRdns", wallet.info.rdns) - localStorage.setItem( - "selectedAccountByWalletRdns", - JSON.stringify({ - ...selectedAccountByWalletRdns, - [wallet.info.rdns]: accounts[0], - }) - ) - } - } catch (error) { - console.error("Failed to connect to provider:", error) - const walletError: WalletError = error as WalletError - setError( - `Code: ${walletError.code} \nError Message: ${walletError.message}` - ) - } - }, - [wallets, selectedAccountByWalletRdns] -) -``` - -This code uses the `walletRdns` parameter to identify the wallet's RDNS for connecting. -It performs an asynchronous operation to request accounts from the wallet provider using the -[`eth_requestAccounts`](/wallet/reference/eth_requestaccounts) RPC method. - -Add the following code to `src/hooks/WalletProvider.tsx` to disconnect from a wallet: - -```tsx title="WalletProvider.tsx" -const disconnectWallet = useCallback(async () => { - if (selectedWalletRdns) { - setSelectedAccountByWalletRdns((currentAccounts) => ({ - ...currentAccounts, - [selectedWalletRdns]: null, - })) - - const wallet = wallets[selectedWalletRdns] - setSelectedWalletRdns(null) - localStorage.removeItem("selectedWalletRdns") - - try { - await wallet.provider.request({ - method: "wallet_revokePermissions", - params: [{ eth_accounts: {} }], - }) - } catch (error) { - console.error("Failed to revoke permissions:", error) - } - } -}, [selectedWalletRdns, wallets]) -``` - -:::caution important -[`wallet_revokePermission`](/wallet/reference/wallet_revokePermissions) is an experimental RPC -method that might only work with MetaMask. -Configuring the revocation in a try/catch block and separating it from the rest of the cleanup -ensures that if a wallet does not support this feature, the rest of the disconnect functionality -will still execute. -::: - -
    -Use of `useCallback` -

    -Both of the previous functions use `useCallback`. -It is used to memoize the `connectWallet` function, optimize performance, and prevent unnecessary re-renders. -It ensures the function instance remains consistent between renders if its dependencies are changed. - -For example, when using `disconnectWallet`, each time the `WalletProvider` component re-renders -without `useCallback`, a new instance of `disconnectWallet` is created. -This can cause unnecessary re-renders of child components that depend on this function. -By memoizing it with `useCallback`, React keeps the function instance consistent between renders, as -long as its dependencies (wallets and `selectedWalletRdns`) haven't changed, preventing unnecessary -re-renders of child components. - -Although `useCallback` is not strictly necessary, it demonstrates best practices. -Predicting how a context provider will be used or how the dapp might change or scale is difficult. -Using `useCallback` can improve performance in some cases by reducing unnecessary re-renders. - -

    -
    - -Add the following code to `src/hooks/WalletProvider.tsx` to bundle the state and functions using `contextValue`: - -```tsx title="WalletProvider.tsx" -const contextValue: WalletProviderContext = { - wallets, - selectedWallet: - selectedWalletRdns === null ? null : wallets[selectedWalletRdns], - selectedAccount: - selectedWalletRdns === null - ? null - : selectedAccountByWalletRdns[selectedWalletRdns], - errorMessage, - connectWallet, - disconnectWallet, - clearError, -} - -return ( - - {children} - -) -``` - -In the return statement, the `contextValue` object is constructed with all necessary state and -functions related to wallet management. -It is passed to the `WalletProviderContext.Provider`, making wallet-related data and functions -available to all descendant components. -The context provider wraps the children components, allowing them to access the context values. - -Add the following code to `src/hooks/useWalletProvider.tsx` to provide a custom hook that simplifies -the process of consuming the `WalletProviderContext`: - -```tsx title="useWalletProvider.tsx" -import { useContext } from "react" -import { WalletProviderContext } from "./WalletProvider" - -export const useWalletProvider = () => useContext(WalletProviderContext) -``` - -The benefit of this separate file exporting the hook is that components can directly call -`useWalletProvider()` instead of `useContext(WalletProviderContext)`, making the code cleaner and -more readable. - -### 4. Update the utility file - -Add the following code to `src/utils/index.ts`: - -```ts title="index.ts" -export const formatBalance = (rawBalance: string) => { - const balance = (parseInt(rawBalance) / 1000000000000000000).toFixed(2) - return balance -} - -export const formatChainAsNum = (chainIdHex: string) => { - const chainIdNum = parseInt(chainIdHex) - return chainIdNum -} - -export const formatAddress = (addr: string) => { - const upperAfterLastTwo = addr.slice(0, 2) + addr.slice(2) - return `${upperAfterLastTwo.substring(0, 5)}...${upperAfterLastTwo.substring(39)}` -} -``` - -Although `formatAddress` is the only function used, `formatBalance` and `formatChainAsNum` are -added as useful utility functions. -Explore [Viem formatters](https://viem.sh/docs/chains/formatters) or other libraries for additional -formatting options. - -### 5. Wrap components with the context provider - -With `WalletProvider.tsx` and `useWalletProvider.tsx`, the dapp can manage and access wallet-related -state and functionality across various components. -You can now wrap the entire dapp (the part that requires wallet connection and data) with a -`WalletProvider` component. - -Replace the code in `src/App.tsx` with the following: - -```tsx title="App.tsx" -import "./App.css" -import { WalletProvider } from "~/hooks/WalletProvider" -// import { WalletList } from "./components/WalletList" -// import { SelectedWallet } from "./components/SelectedWallet" -// import { WalletError } from "./components/WalletError" - -function App() { - return ( - - {/* - -
    - - - */} -
    - ) -} - -export default App -``` - -The child components are currently commented out, but as you create each of these components, you'll -uncomment the specific lines. - -### 6. Display detected wallets - -Add the following code to `src/components/WalletList.tsx` to display detected wallets: - -```tsx title="WalletList.tsx" -import { useWalletProvider } from "~/hooks/useWalletProvider" -import styles from "./WalletList.module.css" - -export const WalletList = () => { - const { wallets, connectWallet } = useWalletProvider() - return ( - <> -

    Wallets Detected:

    -
    - {Object.keys(wallets).length > 0 ? ( - Object.values(wallets).map((provider: EIP6963ProviderDetail) => ( - - )) - ) : ( -
    there are no Announced Providers
    - )} -
    - - ) -} -``` - -This component checks if there are any detected wallets. -If wallets are detected, it iterates over them and renders a button for each one. - -- `Object.keys(wallets)` returns an array of the wallet keys (`rdns` values). - It is used to check the length. -- `Object.values(wallets)` returns an array of the wallet objects. - It is used to map and render. -- `wallet.info.rdns` is used as the key to ensure that each wallet button is uniquely identified. - -Uncomment the `WalletList` component in `src/App.tsx` and run the dapp. -Something like the following displays: - -![View of WalletList component](../assets/tutorials/react-dapp/react-tutorial-02-wallet-list.png) - -### 7. Display wallet data - -Add the following code to `src/components/SelectedWallet.tsx` to display data for the selected wallet: - -```tsx title="SelectedWallet.tsx" showLineNumbers {11-22} -import { useWalletProvider } from "~/hooks/useWalletProvider" -import { formatAddress } from "~/utils" -import styles from "./SelectedWallet.module.css" - -export const SelectedWallet = () => { - const { selectedWallet, selectedAccount, disconnectWallet } = - useWalletProvider() - - return ( - <> -

    - {selectedAccount ? "" : "No "}Wallet Selected -

    - {selectedAccount && ( - <> -
    - {selectedWallet.info.name} -
    {selectedWallet.info.name}
    -
    ({formatAddress(selectedAccount)})
    -
    - uuid: {selectedWallet.info.uuid} -
    -
    - rdns: {selectedWallet.info.rdns} -
    -
    - - - )} - - ) -} -``` - -The code in lines 11-22 have conditional rendering, ensuring that the content inside is only -displayed if `selectedAccount` is true. This ensures that detailed information about the selected wallet is only displayed when an active -wallet is connected. - -You can display information about the wallet, and conditionally render anything related to the following: - -- Wallet address -- Wallet balance -- Chain ID or name -- Other components that first need a connected wallet to work - -Uncomment the `SelectedWallet` component in `src/App.tsx` and run the dapp. -When you connect to MetaMask, something like the following displays: - -![View of SelectedWallet component](../assets/tutorials/react-dapp/react-tutorial-02-selected-wallet.png) - -### 8. Display wallet connection errors - -Add the following code to `src/components/WalletError.tsx` to handle wallet connection errors: - -```tsx title="WalletError.tsx" -import { useWalletProvider } from "~/hooks/useWalletProvider" -import styles from "./WalletError.module.css" - -export const WalletError = () => { - const { errorMessage, clearError } = useWalletProvider() - const isError = !!errorMessage - - return ( -
    - {isError && ( -
    - Error: {errorMessage} -
    - )} -
    - ) -} -``` - -An error message renders only if `errorMessage` contains data. -After the error is selected, `errorMessage` resets to an empty string, which hides the content. - -This method demonstrates how to display specific content, such as a modal or notification, in -response to connection errors when connecting to a wallet. - -Uncomment the `WalletError` component in `src/App.tsx` and run the dapp. -Disconnect from MetaMask, reconnect, and reject or cancel the connection. -Something like the following displays: - -![View of WalletError component](../assets/tutorials/react-dapp/react-tutorial-02-wallet-error.png) - -### 9. Run the final state of the dapp - -Make sure all code in `App.tsx` is uncommented: - -```tsx title="App.tsx" -import "./App.css" -import { WalletProvider } from "~/hooks/WalletProvider" -import { WalletList } from "./components/WalletList" -import { SelectedWallet } from "./components/SelectedWallet" -import { WalletError } from "./components/WalletError" - -function App() { - return ( - - -
    - - -
    - ) -} - -export default App -``` - -Run the dapp to view the wallet list and select a wallet to connect to. -The final state of the dapp when connected to MetaMask looks like the following: - -![Final view of dapp](../assets/tutorials/react-dapp/react-tutorial-02-final-preview.png) - -### 10. Test the dapp features - -You can conduct user tests to evaluate the functionality and features demonstrated in this tutorial: - -1. Test the ability to connect and disconnect from multiple wallets installed in your browser. -2. After selecting a wallet, refresh the page and ensure that the selected wallet persists without - reverting to **No Wallet Selected**. -3. Select a wallet, disable it, refresh the page, then re-enable the wallet and refresh the page again. - Observe the behavior of the dapp. -4. When connecting to a wallet, deliberately cancel the connection or close the wallet prompt. - This action should trigger the `WalletError` component, which you can dismiss by selecting it. - -## Conclusion - -This tutorial guided you through applying EIP-6963 to connect to MetaMask. -This method also works with any wallet that [complies with -EIP-6963](https://github.com/WalletConnect/EIP6963/blob/master/src/utils/constants.ts) and supports -multi-injected provider discovery. - -In this tutorial, you addressed edge cases and created a context provider that facilitates data -sharing, manages functions for connecting and disconnecting from wallets, and handles errors. -You can view the [project source code on GitHub](https://github.com/MetaMask/vite-react-global-tutorial). diff --git a/wallet/tutorials/react-dapp-local-state.md b/wallet/tutorials/react-dapp-local-state.md deleted file mode 100644 index 9f8766ca131..00000000000 --- a/wallet/tutorials/react-dapp-local-state.md +++ /dev/null @@ -1,445 +0,0 @@ ---- -description: Create a single component React dapp with local state using EIP-6963. -sidebar_position: 1 ---- - -# Create a React dapp with local state - -This tutorial walks you through integrating a simple React dapp with MetaMask. -The dapp has a single JSX component, which is used for managing local state. -You'll use the [Vite](https://v3.vitejs.dev/guide) build tool with React and TypeScript to create -the dapp. - -:::tip Why React? -React is familiar to most web developers and is standard in web3. -It makes it easy to work with state management, build components that use a one-way data flow, and -re-render those components upon state changes. -::: - -:::info Project source code -You can view the [dapp source code on GitHub](https://github.com/MetaMask/vite-react-local-tutorial). -::: - -## Prerequisites - -- [Node.js](https://nodejs.org/) version 18+ -- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) version 9+ -- A text editor (for example, [VS Code](https://code.visualstudio.com/)) -- The [MetaMask extension](https://metamask.io/download) installed -- Basic knowledge of TypeScript and React - -## Steps - -### 1. Set up the project - -Set up a new project using Vite, React, and TypeScript by running the following command: - -```bash -npm create vite@latest vite-react-local-state -- --template react-ts -``` - -Install the node module dependencies: - -```bash -cd vite-react-local-state && npm install -``` - -Launch the development server: - -```bash -npm run dev -``` - -This displays a `localhost` URL in your terminal, where you can view the dapp in your browser. - -:::note -If you use VS Code, you can run the command `code .` to open the project. -If the development server has stopped, you can run the command `npx vite` or `npm run dev` to -restart your project. -::: - -Open the project in your editor. -To start with a blank slate, replace the code in `src/App.tsx` with the following: - -```tsx title="App.tsx" -import "./App.css" - -const App = () => { - return ( -
    -

    Wallets Detected:

    -
    - ) -} - -export default App -``` - -### 2. Import EIP-6963 interfaces - -The dapp will connect to MetaMask using the mechanism introduced by -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963). - -:::info Why EIP-6963? -[EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) introduces an alternative wallet detection -mechanism to the `window.ethereum` injected provider. -This alternative mechanism enables dapps to support -[wallet interoperability](../concepts/wallet-interoperability.md) by discovering multiple injected -wallet providers in a user's browser. -::: - -Update the Vite environment variable file, `src/vite-env.d.ts`, with the types and interfaces -needed for [EIP-6963](https://eips.ethereum.org/EIPS/eip-6963) and -[EIP-1193](https://eips.ethereum.org/EIPS/eip-1193): - -```tsx title="vite-env.d.ts" -/// - -// Describes metadata related to a provider based on EIP-6963. -interface EIP6963ProviderInfo { - walletId: string - uuid: string - name: string - icon: string -} - -// Represents the structure of a provider based on EIP-1193. -interface EIP1193Provider { - isStatus?: boolean - host?: string - path?: string - sendAsync?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - send?: ( - request: { method: string; params?: Array }, - callback: (error: Error | null, response: unknown) => void - ) => void - request: (request: { - method: string - params?: Array - }) => Promise -} - -// Combines the provider's metadata with an actual provider object, creating a complete picture of a -// wallet provider at a glance. -interface EIP6963ProviderDetail { - info: EIP6963ProviderInfo - provider: EIP1193Provider -} - -// Represents the structure of an event dispatched by a wallet to announce its presence based on EIP-6963. -type EIP6963AnnounceProviderEvent = { - detail: { - info: EIP6963ProviderInfo - provider: EIP1193Provider - } -} - -// An error object with optional properties, commonly encountered when handling eth_requestAccounts errors. -interface MMError { - code?: string - message?: string -} -``` - -### 3. Create store file - -Create a store file to manage the state of the detected wallet providers. -This file provides a centralized place to store and synchronize the detected wallet providers, -ensuring that your dapp always has access to the latest provider information. - -Create a `src/hooks` directory, and create a file `store.ts` in that directory with the following code: - -```ts title="store.ts" -// Extends WindowEventMap interface, including a custom event eip6963:announceProvider. -declare global { - interface WindowEventMap { - "eip6963:announceProvider": CustomEvent - } -} - -// Array that stores detected wallet providers and their details. -let providers: EIP6963ProviderDetail[] = [] - -// Object containing two methods. The store holds the state of detected Ethereum wallet providers. -// It's implemented as an external store, making it available for subscription and synchronization -// across the dapp. -export const store = { - // Returns the current state of providers. - value: () => providers, - // Subscribes to provider announcements and updates the store accordingly. - // Takes a callback function to be invoked on each store update, returning a function to - // unsubscribe from the event. - subscribe: (callback: () => void) => { - function onAnnouncement(event: EIP6963AnnounceProviderEvent) { - if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) - return - providers = [...providers, event.detail] - callback() - } - window.addEventListener("eip6963:announceProvider", onAnnouncement) - window.dispatchEvent(new Event("eip6963:requestProvider")) - - return () => - window.removeEventListener("eip6963:announceProvider", onAnnouncement) - }, -} -``` - -### 4. Sync provider state with React component - -With the store in place, create a custom hook that synchronizes the provider state with the React component. -Use the [`useSyncExternalStore`](https://react.dev/reference/react/useSyncExternalStore) React hook -to subscribe to changes in the provider store, and to ensure the component re-renders whenever -the store updates. - -Create a file `useSyncProviders.ts` in the `hooks` directory with the following code: - -```tsx title="useSyncProviders.ts" -import { useSyncExternalStore } from "react" -import { store } from "./store" - -export const useSyncProviders = () => - useSyncExternalStore(store.subscribe, store.value, store.value) -``` - -`useSyncExternalStore` takes three arguments: - -- A subscription function to listen for changes in the external store (`store.subscribe`). -- A function to get the current value of the store (`store.value`). -- An initial value for the store (`store.value`). - -:::note -As an alternative to `useSyncExternalStore`, you can use the `useState` React hook to manage the -provider state, and the `useEffect` React hook to subscribe to changes in the store. -When the React component mounts, you can subscribe to changes in the store, set the initial state -using the current value from the store, and return a cleanup function to unsubscribe from the store -when the component unmounts. -::: - -### 5. Create connect buttons - -Create an array of buttons that the user can select to connect to the EIP-6963 wallet providers that -you detect. - -Update `src/App.tsx` to the following: - -```tsx title="App.tsx" -import { useSyncProviders } from "./hooks/useSyncProviders" -import "./App.css" - -const App = () => { - const providers = useSyncProviders() - - const handleConnect = async (providerWithInfo: EIP6963ProviderDetail) => { - try { - const accounts = (await providerWithInfo.provider.request({ - method: "eth_requestAccounts", - })) as string[] - } catch (error) { - console.error(error) - } - } - - return ( -
    -

    Wallets Detected:

    -
    - {providers.length > 0 ? ( - providers?.map((provider: EIP6963ProviderDetail) => ( - - )) - ) : ( -
    No Announced Wallet Providers
    - )} -
    -
    - ) -} - -export default App -``` - -To style the buttons, update `src/App.css` to the following: - -```css title="App.css" -.App { - min-width: 100vw; - min-height: 100vh; - text-align: center; -} - -.providers { - display: flex; - flex-flow: column wrap; - justify-content: space-between; - align-items: center; - align-content: center; - gap: 1em; - - padding: 0.6em 1.2em; -} - -.providers button { - width: 12em; -} - -.providers button img { - width: 2em; -} -``` - -Run `npm run dev` to test the dapp. -Make sure you're signed in to MetaMask and that it's not currently connected to your dapp. -If you have multiple EIP-6963 wallets installed in your browser, something like the following should display: - -

    - -![View of Dapp - Wallets Detected](../assets/react-tutorial-01-start.png) - -

    - -### 6. Show connected wallet address - -Indicate when a wallet has been connected to by displaying the user's address on the page. - -Update everything above the `return` statement in `src/App.tsx` to the following, which -adds code to format and display user addresses, and handle errors: - -```tsx title="App.tsx" -import { useState } from "react" -import { useSyncProviders } from "./hooks/useSyncProviders" -import "./App.css" - -const App = () => { - const [selectedWallet, setSelectedWallet] = useState() - const [userAccount, setUserAccount] = useState("") - const providers = useSyncProviders() - - const [errorMessage, setErrorMessage] = useState("") - const clearError = () => setErrorMessage("") - const setError = (error: string) => setErrorMessage(error) - const isError = !!errorMessage - - // Display a readable user address. - const formatAddress = (addr: string) => { - const upperAfterLastTwo = addr.slice(0, 2) + addr.slice(2) - return `${upperAfterLastTwo.substring(0, 5)}...${upperAfterLastTwo.substring(39)}` - } - - const handleConnect = async (providerWithInfo: EIP6963ProviderDetail) => { - try { - const accounts = await providerWithInfo.provider.request({ - method: "eth_requestAccounts" - }) as string[] - - setSelectedWallet(providerWithInfo) - setUserAccount(accounts?.[0]) - } catch (error) { - console.error(error) - const mmError: MMError = error as MMError - setError(`Code: ${mmError.code} \nError Message: ${mmError.message}`) - } - } - ... -``` - -Below the `return` statement in `src/App.tsx`, update the `div` with the class of `.App` to the -following: - -```tsx title="App.tsx" - ... - return ( -
    -

    Wallets Detected:

    -
    - { - providers.length > 0 ? providers?.map((provider: EIP6963ProviderDetail) => ( - - )) : -
    - No Announced Wallet Providers -
    - } -
    -
    -

    {userAccount ? "" : "No"} Wallet Selected

    - {userAccount && -
    - {selectedWallet?.info.name} -
    {selectedWallet?.info.name}
    -
    ({formatAddress(userAccount)})
    -
    - } -
    - {isError && -
    - Error: {errorMessage} -
    - } -
    -
    - ) -``` - -Add the following CSS to `src/App.css` to style the error message: - -```css title="App.css" -.mmError { - height: 36px; - padding: 16px; - color: #efefef; - background-color: transparent; -} -``` - -Your dapp should look similar to the following: - -

    - -![Final View of Dapp](../assets/react-tutorial-01-final.png) - -

    - -## Troubleshoot - -#### Doesn't look right? - -This tutorial creates `className`s for each section's parent `div` in the JSX (HTML). -If your dapp does not look the same but functions properly, check the naming of your classes and -their corresponding CSS. - -#### Doesn't function properly? - -Try the following: - -- Check the code examples against your own. -- Place `console` statements in key areas such as `handleConnect` and `store`. -- Clone the - [GitHub repository containing the project source code](https://github.com/MetaMask/vite-react-local-tutorial) - and run it. - -If you find inconsistencies or erroneous code, feel free to create an issue on the repository. - -## Next steps - -This tutorial walked you through creating a single component dapp using Vite, detecting wallet -providers using EIP-6963, and managing the state in React locally. -You can view the [project source code on GitHub](https://github.com/MetaMask/vite-react-local-tutorial). - -As a next step, you can [create a React dapp with global state](react-dapp-global-state.md). -This follow-up tutorial walks you through adding multiple components that use a global state. -You'll use [React's Context API](https://react.dev/reference/react/useContext) to manage the state -globally and move away from using the `useSyncExternalStore`. -This is a more realistic (but also more complex) approach for building a real-world dapp.